plurimath 0.8.11 → 0.8.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +129 -40
- data/exe/plurimath +4 -0
- data/lib/plurimath/cli.rb +84 -0
- data/lib/plurimath/latex/parser.rb +23 -10
- data/lib/plurimath/math/core.rb +10 -0
- data/lib/plurimath/math/formula.rb +10 -0
- data/lib/plurimath/math/function/binary_function.rb +9 -0
- data/lib/plurimath/math/function/fenced.rb +15 -8
- data/lib/plurimath/math/function/font_style.rb +10 -0
- data/lib/plurimath/math/function/left.rb +4 -0
- data/lib/plurimath/math/function/msgroup.rb +7 -0
- data/lib/plurimath/math/function/right.rb +4 -0
- data/lib/plurimath/math/function/table.rb +7 -0
- data/lib/plurimath/math/function/td.rb +14 -0
- data/lib/plurimath/math/function/ternary_function.rb +10 -0
- data/lib/plurimath/math/function/text.rb +4 -0
- data/lib/plurimath/math/function/tr.rb +7 -0
- data/lib/plurimath/math/function/unary_function.rb +10 -0
- data/lib/plurimath/math/symbols/pi.rb +6 -6
- data/lib/plurimath/math/symbols/symbol.rb +4 -0
- data/lib/plurimath/math/symbols/theta.rb +6 -6
- data/lib/plurimath/mathml/parser.rb +1 -0
- data/lib/plurimath/mathml/transform.rb +1 -0
- data/lib/plurimath/unicode_math/parsing_rules/sub_sup.rb +3 -3
- data/lib/plurimath/unicode_math/transform.rb +32 -12
- data/lib/plurimath/utility.rb +8 -1
- data/lib/plurimath/version.rb +1 -1
- data/plurimath.gemspec +1 -0
- metadata +20 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c68ac69d198de23d6a021dd5d33b68cd942f95de739f92d870e70826445da59
|
4
|
+
data.tar.gz: 361960657e4a8a5e38a11b237744e33b9f7aa5c5eced8582f9ec9de1ca95a7b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e5af5caafefef2bde39dd2330b8291bce8a3831f891141360fb5b15c6c170576023551d3aa284b08026ae2a70d67ff43a268c12002502b72387521fde0c8b78
|
7
|
+
data.tar.gz: 34f049ad3c1c8ce77b9abfe0def2c29ca20c06876b0ed81f92096837d10d0e1a2fd8bf51cb5c99b73e6eb3733f7a6635ab8200406cd71cbc8278c0faaa5ce672
|
data/README.adoc
CHANGED
@@ -61,16 +61,91 @@ Or install it yourself with:
|
|
61
61
|
$ gem install plurimath
|
62
62
|
----
|
63
63
|
|
64
|
-
==
|
64
|
+
== Command Line Interface (CLI) usage
|
65
|
+
|
66
|
+
=== General
|
67
|
+
|
68
|
+
Plurimath provides a Command Line Interface (CLI) tool for converting between
|
69
|
+
different math formats.
|
70
|
+
|
71
|
+
NOTE: Before continuing please ensure you have the gem installed.
|
72
|
+
|
73
|
+
To convert math equations between formats, use the following command followed by
|
74
|
+
appropriate options.
|
75
|
+
|
76
|
+
[source,bash]
|
77
|
+
----
|
78
|
+
plurimath convert [options]
|
79
|
+
----
|
80
|
+
|
81
|
+
Options available are:
|
82
|
+
|
83
|
+
`-i`, `--input <INPUT>`::
|
84
|
+
Specifies the input math equation. Should be provided within double quotes.
|
85
|
+
|
86
|
+
`-f`, `--input-format <FORMAT>`::
|
87
|
+
Specifies the input format of the equation. Defaults to `asciimath`.
|
88
|
+
|
89
|
+
`-p`, `--file-path <FILE_PATH>`::
|
90
|
+
Reads input from a file instead of the command line input. Use this for larger
|
91
|
+
inputs or when input contains special characters.
|
92
|
+
|
93
|
+
`-t`, `--output-format <FORMAT>`::
|
94
|
+
Specifies the output format type. Defaults to `mathml`.
|
95
|
+
|
96
|
+
`-m`, `--math-rendering`::
|
97
|
+
Renders the converted equation as a math zone display tree. Boolean option
|
98
|
+
(`true`, `false`).
|
99
|
+
|
100
|
+
`-d`, `--display-style`::
|
101
|
+
Specifies the DisplayStyle for OMML and MathML outputs only. Boolean option
|
102
|
+
(`true`, `false`).
|
103
|
+
|
104
|
+
`-s`, `--split-on-linebreak`::
|
105
|
+
Splits MathML and OMML output into multiple equations. Boolean option (`true`,
|
106
|
+
`false`).
|
107
|
+
|
108
|
+
|
109
|
+
=== Convert an AsciiMath equation to MathML
|
110
|
+
|
111
|
+
[source,bash]
|
112
|
+
----
|
113
|
+
plurimath convert -i "sqrt(x^2 + y^2)" -f asciimath -t mathml
|
114
|
+
----
|
115
|
+
|
116
|
+
=== Convert an OMML equation to MathML with DisplayStyle
|
117
|
+
|
118
|
+
[source,bash]
|
119
|
+
----
|
120
|
+
plurimath convert -i "equation" -f omml -t mathml -d true
|
121
|
+
----
|
122
|
+
|
123
|
+
=== Convert equations from a file and output as UnicodeMath
|
124
|
+
|
125
|
+
[source,bash]
|
126
|
+
----
|
127
|
+
plurimath convert -e <file_path> -t unicodemath
|
128
|
+
----
|
129
|
+
|
130
|
+
For more detailed information and additional options, use:
|
131
|
+
|
132
|
+
[source,bash]
|
133
|
+
----
|
134
|
+
plurimath help convert
|
135
|
+
----
|
136
|
+
|
137
|
+
|
138
|
+
== Ruby API
|
139
|
+
|
65
140
|
|
66
141
|
The central data model in Plurimath is the `Plurimath::Formula` class, which
|
67
142
|
allows you to transform any math representation language into any other
|
68
143
|
representation language.
|
69
144
|
|
70
145
|
|
71
|
-
=== Conversion
|
146
|
+
=== Conversion examples
|
72
147
|
|
73
|
-
==== AsciiMath Formula
|
148
|
+
==== AsciiMath Formula example
|
74
149
|
|
75
150
|
[source,ruby]
|
76
151
|
----
|
@@ -78,7 +153,7 @@ asciimath = "sin(1)"
|
|
78
153
|
formula = Plurimath::Math.parse(asciimath, :asciimath)
|
79
154
|
----
|
80
155
|
|
81
|
-
==== MathML Formula
|
156
|
+
==== MathML Formula example
|
82
157
|
|
83
158
|
[source,ruby]
|
84
159
|
----
|
@@ -93,7 +168,7 @@ MATHML
|
|
93
168
|
formula = Plurimath::Math.parse(mathml, :mathml)
|
94
169
|
----
|
95
170
|
|
96
|
-
==== LaTeX Formula
|
171
|
+
==== LaTeX Formula example
|
97
172
|
|
98
173
|
[source,ruby]
|
99
174
|
----
|
@@ -101,7 +176,7 @@ latex = "\\sin{1}"
|
|
101
176
|
formula = Plurimath::Math.parse(latex, :latex)
|
102
177
|
----
|
103
178
|
|
104
|
-
==== UnicodeMath Formula
|
179
|
+
==== UnicodeMath Formula example
|
105
180
|
|
106
181
|
[source,ruby]
|
107
182
|
----
|
@@ -109,7 +184,7 @@ unicodemath = "sin(1)"
|
|
109
184
|
formula = Plurimath::Math.parse(unicodemath, :unicodemath)
|
110
185
|
----
|
111
186
|
|
112
|
-
==== OMML Formula
|
187
|
+
==== OMML Formula example
|
113
188
|
|
114
189
|
[source,ruby]
|
115
190
|
----
|
@@ -137,13 +212,14 @@ OMML
|
|
137
212
|
formula = Plurimath::Math.parse(omml, :omml)
|
138
213
|
----
|
139
214
|
|
140
|
-
|
215
|
+
|
216
|
+
=== Converting to other formats
|
141
217
|
|
142
218
|
Once you have a `Plurimath::Math::Formula` object, you can convert it to
|
143
219
|
AsciiMath, MathML, LaTeX, UnicodeMath, or OMML by calling the respective
|
144
220
|
conversion function on the `Formula` object.
|
145
221
|
|
146
|
-
==== AsciiMath
|
222
|
+
==== AsciiMath output conversion
|
147
223
|
|
148
224
|
[source,ruby]
|
149
225
|
----
|
@@ -157,7 +233,7 @@ that LaTeX does. During conversion from LaTeX to AsciiMath, if a symbol is not
|
|
157
233
|
supported in AsciiMath, the LaTeX symbol will be returned.
|
158
234
|
|
159
235
|
|
160
|
-
==== LaTeX
|
236
|
+
==== LaTeX output conversion
|
161
237
|
|
162
238
|
[source,ruby]
|
163
239
|
----
|
@@ -165,7 +241,7 @@ formula.to_latex
|
|
165
241
|
# => "\\sin1"
|
166
242
|
----
|
167
243
|
|
168
|
-
==== MathML
|
244
|
+
==== MathML output conversion
|
169
245
|
|
170
246
|
[source,ruby]
|
171
247
|
----
|
@@ -173,7 +249,7 @@ formula.to_mathml
|
|
173
249
|
# => "<math xmlns='http://www.w3.org/1998/Math/MathML'><mstyle displaystyle='true'><mi>sin</mi><mn>1</mn></mstyle></math>"
|
174
250
|
----
|
175
251
|
|
176
|
-
==== UnicodeMath
|
252
|
+
==== UnicodeMath output conversion
|
177
253
|
|
178
254
|
[source,ruby]
|
179
255
|
----
|
@@ -181,7 +257,7 @@ formula.to_unicodemath
|
|
181
257
|
# => "sin(1)"
|
182
258
|
----
|
183
259
|
|
184
|
-
==== OMML
|
260
|
+
==== OMML output conversion
|
185
261
|
|
186
262
|
[source,ruby]
|
187
263
|
----
|
@@ -189,7 +265,8 @@ formula.to_omml
|
|
189
265
|
# => "<m:oMathPara xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"><m:oMath><m:f><m:fPr><m:ctrlPr /></m:fPr><m:num><m:r><m:t>sin</m:t></m:r></m:num><m:den><m:r><m:t>1</m:t></m:r></m:den></m:f></m:oMath></m:oMathPara>"
|
190
266
|
----
|
191
267
|
|
192
|
-
|
268
|
+
|
269
|
+
==== Complex mathematical expressions
|
193
270
|
|
194
271
|
Plurimath is capable of handling complex mathematical expressions with nested
|
195
272
|
functions and operators.
|
@@ -197,9 +274,7 @@ functions and operators.
|
|
197
274
|
This feature is particularly useful for application that requires consistent and
|
198
275
|
accurate conversion of intricate mathematical content.
|
199
276
|
|
200
|
-
|
201
|
-
|
202
|
-
Consider the following complex LaTeX expression:
|
277
|
+
Example. Consider the following complex LaTeX expression:
|
203
278
|
|
204
279
|
[source,latex]
|
205
280
|
----
|
@@ -232,13 +307,14 @@ omml = formula.to_omml
|
|
232
307
|
|
233
308
|
|
234
309
|
|
310
|
+
== Math parse trees
|
235
311
|
|
236
|
-
|
312
|
+
=== General
|
237
313
|
|
238
314
|
Plurimath allows you to display the math parse tree both as `Formula` objects
|
239
315
|
and in the math language of expression.
|
240
316
|
|
241
|
-
=== Displaying as Formula
|
317
|
+
=== Displaying as Formula objects
|
242
318
|
|
243
319
|
You can display the parse tree as `Formula` objects to understand the structure
|
244
320
|
of the parsed mathematical expression.
|
@@ -246,14 +322,11 @@ of the parsed mathematical expression.
|
|
246
322
|
[source,ruby]
|
247
323
|
----
|
248
324
|
formula = Plurimath::Math.parse("sin(1)", :asciimath)
|
249
|
-
formula.to_display(:
|
250
|
-
#
|
251
|
-
# |_ "sin(1)"
|
252
|
-
# |_ "sin" function apply
|
253
|
-
# |_ "1" argument
|
325
|
+
formula.to_display(:formula)
|
326
|
+
# ...
|
254
327
|
----
|
255
328
|
|
256
|
-
=== Displaying in the
|
329
|
+
=== Displaying in the math language of expression
|
257
330
|
|
258
331
|
You can also display the parse tree in the math language of expression to see
|
259
332
|
how the expression is represented in that language.
|
@@ -261,11 +334,25 @@ how the expression is represented in that language.
|
|
261
334
|
[source,ruby]
|
262
335
|
----
|
263
336
|
formula = Plurimath::Math.parse("sin(1)", :asciimath)
|
337
|
+
formula.to_display(:asciimath)
|
338
|
+
# |_ Math zone
|
339
|
+
# |_ "sin(1)"
|
340
|
+
# |_ "sin" function apply
|
341
|
+
# |_ "1" argument
|
342
|
+
|
264
343
|
formula.to_display(:latex)
|
265
344
|
# |_ Math zone
|
266
345
|
# |_ "\\sin1"
|
267
346
|
# |_ "sin" function apply
|
268
347
|
# |_ "1" argument
|
348
|
+
|
349
|
+
formula.to_display(:mathml)
|
350
|
+
# |_ Math zone
|
351
|
+
# |_ "<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mstyle displaystyle="true"><mrow><mi>sin</mi><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow></mstyle></math>"
|
352
|
+
# |_ "<mrow><mi>sin</mi><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>" function apply
|
353
|
+
# |_ "sin" function name
|
354
|
+
# |_ "<mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow>" argument
|
355
|
+
# |_ "<mtext>1</mtext>" text
|
269
356
|
----
|
270
357
|
|
271
358
|
// == Integration
|
@@ -311,11 +398,11 @@ h = 6.62607015 xx 10^(-34) "unitsml(kg*m^2*s^(-1))"
|
|
311
398
|
|
312
399
|
==== Step-by-Step Customization
|
313
400
|
|
314
|
-
.
|
315
|
-
.
|
316
|
-
.
|
317
|
-
.
|
318
|
-
.
|
401
|
+
. Parse the UnitsML Expression
|
402
|
+
. Customize and Convert to AsciiMath
|
403
|
+
. Customize and Convert to MathML
|
404
|
+
. Customize and Convert to UnicodeMath
|
405
|
+
. Customize and Convert to OMML
|
319
406
|
|
320
407
|
==== Parse the UnitsML Expression
|
321
408
|
|
@@ -341,7 +428,7 @@ puts asciimath
|
|
341
428
|
# Output: 'h = 6.62607015 xx 10^(-34) "unitsml(kg*m^2*s^(-1))"'
|
342
429
|
----
|
343
430
|
|
344
|
-
==== Customize and
|
431
|
+
==== Customize and convert to MathML
|
345
432
|
|
346
433
|
To customize the MathML output, you can use additional attributes and options:
|
347
434
|
|
@@ -353,7 +440,7 @@ puts mathml
|
|
353
440
|
# Output: "<math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>h</mi><mo>=</mo><mn>6.62607015</mn><mo>×</mo><msup><mn>10</mn><mrow><mo>−</mo><mn>34</mn></mrow></msup><mtext>kg·m²·s⁻¹</mtext></mrow></math>"
|
354
441
|
----
|
355
442
|
|
356
|
-
==== Customize and
|
443
|
+
==== Customize and convert to UnicodeMath
|
357
444
|
|
358
445
|
Similarly, customize the UnicodeMath output:
|
359
446
|
|
@@ -365,7 +452,7 @@ puts unicodemath
|
|
365
452
|
# Output: 'h = 6.62607015 × 10^(−34) kg·m²·s⁻¹'
|
366
453
|
----
|
367
454
|
|
368
|
-
==== Customize and
|
455
|
+
==== Customize and convert to OMML
|
369
456
|
|
370
457
|
For OMML output, you can customize the XML structure:
|
371
458
|
|
@@ -377,7 +464,7 @@ puts omml
|
|
377
464
|
# Output: "<m:oMathPara xmlns:m='http://schemas.openxmlformats.org/officeDocument/2006/math'><m:oMath><m:r><m:t>h</m:t></m:r><m:r><m:t>=</m:t></m:r><m:r><m:t>6.62607015</m:t></m:r><m:r><m:t>×</m:t></m:r><m:sSup><m:sSupPr><m:ctrlPr /></m:sSupPr><m:e><m:r><m:t>10</m:t></m:r></m:e><m:sup><m:r><m:t>−34</m:t></m:r></m:sup></m:sSup><m:r><m:t>kg·m²·s⁻¹</m:t></m:r></m:oMath></m:oMathPara>"
|
378
465
|
----
|
379
466
|
|
380
|
-
=== Complete
|
467
|
+
=== Complete example code with customization
|
381
468
|
|
382
469
|
Here's the complete code for parsing, converting, and customizing the UnitsML
|
383
470
|
expression between different formats:
|
@@ -434,7 +521,7 @@ as a text string of `"__{symbol-name}"`. Plurimath can recognize it, but other
|
|
434
521
|
renderers or processors would treat it as a single symbol, which is accurate.
|
435
522
|
|
436
523
|
|
437
|
-
===
|
524
|
+
=== Usage of the compatibility wrapper
|
438
525
|
|
439
526
|
For a symbol like `backepsilon`.
|
440
527
|
|
@@ -466,12 +553,13 @@ In MathML:
|
|
466
553
|
<mi>∍</mi>
|
467
554
|
----
|
468
555
|
|
469
|
-
== XML Engines
|
470
556
|
|
471
|
-
|
557
|
+
== XML engines
|
558
|
+
|
559
|
+
Plurimath supports two XML engines:
|
472
560
|
|
561
|
+
. **Ox**: (default) A fast XML parser
|
473
562
|
. **Oga**: A pure Ruby XML parser
|
474
|
-
. **Ox**: A fast XML parser
|
475
563
|
|
476
564
|
By default, **Ox** is used.
|
477
565
|
|
@@ -479,12 +567,13 @@ To switch to **Oga**, use the following syntax:
|
|
479
567
|
|
480
568
|
[source,ruby]
|
481
569
|
----
|
482
|
-
require "plurimath/xml_engines/oga"
|
483
|
-
Plurimath.xml_engine = Plurimath::XmlEngine::Oga
|
570
|
+
require "plurimath/xml_engines/oga"
|
571
|
+
Plurimath.xml_engine = Plurimath::XmlEngine::Oga
|
484
572
|
----
|
485
573
|
|
486
574
|
You can switch back to **Ox** similarly.
|
487
575
|
|
576
|
+
|
488
577
|
=== Supported content
|
489
578
|
|
490
579
|
=== General
|
data/exe/plurimath
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
|
5
|
+
module Plurimath
|
6
|
+
self.autoload :Math, "plurimath/math"
|
7
|
+
|
8
|
+
class Cli < Thor
|
9
|
+
desc "convert", "Convert between math formats"
|
10
|
+
|
11
|
+
option :input,
|
12
|
+
aliases: "-i",
|
13
|
+
desc: "Input value should be in quoted string"
|
14
|
+
|
15
|
+
option :input_format,
|
16
|
+
aliases: "-f",
|
17
|
+
default: "asciimath",
|
18
|
+
desc: "Input format should be in quoted string => \"asciimath\""
|
19
|
+
|
20
|
+
option :file_path,
|
21
|
+
aliases: "-p",
|
22
|
+
desc: "Reads input from a file instead of the command line input. Use this for larger inputs or when input contains special characters.",
|
23
|
+
force: :boolean
|
24
|
+
|
25
|
+
option :output_format,
|
26
|
+
aliases: "-t",
|
27
|
+
default: "mathml",
|
28
|
+
desc: "Convert to language type, Output format should be in quoted string"
|
29
|
+
|
30
|
+
option :math_rendering,
|
31
|
+
aliases: "-m",
|
32
|
+
force: :boolean,
|
33
|
+
default: 'false',
|
34
|
+
desc: "Render converted equation as math zone display tree, Boolean only"
|
35
|
+
|
36
|
+
option :display_style,
|
37
|
+
aliases: "-d",
|
38
|
+
desc: "DisplayStyle is only supported for OMML and MathML conversion, Boolean only",
|
39
|
+
force: :boolean
|
40
|
+
|
41
|
+
option :split_on_linebreak,
|
42
|
+
aliases: "-s",
|
43
|
+
desc: "Splits only MathML and OMML equations into multiple equations, Boolean only",
|
44
|
+
force: :boolean
|
45
|
+
|
46
|
+
def convert
|
47
|
+
input = options[:input]
|
48
|
+
input_string = options[:file_path] ? File.read(options[:file_path]) : input
|
49
|
+
warn_and_exit("missing generator argument --input or --file-input") unless input_string
|
50
|
+
|
51
|
+
input_format = options[:input_format]
|
52
|
+
output_format = options[:output_format]
|
53
|
+
formula = Plurimath::Math.parse(input_string, input_format)
|
54
|
+
return puts formula.to_display(output_format.to_sym) if YAML.safe_load(options[:math_rendering])
|
55
|
+
|
56
|
+
display_style = options[:display_style]
|
57
|
+
split = options[:split_on_linebreak]
|
58
|
+
style = display_style.to_s.empty? ? "true" : display_style
|
59
|
+
output_text = case output_format
|
60
|
+
when "unicodemath"
|
61
|
+
formula.to_unicodemath
|
62
|
+
when "asciimath"
|
63
|
+
formula.to_asciimath
|
64
|
+
when "mathml"
|
65
|
+
formula.to_mathml(display_style: style, split_on_linebreak: split)
|
66
|
+
when "latex"
|
67
|
+
formula.to_latex
|
68
|
+
when "omml"
|
69
|
+
formula.to_omml(display_style: style, split_on_linebreak: split)
|
70
|
+
else
|
71
|
+
warn_and_exit("Invalid output format: #{output_format}")
|
72
|
+
end
|
73
|
+
|
74
|
+
puts output_text
|
75
|
+
end
|
76
|
+
|
77
|
+
no_commands do
|
78
|
+
def warn_and_exit(message)
|
79
|
+
warn(message)
|
80
|
+
exit 1
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -8,17 +8,10 @@ module Plurimath
|
|
8
8
|
class Parser
|
9
9
|
attr_accessor :text
|
10
10
|
|
11
|
+
TEXT_REGEX = %r(\\(?:mbox|text){[^}]+})
|
12
|
+
|
11
13
|
def initialize(text)
|
12
|
-
|
13
|
-
text = enti.encode(enti.decode(text), :hexadecimal)
|
14
|
-
text = text
|
15
|
-
.gsub(/((?<!\\) )|\n+/, "")
|
16
|
-
.gsub(/\\\\ /, "\\\\\\\\")
|
17
|
-
.gsub(/&/, "&")
|
18
|
-
.gsub(/"/, "\"")
|
19
|
-
.gsub(/(?<!\\\\)\\
/, "\\ ")
|
20
|
-
.gsub(/
/, "")
|
21
|
-
@text = text
|
14
|
+
@text = pre_processing(text)
|
22
15
|
end
|
23
16
|
|
24
17
|
def parse
|
@@ -28,6 +21,26 @@ module Plurimath
|
|
28
21
|
|
29
22
|
Math::Formula.new(formula)
|
30
23
|
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def pre_processing(text)
|
28
|
+
text_functions = text.scan(TEXT_REGEX)
|
29
|
+
enti = HTMLEntities.new
|
30
|
+
text = enti.encode(enti.decode(text), :hexadecimal)
|
31
|
+
text = gsub_space_and_unicodes(text)
|
32
|
+
text.gsub(TEXT_REGEX) { |str| text_functions.shift }
|
33
|
+
end
|
34
|
+
|
35
|
+
def gsub_space_and_unicodes(text)
|
36
|
+
text
|
37
|
+
.gsub(/((?<!\\) )|\n+/, "")
|
38
|
+
.gsub(/\\\\ /, "\\\\\\\\")
|
39
|
+
.gsub(/&/, "&")
|
40
|
+
.gsub(/"/, "\"")
|
41
|
+
.gsub(/(?<!\\\\)\\
/, "\\ ")
|
42
|
+
.gsub(/
/, "")
|
43
|
+
end
|
31
44
|
end
|
32
45
|
end
|
33
46
|
end
|
data/lib/plurimath/math/core.rb
CHANGED
@@ -116,6 +116,16 @@ module Plurimath
|
|
116
116
|
options[:array] << field&.to_omml_math_zone(hashed[:function_spacing], hashed[:last], hashed[:indent], display_style: display_style)
|
117
117
|
end
|
118
118
|
|
119
|
+
def unicodemath_fields_to_print(field, options = {})
|
120
|
+
return if field.nil?
|
121
|
+
|
122
|
+
hashed = common_math_zone_conversion(field, options)
|
123
|
+
options[:array] << "#{hashed[:spacing]}|_ \"#{field&.to_unicodemath}\"#{hashed[:field_name]}\n"
|
124
|
+
return unless Utility.validate_math_zone(field, lang: :unicodemath)
|
125
|
+
|
126
|
+
options[:array] << field&.to_unicodemath_math_zone(hashed[:function_spacing], hashed[:last], hashed[:indent])
|
127
|
+
end
|
128
|
+
|
119
129
|
def dump_mathml(field, intent = false)
|
120
130
|
dump_ox_nodes(field.to_mathml_without_math_tag(intent)).gsub(/\n\s*/, "")
|
121
131
|
end
|
@@ -10,6 +10,7 @@ module Plurimath
|
|
10
10
|
latex
|
11
11
|
mathml
|
12
12
|
asciimath
|
13
|
+
unicodemath
|
13
14
|
].freeze
|
14
15
|
POWER_BASE_CLASSES = %w[powerbase power base].freeze
|
15
16
|
DERIVATIVE_CONSTS = [
|
@@ -165,6 +166,8 @@ module Plurimath
|
|
165
166
|
" |_ \"#{to_mathml.gsub(/\n\s*/, "")}\"\n#{to_mathml_math_zone(" ").join}"
|
166
167
|
when :omml
|
167
168
|
" |_ \"#{to_omml.gsub(/\n\s*/, "")}\"\n#{to_omml_math_zone(" ", display_style: displaystyle).join}"
|
169
|
+
when :unicodemath
|
170
|
+
" |_ \"#{to_unicodemath}\"\n#{to_unicodemath_math_zone(" ").join}"
|
168
171
|
end
|
169
172
|
<<~MATHZONE.sub(/\n$/, "")
|
170
173
|
|_ Math zone
|
@@ -200,6 +203,13 @@ module Plurimath
|
|
200
203
|
end
|
201
204
|
end
|
202
205
|
|
206
|
+
def to_unicodemath_math_zone(spacing = "", last = false, indent = true)
|
207
|
+
filtered_values(value, lang: :unicodemath).map.with_index(1) do |object, index|
|
208
|
+
last = index == @values.length
|
209
|
+
object.to_unicodemath_math_zone(new_space(spacing, indent), last, indent)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
203
213
|
def extract_class_name_from_text
|
204
214
|
return unless value.length < 2 && value.first.is_a?(Function::Text)
|
205
215
|
|
@@ -100,6 +100,15 @@ module Plurimath
|
|
100
100
|
new_arr
|
101
101
|
end
|
102
102
|
|
103
|
+
def to_unicodemath_math_zone(spacing, last = false, _)
|
104
|
+
parameters = self.class::FUNCTION
|
105
|
+
new_spacing = gsub_spacing(spacing, last)
|
106
|
+
new_arr = ["#{spacing}\"#{to_unicodemath}\" #{parameters[:name]}\n"]
|
107
|
+
unicodemath_fields_to_print(parameter_one, { spacing: new_spacing, field_name: parameters[:first_value], additional_space: "| |_ " , array: new_arr })
|
108
|
+
unicodemath_fields_to_print(parameter_two, { spacing: new_spacing, field_name: parameters[:second_value], additional_space: " |_ " , array: new_arr })
|
109
|
+
new_arr
|
110
|
+
end
|
111
|
+
|
103
112
|
protected
|
104
113
|
|
105
114
|
def latex_wrapped(field)
|
@@ -31,7 +31,7 @@ module Plurimath
|
|
31
31
|
def to_mathml_without_math_tag(intent)
|
32
32
|
first_value = ox_element("mo", attributes: options&.dig(:open_paren)) << (mathml_paren(parameter_one, intent) || "")
|
33
33
|
third_value = ox_element("mo", attributes: options&.dig(:close_paren)) << (mathml_paren(parameter_three, intent) || "")
|
34
|
-
mrow_value = mathml_value(intent).insert(0, first_value) << third_value
|
34
|
+
mrow_value = Array(mathml_value(intent)).insert(0, first_value) << third_value
|
35
35
|
fenced = Utility.update_nodes(ox_element("mrow"), mrow_value)
|
36
36
|
intentify(
|
37
37
|
fenced,
|
@@ -93,22 +93,22 @@ module Plurimath
|
|
93
93
|
|
94
94
|
def to_asciimath_math_zone(spacing, last = false, indent = true)
|
95
95
|
filtered_values(parameter_two, lang: :asciimath).map.with_index(1) do |object, index|
|
96
|
-
|
97
|
-
object.to_asciimath_math_zone(spacing,
|
96
|
+
new_last = index == @values.length && last
|
97
|
+
object.to_asciimath_math_zone(spacing, new_last, indent)
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
101
|
def to_latex_math_zone(spacing, last = false, indent = true)
|
102
102
|
filtered_values(parameter_two, lang: :latex).map.with_index(1) do |object, index|
|
103
|
-
|
104
|
-
object.to_latex_math_zone(spacing,
|
103
|
+
new_last = index == @values.length && last
|
104
|
+
object.to_latex_math_zone(spacing, new_last, indent)
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
108
|
def to_mathml_math_zone(spacing, last = false, indent = true)
|
109
109
|
filtered_values(parameter_two, lang: :mathml).map.with_index(1) do |object, index|
|
110
|
-
|
111
|
-
object.to_mathml_math_zone(spacing,
|
110
|
+
new_last = index == @values.length && last
|
111
|
+
object.to_mathml_math_zone(spacing, new_last, indent)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -118,6 +118,13 @@ module Plurimath
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
+
def to_unicodemath_math_zone(spacing, last = false, indent = true)
|
122
|
+
filtered_values(parameter_two, lang: :unicodemath).map.with_index(1) do |object, index|
|
123
|
+
new_last = index == @values.length && last
|
124
|
+
object.to_unicodemath_math_zone(spacing, new_last, indent)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
121
128
|
def line_breaking(obj)
|
122
129
|
field_values = result(Array(parameter_two))
|
123
130
|
return unless field_values.length > 1
|
@@ -254,7 +261,7 @@ module Plurimath
|
|
254
261
|
end
|
255
262
|
|
256
263
|
def binomial_coefficient?(value)
|
257
|
-
parameter_two
|
264
|
+
parameter_two&.first&.is_a?(Frac) &&
|
258
265
|
parameter_two&.first&.options&.dig(:choose)
|
259
266
|
end
|
260
267
|
|
@@ -120,6 +120,16 @@ module Plurimath
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
+
def to_unicodemath_math_zone(spacing, last = false, _)
|
124
|
+
new_spacing = gsub_spacing(spacing, last)
|
125
|
+
new_arr = [
|
126
|
+
"#{spacing}\"#{dump_unicodemath(self)}\" function apply\n",
|
127
|
+
"#{new_spacing}|_ \"#{font_family(unicode: true)}\" font family\n",
|
128
|
+
]
|
129
|
+
unicodemath_fields_to_print(parameter_one, { spacing: new_spacing, field_name: "argument", additional_space: "| |_ ", array: new_arr })
|
130
|
+
new_arr
|
131
|
+
end
|
132
|
+
|
123
133
|
def line_breaking(obj)
|
124
134
|
parameter_one&.line_breaking(obj)
|
125
135
|
return unless obj.value_exist?
|
@@ -57,6 +57,13 @@ module Plurimath
|
|
57
57
|
]
|
58
58
|
end
|
59
59
|
|
60
|
+
def to_unicodemath_math_zone(spacing, last = false, indent = true)
|
61
|
+
[
|
62
|
+
"#{spacing}\"msgroup\" function apply\n",
|
63
|
+
Formula.new(parameter_one).to_unicodemath_math_zone(gsub_spacing(spacing, last), last, indent),
|
64
|
+
]
|
65
|
+
end
|
66
|
+
|
60
67
|
def to_unicodemath
|
61
68
|
parameter_one.map(&:to_unicodemath).join
|
62
69
|
end
|
@@ -117,6 +117,13 @@ module Plurimath
|
|
117
117
|
]
|
118
118
|
end
|
119
119
|
|
120
|
+
def to_unicodemath_math_zone(spacing, last = false, indent = true)
|
121
|
+
[
|
122
|
+
"#{spacing}\"table\" function apply\n",
|
123
|
+
Formula.new(value).to_unicodemath_math_zone(gsub_spacing(spacing, last), last, indent),
|
124
|
+
]
|
125
|
+
end
|
126
|
+
|
120
127
|
protected
|
121
128
|
|
122
129
|
def mathml_parenthesis(field, intent)
|
@@ -76,6 +76,20 @@ module Plurimath
|
|
76
76
|
]
|
77
77
|
end
|
78
78
|
|
79
|
+
def to_unicodemath_math_zone(spacing, last = false, _)
|
80
|
+
[
|
81
|
+
"#{spacing}\"td\" function apply\n",
|
82
|
+
Formula.new(parameter_one).to_unicodemath_math_zone(gsub_spacing(spacing, last), last),
|
83
|
+
]
|
84
|
+
end
|
85
|
+
|
86
|
+
def to_unicodemath_math_zone(spacing, last = false, _)
|
87
|
+
[
|
88
|
+
"#{spacing}\"td\" function apply\n",
|
89
|
+
Formula.new(parameter_one).to_unicodemath_math_zone(gsub_spacing(spacing, last), last),
|
90
|
+
]
|
91
|
+
end
|
92
|
+
|
79
93
|
def omml_content(display_style)
|
80
94
|
parameter_one&.map { |val| val.insert_t_tag(display_style) }
|
81
95
|
end
|
@@ -101,6 +101,16 @@ module Plurimath
|
|
101
101
|
new_arr
|
102
102
|
end
|
103
103
|
|
104
|
+
def to_unicodemath_math_zone(spacing, last = false, _)
|
105
|
+
parameters = self.class::FUNCTION
|
106
|
+
new_spacing = gsub_spacing(spacing, last)
|
107
|
+
new_arr = ["#{spacing}\"#{to_unicodemath}\" #{parameters[:name]}\n"]
|
108
|
+
unicodemath_fields_to_print(parameter_one, { spacing: new_spacing, field_name: parameters[:first_value], additional_space: "| |_ ", array: new_arr })
|
109
|
+
unicodemath_fields_to_print(parameter_two, { spacing: new_spacing, field_name: parameters[:second_value], additional_space: " |_ ", array: new_arr })
|
110
|
+
unicodemath_fields_to_print(parameter_three, { spacing: new_spacing, field_name: parameters[:third_value], additional_space: " |_ ", array: new_arr })
|
111
|
+
new_arr
|
112
|
+
end
|
113
|
+
|
104
114
|
protected
|
105
115
|
|
106
116
|
def latex_wrapped(field)
|
@@ -80,6 +80,13 @@ module Plurimath
|
|
80
80
|
]
|
81
81
|
end
|
82
82
|
|
83
|
+
def to_unicodemath_math_zone(spacing, last = false, indent = true)
|
84
|
+
[
|
85
|
+
"#{spacing}\"tr\" function apply\n",
|
86
|
+
Formula.new(parameter_one).to_unicodemath_math_zone(gsub_spacing(spacing, last), last, indent),
|
87
|
+
]
|
88
|
+
end
|
89
|
+
|
83
90
|
def remove_hline(first_value)
|
84
91
|
row_lines = first_value.first.parameter_one
|
85
92
|
row_lines.shift if row_lines.first.is_a?(Math::Symbols::Hline)
|
@@ -110,6 +110,16 @@ module Plurimath
|
|
110
110
|
new_arr
|
111
111
|
end
|
112
112
|
|
113
|
+
def to_unicodemath_math_zone(spacing, last = false, _)
|
114
|
+
new_spacing = gsub_spacing(spacing, last)
|
115
|
+
new_arr = [
|
116
|
+
"#{spacing}\"#{to_unicodemath}\" function apply\n",
|
117
|
+
"#{new_spacing}|_ \"#{class_name}\" function name\n",
|
118
|
+
]
|
119
|
+
unicodemath_fields_to_print(parameter_one, { spacing: new_spacing, field_name: "argument", additional_space: " |_ " , array: new_arr })
|
120
|
+
new_arr
|
121
|
+
end
|
122
|
+
|
113
123
|
def custom_array_line_breaking(obj)
|
114
124
|
parameter_value = result(parameter_one)
|
115
125
|
if parameter_value.size > 1
|
@@ -3,12 +3,12 @@ module Plurimath
|
|
3
3
|
module Symbols
|
4
4
|
class Pi < Symbol
|
5
5
|
INPUT = {
|
6
|
-
unicodemath: [
|
7
|
-
asciimath: [
|
8
|
-
mathml: [
|
9
|
-
latex: [
|
10
|
-
omml: [
|
11
|
-
html: ["π"],
|
6
|
+
unicodemath: ["pi", "π", "𝜋", parsing_wrapper(["uppi"])],
|
7
|
+
asciimath: ["pi", "π", "𝜋", parsing_wrapper(["uppi"])],
|
8
|
+
mathml: ["π", "𝜋"],
|
9
|
+
latex: ["pi", "uppi", "π", "𝜋"],
|
10
|
+
omml: ["π", "𝜋"],
|
11
|
+
html: ["π", "𝜋"],
|
12
12
|
}.freeze
|
13
13
|
|
14
14
|
# output methods
|
@@ -3,12 +3,12 @@ module Plurimath
|
|
3
3
|
module Symbols
|
4
4
|
class Theta < Symbol
|
5
5
|
INPUT = {
|
6
|
-
unicodemath: [
|
7
|
-
asciimath: [
|
8
|
-
mathml: ["θ"],
|
9
|
-
latex: [
|
10
|
-
omml: ["θ"],
|
11
|
-
html: ["θ"],
|
6
|
+
unicodemath: ["theta", "θ", "𝜃", parsing_wrapper(["uptheta"])],
|
7
|
+
asciimath: ["theta", "θ", "𝜃", parsing_wrapper(["uptheta"])],
|
8
|
+
mathml: ["θ", "𝜃"],
|
9
|
+
latex: ["uptheta", "theta", "θ", "𝜃"],
|
10
|
+
omml: ["θ", "𝜃"],
|
11
|
+
html: ["θ", "𝜃"],
|
12
12
|
}.freeze
|
13
13
|
|
14
14
|
# output methods
|
@@ -59,7 +59,7 @@ module Plurimath
|
|
59
59
|
(operator.absent? >> naryand_values >> naryand_recursion.as(:naryand_recursion).maybe) |
|
60
60
|
(slashed_operator >> naryand_recursion.as(:naryand_recursion).maybe)
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
rule(:baseless_sub) do
|
64
64
|
(invisible_space? >> base_syntax >> op_size_overrides_symbols.absent? >> (operator_symbols.maybe >> baseless_sub_values(:sub_script))) |
|
65
65
|
(invisible_space? >> base_syntax >> op_size_overrides_symbols.absent? >> (operator_symbols >> recursive_baseless_sub_exp.maybe)) |
|
@@ -220,8 +220,8 @@ module Plurimath
|
|
220
220
|
(operator_symbols.as(:expr) >> (((mini_sub_sup | sub_or_sup) >> space?) >> bracketed_soperand.maybe)) |
|
221
221
|
(operator_symbols.as(:expr) >> bracketed_soperand) |
|
222
222
|
(((primes | prefixed_primes).as(:symbol).as(:first_value) >> repeated_accent_symbols).as(:accents) >> (sub_or_sup.maybe >> space? >> bracketed_soperand).maybe) |
|
223
|
-
bracketed_soperand >> operator_symbols.absent? >> sub_sup_values.as(:expr).maybe |
|
224
|
-
sub_sup_binary_absent >> operator_symbols.absent? >> sub_sup_values.as(:expr).maybe |
|
223
|
+
bracketed_soperand >> str("−").absent? >> operator_symbols.absent? >> sub_sup_values.as(:expr).maybe |
|
224
|
+
sub_sup_binary_absent >> str("−").absent? >> operator_symbols.absent? >> sub_sup_values.as(:expr).maybe |
|
225
225
|
bracketed_soperand |
|
226
226
|
prefixed_primes |
|
227
227
|
primes |
|
@@ -172,7 +172,7 @@ module Plurimath
|
|
172
172
|
else
|
173
173
|
(Constants::NARY_CLASSES.invert[nary_class.to_s] || Constants::NARY_SYMBOLS[nary_class.to_sym] || nary_class)
|
174
174
|
end
|
175
|
-
Utility.get_class(nary_function).new
|
175
|
+
Utility.get_class(nary_function).new
|
176
176
|
end
|
177
177
|
|
178
178
|
rule(ordinary_negated_operator: simple(:operator)) do
|
@@ -518,6 +518,12 @@ module Plurimath
|
|
518
518
|
[Utility.symbols_class(symbol, lang: :unicodemath), sup_script]
|
519
519
|
end
|
520
520
|
|
521
|
+
rule(combined_symbols: simple(:combined_symbols),
|
522
|
+
exp: simple(:exp)) do
|
523
|
+
symbol = Constants::COMBINING_SYMBOLS[combined_symbols.to_sym]
|
524
|
+
[Utility.symbols_class(symbol, lang: :unicodemath), exp]
|
525
|
+
end
|
526
|
+
|
521
527
|
rule(operator: simple(:operator),
|
522
528
|
sub_script: simple(:sub_script)) do
|
523
529
|
[Utility.symbols_class(operator, lang: :unicodemath), sub_script]
|
@@ -1531,17 +1537,6 @@ module Plurimath
|
|
1531
1537
|
)
|
1532
1538
|
end
|
1533
1539
|
|
1534
|
-
rule(unary_functions: simple(:unary),
|
1535
|
-
first_value: simple(:first_value)) do
|
1536
|
-
if Constants::UNDEF_UNARY_FUNCTIONS.include?(unary.to_s)
|
1537
|
-
Math::Formula.new([
|
1538
|
-
Utility.symbols_class(unary, lang: :unicodemath),
|
1539
|
-
first_value,
|
1540
|
-
])
|
1541
|
-
else
|
1542
|
-
Utility.get_class(unary).new(first_value)
|
1543
|
-
end
|
1544
|
-
end
|
1545
1540
|
|
1546
1541
|
rule(unary_functions: simple(:unary),
|
1547
1542
|
first_value: simple(:first_value)) do
|
@@ -1550,6 +1545,8 @@ module Plurimath
|
|
1550
1545
|
Utility.symbols_class(unary, lang: :unicodemath),
|
1551
1546
|
first_value,
|
1552
1547
|
])
|
1548
|
+
elsif unary == "mod"
|
1549
|
+
Math::Function::Mod.new(nil, first_value)
|
1553
1550
|
else
|
1554
1551
|
Utility.get_class(unary).new(first_value)
|
1555
1552
|
end
|
@@ -3126,6 +3123,17 @@ module Plurimath
|
|
3126
3123
|
[fenced] + naryand_recursion
|
3127
3124
|
end
|
3128
3125
|
|
3126
|
+
rule(open_paren: simple(:open_paren),
|
3127
|
+
unary_subsup: simple(:unary_subsup),
|
3128
|
+
exp: simple(:exp),
|
3129
|
+
close_paren: simple(:close_paren)) do
|
3130
|
+
Math::Function::Fenced.new(
|
3131
|
+
open_paren.is_a?(Slice) ? Utility.symbols_class(open_paren, lang: :unicodemath) : open_paren,
|
3132
|
+
[unary_subsup, exp],
|
3133
|
+
close_paren.is_a?(Slice) ? Utility.symbols_class(close_paren, lang: :unicodemath) : close_paren,
|
3134
|
+
)
|
3135
|
+
end
|
3136
|
+
|
3129
3137
|
rule(open_paren: simple(:open_paren),
|
3130
3138
|
factor: simple(:factor),
|
3131
3139
|
close_paren: simple(:close_paren),
|
@@ -3949,6 +3957,18 @@ module Plurimath
|
|
3949
3957
|
)
|
3950
3958
|
end
|
3951
3959
|
|
3960
|
+
rule(open_paren: simple(:open_paren),
|
3961
|
+
factor: sequence(:factor),
|
3962
|
+
operand: simple(:operand),
|
3963
|
+
exp: simple(:exp),
|
3964
|
+
close_paren: simple(:close_paren)) do
|
3965
|
+
Math::Function::Fenced.new(
|
3966
|
+
Utility.symbols_class(open_paren, lang: :unicodemath),
|
3967
|
+
factor + [operand, exp],
|
3968
|
+
Utility.symbols_class(close_paren, lang: :unicodemath),
|
3969
|
+
)
|
3970
|
+
end
|
3971
|
+
|
3952
3972
|
rule(open_paren: simple(:open_paren),
|
3953
3973
|
pre_subscript: simple(:pre_sub),
|
3954
3974
|
pre_supscript: simple(:pre_sup),
|
data/lib/plurimath/utility.rb
CHANGED
@@ -482,7 +482,14 @@ module Plurimath
|
|
482
482
|
end
|
483
483
|
|
484
484
|
def join_attr_value(attrs, value, unicode_only: false, lang: :mathml)
|
485
|
-
if
|
485
|
+
if attrs&.is_a?(Hash) && attrs.key?(:intent)
|
486
|
+
[
|
487
|
+
Math::Function::Intent.new(
|
488
|
+
filter_values(join_attr_value(nil, value, unicode_only: unicode_only, lang: lang)),
|
489
|
+
Math::Function::Text.new(attrs[:intent]),
|
490
|
+
)
|
491
|
+
]
|
492
|
+
elsif value.any?(String)
|
486
493
|
new_value = mathml_unary_classes(value, unicode_only: unicode_only, lang: lang)
|
487
494
|
array_value = Array(new_value)
|
488
495
|
attrs.nil? ? array_value : join_attr_value(attrs, array_value, unicode_only: unicode_only)
|
data/lib/plurimath/version.rb
CHANGED
data/plurimath.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plurimath
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: twitter_cldr
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: ox
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -55,7 +69,8 @@ dependencies:
|
|
55
69
|
description: Converts LaTeX math into MathML.
|
56
70
|
email:
|
57
71
|
- open.source@ribose.com
|
58
|
-
executables:
|
72
|
+
executables:
|
73
|
+
- plurimath
|
59
74
|
extensions: []
|
60
75
|
extra_rdoc_files: []
|
61
76
|
files:
|
@@ -79,12 +94,14 @@ files:
|
|
79
94
|
- UnitsML-Supported-Data.adoc
|
80
95
|
- bin/console
|
81
96
|
- bin/setup
|
97
|
+
- exe/plurimath
|
82
98
|
- lib/plurimath.rb
|
83
99
|
- lib/plurimath/asciimath.rb
|
84
100
|
- lib/plurimath/asciimath/constants.rb
|
85
101
|
- lib/plurimath/asciimath/parse.rb
|
86
102
|
- lib/plurimath/asciimath/parser.rb
|
87
103
|
- lib/plurimath/asciimath/transform.rb
|
104
|
+
- lib/plurimath/cli.rb
|
88
105
|
- lib/plurimath/formatter/localized_number.rb
|
89
106
|
- lib/plurimath/formatter/number_data_reader.rb
|
90
107
|
- lib/plurimath/formatter/number_formatter.rb
|