mathml2asciimath 0.0.9 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43c4f60fbcf9b1119395d0149960d84e16746522ea840e5b57c25578b51a35b3
4
- data.tar.gz: 4a5d43531774ad6ed874e023a010b51a2bb0613cbf9ce024ad29d35eb4f91662
3
+ metadata.gz: a11fa790b22436b9f9d06a40d90264a67e2bef3fd08f02538daa01a16a4818f8
4
+ data.tar.gz: c017afbd1e64bb121517f6a508193d37d2157326b4aca00953d9764ca4920731
5
5
  SHA512:
6
- metadata.gz: 9855d06f3c4dafa65f336ed9f78efd3858d83d30a81a78aee3ba3f9c73d202c1bf772c13394f79940ed5451b171a8a112740d732d1c13cf10ae048b1725cb4f4
7
- data.tar.gz: b5f226d83b1418a2427e53527cc7154eff5aadd75563d653f459cb56f2bccbd312b1ce75cdee163d9974b7579112616010f387cf4e1caaf123b8ae0659e41f1c
6
+ metadata.gz: 6b1371dffc46a011741a9d0544860327e2ce5ef275b7f0461bf00bc50d84d443af8c10760e2db75f32d7a1a3c6f57edfa986ea57df66065fc96ed5964c4fc545
7
+ data.tar.gz: 37ad642dd7ef784027a713433abdccf1d273d469dc3b24fcb1d74e0ef05e27f8c92eb4911605ca9d91fe14ba55c20e8366a056ba94eb54276b0ad6c4f36d4f84
@@ -0,0 +1,32 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: rake
4
+
5
+ on:
6
+ push:
7
+ branches: [ master, main ]
8
+ tags: [ v* ]
9
+ pull_request:
10
+
11
+ jobs:
12
+ rake:
13
+ name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
14
+ runs-on: ${{ matrix.os }}
15
+ continue-on-error: ${{ matrix.experimental }}
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ ruby: [ '3.0', '2.7', '2.6', '2.5' ]
20
+ os: [ ubuntu-latest, windows-latest, macos-latest ]
21
+ experimental: [ false ]
22
+ steps:
23
+ - uses: actions/checkout@v2
24
+ with:
25
+ submodules: true
26
+
27
+ - uses: ruby/setup-ruby@v1
28
+ with:
29
+ ruby-version: ${{ matrix.ruby }}
30
+ bundler-cache: true
31
+
32
+ - run: bundle exec rake
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .rubocop-https--*
data/.hound.yml CHANGED
@@ -1,3 +1,5 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
1
3
  ruby:
2
- Enabled: true
4
+ enabled: true
3
5
  config_file: .rubocop.yml
data/.rubocop.yml CHANGED
@@ -1,10 +1,10 @@
1
- # This project follows the Ribose OSS style guide.
2
- # https://github.com/riboseinc/oss-guides
3
- # All project-specific additions and overrides should be specified in this file.
4
-
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
5
3
  inherit_from:
6
4
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
5
+
6
+ # local repo-specific modifications
7
+ # ...
8
+
7
9
  AllCops:
8
- TargetRubyVersion: 2.3
9
- Rails:
10
- Enabled: true
10
+ TargetRubyVersion: 2.5
data/Gemfile CHANGED
@@ -1,5 +1,4 @@
1
1
  source "https://rubygems.org"
2
-
2
+
3
3
  # Specify your gem's dependencies in ruby-vobject.gemspec
4
4
  gemspec
5
-
data/README.adoc CHANGED
@@ -1,12 +1,12 @@
1
1
  = mathml2asciimath
2
2
 
3
3
  image:https://img.shields.io/gem/v/mathml2asciimath.svg["Gem Version", link="https://rubygems.org/gems/mathml2asciimath"]
4
- image:https://github.com/metanorma/mathml2asciimath/workflows/ubuntu/badge.svg["Ubuntu Build Status", link="https://github.com/metanorma/mathml2asciimath/actions?query=workflow%3Aubuntu"]
5
- image:https://github.com/metanorma/mathml2asciimath/workflows/macos/badge.svg["OSX Build Status", link="https://github.com/metanorma/mathml2asciimath/actions?query=workflow%3Amacos"]
6
- image:https://github.com/metanorma/mathml2asciimath/workflows/windows/badge.svg["Windows Build Status", link="https://github.com/metanorma/mathml2asciimath/actions?query=workflow%3Awindows"]
7
- image:https://codeclimate.com/github/metanorma/mathml2asciimath/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/mathml2asciimath"]
8
- image:https://img.shields.io/github/issues-pr-raw/metanorma/mathml2asciimath.svg["Pull Requests", link="https://github.com/metanorma/mathml2asciimath/pulls"]
9
- image:https://img.shields.io/github/commits-since/metanorma/mathml2asciimath/latest.svg["Commits since latest",link="https://github.com/metanorma/mathml2asciimath/releases"]
4
+ image:https://github.com/plurimath/mathml2asciimath/workflows/ubuntu/badge.svg["Ubuntu Build Status", link="https://github.com/plurimath/mathml2asciimath/actions?query=workflow%3Aubuntu"]
5
+ image:https://github.com/plurimath/mathml2asciimath/workflows/macos/badge.svg["OSX Build Status", link="https://github.com/plurimath/mathml2asciimath/actions?query=workflow%3Amacos"]
6
+ image:https://github.com/plurimath/mathml2asciimath/workflows/windows/badge.svg["Windows Build Status", link="https://github.com/plurimath/mathml2asciimath/actions?query=workflow%3Awindows"]
7
+ image:https://codeclimate.com/github/plurimath/mathml2asciimath/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/plurimath/mathml2asciimath"]
8
+ image:https://img.shields.io/github/issues-pr-raw/plurimath/mathml2asciimath.svg["Pull Requests", link="https://github.com/plurimath/mathml2asciimath/pulls"]
9
+ image:https://img.shields.io/github/commits-since/plurimath/mathml2asciimath/latest.svg["Commits since latest",link="https://github.com/plurimath/mathml2asciimath/releases"]
10
10
 
11
11
  Ruby gem to convert MathML into AsciiMath
12
12
 
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
data/bin/m2a.rb CHANGED
@@ -5,13 +5,11 @@ while a = gets
5
5
  matches = a.split(%r{(<math.*?</math>)})
6
6
  out = ""
7
7
  matches.each do |x|
8
- if /<math/.match x
9
- out += MathML2AsciiMath.m2a(x)
10
- else
11
- out += x
12
- end
8
+ out += if /<math/.match? x
9
+ MathML2AsciiMath.m2a(x)
10
+ else
11
+ x
12
+ end
13
13
  end
14
14
  print out
15
15
  end
16
-
17
-
data/bin/rspec CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
-
2
+
3
3
  # This file was generated by Bundler.
4
4
  #
5
5
  # The application 'rspec' is installed as part of a gem, and
@@ -3,161 +3,172 @@ require "htmlentities"
3
3
  require "pp"
4
4
 
5
5
  module MathML2AsciiMath
6
+ def self.m2a(xml)
7
+ normalized = xml
6
8
 
7
- def self.m2a(x)
8
- docxml = Nokogiri::XML(x)
9
- parse(docxml.root).gsub(/ /, " ").
10
- sub(/^\s+/, "").
11
- sub(/\s+$/, "")
9
+ # &:noblanks skips non-significant whitespaces in MathML
10
+ docxml = Nokogiri::XML.parse(normalized, &:noblanks)
11
+
12
+ # Get rid of things like
13
+ # <mtext>&#x2009;</mtext>
14
+ parse(docxml.root).gsub(/[[:blank:]]/, " ").unicode_normalize.squeeze(" ")
15
+ end
16
+
17
+ def self.encodechars(xml)
18
+ xml.gsub(/\u03b1/, "alpha")
19
+ .gsub(/\u03b2/, "beta")
20
+ .gsub(/\u03b3/, "gamma")
21
+ .gsub(/\u0393/, "Gamma")
22
+ .gsub(/\u03b4/, "delta")
23
+ .gsub(/\u0394/, "Delta")
24
+ .gsub(/\u2206/, "Delta")
25
+ .gsub(/\u03b5/, "epsilon")
26
+ .gsub(/\u025b/, "varepsilon")
27
+ .gsub(/\u03b6/, "zeta")
28
+ .gsub(/\u03b7/, "eta")
29
+ .gsub(/\u03b8/, "theta")
30
+ .gsub(/\u0398/, "Theta")
31
+ .gsub(/\u03d1/, "vartheta")
32
+ .gsub(/\u03b9/, "iota")
33
+ .gsub(/\u03ba/, "kappa")
34
+ .gsub(/\u03bb/, "lambda")
35
+ .gsub(/\u039b/, "Lambda")
36
+ .gsub(/\u03bc/, "mu")
37
+ .gsub(/\u03bd/, "nu")
38
+ .gsub(/\u03be/, "xi")
39
+ .gsub(/\u039e/, "Xi")
40
+ .gsub(/\u03c0/, "pi")
41
+ .gsub(/\u03a0/, "Pi")
42
+ .gsub(/\u03c1/, "rho")
43
+ .gsub(/\u03c2/, "beta")
44
+ .gsub(/\u03c3/, "sigma")
45
+ .gsub(/\u03a3/, "Sigma")
46
+ .gsub(/\u03c4/, "tau")
47
+ .gsub(/\u03c5/, "upsilon")
48
+ .gsub(/\u03c6/, "phi")
49
+ .gsub(/\u03a6/, "Phi")
50
+ .gsub(/\u03d5/, "varphi")
51
+ .gsub(/\u03c7/, "chi")
52
+ .gsub(/\u03c8/, "psi")
53
+ .gsub(/\u03a8/, "Psi")
54
+ .gsub(/\u03c9/, "omega")
55
+ .gsub(/\u03a9/, "omega")
56
+ .gsub(/\u22c5/, "*")
57
+ .gsub(/\u2219/, "*")
58
+ .gsub(/\u00b7/, "*")
59
+ .gsub(/\u2217/, "**")
60
+ .gsub(/\u22c6/, "***")
61
+ .gsub(/\//, "//")
62
+ .gsub(/\\/, "\\\\")
63
+ .gsub(/\u00d7/, "xx")
64
+ .gsub(/\u22c9/, "|><")
65
+ .gsub(/\u22ca/, "><|")
66
+ .gsub(/\u22c8/, "|><|")
67
+ .gsub(/\u00f7/, "-:")
68
+ .gsub(/\u2218/, "@")
69
+ .gsub(/\u2295/, "o+")
70
+ .gsub(/\u2a01/, "o+")
71
+ .gsub(/\u2297/, "ox")
72
+ .gsub(/\u2299/, "o.")
73
+ .gsub(/\u2211/, "sum")
74
+ .gsub(/\u220f/, "prod")
75
+ .gsub(/\u2227/, "^^")
76
+ .gsub(/\u22c0/, "^^^")
77
+ .gsub(/\u2228/, "vv")
78
+ .gsub(/\u22c1/, "vvv")
79
+ .gsub(/\u2229/, "nn")
80
+ .gsub(/\u22c2/, "nnn")
81
+ .gsub(/\u222a/, "uu")
82
+ .gsub(/\u22c3/, "uuu")
83
+ .gsub(/\u2260/, "!=")
84
+ .gsub(/\u2264/, "<=")
85
+ .gsub(/\u2265/, ">=")
86
+ .gsub(/\u227a/, "-<")
87
+ .gsub(/\u227b/, ">-")
88
+ .gsub(/\u2aaf/, "-<=")
89
+ .gsub(/\u2ab0/, ">-=")
90
+ .gsub(/\u2208/, "in")
91
+ .gsub(/\u2209/, "!in")
92
+ .gsub(/\u2282/, "sub")
93
+ .gsub(/\u2283/, "sup")
94
+ .gsub(/\u2286/, "sube")
95
+ .gsub(/\u2287/, "supe")
96
+ .gsub(/\u2261/, "-=")
97
+ .gsub(/\u2245/, "~=")
98
+ .gsub(/\u2248/, "~~")
99
+ .gsub(/\u221d/, "prop")
100
+ .gsub(/\u00ac/, "not")
101
+ .gsub(/\u21d2/, "=>")
102
+ .gsub(/\u21d4/, "<=>")
103
+ .gsub(/\u2200/, "AA")
104
+ .gsub(/\u2203/, "EE")
105
+ .gsub(/\u22a5/, "_|_")
106
+ .gsub(/\u22a4/, "TT")
107
+ .gsub(/\u22a2/, "|--")
108
+ .gsub(/\u22a8/, "|==")
109
+ .gsub(/\u22a8/, "|==")
110
+ .gsub(/\u2329/, "(:")
111
+ .gsub(/\u232a/, ":)")
112
+ .gsub(/\u2329/, "<<")
113
+ .gsub(/\u27e8/, "<<")
114
+ .gsub(/\u232a/, ">>")
115
+ .gsub(/\u27e9/, ">>")
116
+ .gsub(/\u222b/, "int")
117
+ .gsub(/\u222e/, "oint")
118
+ .gsub(/\u2202/, "del")
119
+ .gsub(/\u2207/, "grad")
120
+ .gsub(/\u00b1/, "+-")
121
+ .gsub(/\u2205/, "O/")
122
+ .gsub(/\u221e/, "oo")
123
+ .gsub(/\u2135/, "aleph")
124
+ .gsub(/\u2234/, ":.")
125
+ .gsub(/\u2235/, ":'")
126
+ .gsub(/\u2220/, "/_")
127
+ .gsub(/\u25b3/, "/_\\")
128
+ .gsub(/\u2032/, "'")
129
+ .gsub(/~/, "tilde")
130
+ .gsub(/\u00a0\u00a0\u00a0\u00a0/, "qquad")
131
+ .gsub(/\u00a0\u00a0/, "quad")
132
+ .gsub(/\u00a0/, "\\ ")
133
+ .gsub(/\u2322/, "frown")
134
+ .gsub(/\u00a0/, "quad")
135
+ .gsub(/\u22ef/, "cdots")
136
+ .gsub(/\u22ee/, "vdots")
137
+ .gsub(/\u22f1/, "ddots")
138
+ .gsub(/\u22c4/, "diamond")
139
+ .gsub(/\u25a1/, "square")
140
+ .gsub(/\u230a/, "|__")
141
+ .gsub(/\u230b/, "__|")
142
+ .gsub(/\u2308/, "|~")
143
+ .gsub(/\u2309/, "~|")
144
+ .gsub(/\u2102/, "CC")
145
+ .gsub(/\u2115/, "NN")
146
+ .gsub(/\u211a/, "QQ")
147
+ .gsub(/\u211d/, "RR")
148
+ .gsub(/\u2124/, "ZZ")
149
+ .gsub(/\u2191/, "uarr")
150
+ .gsub(/\u2193/, "darr")
151
+ .gsub(/\u2190/, "larr")
152
+ .gsub(/\u2194/, "harr")
153
+ .gsub(/\u21d2/, "rArr")
154
+ .gsub(/\u21d0/, "lArr")
155
+ .gsub(/\u21d4/, "hArr")
156
+ .gsub(/\u2192/, "->")
157
+ .gsub(/\u21a3/, ">->")
158
+ .gsub(/\u21a0/, "->>")
159
+ .gsub(/\u2916/, ">->>")
160
+ .gsub(/\u21a6/, "|->")
161
+ .gsub(/\u2026/, "...")
162
+ .gsub(/\u2212/, "-")
163
+ .gsub(/\u2061/, "") # function application
164
+ .gsub(/\u2751/, "square")
165
+ .gsub(/[\u2028\u2029]/, " ") # normalize thin spaces like \u2009, \u2008
12
166
  end
13
167
 
14
- def self.encodechars(x)
15
- x.gsub(/\u03b1/, "alpha").
16
- gsub(/\u03b2/, "beta").
17
- gsub(/\u03b3/, "gamma").
18
- gsub(/\u0393/, "Gamma").
19
- gsub(/\u03b4/, "delta").
20
- gsub(/\u0394/, "Delta").
21
- gsub(/\u2206/, "Delta").
22
- gsub(/\u03b5/, "epsilon").
23
- gsub(/\u025b/, "varepsilon").
24
- gsub(/\u03b6/, "zeta").
25
- gsub(/\u03b7/, "eta").
26
- gsub(/\u03b8/, "theta").
27
- gsub(/\u0398/, "Theta").
28
- gsub(/\u03d1/, "vartheta").
29
- gsub(/\u03b9/, "iota").
30
- gsub(/\u03ba/, "kappa").
31
- gsub(/\u03bb/, "lambda").
32
- gsub(/\u039b/, "Lambda").
33
- gsub(/\u03bc/, "mu").
34
- gsub(/\u03bd/, "nu").
35
- gsub(/\u03be/, "xi").
36
- gsub(/\u039e/, "Xi").
37
- gsub(/\u03c0/, "pi").
38
- gsub(/\u03a0/, "Pi").
39
- gsub(/\u03c1/, "rho").
40
- gsub(/\u03c2/, "beta").
41
- gsub(/\u03c3/, "sigma").
42
- gsub(/\u03a3/, "Sigma").
43
- gsub(/\u03c4/, "tau").
44
- gsub(/\u03c5/, "upsilon").
45
- gsub(/\u03c6/, "phi").
46
- gsub(/\u03a6/, "Phi").
47
- gsub(/\u03d5/, "varphi").
48
- gsub(/\u03c7/, "chi").
49
- gsub(/\u03c8/, "psi").
50
- gsub(/\u03a8/, "Psi").
51
- gsub(/\u03c9/, "omega").
52
- gsub(/\u03a9/, "omega").
53
- gsub(/\u22c5/, "*").
54
- gsub(/\u2219/, "*").
55
- gsub(/\u00b7/, "*").
56
- gsub(/\u2217/, "**").
57
- gsub(/\u22c6/, "***").
58
- gsub(/\//, "//").
59
- gsub(/\\/, "\\\\").
60
- gsub(/\u00d7/, "xx").
61
- gsub(/\u22c9/, "|><").
62
- gsub(/\u22ca/, "><|").
63
- gsub(/\u22c8/, "|><|").
64
- gsub(/\u00f7/, "-:").
65
- gsub(/\u2218/, "@").
66
- gsub(/\u2295/, "o+").
67
- gsub(/\u2a01/, "o+").
68
- gsub(/\u2297/, "ox").
69
- gsub(/\u2299/, "o.").
70
- gsub(/\u2211/, "sum").
71
- gsub(/\u220f/, "prod").
72
- gsub(/\u2227/, "^^").
73
- gsub(/\u22c0/, "^^^").
74
- gsub(/\u2228/, "vv").
75
- gsub(/\u22c1/, "vvv").
76
- gsub(/\u2229/, "nn").
77
- gsub(/\u22c2/, "nnn").
78
- gsub(/\u222a/, "uu").
79
- gsub(/\u22c3/, "uuu").
80
- gsub(/\u2260/, "!=").
81
- gsub(/\u2264/, "<=").
82
- gsub(/\u2265/, ">=").
83
- gsub(/\u227a/, "-<").
84
- gsub(/\u227b/, ">-").
85
- gsub(/\u2aaf/, "-<=").
86
- gsub(/\u2ab0/, ">-=").
87
- gsub(/\u2208/, "in").
88
- gsub(/\u2209/, "!in").
89
- gsub(/\u2282/, "sub").
90
- gsub(/\u2283/, "sup").
91
- gsub(/\u2286/, "sube").
92
- gsub(/\u2287/, "supe").
93
- gsub(/\u2261/, "-=").
94
- gsub(/\u2245/, "~=").
95
- gsub(/\u2248/, "~~").
96
- gsub(/\u221d/, "prop").
97
- gsub(/\u00ac/, "not").
98
- gsub(/\u21d2/, "=>").
99
- gsub(/\u21d4/, "<=>").
100
- gsub(/\u2200/, "AA").
101
- gsub(/\u2203/, "EE").
102
- gsub(/\u22a5/, "_|_").
103
- gsub(/\u22a4/, "TT").
104
- gsub(/\u22a2/, "|--").
105
- gsub(/\u22a8/, "|==").
106
- gsub(/\u22a8/, "|==").
107
- gsub(/\u2329/, "(:").
108
- gsub(/\u232a/, ":)").
109
- gsub(/\u2329/, "<<").
110
- gsub(/\u27e8/, "<<").
111
- gsub(/\u232a/, ">>").
112
- gsub(/\u27e9/, ">>").
113
- gsub(/\u222e/, "oint").
114
- gsub(/\u2202/, "del").
115
- gsub(/\u2207/, "grad").
116
- gsub(/\u00b1/, "+-").
117
- gsub(/\u2205/, "O/").
118
- gsub(/\u221e/, "oo").
119
- gsub(/\u2135/, "aleph").
120
- gsub(/\u2234/, ":.").
121
- gsub(/\u2235/, ":'").
122
- gsub(/\u2220/, "/_").
123
- gsub(/\u25b3/, "/_\\").
124
- gsub(/\u2032/, "'").
125
- gsub(/~/, "tilde").
126
- gsub(/\u00a0\u00a0\u00a0\u00a0/, "qquad").
127
- gsub(/\u00a0\u00a0/, "quad").
128
- gsub(/\u00a0/, "\\ ").
129
- gsub(/\u2322/, "frown").
130
- gsub(/\u00a0/, "quad").
131
- gsub(/\u22ef/, "cdots").
132
- gsub(/\u22ee/, "vdots").
133
- gsub(/\u22f1/, "ddots").
134
- gsub(/\u22c4/, "diamond").
135
- gsub(/\u25a1/, "square").
136
- gsub(/\u230a/, "|__").
137
- gsub(/\u230b/, "__|").
138
- gsub(/\u2308/, "|~").
139
- gsub(/\u2309/, "~|").
140
- gsub(/\u2102/, "CC").
141
- gsub(/\u2115/, "NN").
142
- gsub(/\u211a/, "QQ").
143
- gsub(/\u211d/, "RR").
144
- gsub(/\u2124/, "ZZ").
145
- gsub(/\u2191/, "uarr").
146
- gsub(/\u2193/, "darr").
147
- gsub(/\u2190/, "larr").
148
- gsub(/\u2194/, "harr").
149
- gsub(/\u21d2/, "rArr").
150
- gsub(/\u21d0/, "lArr").
151
- gsub(/\u21d4/, "hArr").
152
- gsub(/\u2192/, "->").
153
- gsub(/\u21a3/, ">->").
154
- gsub(/\u21a0/, "->>").
155
- gsub(/\u2916/, ">->>").
156
- gsub(/\u21a6/, "|->").
157
- gsub(/\u2026/, "...").
158
- gsub(/\u2212/, "-").
159
- gsub(/\u2061/, ""). # function application
160
- gsub(/\u2751/, "square")
168
+ def self.join_parsed_children(children, delimiter = " ")
169
+ children.map do |n|
170
+ parse(n).strip
171
+ end.join(delimiter)
161
172
  end
162
173
 
163
174
  def self.parse(node)
@@ -168,55 +179,47 @@ module MathML2AsciiMath
168
179
 
169
180
  case node.name.sub(/^[^:]*:/, "")
170
181
  when "math"
171
- outarr = []
172
- node.elements.each { |n| outarr << parse(n).strip }
173
- return outarr.join(" ")
182
+ join_parsed_children(node.elements)
174
183
 
175
184
  when "annotation"
176
- return ""
185
+ ""
177
186
 
178
187
  when "semantics"
179
- outarr = []
180
- node.elements.each { |n| outarr << parse(n).strip }
181
- return outarr.join(" ")
188
+ join_parsed_children(node.elements)
182
189
 
183
190
  when "mrow"
184
- outarr = []
185
- node.children.each { |n| outarr << parse(n).strip }
186
- out = outarr.join(" ")
187
- if %w{mfrac msub munder munderover}.include? node.parent.name.sub(/^[^:]*:/, "")
191
+ out = join_parsed_children(node.elements)
192
+ if %w[mfrac msub munder munderover]
193
+ .include? node.parent.name.sub(/^[^:]*:/, "")
188
194
  out = "(#{out})"
189
195
  end
190
- return out
196
+ out
191
197
 
192
198
  when "mfenced"
193
- outarr = []
194
- open = node["open"] || "("
195
- close = node["close"] || ")"
199
+ sym_open = node["open"] || "("
200
+ sym_close = node["close"] || ")"
201
+
196
202
  separator = "," # TODO currently ignore the supplied separators
197
- node.elements.each { |n| outarr << parse(n).strip }
198
- out = outarr.join(separator)
199
- return "#{open}#{out}#{close}"
203
+ out = join_parsed_children(node.elements, separator)
204
+ "#{sym_open}#{out}#{sym_close}"
200
205
 
201
206
  when "msqrt"
202
- outarr = []
203
- node.elements.each { |n| outarr << parse(n).strip }
204
- return "sqrt(#{outarr.join(" ")})"
207
+ "sqrt(#{join_parsed_children(node.elements)})"
205
208
 
206
209
  when "mfrac"
207
- return "(#{parse(node.elements[0])})/(#{parse(node.elements[1])})"
210
+ "(#{parse(node.elements[0])})/(#{parse(node.elements[1])})"
208
211
 
209
212
  when "msup"
210
213
  sup = parse(node.elements[1])
211
214
  sup = "(#{sup})" unless sup.length == 1
212
215
  op = parse(node.elements[0]).gsub(/ $/, "")
213
- return "#{op}^#{sup}"
216
+ "#{op}^#{sup}"
214
217
 
215
218
  when "msub"
216
219
  sub = parse(node.elements[1])
217
220
  sub = "(#{sub})" unless sub.length == 1
218
221
  op = parse(node.elements[0]).gsub(/ $/, "")
219
- return "#{op}_#{sub}"
222
+ "#{op}_#{sub}"
220
223
 
221
224
  when "munderover", "msubsup"
222
225
  sub = parse(node.elements[1])
@@ -224,27 +227,29 @@ module MathML2AsciiMath
224
227
  sup = parse(node.elements[2])
225
228
  sup = "(#{sup})" unless sup.length == 1
226
229
  op = parse(node.elements[0]).gsub(/ $/, "")
227
- return "#{op}_#{sub}^#{sup}"
230
+ "#{op}_#{sub}^#{sup}"
228
231
 
229
232
  when "munder"
230
- elem1 = parse(node.elements[1]).sub(/^\s+/, "").sub(/\s+$/, "")
233
+ elem1 = parse(node.elements[1]).strip
231
234
  accent = case elem1
232
235
  when "\u0332" then "ul"
233
236
  when "\u23df" then "ubrace"
234
237
  else
235
238
  "underset"
236
239
  end
240
+
237
241
  if accent == "underset"
238
- return "underset(#{elem1})(#{parse(node.elements[0])})"
242
+ "underset(#{elem1})(#{parse(node.elements[0])})"
239
243
  else
240
- return "#{accent} #{parse(node.elements[0])}"
244
+ "#{accent} #{parse(node.elements[0])}"
241
245
  end
246
+
242
247
  when "mover"
243
- elem1 = parse(node.elements[1]).sub(/^\s+/, "").sub(/\s+$/, "")
248
+ elem1 = parse(node.elements[1]).strip
244
249
  accent = case elem1
245
250
  when "\u005e" then "hat"
246
251
  when "\u00af" then "bar"
247
- #when "\u2192" then "vec"
252
+ # when "\u2192" then "vec"
248
253
  when "->" then "vec"
249
254
  when "." then "dot"
250
255
  when ".." then "ddot"
@@ -252,53 +257,46 @@ module MathML2AsciiMath
252
257
  else
253
258
  "overset"
254
259
  end
260
+
255
261
  if accent == "overset"
256
- return "overset(#{elem1})(#{parse(node.elements[0])})"
262
+ "overset(#{elem1})(#{parse(node.elements[0])})"
257
263
  else
258
- return "#{accent} #{parse(node.elements[0])}"
264
+ "#{accent} #{parse(node.elements[0])}"
259
265
  end
260
266
 
261
267
  when "mtable"
262
- outarr = []
263
- node.elements.each { |n| outarr << parse(n).strip }
264
- return "[#{outarr.join(",")}]"
268
+ "[#{join_parsed_children(node.elements, ',')}]"
265
269
 
266
270
  when "mtr"
267
- outarr = []
268
- node.elements.each { |n| outarr << parse(n).strip }
269
- return "[#{outarr.join(",")}]"
271
+ "[#{join_parsed_children(node.elements, ',')}]"
270
272
 
271
273
  when "mtd"
272
- outarr = []
273
- node.elements.each { |n| outarr << parse(n).strip }
274
- return "#{outarr.join(",")}"
274
+ join_parsed_children(node.elements, ",")
275
275
 
276
276
  when "mn", "mtext"
277
- outarr = []
278
- node.children.each { |n| outarr << parse(n).strip }
279
- return "#{outarr.join("")}"
277
+ join_parsed_children(node.children, "")
280
278
 
281
279
  when "mi"
282
- # mi is not meant to have space around it, but Word is conflating operators and operands
283
- outarr = []
284
- node.children.each { |n| outarr << parse(n).strip }
285
- out = outarr.join(" ")
286
- out = " #{out} " if /[^a-zA-Z0-9',]|[a-z][a-z]/.match out
287
- return out
280
+ # FIXME: What does this comment have to do with Word?
281
+ # mi is not meant to have space around it,
282
+ # but Word is conflating operators and operands
283
+ join_parsed_children(node.children)
284
+
285
+ # FIXME: Why do we need to add extra spaces?
286
+ # out = " #{out} " if /[^a-zA-Z0-9',]|[a-z][a-z]/.match out
288
287
 
289
288
  when "mo"
290
- outarr = []
291
- node.children.each { |n| outarr << parse(n).strip }
292
- out = outarr.join(" ")
289
+ out = join_parsed_children(node.children)
293
290
  out = " #{out} " unless node["fence"]
294
- return out
291
+ out
295
292
 
296
293
  when "mstyle"
297
- outarr = []
298
- node.children.each { |n| outarr << parse(n).strip }
299
- out = outarr.join(" ")
294
+ join_parsed_children(node.children)
295
+
300
296
  else
301
- node.to_xml
297
+ "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">" +
298
+ node.to_xml +
299
+ "</math>"
302
300
 
303
301
  end
304
302
  end
@@ -1,4 +1,3 @@
1
1
  module MathML2AsciiMath
2
- VERSION = "0.0.9".freeze
2
+ VERSION = "0.0.13".freeze
3
3
  end
4
-