plurimath 0.2.1 → 0.2.2

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 +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 "../font_style"
4
+
5
+ module Plurimath
6
+ module Math
7
+ module Function
8
+ class FontStyle
9
+ class Italic < FontStyle
10
+ def initialize(parameter_one,
11
+ parameter_two = "italic")
12
+ super
13
+ end
14
+
15
+ def to_asciimath
16
+ "ii(#{parameter_one.to_asciimath})"
17
+ end
18
+
19
+ def to_latex
20
+ first_value = parameter_one.to_latex if parameter_one
21
+ "\\mathit{#{first_value}}"
22
+ end
23
+
24
+ def to_mathml_without_math_tag
25
+ Utility.update_nodes(
26
+ Utility.ox_element(
27
+ "mstyle",
28
+ attributes: { mathvariant: "italic" },
29
+ ),
30
+ [parameter_one.to_mathml_without_math_tag],
31
+ )
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -11,6 +11,25 @@ module Plurimath
11
11
  parameter_two = "monospace")
12
12
  super
13
13
  end
14
+
15
+ def to_asciimath
16
+ "mathtt(#{parameter_one.to_asciimath})"
17
+ end
18
+
19
+ def to_latex
20
+ first_value = parameter_one.to_latex if parameter_one
21
+ "\\mathtt{#{first_value}}"
22
+ end
23
+
24
+ def to_mathml_without_math_tag
25
+ Utility.update_nodes(
26
+ Utility.ox_element(
27
+ "mstyle",
28
+ attributes: { mathvariant: "monospace" },
29
+ ),
30
+ [parameter_one.to_mathml_without_math_tag],
31
+ )
32
+ end
14
33
  end
15
34
  end
16
35
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../font_style"
4
+
5
+ module Plurimath
6
+ module Math
7
+ module Function
8
+ class FontStyle
9
+ class Normal < FontStyle
10
+ def initialize(parameter_one,
11
+ parameter_two = "rm")
12
+ super
13
+ end
14
+
15
+ def to_asciimath
16
+ "rm(#{parameter_one.to_asciimath})"
17
+ end
18
+
19
+ def to_latex
20
+ first_value = parameter_one.to_latex if parameter_one
21
+ "\\mathrm{#{first_value}}"
22
+ end
23
+
24
+ def to_mathml_without_math_tag
25
+ Utility.update_nodes(
26
+ Utility.ox_element(
27
+ "mstyle",
28
+ attributes: { mathvariant: "normal" },
29
+ ),
30
+ [parameter_one.to_mathml_without_math_tag],
31
+ )
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -11,6 +11,25 @@ module Plurimath
11
11
  parameter_two = "sans-serif")
12
12
  super
13
13
  end
14
+
15
+ def to_asciimath
16
+ "mathsf(#{parameter_one.to_asciimath})"
17
+ end
18
+
19
+ def to_latex
20
+ first_value = parameter_one.to_latex if parameter_one
21
+ "\\mathsf{#{first_value}}"
22
+ end
23
+
24
+ def to_mathml_without_math_tag
25
+ Utility.update_nodes(
26
+ Utility.ox_element(
27
+ "mstyle",
28
+ attributes: { mathvariant: "sans-serif" },
29
+ ),
30
+ [parameter_one.to_mathml_without_math_tag],
31
+ )
32
+ end
14
33
  end
15
34
  end
16
35
  end
@@ -11,6 +11,25 @@ module Plurimath
11
11
  parameter_two = "script")
12
12
  super
13
13
  end
14
+
15
+ def to_asciimath
16
+ "mathcal(#{parameter_one.to_asciimath})"
17
+ end
18
+
19
+ def to_latex
20
+ first_value = parameter_one.to_latex if parameter_one
21
+ "\\mathcal{#{first_value}}"
22
+ end
23
+
24
+ def to_mathml_without_math_tag
25
+ Utility.update_nodes(
26
+ Utility.ox_element(
27
+ "mstyle",
28
+ attributes: { mathvariant: "script" },
29
+ ),
30
+ [parameter_one.to_mathml_without_math_tag],
31
+ )
32
+ end
14
33
  end
15
34
  end
16
35
  end
@@ -7,17 +7,30 @@ module Plurimath
7
7
  module Function
8
8
  class FontStyle < BinaryFunction
9
9
  def to_asciimath
10
- "#{parameter_two}(#{parameter_one.to_asciimath})"
10
+ parameter_one&.to_asciimath
11
11
  end
12
12
 
13
13
  def to_mathml_without_math_tag
14
- first_value = parameter_one.to_mathml_without_math_tag
15
- "<mstyle mathvariant='#{parameter_two}'>#{first_value}</mstyle>"
14
+ first_value = parameter_one&.to_mathml_without_math_tag
15
+ Utility.update_nodes(
16
+ Utility.ox_element(
17
+ "mstyle",
18
+ attributes: { mathvariant: parameter_two },
19
+ ),
20
+ [first_value],
21
+ )
22
+ end
23
+
24
+ def to_omml_without_math_tag
25
+ parameter_one&.to_omml_without_math_tag
26
+ end
27
+
28
+ def to_html
29
+ parameter_one&.to_html
16
30
  end
17
31
 
18
32
  def to_latex
19
- first_value = parameter_one.to_latex if parameter_one
20
- "\\#{parameter_two}{#{first_value}}"
33
+ parameter_one&.to_latex
21
34
  end
22
35
  end
23
36
  end
@@ -6,10 +6,23 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class Frac < BinaryFunction
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
+ "frac#{first_value}#{second_value}"
13
+ end
14
+
9
15
  def to_mathml_without_math_tag
10
- first_value = parameter_one&.to_mathml_without_math_tag
11
- two_value = parameter_two&.to_mathml_without_math_tag
12
- "<mfrac>#{first_value}#{two_value}</mfrac>"
16
+ frac_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
+ frac_tag,
21
+ [
22
+ first_value,
23
+ second_value,
24
+ ].flatten,
25
+ )
13
26
  end
14
27
 
15
28
  def to_latex
@@ -17,6 +30,23 @@ module Plurimath
17
30
  two_value = parameter_two&.to_latex
18
31
  "\\frac{#{first_value}}{#{two_value}}"
19
32
  end
33
+
34
+ def to_omml_without_math_tag
35
+ f_element = Utility.ox_element("f", namespace: "m")
36
+ fpr_element = Utility.ox_element("fPr", namespace: "m")
37
+ num_element = Utility.ox_element("num", namespace: "m")
38
+ num_element << parameter_one.to_omml_without_math_tag if parameter_one
39
+ den_element = Utility.ox_element("den", namespace: "m")
40
+ den_element << parameter_two.to_omml_without_math_tag if parameter_two
41
+ Utility.update_nodes(
42
+ f_element,
43
+ [
44
+ fpr_element << Utility.pr_element("ctrl", true, namespace: "m"),
45
+ num_element,
46
+ den_element,
47
+ ],
48
+ )
49
+ end
20
50
  end
21
51
  end
22
52
  end
@@ -6,6 +6,13 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class G < UnaryFunction
9
+ def to_asciimath
10
+ "g#{parameter_one&.to_asciimath}"
11
+ end
12
+
13
+ def to_latex
14
+ "g#{parameter_one&.to_latex}"
15
+ end
9
16
  end
10
17
  end
11
18
  end
@@ -6,6 +6,18 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class Hat < UnaryFunction
9
+ def to_mathml_without_math_tag
10
+ mover_tag = Utility.ox_element("mover")
11
+ first_value = parameter_one&.to_mathml_without_math_tag
12
+ second_value = (Utility.ox_element("mo") << "^")
13
+ Utility.update_nodes(
14
+ mover_tag,
15
+ [
16
+ first_value,
17
+ second_value,
18
+ ],
19
+ )
20
+ end
9
21
  end
10
22
  end
11
23
  end
@@ -11,6 +11,27 @@ module Plurimath
11
11
  second_value = "^{#{parameter_two.to_latex}}" if parameter_two
12
12
  "\\#{class_name}#{first_value}#{second_value}"
13
13
  end
14
+
15
+ def to_mathml_without_math_tag
16
+ first_value = Utility.ox_element("mo") << class_name
17
+ if parameter_one || parameter_two
18
+ value_array = [first_value]
19
+ value_array << parameter_one&.to_mathml_without_math_tag
20
+ value_array << parameter_two&.to_mathml_without_math_tag
21
+ tag_name = if parameter_two && parameter_one
22
+ "underover"
23
+ else
24
+ parameter_one ? "under" : "over"
25
+ end
26
+ munderover_tag = Utility.ox_element("m#{tag_name}")
27
+ Utility.update_nodes(
28
+ munderover_tag,
29
+ value_array,
30
+ )
31
+ else
32
+ first_value
33
+ end
34
+ end
14
35
  end
15
36
  end
16
37
  end
@@ -7,10 +7,31 @@ module Plurimath
7
7
  module Function
8
8
  class Int < 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
  "int#{first_value}#{second_value}"
13
13
  end
14
+
15
+ def to_latex
16
+ first_value = "_#{latex_wrapped(parameter_one)}" if parameter_one
17
+ second_value = "^#{latex_wrapped(parameter_two)}" if parameter_two
18
+ "\\#{class_name}#{first_value}#{second_value}"
19
+ end
20
+
21
+ def to_mathml_without_math_tag
22
+ mrow_tag = Utility.ox_element("msubsup")
23
+ mo_tag = Utility.ox_element("mo") << invert_unicode_symbols.to_s
24
+ first_value = parameter_one&.to_mathml_without_math_tag if parameter_one
25
+ second_value = parameter_two&.to_mathml_without_math_tag if parameter_two
26
+ Utility.update_nodes(
27
+ mrow_tag,
28
+ [
29
+ mo_tag,
30
+ first_value,
31
+ second_value,
32
+ ],
33
+ )
34
+ end
14
35
  end
15
36
  end
16
37
  end
@@ -10,9 +10,33 @@ module Plurimath
10
10
  "left#{parameter_one}"
11
11
  end
12
12
 
13
+ def to_mathml_without_math_tag
14
+ mo = Utility.ox_element("mo")
15
+ mo << left_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>"
27
+ end
28
+
13
29
  def to_latex
14
30
  prefix = "\\" if parameter_one == "{"
15
- "\\left#{prefix}#{parameter_one}"
31
+ "\\left #{prefix}#{parameter_one}"
32
+ end
33
+
34
+ protected
35
+
36
+ def left_paren
37
+ return "{" if parameter_one == "\\{"
38
+
39
+ parameter_one
16
40
  end
17
41
  end
18
42
  end
@@ -7,8 +7,8 @@ module Plurimath
7
7
  module Function
8
8
  class Lim < 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
  "lim#{first_value}#{second_value}"
13
13
  end
14
14
 
@@ -17,6 +17,44 @@ module Plurimath
17
17
  second_value = "^{#{parameter_two.to_latex}}" if parameter_two
18
18
  "\\#{class_name}#{first_value}#{second_value}"
19
19
  end
20
+
21
+ def to_mathml_without_math_tag
22
+ first_value = (Utility.ox_element("mo") << "lim")
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
+
42
+ def to_omml_without_math_tag
43
+ limupp = Utility.ox_element("limUpp", namespace: "m")
44
+ limpr = Utility.ox_element("limUppPr", namespace: "m")
45
+ limpr << Utility.pr_element("ctrl", namespace: "m")
46
+ e_tag = Utility.ox_element("e", namespace: "m")
47
+ e_tag << parameter_one&.to_omml_without_math_tag
48
+ lim = Utility.ox_element("lim", namespace: "m")
49
+ lim << parameter_two&.to_omml_without_math_tag if parameter_two
50
+ Utility.update_nodes(
51
+ limupp,
52
+ [
53
+ e_tag,
54
+ lim,
55
+ ],
56
+ )
57
+ end
20
58
  end
21
59
  end
22
60
  end
@@ -6,6 +6,15 @@ module Plurimath
6
6
  module Math
7
7
  module Function
8
8
  class Limits < TernaryFunction
9
+ def to_mathml_without_math_tag
10
+ underover = Utility.ox_element("munderover")
11
+ value_array = []
12
+ value_array << parameter_one&.to_mathml_without_math_tag
13
+ value_array << parameter_two&.to_mathml_without_math_tag
14
+ value_array << parameter_three&.to_mathml_without_math_tag
15
+ Utility.update_nodes(underover, value_array)
16
+ end
17
+
9
18
  def to_latex
10
19
  first_value = parameter_one&.to_latex
11
20
  second_value = "{#{parameter_two.to_latex}}" if parameter_two
@@ -7,14 +7,14 @@ module Plurimath
7
7
  module Function
8
8
  class Log < 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
  "log#{first_value}#{second_value}"
13
13
  end
14
14
 
15
15
  def to_latex
16
- first_value = "_{#{parameter_one.to_latex}}" if parameter_one
17
- second_value = "^{#{parameter_two.to_latex}}" if parameter_two
16
+ first_value = "_#{latex_wrapped(parameter_one)}" if parameter_one
17
+ second_value = "^#{latex_wrapped(parameter_two)}" if parameter_two
18
18
  "\\log#{first_value}#{second_value}"
19
19
  end
20
20
 
@@ -23,6 +23,57 @@ module Plurimath
23
23
  second_value = "<sup>#{parameter_two.to_html}</sup>" if parameter_two
24
24
  "<i>log</i>#{first_value}#{second_value}"
25
25
  end
26
+
27
+ def to_omml_without_math_tag
28
+ func = Utility.ox_element("func", namespace: "m")
29
+ funcpr = Utility.ox_element("funcPr", namespace: "m")
30
+ funcpr << Utility.pr_element("ctrl", true, namespace: "m")
31
+ fname = Utility.ox_element("fName", namespace: "m")
32
+ mr = Utility.ox_element("r", namespace: "m")
33
+ rpr = Utility.rpr_element
34
+ mt = Utility.ox_element("t", namespace: "m") << class_name
35
+ fname << Utility.update_nodes(mr, [rpr, mt])
36
+ log_values = [first_value, second_value].flatten.compact
37
+ Utility.update_nodes(
38
+ func,
39
+ [
40
+ funcpr,
41
+ fname,
42
+ ] + log_values,
43
+ )
44
+ end
45
+
46
+ def to_mathml_without_math_tag
47
+ subsup_tag = Utility.ox_element("msubsup")
48
+ first_value = (Utility.ox_element("mi") << "log")
49
+ if parameter_one || parameter_two
50
+ new_arr = [first_value]
51
+ new_arr << parameter_one&.to_mathml_without_math_tag
52
+ new_arr << parameter_two&.to_mathml_without_math_tag
53
+ Utility.update_nodes(
54
+ subsup_tag,
55
+ new_arr,
56
+ )
57
+ else
58
+ first_value
59
+ end
60
+ end
61
+
62
+ protected
63
+
64
+ def first_value
65
+ return nil if parameter_one.nil?
66
+
67
+ first_value = parameter_one.to_omml_without_math_tag
68
+ Utility.ox_element("e", namespace: "m") << first_value
69
+ end
70
+
71
+ def second_value
72
+ return nil if parameter_two.nil?
73
+
74
+ second_value = parameter_two.to_omml_without_math_tag
75
+ Utility.ox_element("e", namespace: "m") << second_value
76
+ end
26
77
  end
27
78
  end
28
79
  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 Longdiv < UnaryFunction
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "unary_function"
4
+ module Plurimath
5
+ module Math
6
+ module Function
7
+ class Mbox < UnaryFunction
8
+ def to_mathml_without_math_tag
9
+ text = Utility.ox_element("mtext")
10
+ text << (parameter_one.to_mathml_without_math_tag) if parameter_one
11
+ text
12
+ end
13
+
14
+ def to_latex
15
+ first_value = parameter_one&.to_latex
16
+ "\\mbox{#{first_value}}"
17
+ end
18
+
19
+ def to_html
20
+ parameter_one&.to_html
21
+ end
22
+
23
+ def to_omml_without_math_tag
24
+ text = Utility.ox_element("t", namespace: "m")
25
+ text << parameter_one.to_omml_without_math_tag if parameter_one
26
+ text
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "binary_function"
4
+
5
+ module Plurimath
6
+ module Math
7
+ module Function
8
+ class Menclose < BinaryFunction
9
+ def to_asciimath
10
+ parameter_two&.to_asciimath
11
+ end
12
+
13
+ def to_mathml_without_math_tag
14
+ attributes = { notation: parameter_one }
15
+ menclose = Utility.ox_element("menclose", attributes: attributes)
16
+ menclose << parameter_two.to_mathml_without_math_tag if parameter_two
17
+ menclose
18
+ end
19
+
20
+ def to_latex
21
+ parameter_two&.to_latex
22
+ end
23
+
24
+ def to_html
25
+ second_value = parameter_two&.to_html
26
+ "<menclose notation=\"#{parameter_one}\">#{second_value}</menclose>"
27
+ end
28
+
29
+ def to_omml_without_math_tag
30
+ borderbox = Utility.ox_element("borderBox", namespace: "m")
31
+ borderpr = Utility.ox_element("borderBoxPr", namespace: "m")
32
+ borderpr << Utility.pr_element("ctrl", true, namespace: "m")
33
+ me = Utility.ox_element("e", namespace: "m")
34
+ me << parameter_two.to_omml_without_math_tag if parameter_two
35
+ Utility.update_nodes(
36
+ borderbox,
37
+ [
38
+ borderpr,
39
+ me,
40
+ ],
41
+ )
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "binary_function"
4
+
5
+ module Plurimath
6
+ module Math
7
+ module Function
8
+ class Merror < BinaryFunction
9
+ end
10
+ end
11
+ end
12
+ end
@@ -7,15 +7,30 @@ module Plurimath
7
7
  module Function
8
8
  class Mod < 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}mod#{second_value}"
10
+ first_value = parameter_one&.to_asciimath
11
+ second_value = parameter_two&.to_asciimath
12
+ "#{first_value} mod #{second_value}"
13
+ end
14
+
15
+ def to_mathml_without_math_tag
16
+ mrow_tag = Utility.ox_element("mrow")
17
+ mo_tag = Utility.ox_element("mi") << "mod"
18
+ first_value = parameter_one&.to_mathml_without_math_tag if parameter_one
19
+ second_value = parameter_two&.to_mathml_without_math_tag if parameter_two
20
+ Utility.update_nodes(
21
+ mrow_tag,
22
+ [
23
+ first_value,
24
+ mo_tag,
25
+ second_value,
26
+ ],
27
+ )
13
28
  end
14
29
 
15
30
  def to_latex
16
31
  first_value = "{#{parameter_one.to_latex}}" if parameter_one
17
32
  second_value = "{#{parameter_two.to_latex}}" if parameter_two
18
- "#{first_value}\\pmod#{second_value}"
33
+ "#{first_value} \\mod #{second_value}"
19
34
  end
20
35
 
21
36
  def to_html