plurimath 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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 +187 -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 +3229 -1432
  17. data/lib/plurimath/latex/parse.rb +108 -85
  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