mathml2asciimath 0.0.1
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 +7 -0
- data/LICENSE +25 -0
- data/README.adoc +12 -0
- data/bin/m2a.rb +17 -0
- data/bin/rspec +18 -0
- data/lib/mathml2asciimath.rb +5 -0
- data/lib/mathml2asciimath/m2a.rb +265 -0
- data/lib/mathml2asciimath/version.rb +4 -0
- data/mathml2asciimath.gemspec +42 -0
- metadata +223 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d8737530a0a13306fbbae39a18d7eb464905fa9d
|
4
|
+
data.tar.gz: fcdcd915ff8319b98cb1dedbb7b3d5b57e8668ad
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: '08e516b489e48eb8fb9387d42980db48a838cb33c7efb66c3763550bf8b4c62948a3c8135c20b591bad50adb9f79e64bd3fb578849800809f147406f00a90d38'
|
7
|
+
data.tar.gz: 0b5b8f8d1cfb0a44d1e98aff1b44368d67a79947311d40cf97387bb3ca2a88ea15ae06e7d465d6e2f6ccc5e14ab3a65ebeaeec071272b9ad30f52235ffcf22b6
|
data/LICENSE
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
BSD 2-Clause License
|
2
|
+
|
3
|
+
Copyright (c) 2018, Ribose
|
4
|
+
All rights reserved.
|
5
|
+
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
8
|
+
|
9
|
+
* Redistributions of source code must retain the above copyright notice, this
|
10
|
+
list of conditions and the following disclaimer.
|
11
|
+
|
12
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
14
|
+
and/or other materials provided with the distribution.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
17
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
18
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
19
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
20
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
21
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
22
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
23
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
24
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
25
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.adoc
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
= mathml2asciimath
|
2
|
+
|
3
|
+
Ruby gem to convert MathML into AsciiMath
|
4
|
+
|
5
|
+
Ignores style and MathML attributes (other than `mfenced/@open`, `mfenced/@close`, `mo/@fence`).
|
6
|
+
|
7
|
+
Processes the following MathML tags: `mrow, mfenced, msqrt, mfrac, msup, msub, munderover, msubsup, munder, mover, mi, mn, ntext, mo, mtable, mtr, mtd`.
|
8
|
+
|
9
|
+
Converts all the Unicode characters MathJax knows about into AsciiMath operators (e.g. `\\beta, xx, oint`)
|
10
|
+
|
11
|
+
As with the other two MathML to AsciiMath converters available online (Python: https://github.com/rochecompaan/upfront.mathml2asciimath, Node.js: https://github.com/learningobjectsinc/mathml-to-asciimath), this converter is not foolproof, production-ready, or complete, and you will need to post-edit output. It's still a lot better than nothing. (And because it converts Unicode to Ascii, it's a lot better than the other two.)
|
12
|
+
|
data/bin/m2a.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require "mathml2asciimath"
|
2
|
+
|
3
|
+
STDIN.set_encoding("UTF-8")
|
4
|
+
while a = gets
|
5
|
+
matches = a.split(%r{(<math.*?</math>)})
|
6
|
+
out = ""
|
7
|
+
matches.each do |x|
|
8
|
+
if /<math/.match? x
|
9
|
+
out += MathML2AsciiMath.m2a(x)
|
10
|
+
else
|
11
|
+
out += x
|
12
|
+
end
|
13
|
+
end
|
14
|
+
print out
|
15
|
+
end
|
16
|
+
|
17
|
+
|
data/bin/rspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rspec' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require "pathname"
|
10
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(
|
11
|
+
"../../Gemfile", Pathname.new(__FILE__).realpath
|
12
|
+
)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("rspec-core", "rspec")
|
18
|
+
|
@@ -0,0 +1,265 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
require "htmlentities"
|
3
|
+
require "pp"
|
4
|
+
|
5
|
+
module MathML2AsciiMath
|
6
|
+
|
7
|
+
def self.m2a(x)
|
8
|
+
docxml = Nokogiri::XML(x)
|
9
|
+
parse(docxml.root).gsub(/ /, " ").
|
10
|
+
sub(/^\s+/, "").
|
11
|
+
sub(/\s+$/, "")
|
12
|
+
end
|
13
|
+
|
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(/\u22c5/, "*").
|
53
|
+
gsub(/\u2219/, "*").
|
54
|
+
gsub(/\u00b7/, "*").
|
55
|
+
gsub(/\u2217/, "**").
|
56
|
+
gsub(/\u22c6/, "***").
|
57
|
+
gsub(/\//, "//").
|
58
|
+
gsub(/\\/, "\\\\").
|
59
|
+
gsub(/\u00d7/, "xx").
|
60
|
+
gsub(/\u22c9/, "|><").
|
61
|
+
gsub(/\u22ca/, "><|").
|
62
|
+
gsub(/\u22c8/, "|><|").
|
63
|
+
gsub(/\u00f7/, "-:").
|
64
|
+
gsub(/\u2218/, "@").
|
65
|
+
gsub(/\u2295/, "o+").
|
66
|
+
gsub(/\u2297/, "ox").
|
67
|
+
gsub(/\u2299/, "o.").
|
68
|
+
gsub(/\u2211/, "sum").
|
69
|
+
gsub(/\u220f/, "prod").
|
70
|
+
gsub(/\u2227/, "^^").
|
71
|
+
gsub(/\u22c0/, "^^^").
|
72
|
+
gsub(/\u2228/, "vv").
|
73
|
+
gsub(/\u22c1/, "vvv").
|
74
|
+
gsub(/\u2229/, "nn").
|
75
|
+
gsub(/\u22c2/, "nnn").
|
76
|
+
gsub(/\u222a/, "uu").
|
77
|
+
gsub(/\u22c3/, "uuu").
|
78
|
+
gsub(/\u2260/, "!=").
|
79
|
+
gsub(/\u2264/, "<=").
|
80
|
+
gsub(/\u2265/, ">=").
|
81
|
+
gsub(/\u227a/, "-<").
|
82
|
+
gsub(/\u227b/, ">-").
|
83
|
+
gsub(/\u2aaf/, "-<=").
|
84
|
+
gsub(/\u2ab0/, ">-=").
|
85
|
+
gsub(/\u2208/, "in").
|
86
|
+
gsub(/\u2209/, "!in").
|
87
|
+
gsub(/\u2282/, "sub").
|
88
|
+
gsub(/\u2283/, "sup").
|
89
|
+
gsub(/\u2286/, "sube").
|
90
|
+
gsub(/\u2287/, "supe").
|
91
|
+
gsub(/\u2261/, "-=").
|
92
|
+
gsub(/\u2245/, "~=").
|
93
|
+
gsub(/\u2248/, "~~").
|
94
|
+
gsub(/\u221d/, "prop").
|
95
|
+
gsub(/\u00ac/, "not").
|
96
|
+
gsub(/\u21d2/, "=>").
|
97
|
+
gsub(/\u21d4/, "<=>").
|
98
|
+
gsub(/\u2200/, "AA").
|
99
|
+
gsub(/\u2203/, "EE").
|
100
|
+
gsub(/\u22a5/, "_|_").
|
101
|
+
gsub(/\u22a4/, "TT").
|
102
|
+
gsub(/\u22a2/, "|--").
|
103
|
+
gsub(/\u22a8/, "|==").
|
104
|
+
gsub(/\u22a8/, "|==").
|
105
|
+
gsub(/\u2329/, "(:").
|
106
|
+
gsub(/\u232a/, ":)").
|
107
|
+
gsub(/\u2329/, "<<").
|
108
|
+
gsub(/\u232a/, ">>").
|
109
|
+
gsub(/\u222e/, "oint").
|
110
|
+
gsub(/\u2202/, "del").
|
111
|
+
gsub(/\u2207/, "grad").
|
112
|
+
gsub(/\u00b1/, "+-").
|
113
|
+
gsub(/\u2205/, "O/").
|
114
|
+
gsub(/\u221e/, "oo").
|
115
|
+
gsub(/\u2135/, "aleph").
|
116
|
+
gsub(/\u2234/, ":.").
|
117
|
+
gsub(/\u2235/, ":'").
|
118
|
+
gsub(/\u2220/, "/_").
|
119
|
+
gsub(/\u25b3/, "/_\\").
|
120
|
+
gsub(/\u2032/, "'").
|
121
|
+
gsub(/~/, "tilde").
|
122
|
+
gsub(/\u00a0\u00a0\u00a0\u00a0/, "qquad").
|
123
|
+
gsub(/\u00a0\u00a0/, "quad").
|
124
|
+
gsub(/\u00a0/, "\\ ").
|
125
|
+
gsub(/\u2322/, "frown").
|
126
|
+
gsub(/\u00a0/, "quad").
|
127
|
+
gsub(/\u22ef/, "cdots").
|
128
|
+
gsub(/\u22ee/, "vdots").
|
129
|
+
gsub(/\u22f1/, "ddots").
|
130
|
+
gsub(/\u22c4/, "diamond").
|
131
|
+
gsub(/\u25a1/, "square").
|
132
|
+
gsub(/\u230a/, "|__").
|
133
|
+
gsub(/\u230b/, "__|").
|
134
|
+
gsub(/\u2308/, "|~").
|
135
|
+
gsub(/\u2309/, "~|").
|
136
|
+
gsub(/\u2102/, "CC").
|
137
|
+
gsub(/\u2115/, "NN").
|
138
|
+
gsub(/\u211a/, "QQ").
|
139
|
+
gsub(/\u211d/, "RR").
|
140
|
+
gsub(/\u2124/, "ZZ").
|
141
|
+
gsub(/\u2191/, "uarr").
|
142
|
+
gsub(/\u2193/, "darr").
|
143
|
+
gsub(/\u2190/, "larr").
|
144
|
+
gsub(/\u2194/, "harr").
|
145
|
+
gsub(/\u21d2/, "rArr").
|
146
|
+
gsub(/\u21d0/, "lArr").
|
147
|
+
gsub(/\u21d4/, "hArr").
|
148
|
+
gsub(/\u2192/, "->").
|
149
|
+
gsub(/\u21a3/, ">->").
|
150
|
+
gsub(/\u21a0/, "->>").
|
151
|
+
gsub(/\u2916/, ">->>").
|
152
|
+
gsub(/\u21a6/, "|->").
|
153
|
+
gsub(/\u2026/, "...").
|
154
|
+
gsub(/\u2212/, "-").
|
155
|
+
gsub(/\u2061/, ""). # function application
|
156
|
+
gsub(/\u2751/, "square")
|
157
|
+
end
|
158
|
+
|
159
|
+
def self.parse(node)
|
160
|
+
out = ""
|
161
|
+
if node.text?
|
162
|
+
return encodechars(HTMLEntities.new.decode(node.text))
|
163
|
+
else
|
164
|
+
case node.name
|
165
|
+
when "math"
|
166
|
+
node.elements.each { |n| out << parse(n) }
|
167
|
+
return out
|
168
|
+
when "mrow"
|
169
|
+
outarr = []
|
170
|
+
node.children.each { |n| outarr << parse(n) }
|
171
|
+
out = outarr.join("")
|
172
|
+
if %w{mfrac msub munder munderover}.include? node.parent.name
|
173
|
+
out = "(#{out})"
|
174
|
+
end
|
175
|
+
return out
|
176
|
+
when "mfenced"
|
177
|
+
outarr = []
|
178
|
+
open = node["open"] || "("
|
179
|
+
close = node["close"] || ")"
|
180
|
+
separator = "," # TODO currently ignore the supplied separators
|
181
|
+
node.children.each { |n| outarr << parse(n) }
|
182
|
+
out = outarr.join(separator)
|
183
|
+
return "#{open}#{out}#{close}"
|
184
|
+
when "msqrt"
|
185
|
+
node.children.each { |n| out << parse(n) }
|
186
|
+
return "sqrt(#{out})"
|
187
|
+
when "mfrac"
|
188
|
+
return "(#{parse(node.elements[0])})/(#{parse(node.elements[1])})"
|
189
|
+
when "msup"
|
190
|
+
sup = parse(node.elements[1])
|
191
|
+
sup = "(#{sup})" unless sup.length == 1
|
192
|
+
op = parse(node.elements[0]).gsub(/ $/, "")
|
193
|
+
return "#{op}^#{sup}"
|
194
|
+
when "msub"
|
195
|
+
sub = parse(node.elements[1])
|
196
|
+
sub = "(#{sub})" unless sub.length == 1
|
197
|
+
op = parse(node.elements[0]).gsub(/ $/, "")
|
198
|
+
return "#{op}_#{sub}"
|
199
|
+
when "munderover", "msubsup"
|
200
|
+
sub = parse(node.elements[1])
|
201
|
+
sub = "(#{sub})" unless sub.length == 1
|
202
|
+
sup = parse(node.elements[2])
|
203
|
+
sup = "(#{sup})" unless sup.length == 1
|
204
|
+
op = parse(node.elements[0]).gsub(/ $/, "")
|
205
|
+
return "#{op}_#{sub}^#{sup}"
|
206
|
+
when "munder"
|
207
|
+
elem1 = parse(node.elements[1]).sub(/^\s+/, "").sub(/\s+$/, "")
|
208
|
+
accent = case elem1
|
209
|
+
when "\u0332" then "ul"
|
210
|
+
when "\u23df" then "ubrace"
|
211
|
+
else
|
212
|
+
"underset"
|
213
|
+
end
|
214
|
+
if accent == "underset"
|
215
|
+
return "underset(#{elem1})(#{parse(node.elements[0])})"
|
216
|
+
else
|
217
|
+
return "#{accent} #{parse(node.elements[0])}"
|
218
|
+
end
|
219
|
+
when "mover"
|
220
|
+
elem1 = parse(node.elements[1]).sub(/^\s+/, "").sub(/\s+$/, "")
|
221
|
+
accent = case elem1
|
222
|
+
when "\u005e" then "hat"
|
223
|
+
when "\u00af" then "bar"
|
224
|
+
when "\u2192" then "vec"
|
225
|
+
when "." then "dot"
|
226
|
+
when ".." then "ddot"
|
227
|
+
when "\u23de" then "obrace"
|
228
|
+
else
|
229
|
+
"overset"
|
230
|
+
end
|
231
|
+
if accent == "overset"
|
232
|
+
return "overset(#{elem1})(#{parse(node.elements[0])})"
|
233
|
+
else
|
234
|
+
return "#{accent} #{parse(node.elements[0])}"
|
235
|
+
end
|
236
|
+
when "mtable"
|
237
|
+
rows = []
|
238
|
+
node.children.each { |n| rows << parse(n) }
|
239
|
+
return "[#{rows.join(",")}]"
|
240
|
+
when "mtr"
|
241
|
+
cols = []
|
242
|
+
node.children.each { |n| cols << parse(n) }
|
243
|
+
return "[#{cols.join(",")}]"
|
244
|
+
when "mtd"
|
245
|
+
node.children.each { |n| out << parse(n) }
|
246
|
+
return "#{out}"
|
247
|
+
when "mn", "mtext"
|
248
|
+
node.children.each { |n| out << parse(n) }
|
249
|
+
return "#{out}"
|
250
|
+
when "mi"
|
251
|
+
# mi is not meant to have space around it, but Word is conflating operators and operands
|
252
|
+
node.children.each { |n| out << parse(n) }
|
253
|
+
out = " #{out} " if /[^a-zA-Z0-9',]|[a-z][a-z]/.match? out
|
254
|
+
return out
|
255
|
+
when "mo"
|
256
|
+
node.children.each { |n| out << parse(n) }
|
257
|
+
out = " #{out} " unless node["fence"]
|
258
|
+
return out
|
259
|
+
else
|
260
|
+
node.to_xml
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
lib = File.expand_path("../lib", __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require "mathml2asciimath/version"
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = "mathml2asciimath"
|
9
|
+
spec.version = MathML2AsciiMath::VERSION
|
10
|
+
spec.authors = ["Ribose Inc."]
|
11
|
+
spec.email = ["open.source@ribose.com"]
|
12
|
+
|
13
|
+
spec.summary = "Convert MathML to AsciiMath "
|
14
|
+
spec.description = <<~DESCRIPTION
|
15
|
+
Convert MathML to AsciiMath
|
16
|
+
|
17
|
+
This gem is in active development.
|
18
|
+
DESCRIPTION
|
19
|
+
|
20
|
+
spec.homepage = "https://github.com/riboseinc/mathml2asciimath"
|
21
|
+
spec.license = "MIT"
|
22
|
+
|
23
|
+
spec.bindir = "bin"
|
24
|
+
spec.require_paths = ["lib"]
|
25
|
+
spec.files = `git ls-files`.split("\n")
|
26
|
+
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
27
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
28
|
+
|
29
|
+
spec.add_dependency "htmlentities", "~> 4.3.4"
|
30
|
+
spec.add_dependency "nokogiri"
|
31
|
+
|
32
|
+
spec.add_development_dependency "bundler", "~> 1.15"
|
33
|
+
spec.add_development_dependency "byebug", "~> 9.1"
|
34
|
+
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
35
|
+
spec.add_development_dependency "guard", "~> 2.14"
|
36
|
+
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
37
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
38
|
+
spec.add_development_dependency "rspec", "~> 3.6"
|
39
|
+
spec.add_development_dependency "rubocop", "~> 0.50"
|
40
|
+
spec.add_development_dependency "simplecov", "~> 0.15"
|
41
|
+
spec.add_development_dependency "timecop", "~> 0.9"
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,223 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mathml2asciimath
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ribose Inc.
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: htmlentities
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.3.4
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.3.4
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.15'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.15'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '9.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '9.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: equivalent-xml
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.6'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.6'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.14'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.14'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: guard-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '4.7'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '4.7'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '12.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '12.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.6'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '3.6'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.50'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.50'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: simplecov
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0.15'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0.15'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: timecop
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.9'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.9'
|
181
|
+
description: |
|
182
|
+
Convert MathML to AsciiMath
|
183
|
+
|
184
|
+
This gem is in active development.
|
185
|
+
email:
|
186
|
+
- open.source@ribose.com
|
187
|
+
executables: []
|
188
|
+
extensions: []
|
189
|
+
extra_rdoc_files: []
|
190
|
+
files:
|
191
|
+
- LICENSE
|
192
|
+
- README.adoc
|
193
|
+
- bin/m2a.rb
|
194
|
+
- bin/rspec
|
195
|
+
- lib/mathml2asciimath.rb
|
196
|
+
- lib/mathml2asciimath/m2a.rb
|
197
|
+
- lib/mathml2asciimath/version.rb
|
198
|
+
- mathml2asciimath.gemspec
|
199
|
+
homepage: https://github.com/riboseinc/mathml2asciimath
|
200
|
+
licenses:
|
201
|
+
- MIT
|
202
|
+
metadata: {}
|
203
|
+
post_install_message:
|
204
|
+
rdoc_options: []
|
205
|
+
require_paths:
|
206
|
+
- lib
|
207
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
208
|
+
requirements:
|
209
|
+
- - ">="
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: 2.4.0
|
212
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
|
+
requirements:
|
214
|
+
- - ">="
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
version: '0'
|
217
|
+
requirements: []
|
218
|
+
rubyforge_project:
|
219
|
+
rubygems_version: 2.6.12
|
220
|
+
signing_key:
|
221
|
+
specification_version: 4
|
222
|
+
summary: Convert MathML to AsciiMath
|
223
|
+
test_files: []
|