plurimath 0.2.0 → 0.2.2

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.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +13 -0
  3. data/.github/workflows/release.yml +22 -0
  4. data/.gitignore +1 -0
  5. data/.hound.yml +5 -0
  6. data/.rubocop.yml +8 -0
  7. data/AsciiMath-Supported-Data.adoc +2000 -0
  8. data/Gemfile +3 -0
  9. data/Latex-Supported-Data.adoc +1879 -0
  10. data/MathML-Supported-Data.adoc +287 -0
  11. data/README.adoc +96 -0
  12. data/lib/plurimath/asciimath/constants.rb +267 -229
  13. data/lib/plurimath/asciimath/parse.rb +125 -26
  14. data/lib/plurimath/asciimath/parser.rb +6 -3
  15. data/lib/plurimath/asciimath/transform.rb +1135 -208
  16. data/lib/plurimath/asciimath.rb +1 -1
  17. data/lib/plurimath/html/constants.rb +50 -0
  18. data/lib/plurimath/html/parse.rb +149 -0
  19. data/lib/plurimath/html/parser.rb +26 -0
  20. data/lib/plurimath/html/transform.rb +363 -0
  21. data/lib/plurimath/html.rb +1 -1
  22. data/lib/plurimath/latex/constants.rb +3729 -1906
  23. data/lib/plurimath/latex/parse.rb +167 -51
  24. data/lib/plurimath/latex/parser.rb +12 -4
  25. data/lib/plurimath/latex/transform.rb +598 -183
  26. data/lib/plurimath/math/base.rb +15 -0
  27. data/lib/plurimath/math/formula.rb +96 -11
  28. data/lib/plurimath/math/function/bar.rb +34 -0
  29. data/lib/plurimath/math/function/base.rb +32 -5
  30. data/lib/plurimath/math/function/binary_function.rb +104 -17
  31. data/lib/plurimath/math/function/cancel.rb +8 -0
  32. data/lib/plurimath/math/function/ceil.rb +3 -0
  33. data/lib/plurimath/math/function/color.rb +16 -6
  34. data/lib/plurimath/math/function/f.rb +8 -0
  35. data/lib/plurimath/math/function/fenced.rb +95 -3
  36. data/lib/plurimath/math/function/floor.rb +15 -0
  37. data/lib/plurimath/math/function/font_style/bold.rb +37 -0
  38. data/lib/plurimath/math/function/font_style/double_struck.rb +37 -0
  39. data/lib/plurimath/math/function/font_style/fraktur.rb +37 -0
  40. data/lib/plurimath/math/function/font_style/italic.rb +37 -0
  41. data/lib/plurimath/math/function/font_style/monospace.rb +37 -0
  42. data/lib/plurimath/math/function/font_style/normal.rb +37 -0
  43. data/lib/plurimath/math/function/font_style/sans-serif.rb +37 -0
  44. data/lib/plurimath/math/function/font_style/script.rb +37 -0
  45. data/lib/plurimath/math/function/font_style.rb +18 -25
  46. data/lib/plurimath/math/function/frac.rb +35 -5
  47. data/lib/plurimath/math/function/g.rb +7 -0
  48. data/lib/plurimath/math/function/hat.rb +12 -0
  49. data/lib/plurimath/math/function/inf.rb +21 -1
  50. data/lib/plurimath/math/function/int.rb +23 -2
  51. data/lib/plurimath/math/function/left.rb +25 -4
  52. data/lib/plurimath/math/function/lim.rb +40 -2
  53. data/lib/plurimath/math/function/limits.rb +8 -0
  54. data/lib/plurimath/math/function/log.rb +61 -4
  55. data/lib/plurimath/math/function/longdiv.rb +12 -0
  56. data/lib/plurimath/math/function/mbox.rb +31 -0
  57. data/lib/plurimath/math/function/menclose.rb +46 -0
  58. data/lib/plurimath/math/function/merror.rb +12 -0
  59. data/lib/plurimath/math/function/mod.rb +25 -4
  60. data/lib/plurimath/math/function/msgroup.rb +37 -0
  61. data/lib/plurimath/math/function/msline.rb +12 -0
  62. data/lib/plurimath/math/function/multiscript.rb +30 -0
  63. data/lib/plurimath/math/function/norm.rb +18 -1
  64. data/lib/plurimath/math/function/obrace.rb +17 -0
  65. data/lib/plurimath/math/function/oint.rb +2 -2
  66. data/lib/plurimath/math/function/over.rb +36 -0
  67. data/lib/plurimath/math/function/overset.rb +36 -7
  68. data/lib/plurimath/math/function/phantom.rb +28 -0
  69. data/lib/plurimath/math/function/power.rb +33 -9
  70. data/lib/plurimath/math/function/power_base.rb +110 -5
  71. data/lib/plurimath/math/function/prod.rb +29 -2
  72. data/lib/plurimath/math/function/right.rb +44 -0
  73. data/lib/plurimath/math/function/root.rb +27 -4
  74. data/lib/plurimath/math/function/rule.rb +33 -0
  75. data/lib/plurimath/math/function/scarries.rb +12 -0
  76. data/lib/plurimath/math/function/scarry.rb +12 -0
  77. data/lib/plurimath/math/function/sqrt.rb +24 -2
  78. data/lib/plurimath/math/function/stackrel.rb +27 -0
  79. data/lib/plurimath/math/function/substack.rb +7 -1
  80. data/lib/plurimath/math/function/sum.rb +56 -2
  81. data/lib/plurimath/math/function/sup.rb +3 -0
  82. data/lib/plurimath/math/function/table/align.rb +24 -0
  83. data/lib/plurimath/math/function/table/array.rb +44 -0
  84. data/lib/plurimath/math/function/table/bmatrix.rb +37 -0
  85. data/lib/plurimath/math/function/table/matrix.rb +32 -0
  86. data/lib/plurimath/math/function/table/multline.rb +24 -0
  87. data/lib/plurimath/math/function/table/pmatrix.rb +24 -0
  88. data/lib/plurimath/math/function/table/split.rb +24 -0
  89. data/lib/plurimath/math/function/table/vmatrix.rb +24 -0
  90. data/lib/plurimath/math/function/table.rb +190 -20
  91. data/lib/plurimath/math/function/td.rb +27 -9
  92. data/lib/plurimath/math/function/ternary_function.rb +83 -8
  93. data/lib/plurimath/math/function/text.rb +45 -8
  94. data/lib/plurimath/math/function/tr.rb +28 -4
  95. data/lib/plurimath/math/function/ubrace.rb +17 -0
  96. data/lib/plurimath/math/function/ul.rb +29 -0
  97. data/lib/plurimath/math/function/unary_function.rb +85 -7
  98. data/lib/plurimath/math/function/underline.rb +12 -0
  99. data/lib/plurimath/math/function/underover.rb +107 -0
  100. data/lib/plurimath/math/function/underset.rb +39 -0
  101. data/lib/plurimath/math/function/vec.rb +10 -0
  102. data/lib/plurimath/math/function.rb +13 -2
  103. data/lib/plurimath/math/number.rb +11 -3
  104. data/lib/plurimath/math/symbol.rb +57 -9
  105. data/lib/plurimath/math/unicode.rb +11 -0
  106. data/lib/plurimath/math.rb +15 -6
  107. data/lib/plurimath/mathml/constants.rb +224 -179
  108. data/lib/plurimath/mathml/parser.rb +24 -7
  109. data/lib/plurimath/mathml/transform.rb +249 -148
  110. data/lib/plurimath/mathml.rb +1 -1
  111. data/lib/plurimath/omml/parser.rb +42 -0
  112. data/lib/plurimath/omml/transform.rb +278 -0
  113. data/lib/plurimath/omml.rb +1 -1
  114. data/lib/plurimath/unitsml.rb +4 -0
  115. data/lib/plurimath/utility.rb +395 -0
  116. data/lib/plurimath/version.rb +1 -1
  117. data/plurimath.gemspec +1 -0
  118. metadata +66 -9
  119. data/.github/workflows/test.yml +0 -36
  120. data/README.md +0 -40
  121. data/lib/plurimath/mathml/parse.rb +0 -63
@@ -7,6 +7,7 @@ module Plurimath
7
7
  attr_accessor :parameter_one
8
8
 
9
9
  def initialize(parameter_one = nil)
10
+ parameter_one = parameter_one.to_s if parameter_one.is_a?(Parslet::Slice)
10
11
  @parameter_one = parameter_one
11
12
  end
12
13
 
@@ -16,25 +17,102 @@ module Plurimath
16
17
  end
17
18
 
18
19
  def to_asciimath
19
- "#{class_name}#{value_to_asciimath}"
20
- end
21
-
22
- def value_to_asciimath
23
- "(#{parameter_one.to_asciimath})" unless parameter_one.nil?
20
+ value = if Utility::UNARY_CLASSES.any?(class_name)
21
+ asciimath_value
22
+ elsif parameter_one
23
+ "(#{asciimath_value})"
24
+ end
25
+ "#{class_name}#{value}"
24
26
  end
25
27
 
26
28
  def to_mathml_without_math_tag
27
- "<mi>#{class_name}</mi>"
29
+ row_tag = Utility.ox_element("mrow")
30
+ tag_name = Utility::UNARY_CLASSES.include?(class_name) ? "mi" : "mo"
31
+ new_arr = [Utility.ox_element(tag_name) << class_name]
32
+ new_arr += mathml_value if parameter_one
33
+ Utility.update_nodes(row_tag, new_arr)
28
34
  end
29
35
 
30
36
  def to_latex
31
- first_value = "{#{parameter_one.to_latex}}" if parameter_one
37
+ first_value = "{#{latex_value}}" if parameter_one
32
38
  "\\#{class_name}#{first_value}"
33
39
  end
34
40
 
41
+ def to_html
42
+ first_value = if parameter_one.is_a?(Array)
43
+ "<i>#{parameter_one.map(&:to_html).join}</i>"
44
+ elsif parameter_one
45
+ "<i>#{parameter_one.to_html}</i>"
46
+ end
47
+ "<i>#{class_name}</i>#{first_value}"
48
+ end
49
+
50
+ def to_omml_without_math_tag
51
+ func = Utility.ox_element("func", namespace: "m")
52
+ funcpr = Utility.ox_element("funcPr", namespace: "m")
53
+ funcpr << Utility.pr_element("ctrl", true, namespace: "m")
54
+ fname = Utility.ox_element("fName", namespace: "m")
55
+ mr = Utility.ox_element("r", namespace: "m")
56
+ rpr = Utility.rpr_element
57
+ mt = Utility.ox_element("t", namespace: "m") << class_name
58
+ fname << Utility.update_nodes(mr, [rpr, mt])
59
+ me = Utility.ox_element("e", namespace: "m")
60
+ Utility.update_nodes(me, omml_value) if parameter_one
61
+ Utility.update_nodes(
62
+ func,
63
+ [
64
+ funcpr,
65
+ fname,
66
+ me,
67
+ ],
68
+ )
69
+ end
70
+
35
71
  def class_name
36
72
  self.class.name.split("::").last.downcase
37
73
  end
74
+
75
+ protected
76
+
77
+ def asciimath_value
78
+ return "" unless parameter_one
79
+
80
+ case parameter_one
81
+ when Array
82
+ parameter_one.compact.map(&:to_asciimath).join
83
+ else
84
+ parameter_one.to_asciimath
85
+ end
86
+ end
87
+
88
+ def mathml_value
89
+ case parameter_one
90
+ when Array
91
+ parameter_one.compact.map(&:to_mathml_without_math_tag)
92
+ else
93
+ Array(parameter_one&.to_mathml_without_math_tag)
94
+ end
95
+ end
96
+
97
+ def latex_value
98
+ if parameter_one.is_a?(Array)
99
+ return parameter_one&.compact&.map(&:to_latex)&.join(" ")
100
+ end
101
+
102
+ parameter_one&.to_latex
103
+ end
104
+
105
+ def omml_value
106
+ if parameter_one.is_a?(Array)
107
+ return parameter_one.compact.map(&:to_omml_without_math_tag)
108
+ end
109
+
110
+ first_value = parameter_one.to_omml_without_math_tag
111
+ if parameter_one.is_a?(Symbol)
112
+ first_value = Utility.ox_element("t", namespace: "m") << first_value
113
+ end
114
+ Array(first_value)
115
+ end
38
116
  end
39
117
  end
40
118
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "unary_function"
4
+
5
+ module Plurimath
6
+ module Math
7
+ module Function
8
+ class Underline < UnaryFunction
9
+ end
10
+ end
11
+ end
12
+ end
@@ -6,6 +6,113 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class Underover < TernaryFunction
9
+ def to_asciimath
10
+ first_value = first_field_wrap(parameter_one) if parameter_one
11
+ second_value = "_#{wrapped(parameter_two)}" if parameter_two
12
+ third_value = "^#{wrapped(parameter_three)}" if parameter_three
13
+ "#{first_value}#{second_value}#{third_value}"
14
+ end
15
+
16
+ def to_latex
17
+ first_value = first_field_wrap(parameter_one, type: "latex") if parameter_one
18
+ second_value = "_#{wrapped(parameter_two, type: 'latex')}" if parameter_two
19
+ third_value = "^#{wrapped(parameter_three, type: 'latex')}" if parameter_three
20
+ "#{first_value}#{second_value}#{third_value}"
21
+ end
22
+
23
+ def to_mathml_without_math_tag
24
+ first_value = parameter_one&.to_mathml_without_math_tag
25
+ second_value = parameter_two&.to_mathml_without_math_tag
26
+ third_value = parameter_three&.to_mathml_without_math_tag
27
+ class_tag = Utility.ox_element("m#{class_name}")
28
+ Utility.update_nodes(
29
+ class_tag,
30
+ [
31
+ first_value,
32
+ second_value,
33
+ third_value,
34
+ ],
35
+ )
36
+ end
37
+
38
+ def to_omml_without_math_tag
39
+ limupp = Utility.ox_element("limUpp", namespace: "m")
40
+ limpr = Utility.ox_element("limUppPr", namespace: "m")
41
+ limpr << Utility.pr_element("ctrl", namespace: "m")
42
+ e_tag = Utility.ox_element("e", namespace: "m")
43
+ e_tag << parameter_one&.to_omml_without_math_tag
44
+ lim = Utility.ox_element("lim", namespace: "m")
45
+ lim << parameter_two&.to_omml_without_math_tag if parameter_two
46
+ Utility.update_nodes(
47
+ limupp,
48
+ [
49
+ e_tag,
50
+ lim,
51
+ ],
52
+ )
53
+ end
54
+
55
+ def omml_nary_tag
56
+ pr = Utility.ox_element("naryPr", namespace: "m")
57
+ [pr_element_value(pr), sub_value, sup_value]
58
+ end
59
+
60
+ protected
61
+
62
+ def hidden_sub_tag(pr_element)
63
+ return true unless parameter_two.nil?
64
+
65
+ pr_element << Utility.ox_element(
66
+ "subHide",
67
+ namespace: "m",
68
+ attributes: { "m:val": 1 },
69
+ )
70
+ end
71
+
72
+ def hidden_sup_tag(pr_element)
73
+ return true unless parameter_three.nil?
74
+
75
+ pr_element << Utility.ox_element(
76
+ "supHide",
77
+ namespace: "m",
78
+ attributes: { "m:val": 1 },
79
+ )
80
+ end
81
+
82
+ def pr_element_value(pr_element)
83
+ first_value(pr_element)
84
+ pr_element << Utility.ox_element(
85
+ "limLoc",
86
+ namespace: "m",
87
+ attributes: { "m:val": "undOvr" },
88
+ )
89
+ hidden_sub_tag(pr_element)
90
+ hidden_sup_tag(pr_element)
91
+ pr_element << Utility.pr_element("ctrl", true, namespace: "m")
92
+ end
93
+
94
+ def sub_value
95
+ sub = Utility.ox_element("sub", namespace: "m")
96
+ sub << omml_value(parameter_two) if parameter_two
97
+ sub
98
+ end
99
+
100
+ def sup_value
101
+ sup = Utility.ox_element("sup", namespace: "m")
102
+ sup << omml_value(parameter_three) if parameter_three
103
+ sup
104
+ end
105
+
106
+ def first_value(pr_element)
107
+ first_value = parameter_one.is_a?(Number) ? parameter_one.value : parameter_one.to_omml_without_math_tag
108
+ unless first_value == "∫"
109
+ pr_element << Utility.ox_element(
110
+ "chr",
111
+ namespace: "m",
112
+ attributes: { "m:val": first_value },
113
+ )
114
+ end
115
+ end
9
116
  end
10
117
  end
11
118
  end
@@ -6,6 +6,45 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class Underset < BinaryFunction
9
+ def to_mathml_without_math_tag
10
+ first_value = parameter_one&.to_mathml_without_math_tag
11
+ second_value = parameter_two&.to_mathml_without_math_tag
12
+ Utility.update_nodes(
13
+ Utility.ox_element("munder"),
14
+ [
15
+ second_value,
16
+ first_value,
17
+ ],
18
+ )
19
+ end
20
+
21
+ def to_omml_without_math_tag
22
+ first_value = if parameter_one.is_a?(Math::Symbol)
23
+ mt = Utility.ox_element("t", namespace: "m")
24
+ mt << parameter_one.to_omml_without_math_tag
25
+ else
26
+ parameter_one.to_omml_without_math_tag
27
+ end
28
+ second_value = if parameter_two.is_a?(Math::Symbol)
29
+ mt = Utility.ox_element("t", namespace: "m")
30
+ mt << parameter_two.to_omml_without_math_tag
31
+ else
32
+ parameter_two.to_omml_without_math_tag
33
+ end
34
+ limlow = Utility.ox_element("limLow", namespace: "m")
35
+ limlowpr = Utility.ox_element("limLowPr", namespace: "m")
36
+ limlowpr << Utility.pr_element("ctrl", true, namespace: "m")
37
+ me = Utility.ox_element("e", namespace: "m") << first_value
38
+ lim = Utility.ox_element("lim", namespace: "m") << second_value if second_value
39
+ Utility.update_nodes(
40
+ limlow,
41
+ [
42
+ limlowpr,
43
+ me,
44
+ lim,
45
+ ],
46
+ )
47
+ end
9
48
  end
10
49
  end
11
50
  end
@@ -6,6 +6,16 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class Vec < UnaryFunction
9
+ def to_mathml_without_math_tag
10
+ first_value = parameter_one&.to_mathml_without_math_tag
11
+ Utility.update_nodes(
12
+ Utility.ox_element("mover"),
13
+ [
14
+ first_value,
15
+ Utility.ox_element("mo") << "&#x2192;",
16
+ ],
17
+ )
18
+ end
9
19
  end
10
20
  end
11
21
  end
@@ -1,3 +1,14 @@
1
- Dir[File.join(__dir__, "function/*.rb")].each do |file|
2
- require_relative file.gsub(".rb", "")
1
+ module Plurimath
2
+ module Math
3
+ module Function
4
+ end
5
+ end
6
+ end
7
+
8
+ # Include the first level files before the next
9
+ (
10
+ Dir.glob(File.join(__dir__, "function", "*.rb")) +
11
+ Dir.glob(File.join(__dir__, "function", "*", "*.rb"))
12
+ ).each do |file|
13
+ require file
3
14
  end
@@ -2,11 +2,11 @@
2
2
 
3
3
  module Plurimath
4
4
  module Math
5
- class Number
5
+ class Number < Base
6
6
  attr_accessor :value
7
7
 
8
8
  def initialize(value)
9
- @value = value
9
+ @value = super
10
10
  end
11
11
 
12
12
  def ==(object)
@@ -18,12 +18,20 @@ module Plurimath
18
18
  end
19
19
 
20
20
  def to_mathml_without_math_tag
21
- "<mn>#{value}</mn>"
21
+ Utility.ox_element("mn") << value
22
22
  end
23
23
 
24
24
  def to_latex
25
25
  value
26
26
  end
27
+
28
+ def to_html
29
+ value
30
+ end
31
+
32
+ def to_omml_without_math_tag
33
+ Utility.ox_element("t", namespace: "m") << value
34
+ end
27
35
  end
28
36
  end
29
37
  end
@@ -2,11 +2,11 @@
2
2
 
3
3
  module Plurimath
4
4
  module Math
5
- class Symbol
5
+ class Symbol < Base
6
6
  attr_accessor :value
7
7
 
8
8
  def initialize(sym)
9
- @value = sym
9
+ @value = super
10
10
  end
11
11
 
12
12
  def ==(object)
@@ -14,20 +14,68 @@ module Plurimath
14
14
  end
15
15
 
16
16
  def to_asciimath
17
- value
17
+ return "" if value.nil?
18
+
19
+ symbol = Asciimath::Constants::SYMBOLS.invert[value.strip.to_sym]
20
+ unicodes = Latex::Constants::UNICODE_SYMBOLS.invert
21
+ if value.match?(/&#x[0-9\w]+;/) && symbol.nil? && unicodes[value]
22
+ return unicodes[value].to_s
23
+ end
24
+
25
+ symbol ? symbol.to_s : value
18
26
  end
19
27
 
20
28
  def to_mathml_without_math_tag
21
- "<mo>#{mathml_symbol_value}</mo>"
22
- end
29
+ mi_tag = Utility.ox_element("mi")
30
+ return mi_tag if ["{:", ":}"].include?(value)
31
+
32
+ unicodes = Mathml::Constants::UNICODE_SYMBOLS
33
+ unicode = unicodes.invert[value]
34
+ if operator?(unicode) || unicode
35
+ mo_value = (unicodes[value] || unicode || value).to_s
36
+ return Utility.ox_element("mo") << mo_value
37
+ end
23
38
 
24
- def mathml_symbol_value
25
- Mathml::Constants::UNICODE_SYMBOLS.invert[value] || value
39
+ mi_tag << value
26
40
  end
27
41
 
28
42
  def to_latex
29
- symbols = Latex::Constants::SYMBOLS
30
- symbols.include?(value) ? "\\#{value}" : value
43
+ returned = specific_values
44
+ return returned if returned
45
+
46
+ special_char = %w[&#x26; &#x23;]
47
+ symbols = Latex::Constants::UNICODE_SYMBOLS.invert
48
+
49
+ symbol = symbols[value]
50
+ if Latex::Constants::SYMBOLS[symbol] == :operant
51
+ special_char.include?(value) ? "\\#{symbol}" : symbol
52
+ else
53
+ symbols.key?(value) ? "\\#{symbol}" : value
54
+ end
55
+ end
56
+
57
+ def to_html
58
+ value
59
+ end
60
+
61
+ def to_omml_without_math_tag
62
+ value
63
+ end
64
+
65
+ private
66
+
67
+ def operator?(unicode)
68
+ Mathml::Constants::OPERATORS.any? do |d|
69
+ [unicode.to_s, value.strip].include?(d)
70
+ end
71
+ end
72
+
73
+ def specific_values
74
+ return "" if ["{:", ":}"].include?(value)
75
+
76
+ return "\\#{value}" if ["{", "}"].include?(value) || value == "_"
77
+
78
+ return "\\operatorname{if}" if value == "if"
31
79
  end
32
80
  end
33
81
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Plurimath
4
+ module Math
5
+ class Unicode < Symbol
6
+ def to_mathml_without_math_tag
7
+ Utility.ox_element("mo") << value
8
+ end
9
+ end
10
+ end
11
+ end
@@ -7,24 +7,33 @@ require_relative "mathml"
7
7
  require_relative "html"
8
8
  require_relative "latex"
9
9
  require_relative "unitsml"
10
- require_relative "math/formula"
11
- require_relative "math/function"
10
+ require_relative "math/base"
12
11
  require_relative "math/number"
13
12
  require_relative "math/symbol"
13
+ require_relative "math/unicode"
14
+ require_relative "math/formula"
15
+ require_relative "math/function"
14
16
  require_relative "asciimath/parser"
15
17
  require_relative "mathml/parser"
16
18
  require_relative "latex/parser"
19
+ require_relative "html/parser"
20
+ require_relative "omml/parser"
21
+ require_relative "utility"
22
+ require "ox"
23
+ Ox.default_options = { encoding: "UTF-8" }
24
+
17
25
  module Plurimath
18
26
  module Math
19
27
  class Error < StandardError; end
20
28
 
21
29
  VALID_TYPES = {
22
- unicode: Unicode,
23
- asciimath: Asciimath,
24
30
  omml: Omml,
25
- mathml: Mathml,
26
31
  html: Html,
27
32
  latex: Latex,
33
+ mathml: Mathml,
34
+ unitsml: Unitsml,
35
+ unicode: Unicode,
36
+ asciimath: Asciimath,
28
37
  }.freeze
29
38
 
30
39
  def parse(text, type)
@@ -42,7 +51,7 @@ module Plurimath
42
51
  end
43
52
 
44
53
  def valid_type?(type)
45
- (type.is_a?(Symbol) || type.is_a?(String)) &&
54
+ (type.is_a?(::Symbol) || type.is_a?(String)) &&
46
55
  VALID_TYPES.key?(type.to_sym)
47
56
  end
48
57