plurimath 0.7.2 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/Latex-Supported-Data.adoc +1 -0
  4. data/UnicodeMath-Supported-Data.adoc +1342 -0
  5. data/UnitsML-Supported-Data.adoc +444 -0
  6. data/lib/plurimath/asciimath/parse.rb +1 -1
  7. data/lib/plurimath/asciimath/transform.rb +2 -6
  8. data/lib/plurimath/latex/constants.rb +2 -0
  9. data/lib/plurimath/math/core.rb +38 -6
  10. data/lib/plurimath/math/formula.rb +60 -6
  11. data/lib/plurimath/math/function/abs.rb +4 -0
  12. data/lib/plurimath/math/function/arg.rb +22 -0
  13. data/lib/plurimath/math/function/bar.rb +4 -0
  14. data/lib/plurimath/math/function/base.rb +49 -0
  15. data/lib/plurimath/math/function/binary_function.rb +6 -0
  16. data/lib/plurimath/math/function/cancel.rb +5 -0
  17. data/lib/plurimath/math/function/ceil.rb +6 -0
  18. data/lib/plurimath/math/function/color.rb +20 -1
  19. data/lib/plurimath/math/function/ddot.rb +4 -0
  20. data/lib/plurimath/math/function/dot.rb +5 -0
  21. data/lib/plurimath/math/function/fenced.rb +98 -7
  22. data/lib/plurimath/math/function/floor.rb +6 -0
  23. data/lib/plurimath/math/function/font_style/monospace.rb +4 -0
  24. data/lib/plurimath/math/function/font_style.rb +31 -6
  25. data/lib/plurimath/math/function/frac.rb +69 -15
  26. data/lib/plurimath/math/function/hat.rb +4 -0
  27. data/lib/plurimath/math/function/inf.rb +30 -0
  28. data/lib/plurimath/math/function/int.rb +47 -1
  29. data/lib/plurimath/math/function/intent.rb +22 -0
  30. data/lib/plurimath/math/function/left.rb +4 -0
  31. data/lib/plurimath/math/function/lim.rb +6 -0
  32. data/lib/plurimath/math/function/limits.rb +28 -0
  33. data/lib/plurimath/math/function/linebreak.rb +5 -0
  34. data/lib/plurimath/math/function/log.rb +27 -20
  35. data/lib/plurimath/math/function/longdiv.rb +4 -0
  36. data/lib/plurimath/math/function/mbox.rb +4 -0
  37. data/lib/plurimath/math/function/menclose.rb +74 -5
  38. data/lib/plurimath/math/function/merror.rb +2 -0
  39. data/lib/plurimath/math/function/mglyph.rb +64 -0
  40. data/lib/plurimath/math/function/mlabeledtr.rb +29 -0
  41. data/lib/plurimath/math/function/mod.rb +4 -0
  42. data/lib/plurimath/math/function/mpadded.rb +84 -0
  43. data/lib/plurimath/math/function/ms.rb +33 -0
  44. data/lib/plurimath/math/function/msgroup.rb +4 -0
  45. data/lib/plurimath/math/function/msline.rb +2 -4
  46. data/lib/plurimath/math/function/multiscript.rb +70 -6
  47. data/lib/plurimath/math/function/nary.rb +69 -10
  48. data/lib/plurimath/math/function/none.rb +25 -0
  49. data/lib/plurimath/math/function/norm.rb +6 -0
  50. data/lib/plurimath/math/function/obrace.rb +4 -0
  51. data/lib/plurimath/math/function/oint.rb +25 -1
  52. data/lib/plurimath/math/function/over.rb +6 -0
  53. data/lib/plurimath/math/function/overset.rb +46 -1
  54. data/lib/plurimath/math/function/phantom.rb +18 -2
  55. data/lib/plurimath/math/function/power.rb +37 -0
  56. data/lib/plurimath/math/function/power_base.rb +45 -18
  57. data/lib/plurimath/math/function/prod.rb +46 -0
  58. data/lib/plurimath/math/function/right.rb +4 -0
  59. data/lib/plurimath/math/function/root.rb +9 -1
  60. data/lib/plurimath/math/function/rule.rb +4 -0
  61. data/lib/plurimath/math/function/sqrt.rb +7 -1
  62. data/lib/plurimath/math/function/stackrel.rb +6 -0
  63. data/lib/plurimath/math/function/substack.rb +4 -0
  64. data/lib/plurimath/math/function/sum.rb +45 -24
  65. data/lib/plurimath/math/function/table/bmatrix.rb +18 -5
  66. data/lib/plurimath/math/function/table/cases.rb +24 -0
  67. data/lib/plurimath/math/function/table/eqarray.rb +24 -0
  68. data/lib/plurimath/math/function/table/matrix.rb +23 -3
  69. data/lib/plurimath/math/function/table/pmatrix.rb +4 -0
  70. data/lib/plurimath/math/function/table/vmatrix.rb +10 -0
  71. data/lib/plurimath/math/function/table.rb +58 -7
  72. data/lib/plurimath/math/function/td.rb +9 -0
  73. data/lib/plurimath/math/function/ternary_function.rb +14 -1
  74. data/lib/plurimath/math/function/text.rb +6 -0
  75. data/lib/plurimath/math/function/tilde.rb +4 -0
  76. data/lib/plurimath/math/function/tr.rb +9 -0
  77. data/lib/plurimath/math/function/ubrace.rb +5 -0
  78. data/lib/plurimath/math/function/ul.rb +4 -0
  79. data/lib/plurimath/math/function/unary_function.rb +4 -0
  80. data/lib/plurimath/math/function/underover.rb +14 -0
  81. data/lib/plurimath/math/function/underset.rb +49 -1
  82. data/lib/plurimath/math/function/vec.rb +4 -0
  83. data/lib/plurimath/math/number.rb +33 -3
  84. data/lib/plurimath/math/symbol.rb +68 -3
  85. data/lib/plurimath/math.rb +3 -2
  86. data/lib/plurimath/mathml/constants.rb +16 -0
  87. data/lib/plurimath/mathml/parser.rb +42 -2
  88. data/lib/plurimath/mathml/transform.rb +80 -29
  89. data/lib/plurimath/omml/parser.rb +8 -0
  90. data/lib/plurimath/omml/transform.rb +29 -26
  91. data/lib/plurimath/unicode_math/constants.rb +1014 -0
  92. data/lib/plurimath/unicode_math/parse.rb +233 -0
  93. data/lib/plurimath/unicode_math/parser.rb +58 -0
  94. data/lib/plurimath/unicode_math/parsing_rules/absence_rules.rb +138 -0
  95. data/lib/plurimath/unicode_math/parsing_rules/common_rules.rb +114 -0
  96. data/lib/plurimath/unicode_math/parsing_rules/constants_rules.rb +102 -0
  97. data/lib/plurimath/unicode_math/parsing_rules/helper.rb +19 -0
  98. data/lib/plurimath/unicode_math/parsing_rules/masked.rb +62 -0
  99. data/lib/plurimath/unicode_math/parsing_rules/sub_sup.rb +254 -0
  100. data/lib/plurimath/unicode_math/transform.rb +3831 -0
  101. data/lib/plurimath/{unicode.rb → unicode_math.rb} +2 -2
  102. data/lib/plurimath/unitsml.rb +14 -1
  103. data/lib/plurimath/utility.rb +346 -11
  104. data/lib/plurimath/version.rb +1 -1
  105. data/lib/plurimath/xml_engine/oga.rb +5 -0
  106. data/lib/plurimath/xml_engine/ox.rb +5 -0
  107. metadata +25 -3
@@ -32,10 +32,10 @@ module Plurimath
32
32
  rule(barPr: subtree(:barpr)) { barpr }
33
33
  rule(oMath: subtree(:omath)) { omath.flatten.compact }
34
34
  rule(fName: subtree(:fname)) { fname }
35
+ rule(sPreSub: sequence(:sub)) { { sub: Utility.nil_to_none_object(sub) } }
36
+ rule(sPreSup: sequence(:sup)) { { sup: Utility.nil_to_none_object(sup) } }
35
37
  rule(oMath: sequence(:omath)) { omath }
36
38
  rule(limLoc: simple(:limLoc)) { limLoc }
37
- rule(begChr: simple(:begChr)) { Math::Symbol.new(begChr) }
38
- rule(endChr: simple(:endChr)) { Math::Symbol.new(endChr) }
39
39
 
40
40
  rule(rFonts: subtree(:rFonts)) { nil }
41
41
  rule(sSupPr: subtree(:ssuppr)) { nil }
@@ -95,26 +95,32 @@ module Plurimath
95
95
  end
96
96
 
97
97
  rule(d: subtree(:data)) do
98
- fenced = data.flatten
99
- open_paren = fenced.shift if fenced&.first&.class_name == "symbol"
100
- close_paren = fenced.shift if fenced&.first&.class_name == "symbol"
101
- fenced_value = fenced.compact
102
- if fenced_value.length == 1 && fenced_value.first.is_a?(Math::Function::Table)
103
- fenced_value.first.open_paren = open_paren&.value
104
- fenced_value.first.close_paren = close_paren&.value
105
- fenced_value
98
+ fenced = data.shift
99
+ fenced_value = data.flatten.compact
100
+ if data.length == 1 && data.flatten.compact.first.is_a?(Math::Function::Table)
101
+ fenced_value.first.open_paren = fenced&.parameter_one&.value
102
+ fenced_value.first.close_paren = fenced&.parameter_three&.value
103
+ data
106
104
  else
107
- Math::Function::Fenced.new(
108
- open_paren,
109
- fenced_value,
110
- close_paren,
111
- )
105
+ fenced.parameter_two = data.flatten.compact
106
+ fenced
112
107
  end
113
108
  end
114
109
 
115
110
  rule(dPr: subtree(:dpr)) do
116
- dpr.reject! { |d| d.is_a?(Hash) }
117
- dpr
111
+ flatten_dpr = dpr.flatten.compact
112
+ open_paren = flatten_dpr.find { |hash| hash[:begChr] }&.values&.first
113
+ close_paren = flatten_dpr.find { |hash| hash[:endChr] }&.values&.first
114
+ sep_chr = flatten_dpr.find { |hash| hash[:sepChr] }
115
+ open_paren_object = Utility.symbol_object(open_paren) if open_paren
116
+ close_paren_object = Utility.symbol_object(close_paren) if close_paren
117
+ fenced = Math::Function::Fenced.new(
118
+ open_paren_object,
119
+ nil,
120
+ close_paren_object,
121
+ )
122
+ fenced.options = sep_chr
123
+ fenced
118
124
  end
119
125
 
120
126
  rule(mtd: sequence(:mtd)) do
@@ -149,11 +155,7 @@ module Plurimath
149
155
  end
150
156
 
151
157
  rule(lim: sequence(:lim)) do
152
- if lim.any?(String)
153
- Utility.text_classes(lim)
154
- else
155
- Utility.filter_values(lim)
156
- end
158
+ lim.any?(String) ? Utility.text_classes(lim) : Utility.filter_values(lim)
157
159
  end
158
160
 
159
161
  rule(acc: subtree(:acc)) do
@@ -298,11 +300,12 @@ module Plurimath
298
300
  end
299
301
 
300
302
  rule(sPre: subtree(:spre)) do
301
- pre = spre.flatten.compact
303
+ sub_value = spre.find { |pre| pre.is_a?(Hash) && pre[:sub] }[:sub]
304
+ sup_value = spre.find { |pre| pre.is_a?(Hash) && pre[:sup] }[:sup]
302
305
  Math::Function::Multiscript.new(
303
- pre[2],
304
- pre[0],
305
- pre[1],
306
+ Utility.filter_values(spre[0]),
307
+ sub_value,
308
+ sup_value,
306
309
  )
307
310
  end
308
311