plurimath 0.2.1 → 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 (110) 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/.hound.yml +5 -0
  5. data/.rubocop.yml +8 -0
  6. data/AsciiMath-Supported-Data.adoc +1994 -274
  7. data/Gemfile +2 -0
  8. data/Latex-Supported-Data.adoc +1875 -1868
  9. data/MathML-Supported-Data.adoc +280 -263
  10. data/README.adoc +22 -20
  11. data/lib/plurimath/asciimath/constants.rb +186 -141
  12. data/lib/plurimath/asciimath/parse.rb +104 -39
  13. data/lib/plurimath/asciimath/parser.rb +3 -1
  14. data/lib/plurimath/asciimath/transform.rb +1074 -238
  15. data/lib/plurimath/html/parse.rb +1 -1
  16. data/lib/plurimath/latex/constants.rb +3228 -1432
  17. data/lib/plurimath/latex/parse.rb +106 -83
  18. data/lib/plurimath/latex/parser.rb +11 -4
  19. data/lib/plurimath/latex/transform.rb +354 -99
  20. data/lib/plurimath/math/base.rb +15 -0
  21. data/lib/plurimath/math/formula.rb +90 -13
  22. data/lib/plurimath/math/function/bar.rb +35 -1
  23. data/lib/plurimath/math/function/base.rb +25 -4
  24. data/lib/plurimath/math/function/binary_function.rb +101 -19
  25. data/lib/plurimath/math/function/cancel.rb +8 -0
  26. data/lib/plurimath/math/function/ceil.rb +3 -0
  27. data/lib/plurimath/math/function/color.rb +15 -5
  28. data/lib/plurimath/math/function/f.rb +8 -0
  29. data/lib/plurimath/math/function/fenced.rb +95 -8
  30. data/lib/plurimath/math/function/floor.rb +15 -0
  31. data/lib/plurimath/math/function/font_style/bold.rb +19 -0
  32. data/lib/plurimath/math/function/font_style/double_struck.rb +19 -0
  33. data/lib/plurimath/math/function/font_style/fraktur.rb +19 -0
  34. data/lib/plurimath/math/function/font_style/italic.rb +37 -0
  35. data/lib/plurimath/math/function/font_style/monospace.rb +19 -0
  36. data/lib/plurimath/math/function/font_style/normal.rb +37 -0
  37. data/lib/plurimath/math/function/font_style/sans-serif.rb +19 -0
  38. data/lib/plurimath/math/function/font_style/script.rb +19 -0
  39. data/lib/plurimath/math/function/font_style.rb +18 -5
  40. data/lib/plurimath/math/function/frac.rb +33 -3
  41. data/lib/plurimath/math/function/g.rb +7 -0
  42. data/lib/plurimath/math/function/hat.rb +12 -0
  43. data/lib/plurimath/math/function/inf.rb +21 -0
  44. data/lib/plurimath/math/function/int.rb +23 -2
  45. data/lib/plurimath/math/function/left.rb +25 -1
  46. data/lib/plurimath/math/function/lim.rb +40 -2
  47. data/lib/plurimath/math/function/limits.rb +9 -0
  48. data/lib/plurimath/math/function/log.rb +55 -4
  49. data/lib/plurimath/math/function/longdiv.rb +12 -0
  50. data/lib/plurimath/math/function/mbox.rb +31 -0
  51. data/lib/plurimath/math/function/menclose.rb +46 -0
  52. data/lib/plurimath/math/function/merror.rb +12 -0
  53. data/lib/plurimath/math/function/mod.rb +19 -4
  54. data/lib/plurimath/math/function/msgroup.rb +37 -0
  55. data/lib/plurimath/math/function/msline.rb +12 -0
  56. data/lib/plurimath/math/function/multiscript.rb +19 -0
  57. data/lib/plurimath/math/function/norm.rb +17 -1
  58. data/lib/plurimath/math/function/obrace.rb +17 -0
  59. data/lib/plurimath/math/function/oint.rb +2 -2
  60. data/lib/plurimath/math/function/over.rb +12 -5
  61. data/lib/plurimath/math/function/overset.rb +34 -5
  62. data/lib/plurimath/math/function/phantom.rb +28 -0
  63. data/lib/plurimath/math/function/power.rb +27 -9
  64. data/lib/plurimath/math/function/power_base.rb +109 -11
  65. data/lib/plurimath/math/function/prod.rb +25 -4
  66. data/lib/plurimath/math/function/right.rb +22 -2
  67. data/lib/plurimath/math/function/root.rb +23 -1
  68. data/lib/plurimath/math/function/rule.rb +33 -0
  69. data/lib/plurimath/math/function/scarries.rb +12 -0
  70. data/lib/plurimath/math/function/scarry.rb +12 -0
  71. data/lib/plurimath/math/function/sqrt.rb +23 -1
  72. data/lib/plurimath/math/function/stackrel.rb +27 -0
  73. data/lib/plurimath/math/function/substack.rb +7 -0
  74. data/lib/plurimath/math/function/sum.rb +50 -2
  75. data/lib/plurimath/math/function/sup.rb +3 -0
  76. data/lib/plurimath/math/function/table/align.rb +5 -5
  77. data/lib/plurimath/math/function/table/array.rb +25 -6
  78. data/lib/plurimath/math/function/table/bmatrix.rb +18 -7
  79. data/lib/plurimath/math/function/table/matrix.rb +13 -5
  80. data/lib/plurimath/math/function/table/multline.rb +5 -5
  81. data/lib/plurimath/math/function/table/pmatrix.rb +5 -5
  82. data/lib/plurimath/math/function/table/split.rb +5 -5
  83. data/lib/plurimath/math/function/table/vmatrix.rb +5 -6
  84. data/lib/plurimath/math/function/table.rb +185 -27
  85. data/lib/plurimath/math/function/td.rb +22 -9
  86. data/lib/plurimath/math/function/ternary_function.rb +74 -9
  87. data/lib/plurimath/math/function/text.rb +36 -11
  88. data/lib/plurimath/math/function/tr.rb +23 -4
  89. data/lib/plurimath/math/function/ubrace.rb +17 -0
  90. data/lib/plurimath/math/function/ul.rb +29 -0
  91. data/lib/plurimath/math/function/unary_function.rb +81 -8
  92. data/lib/plurimath/math/function/underline.rb +12 -0
  93. data/lib/plurimath/math/function/underover.rb +107 -0
  94. data/lib/plurimath/math/function/underset.rb +39 -0
  95. data/lib/plurimath/math/function/vec.rb +7 -1
  96. data/lib/plurimath/math/number.rb +5 -5
  97. data/lib/plurimath/math/symbol.rb +51 -12
  98. data/lib/plurimath/math/unicode.rb +11 -0
  99. data/lib/plurimath/math.rb +7 -3
  100. data/lib/plurimath/mathml/constants.rb +224 -147
  101. data/lib/plurimath/mathml/parser.rb +24 -8
  102. data/lib/plurimath/mathml/transform.rb +249 -153
  103. data/lib/plurimath/omml/parser.rb +24 -4
  104. data/lib/plurimath/omml/transform.rb +219 -157
  105. data/lib/plurimath/utility.rb +342 -20
  106. data/lib/plurimath/version.rb +1 -1
  107. metadata +21 -6
  108. data/.github/workflows/test.yml +0 -33
  109. data/lib/plurimath/mathml/parse.rb +0 -68
  110. data/lib/plurimath/omml/constants.rb +0 -154
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "unary_function"
4
+
5
+ module Plurimath
6
+ module Math
7
+ module Function
8
+ class Msgroup < UnaryFunction
9
+ def to_asciimath
10
+ parameter_one.map(&:to_asciimath).join
11
+ end
12
+
13
+ def to_latex
14
+ parameter_one.map(&:to_latex).join
15
+ end
16
+
17
+ def to_mathml_without_math_tag
18
+ Utility.update_nodes(
19
+ Utility.ox_element("msgroup"),
20
+ parameter_one.map(&:to_mathml_without_math_tag),
21
+ )
22
+ end
23
+
24
+ def to_omml_without_math_tag
25
+ Utility.update_nodes(
26
+ Utility.ox_element("msgroup"),
27
+ parameter_one&.map(&:to_omml_without_math_tag),
28
+ )
29
+ end
30
+
31
+ def to_html
32
+ "<i>#{parameter_one.map(&:to_html).join}</i>"
33
+ end
34
+ end
35
+ end
36
+ end
37
+ 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 Msline < UnaryFunction
9
+ end
10
+ end
11
+ end
12
+ end
@@ -5,6 +5,25 @@ module Plurimath
5
5
  module Math
6
6
  module Function
7
7
  class Multiscript < TernaryFunction
8
+ def to_omml_without_math_tag
9
+ pre_element = Utility.ox_element("sPre", namespace: "m")
10
+ pr_element = Utility.ox_element("sPrePr", namespace: "m")
11
+ sub_element = Utility.ox_element("sub", namespace: "m")
12
+ sub_element << parameter_two.to_omml_without_math_tag if parameter_two
13
+ sup_element = Utility.ox_element("sup", namespace: "m")
14
+ sup_element << parameter_three.to_omml_without_math_tag if parameter_three
15
+ e_element = Utility.ox_element("e", namespace: "m")
16
+ e_element << parameter_one.to_omml_without_math_tag if parameter_one
17
+ Utility.update_nodes(
18
+ pre_element,
19
+ [
20
+ pr_element << Utility.pr_element("ctrl", true, namespace: "m"),
21
+ sub_element,
22
+ sup_element,
23
+ e_element,
24
+ ],
25
+ )
26
+ end
8
27
  end
9
28
  end
10
29
  end
@@ -6,9 +6,25 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class Norm < UnaryFunction
9
+ def to_asciimath
10
+ parameter_one.is_a?(Table) ? "norm#{parameter_one.to_asciimath}" : super
11
+ end
12
+
13
+ def to_latex
14
+ "{\\lVert #{parameter_one&.to_latex} \\lVert}"
15
+ end
16
+
9
17
  def to_mathml_without_math_tag
10
18
  first_value = parameter_one&.to_mathml_without_math_tag
11
- "<mo>&#x2225;</mo>#{first_value}<mo>&#x2225;</mo>"
19
+ norm = Utility.ox_element("mo") << "&#x2225;"
20
+ Utility.update_nodes(
21
+ Utility.ox_element("mrow"),
22
+ [
23
+ norm,
24
+ first_value,
25
+ norm,
26
+ ],
27
+ )
12
28
  end
13
29
  end
14
30
  end
@@ -6,7 +6,24 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class Obrace < UnaryFunction
9
+ def to_latex
10
+ first_value = "{#{parameter_one.to_latex}}" if parameter_one
11
+ "\\overbrace#{first_value}"
12
+ end
13
+
14
+ def to_mathml_without_math_tag
15
+ mo_tag = (Utility.ox_element("mo") << "&#x23de;")
16
+ if parameter_one
17
+ over_tag = Utility.ox_element("mover")
18
+ arr_value = mathml_value
19
+ Utility.update_nodes(over_tag, (arr_value << mo_tag))
20
+ else
21
+ mo_tag
22
+ end
23
+ end
9
24
  end
25
+
26
+ Overbrace = Obrace
10
27
  end
11
28
  end
12
29
  end
@@ -7,8 +7,8 @@ module Plurimath
7
7
  module Function
8
8
  class Oint < BinaryFunction
9
9
  def to_asciimath
10
- first_value = "_(#{parameter_one.to_asciimath})" if parameter_one
11
- second_value = "^(#{parameter_two.to_asciimath})" if parameter_two
10
+ first_value = "_#{wrapped(parameter_one)}" if parameter_one
11
+ second_value = "^#{wrapped(parameter_two)}" if parameter_two
12
12
  "oint#{first_value}#{second_value}"
13
13
  end
14
14
  end
@@ -7,15 +7,22 @@ module Plurimath
7
7
  module Function
8
8
  class Over < BinaryFunction
9
9
  def to_asciimath
10
- first_value = "(#{parameter_one.to_asciimath})" if parameter_one
11
- second_value = "(#{parameter_two.to_asciimath})" if parameter_two
10
+ first_value = wrapped(parameter_one)
11
+ second_value = wrapped(parameter_two)
12
12
  "overset#{first_value}#{second_value}"
13
13
  end
14
14
 
15
15
  def to_mathml_without_math_tag
16
- first_value = parameter_one&.to_mathml_without_math_tag
17
- two_value = parameter_two&.to_mathml_without_math_tag
18
- "<mover>#{first_value}#{two_value}</mover>"
16
+ mover_tag = Utility.ox_element("mfrac")
17
+ first_value = parameter_one&.to_mathml_without_math_tag
18
+ second_value = parameter_two&.to_mathml_without_math_tag
19
+ Utility.update_nodes(
20
+ mover_tag,
21
+ [
22
+ first_value,
23
+ second_value,
24
+ ],
25
+ )
19
26
  end
20
27
 
21
28
  def to_latex
@@ -9,13 +9,42 @@ module Plurimath
9
9
  def to_mathml_without_math_tag
10
10
  first_value = parameter_one&.to_mathml_without_math_tag
11
11
  second_value = parameter_two&.to_mathml_without_math_tag
12
- "<mover>#{second_value}#{first_value}</mover>"
12
+ over_tag = Utility.ox_element("mover")
13
+ Utility.update_nodes(
14
+ over_tag,
15
+ [
16
+ second_value,
17
+ first_value,
18
+ ],
19
+ )
13
20
  end
14
21
 
15
- def to_latex
16
- first_value = "{#{parameter_one.to_latex}" if parameter_one
17
- second_value = "#{parameter_two.to_latex}}" if parameter_two
18
- "#{first_value}\\over#{second_value}"
22
+ def to_omml_without_math_tag
23
+ first_value = if parameter_one.is_a?(Math::Symbol)
24
+ mt = Utility.ox_element("t", namespace: "m")
25
+ mt << parameter_one.to_omml_without_math_tag
26
+ else
27
+ parameter_one.to_omml_without_math_tag
28
+ end
29
+ second_value = if parameter_two.is_a?(Math::Symbol)
30
+ mt = Utility.ox_element("t", namespace: "m")
31
+ mt << parameter_two.to_omml_without_math_tag
32
+ else
33
+ parameter_two.to_omml_without_math_tag
34
+ end
35
+ limupp = Utility.ox_element("limUpp", namespace: "m")
36
+ limupppr = Utility.ox_element("limUppPr", namespace: "m")
37
+ limupppr << Utility.pr_element("ctrl", true, namespace: "m")
38
+ me = (Utility.ox_element("e", namespace: "m") << first_value)
39
+ lim = (Utility.ox_element("lim", namespace: "m") << second_value)
40
+ Utility.update_nodes(
41
+ limupp,
42
+ [
43
+ limupppr,
44
+ me,
45
+ lim,
46
+ ],
47
+ )
19
48
  end
20
49
  end
21
50
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "unary_function"
4
+
5
+ module Plurimath
6
+ module Math
7
+ module Function
8
+ class Phantom < UnaryFunction
9
+ def to_asciimath
10
+ "\"#{Array.new(parameter_one&.length, ' ').join}\""
11
+ end
12
+
13
+ def to_html
14
+ "<i>#{Array.new(parameter_one&.length, '&nbsp;').join}</i>"
15
+ end
16
+
17
+ def to_latex
18
+ "<i>#{Array.new(parameter_one&.length, '\\ ').join}</i>"
19
+ end
20
+
21
+ def to_mathml_without_math_tag
22
+ mi_tag_value = Array.new(parameter_one&.length, "&nbsp;&nbsp;").join
23
+ Utility.ox_element("mi") << mi_tag_value
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -7,21 +7,21 @@ module Plurimath
7
7
  module Function
8
8
  class Power < BinaryFunction
9
9
  def to_asciimath
10
- first_value = parameter_one.to_asciimath if parameter_one
11
- second_value = "^#{parameter_two.to_asciimath}" if parameter_two
12
- "#{first_value}#{second_value}"
10
+ second_value = "^#{wrapped(parameter_two)}" if parameter_two
11
+ "#{parameter_one.to_asciimath}#{second_value}"
13
12
  end
14
13
 
15
14
  def to_mathml_without_math_tag
16
- first_value = parameter_one.to_mathml_without_math_tag
17
- second_value = parameter_two.to_mathml_without_math_tag
18
- "<msup>#{first_value}#{second_value}</msup>"
15
+ tag_name = (["ubrace", "obrace"].include?(parameter_one&.class_name) ? "over" : "sup")
16
+ sup_tag = Utility.ox_element("m#{tag_name}")
17
+ mathml_value = [parameter_one.to_mathml_without_math_tag]
18
+ mathml_value << parameter_two&.to_mathml_without_math_tag
19
+ Utility.update_nodes(sup_tag, mathml_value)
19
20
  end
20
21
 
21
22
  def to_latex
22
- first_value = parameter_one.to_latex if parameter_one
23
- first_value = "{#{first_value}}" if parameter_one.is_a?(Formula)
24
- second_value = parameter_two.to_latex
23
+ first_value = parameter_one.to_latex
24
+ second_value = parameter_two.to_latex if parameter_two
25
25
  "#{first_value}^{#{second_value}}"
26
26
  end
27
27
 
@@ -30,6 +30,24 @@ module Plurimath
30
30
  second_value = "<sup>#{parameter_two.to_html}</sup>" if parameter_two
31
31
  "#{first_value}#{second_value}"
32
32
  end
33
+
34
+ def to_omml_without_math_tag
35
+ ssup_element = Utility.ox_element("sSup", namespace: "m")
36
+ suppr_element = Utility.ox_element("sSupPr", namespace: "m")
37
+ sup_element = Utility.ox_element("sup", namespace: "m")
38
+ e_element = Utility.ox_element("e", namespace: "m")
39
+ e_element << parameter_one.to_omml_without_math_tag if parameter_one
40
+ sup_element << parameter_two.to_omml_without_math_tag if parameter_two
41
+ Utility.update_nodes(
42
+ ssup_element,
43
+ [
44
+ suppr_element << Utility.pr_element("ctrl", true, namespace: "m"),
45
+ e_element,
46
+ sup_element,
47
+ ],
48
+ )
49
+ ssup_element
50
+ end
33
51
  end
34
52
  end
35
53
  end
@@ -7,26 +7,124 @@ module Plurimath
7
7
  module Function
8
8
  class PowerBase < TernaryFunction
9
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
- third_value = parameter_three&.to_mathml_without_math_tag
13
- "<msubsup>#{first_value}#{second_value}#{third_value}</msubsup>"
10
+ tag_name = (["ubrace", "obrace"].include?(parameter_one&.class_name) ? "underover" : "subsup")
11
+ subsup_tag = Utility.ox_element("m#{tag_name}")
12
+ new_arr = []
13
+ new_arr << parameter_one.to_mathml_without_math_tag
14
+ new_arr << parameter_two&.to_mathml_without_math_tag
15
+ new_arr << parameter_three&.to_mathml_without_math_tag
16
+ Utility.update_nodes(
17
+ subsup_tag,
18
+ new_arr,
19
+ )
14
20
  end
15
21
 
16
22
  def to_latex
17
- first_value = parameter_one&.to_latex
18
- second_value = parameter_two&.to_latex
19
- third_value = parameter_three&.to_latex
20
- first_value = "{#{first_value}}" if parameter_one.is_a?(Formula)
23
+ first_value = parameter_one.to_latex if parameter_one
24
+ second_value = parameter_two.to_latex if parameter_two
25
+ third_value = parameter_three.to_latex if parameter_three
21
26
  "#{first_value}_{#{second_value}}^{#{third_value}}"
22
27
  end
23
28
 
24
29
  def to_html
25
- first_value = "<i>#{parameter_one.to_html}</i>"
26
- second_value = "<sub>#{parameter_two.to_html}</sub>"
27
- third_value = "<sup>#{parameter_three.to_html}</sup>"
30
+ first_value = "<i>#{parameter_one.to_html}</i>" if parameter_one
31
+ second_value = "<sub>#{parameter_two.to_html}</sub>" if parameter_two
32
+ third_value = "<sup>#{parameter_three.to_html}</sup>" if parameter_three
28
33
  "#{first_value}#{second_value}#{third_value}"
29
34
  end
35
+
36
+ def omml_nary_tag
37
+ narypr = Utility.ox_element("naryPr", namespace: "m")
38
+ chr_value(narypr)
39
+ narypr << Utility.ox_element(
40
+ "limLoc",
41
+ namespace: "m",
42
+ attributes: { "m:val": "subSup" },
43
+ )
44
+ hide_tags(narypr)
45
+ narypr << Utility.pr_element("ctrl", true, namespace: "m")
46
+ [
47
+ narypr,
48
+ sub_element,
49
+ sup_element,
50
+ ]
51
+ end
52
+
53
+ def to_omml_without_math_tag
54
+ ssubsup = Utility.ox_element("sSubSup", namespace: "m")
55
+ ssubsuppr = Utility.ox_element("sSubSupPr", namespace: "m")
56
+ ssubsuppr << hide_tags(
57
+ Utility.pr_element("ctrl", true, namespace: "m"),
58
+ )
59
+ Utility.update_nodes(
60
+ ssubsup,
61
+ [
62
+ ssubsuppr,
63
+ e_element,
64
+ sub_element,
65
+ sup_element,
66
+ ],
67
+ )
68
+ end
69
+
70
+ protected
71
+
72
+ def chr_value(narypr)
73
+ first_value = parameter_one.to_omml_without_math_tag
74
+ return narypr if first_value == "∫"
75
+
76
+ narypr << Utility.ox_element(
77
+ "chr",
78
+ namespace: "m",
79
+ attributes: { "m:val": first_value },
80
+ )
81
+ end
82
+
83
+ def e_element
84
+ elemnet = Utility.ox_element("e", namespace: "m")
85
+ if parameter_one
86
+ elemnet << parameter_one&.to_omml_without_math_tag
87
+ else
88
+ elemnet
89
+ end
90
+ end
91
+
92
+ def sub_element
93
+ elemnet = Utility.ox_element("sub", namespace: "m")
94
+ if parameter_two
95
+ elemnet << parameter_two&.to_omml_without_math_tag
96
+ else
97
+ elemnet
98
+ end
99
+ end
100
+
101
+ def sup_element
102
+ elemnet = Utility.ox_element("sup", namespace: "m")
103
+ if parameter_three
104
+ elemnet << parameter_three&.to_omml_without_math_tag
105
+ else
106
+ elemnet
107
+ end
108
+ end
109
+
110
+ def hide_tags(nar)
111
+ attr = { "m:val": "1" }
112
+ if parameter_two.nil?
113
+ nar << Utility.ox_element(
114
+ "subHide",
115
+ namespace: "m",
116
+ attributes: attr,
117
+ )
118
+ end
119
+ if parameter_three.nil?
120
+ nar << Utility.ox_element(
121
+ "supHide",
122
+ namespace: "m",
123
+ attributes: attr,
124
+ )
125
+ end
126
+ nar
127
+ end
30
128
  end
31
129
  end
32
130
  end
@@ -7,8 +7,8 @@ module Plurimath
7
7
  module Function
8
8
  class Prod < BinaryFunction
9
9
  def to_asciimath
10
- first_value = "_(#{parameter_one.to_asciimath})" if parameter_one
11
- second_value = "^(#{parameter_two.to_asciimath})" if parameter_two
10
+ first_value = "_#{wrapped(parameter_one)}" if parameter_one
11
+ second_value = "^#{wrapped(parameter_two)}" if parameter_two
12
12
  "prod#{first_value}#{second_value}"
13
13
  end
14
14
 
@@ -18,9 +18,30 @@ module Plurimath
18
18
  "\\prod#{first_value}#{second_value}"
19
19
  end
20
20
 
21
+ def to_mathml_without_math_tag
22
+ first_value = Utility.ox_element("mo") << invert_unicode_symbols.to_s
23
+ if parameter_one || parameter_two
24
+ value_array = [first_value]
25
+ value_array << parameter_one&.to_mathml_without_math_tag
26
+ value_array << parameter_two&.to_mathml_without_math_tag
27
+ tag_name = if parameter_two && parameter_one
28
+ "underover"
29
+ else
30
+ parameter_one ? "under" : "over"
31
+ end
32
+ munderover_tag = Utility.ox_element("m#{tag_name}")
33
+ Utility.update_nodes(
34
+ munderover_tag,
35
+ value_array,
36
+ )
37
+ else
38
+ first_value
39
+ end
40
+ end
41
+
21
42
  def to_html
22
- first_value = "<sub>#{parameter_one.to_latex}</sub>" if parameter_one
23
- second_value = "<sup>#{parameter_two.to_latex}</sup>" if parameter_two
43
+ first_value = "<sub>#{parameter_one.to_html}</sub>" if parameter_one
44
+ second_value = "<sup>#{parameter_two.to_html}</sup>" if parameter_two
24
45
  "<i>&prod;</i>#{first_value}#{second_value}"
25
46
  end
26
47
  end
@@ -11,12 +11,32 @@ module Plurimath
11
11
  end
12
12
 
13
13
  def to_mathml_without_math_tag
14
- "<mi>#{parameter_one}</mi>"
14
+ mo = Utility.ox_element("mo")
15
+ mo << right_paren if parameter_one
16
+ mo
17
+ end
18
+
19
+ def to_omml_without_math_tag
20
+ mt = Utility.ox_element("m:t")
21
+ mt << parameter_one if parameter_one
22
+ mt
23
+ end
24
+
25
+ def to_html
26
+ "<i>#{parameter_one}</i>"
15
27
  end
16
28
 
17
29
  def to_latex
18
30
  prefix = "\\" if parameter_one == "}"
19
- "\\right#{prefix}#{parameter_one}"
31
+ "\\right #{prefix}#{parameter_one}"
32
+ end
33
+
34
+ protected
35
+
36
+ def right_paren
37
+ return "}" if parameter_one == "\\}"
38
+
39
+ parameter_one
20
40
  end
21
41
  end
22
42
  end
@@ -9,7 +9,13 @@ module Plurimath
9
9
  def to_mathml_without_math_tag
10
10
  first_value = parameter_one&.to_mathml_without_math_tag
11
11
  second_value = parameter_two&.to_mathml_without_math_tag
12
- "<mroot>#{first_value}#{second_value}</mroot>"
12
+ Utility.update_nodes(
13
+ Utility.ox_element("mroot"),
14
+ [
15
+ second_value,
16
+ first_value,
17
+ ],
18
+ )
13
19
  end
14
20
 
15
21
  def to_latex
@@ -17,6 +23,22 @@ module Plurimath
17
23
  second_value = parameter_two&.to_latex
18
24
  "\\sqrt[#{first_value}]{#{second_value}}"
19
25
  end
26
+
27
+ def to_omml_without_math_tag
28
+ rad_element = Utility.ox_element("rad", namespace: "m")
29
+ pr_element = Utility.ox_element("radPr", namespace: "m")
30
+ deg_element = Utility.ox_element("deg", namespace: "m")
31
+ e_element = Utility.ox_element("e", namespace: "m")
32
+ Utility.update_nodes(
33
+ rad_element,
34
+ [
35
+ pr_element << Utility.pr_element("ctrl", true, namespace: "m"),
36
+ deg_element << parameter_two.to_omml_without_math_tag,
37
+ e_element << parameter_one.to_omml_without_math_tag,
38
+ ],
39
+ )
40
+ rad_element
41
+ end
20
42
  end
21
43
  end
22
44
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "ternary_function"
4
+ module Plurimath
5
+ module Math
6
+ module Function
7
+ class Rule < TernaryFunction
8
+ def to_asciimath
9
+ ""
10
+ end
11
+
12
+ def to_latex
13
+ first_value = "[#{parameter_one.to_latex}]" if parameter_one
14
+ second_value = "{#{parameter_two.to_latex}}" if parameter_two
15
+ third_value = "{#{parameter_three.to_latex}}" if parameter_three
16
+ "\\rule#{first_value}#{second_value}#{third_value}"
17
+ end
18
+
19
+ def to_mathml_without_math_tag
20
+ Utility.ox_element("mi")
21
+ end
22
+
23
+ def to_omml_without_math_tag
24
+ Utility.ox_element("m:e")
25
+ end
26
+
27
+ def to_html
28
+ ""
29
+ end
30
+ end
31
+ end
32
+ end
33
+ 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 Scarries < UnaryFunction
9
+ end
10
+ end
11
+ end
12
+ 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 Scarry < UnaryFunction
9
+ end
10
+ end
11
+ end
12
+ end
@@ -7,8 +7,30 @@ module Plurimath
7
7
  module Function
8
8
  class Sqrt < UnaryFunction
9
9
  def to_mathml_without_math_tag
10
+ sqrt_tag = Utility.ox_element("msqrt")
10
11
  first_value = parameter_one&.to_mathml_without_math_tag
11
- "<msqrt>#{first_value}</msqrt>"
12
+ sqrt_tag << first_value if first_value
13
+ sqrt_tag
14
+ end
15
+
16
+ def to_omml_without_math_tag
17
+ rad_element = Utility.ox_element("rad", namespace: "m")
18
+ pr_element = Utility.ox_element("radPr", namespace: "m")
19
+ pr_element << Utility.ox_element(
20
+ "degHide",
21
+ namespace: "m",
22
+ attributes: { "m:val": "1" },
23
+ )
24
+ e_element = Utility.ox_element("e", namespace: "m")
25
+ Utility.update_nodes(
26
+ rad_element,
27
+ [
28
+ pr_element << Utility.pr_element("ctrl", true, namespace: "m"),
29
+ Utility.ox_element("deg", namespace: "m"),
30
+ e_element << parameter_one.to_omml_without_math_tag,
31
+ ],
32
+ )
33
+ rad_element
12
34
  end
13
35
  end
14
36
  end