plurimath 0.7.2 → 0.8.0
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.
- checksums.yaml +4 -4
- data/.gitmodules +3 -0
- data/Latex-Supported-Data.adoc +1 -0
- data/lib/plurimath/asciimath/parse.rb +1 -1
- data/lib/plurimath/asciimath/transform.rb +2 -6
- data/lib/plurimath/latex/constants.rb +2 -0
- data/lib/plurimath/math/core.rb +38 -6
- data/lib/plurimath/math/formula.rb +60 -6
- data/lib/plurimath/math/function/abs.rb +4 -0
- data/lib/plurimath/math/function/arg.rb +22 -0
- data/lib/plurimath/math/function/bar.rb +4 -0
- data/lib/plurimath/math/function/base.rb +49 -0
- data/lib/plurimath/math/function/binary_function.rb +6 -0
- data/lib/plurimath/math/function/cancel.rb +5 -0
- data/lib/plurimath/math/function/ceil.rb +6 -0
- data/lib/plurimath/math/function/color.rb +20 -1
- data/lib/plurimath/math/function/ddot.rb +4 -0
- data/lib/plurimath/math/function/dot.rb +5 -0
- data/lib/plurimath/math/function/fenced.rb +98 -7
- data/lib/plurimath/math/function/floor.rb +6 -0
- data/lib/plurimath/math/function/font_style/monospace.rb +4 -0
- data/lib/plurimath/math/function/font_style.rb +31 -6
- data/lib/plurimath/math/function/frac.rb +69 -15
- data/lib/plurimath/math/function/hat.rb +4 -0
- data/lib/plurimath/math/function/inf.rb +30 -0
- data/lib/plurimath/math/function/int.rb +47 -1
- data/lib/plurimath/math/function/intent.rb +22 -0
- data/lib/plurimath/math/function/left.rb +4 -0
- data/lib/plurimath/math/function/lim.rb +6 -0
- data/lib/plurimath/math/function/limits.rb +28 -0
- data/lib/plurimath/math/function/linebreak.rb +5 -0
- data/lib/plurimath/math/function/log.rb +27 -20
- data/lib/plurimath/math/function/longdiv.rb +4 -0
- data/lib/plurimath/math/function/mbox.rb +4 -0
- data/lib/plurimath/math/function/menclose.rb +74 -5
- data/lib/plurimath/math/function/merror.rb +2 -0
- data/lib/plurimath/math/function/mglyph.rb +64 -0
- data/lib/plurimath/math/function/mlabeledtr.rb +29 -0
- data/lib/plurimath/math/function/mod.rb +4 -0
- data/lib/plurimath/math/function/mpadded.rb +84 -0
- data/lib/plurimath/math/function/ms.rb +33 -0
- data/lib/plurimath/math/function/msgroup.rb +4 -0
- data/lib/plurimath/math/function/msline.rb +2 -4
- data/lib/plurimath/math/function/multiscript.rb +70 -6
- data/lib/plurimath/math/function/nary.rb +69 -10
- data/lib/plurimath/math/function/none.rb +25 -0
- data/lib/plurimath/math/function/norm.rb +6 -0
- data/lib/plurimath/math/function/obrace.rb +4 -0
- data/lib/plurimath/math/function/oint.rb +25 -1
- data/lib/plurimath/math/function/over.rb +6 -0
- data/lib/plurimath/math/function/overset.rb +46 -1
- data/lib/plurimath/math/function/phantom.rb +18 -2
- data/lib/plurimath/math/function/power.rb +37 -0
- data/lib/plurimath/math/function/power_base.rb +45 -18
- data/lib/plurimath/math/function/prod.rb +46 -0
- data/lib/plurimath/math/function/right.rb +4 -0
- data/lib/plurimath/math/function/root.rb +9 -1
- data/lib/plurimath/math/function/rule.rb +4 -0
- data/lib/plurimath/math/function/sqrt.rb +7 -1
- data/lib/plurimath/math/function/stackrel.rb +6 -0
- data/lib/plurimath/math/function/substack.rb +4 -0
- data/lib/plurimath/math/function/sum.rb +45 -24
- data/lib/plurimath/math/function/table/bmatrix.rb +18 -5
- data/lib/plurimath/math/function/table/cases.rb +24 -0
- data/lib/plurimath/math/function/table/eqarray.rb +24 -0
- data/lib/plurimath/math/function/table/matrix.rb +23 -3
- data/lib/plurimath/math/function/table/pmatrix.rb +4 -0
- data/lib/plurimath/math/function/table/vmatrix.rb +10 -0
- data/lib/plurimath/math/function/table.rb +58 -7
- data/lib/plurimath/math/function/td.rb +9 -0
- data/lib/plurimath/math/function/ternary_function.rb +14 -1
- data/lib/plurimath/math/function/text.rb +6 -0
- data/lib/plurimath/math/function/tilde.rb +4 -0
- data/lib/plurimath/math/function/tr.rb +9 -0
- data/lib/plurimath/math/function/ubrace.rb +5 -0
- data/lib/plurimath/math/function/ul.rb +4 -0
- data/lib/plurimath/math/function/unary_function.rb +4 -0
- data/lib/plurimath/math/function/underover.rb +14 -0
- data/lib/plurimath/math/function/underset.rb +49 -1
- data/lib/plurimath/math/function/vec.rb +4 -0
- data/lib/plurimath/math/number.rb +33 -3
- data/lib/plurimath/math/symbol.rb +68 -3
- data/lib/plurimath/math.rb +3 -2
- data/lib/plurimath/mathml/constants.rb +16 -0
- data/lib/plurimath/mathml/parser.rb +42 -2
- data/lib/plurimath/mathml/transform.rb +80 -29
- data/lib/plurimath/omml/parser.rb +8 -0
- data/lib/plurimath/omml/transform.rb +29 -26
- data/lib/plurimath/unicode_math/constants.rb +1015 -0
- data/lib/plurimath/unicode_math/parse.rb +233 -0
- data/lib/plurimath/unicode_math/parser.rb +58 -0
- data/lib/plurimath/unicode_math/parsing_rules/absence_rules.rb +138 -0
- data/lib/plurimath/unicode_math/parsing_rules/common_rules.rb +114 -0
- data/lib/plurimath/unicode_math/parsing_rules/constants_rules.rb +102 -0
- data/lib/plurimath/unicode_math/parsing_rules/helper.rb +19 -0
- data/lib/plurimath/unicode_math/parsing_rules/masked.rb +62 -0
- data/lib/plurimath/unicode_math/parsing_rules/sub_sup.rb +254 -0
- data/lib/plurimath/unicode_math/transform.rb +3831 -0
- data/lib/plurimath/{unicode.rb → unicode_math.rb} +2 -2
- data/lib/plurimath/unitsml.rb +14 -1
- data/lib/plurimath/utility.rb +346 -11
- data/lib/plurimath/version.rb +1 -1
- data/lib/plurimath/xml_engine/oga.rb +5 -0
- data/lib/plurimath/xml_engine/ox.rb +5 -0
- metadata +23 -3
@@ -32,6 +32,14 @@ module Plurimath
|
|
32
32
|
Utility.update_nodes(phant, [phant_pr, e_tag])
|
33
33
|
end
|
34
34
|
|
35
|
+
def to_unicodemath
|
36
|
+
if parameter_one.is_a?(Math::Function::Mpadded) && parameter_one&.options&.dig(:phantom)
|
37
|
+
"#{phantom_unicode}#{unicodemath_parens(parameter_one.parameter_one)}"
|
38
|
+
else
|
39
|
+
"⟡#{unicodemath_parens(parameter_one)}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
35
43
|
def line_breaking(obj)
|
36
44
|
custom_array_line_breaking(obj)
|
37
45
|
end
|
@@ -39,10 +47,18 @@ module Plurimath
|
|
39
47
|
protected
|
40
48
|
|
41
49
|
def phant_pr
|
42
|
-
attributes = { val: "
|
43
|
-
phant = Utility.ox_element("
|
50
|
+
attributes = { "m:val": "off" }
|
51
|
+
phant = Utility.ox_element("phantPr", namespace: "m")
|
44
52
|
phant << Utility.ox_element("show", namespace: "m", attributes: attributes)
|
45
53
|
end
|
54
|
+
|
55
|
+
def phantom_symbol
|
56
|
+
UnicodeMath::Constants::PHANTOM_SYMBOLS.key(parameter_one.options)
|
57
|
+
end
|
58
|
+
|
59
|
+
def phantom_unicode
|
60
|
+
UnicodeMath::Constants::UNARY_SYMBOLS[phantom_symbol]
|
61
|
+
end
|
46
62
|
end
|
47
63
|
end
|
48
64
|
end
|
@@ -53,6 +53,22 @@ module Plurimath
|
|
53
53
|
[ssup_element]
|
54
54
|
end
|
55
55
|
|
56
|
+
def to_unicodemath
|
57
|
+
if accented?(parameter_two)
|
58
|
+
"#{parameter_one.to_unicodemath}#{parameter_two.to_unicodemath}"
|
59
|
+
elsif parameter_two.mini_sized?
|
60
|
+
"#{parameter_one.to_unicodemath}#{parameter_two.to_unicodemath}"
|
61
|
+
else
|
62
|
+
first_value = parameter_one.to_unicodemath if parameter_one
|
63
|
+
second_value = if parameter_two.is_a?(self.class)
|
64
|
+
"^#{parameter_two.to_unicodemath}"
|
65
|
+
else
|
66
|
+
"^#{unicodemath_parens(parameter_two)}"
|
67
|
+
end
|
68
|
+
"#{first_value}#{second_value}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
56
72
|
def line_breaking(obj)
|
57
73
|
parameter_one&.line_breaking(obj)
|
58
74
|
if obj.value_exist?
|
@@ -60,6 +76,27 @@ module Plurimath
|
|
60
76
|
self.parameter_two = nil
|
61
77
|
end
|
62
78
|
end
|
79
|
+
|
80
|
+
def new_nary_function(fourth_value)
|
81
|
+
Nary.new(parameter_one, nil, parameter_two, fourth_value)
|
82
|
+
end
|
83
|
+
|
84
|
+
def is_nary_function?
|
85
|
+
parameter_one.is_nary_function? || parameter_one.is_nary_symbol?
|
86
|
+
end
|
87
|
+
|
88
|
+
def prime_unicode?(field)
|
89
|
+
return unless field.is_a?(Math::Symbol)
|
90
|
+
|
91
|
+
UnicodeMath::Constants::PREFIXED_PRIMES.any? { |prefix, prime| field.value.include?(prime) || field.value.include?("'") }
|
92
|
+
end
|
93
|
+
|
94
|
+
protected
|
95
|
+
|
96
|
+
def accented?(field)
|
97
|
+
(field.is_a?(Math::Symbol) && prime_unicode?(field)) ||
|
98
|
+
(field.is_a?(Math::Function::Power) && prime_unicode?(field.parameter_one))
|
99
|
+
end
|
63
100
|
end
|
64
101
|
end
|
65
102
|
end
|
@@ -43,9 +43,7 @@ module Plurimath
|
|
43
43
|
|
44
44
|
ssubsup = Utility.ox_element("sSubSup", namespace: "m")
|
45
45
|
ssubsuppr = Utility.ox_element("sSubSupPr", namespace: "m")
|
46
|
-
ssubsuppr <<
|
47
|
-
Utility.pr_element("ctrl", true, namespace: "m"),
|
48
|
-
)
|
46
|
+
ssubsuppr << Utility.pr_element("ctrl", true, namespace: "m")
|
49
47
|
Utility.update_nodes(
|
50
48
|
ssubsup,
|
51
49
|
[
|
@@ -58,6 +56,16 @@ module Plurimath
|
|
58
56
|
[ssubsup]
|
59
57
|
end
|
60
58
|
|
59
|
+
def to_unicodemath
|
60
|
+
first_value = sub_value if parameter_two
|
61
|
+
second_value = sup_value if parameter_three
|
62
|
+
if prime_unicode?(parameter_three)
|
63
|
+
"#{parameter_one&.to_unicodemath}#{second_value}#{first_value}"
|
64
|
+
else
|
65
|
+
"#{parameter_one&.to_unicodemath}#{first_value}#{second_value}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
61
69
|
def line_breaking(obj)
|
62
70
|
parameter_one&.line_breaking(obj)
|
63
71
|
if obj.value_exist?
|
@@ -78,25 +86,44 @@ module Plurimath
|
|
78
86
|
end
|
79
87
|
end
|
80
88
|
|
89
|
+
def new_nary_function(fourth_value)
|
90
|
+
Nary.new(parameter_one, parameter_two, parameter_three, fourth_value)
|
91
|
+
end
|
92
|
+
|
93
|
+
def is_nary_function?
|
94
|
+
parameter_one.is_nary_function? || parameter_one.is_nary_symbol?
|
95
|
+
end
|
96
|
+
|
97
|
+
def mmultiscript
|
98
|
+
[
|
99
|
+
validate_mathml_fields(parameter_one),
|
100
|
+
validate_mathml_fields(parameter_two),
|
101
|
+
validate_mathml_fields(parameter_three),
|
102
|
+
]
|
103
|
+
end
|
104
|
+
|
81
105
|
protected
|
82
106
|
|
83
|
-
def
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
107
|
+
def sup_value
|
108
|
+
if parameter_three.mini_sized? || prime_unicode?(parameter_three)
|
109
|
+
parameter_three.to_unicodemath
|
110
|
+
elsif parameter_three.is_a?(Math::Function::Power)
|
111
|
+
"^#{parameter_three.to_unicodemath}"
|
112
|
+
elsif parameter_one.is_a?(Math::Function::Power) && parameter_one&.prime_unicode?(parameter_one&.parameter_two)
|
113
|
+
"^#{parameter_three.to_unicodemath}"
|
114
|
+
else
|
115
|
+
"^#{unicodemath_parens(parameter_three)}"
|
91
116
|
end
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
117
|
+
end
|
118
|
+
|
119
|
+
def sub_value
|
120
|
+
if parameter_two.mini_sized?
|
121
|
+
parameter_two.to_unicodemath
|
122
|
+
elsif parameter_two.is_a?(Math::Function::Base)
|
123
|
+
"_#{parameter_two.to_unicodemath}"
|
124
|
+
else
|
125
|
+
"_#{unicodemath_parens(parameter_two)}"
|
98
126
|
end
|
99
|
-
nar
|
100
127
|
end
|
101
128
|
end
|
102
129
|
end
|
@@ -6,12 +6,25 @@ module Plurimath
|
|
6
6
|
module Math
|
7
7
|
module Function
|
8
8
|
class Prod < TernaryFunction
|
9
|
+
attr_accessor :options
|
9
10
|
FUNCTION = {
|
10
11
|
name: "prod",
|
11
12
|
first_value: "subscript",
|
12
13
|
second_value: "supscript",
|
13
14
|
}.freeze
|
14
15
|
|
16
|
+
def initialize(parameter_one = nil,
|
17
|
+
parameter_two = nil,
|
18
|
+
parameter_three = nil,
|
19
|
+
options = {})
|
20
|
+
super(parameter_one, parameter_two, parameter_three)
|
21
|
+
@options = options unless options&.empty?
|
22
|
+
end
|
23
|
+
|
24
|
+
def ==(object)
|
25
|
+
super(object) && object.options == options
|
26
|
+
end
|
27
|
+
|
15
28
|
def to_asciimath
|
16
29
|
first_value = "_#{wrapped(parameter_one)}" if parameter_one
|
17
30
|
second_value = "^#{wrapped(parameter_two)}" if parameter_two
|
@@ -71,6 +84,13 @@ module Plurimath
|
|
71
84
|
[nary]
|
72
85
|
end
|
73
86
|
|
87
|
+
def to_unicodemath
|
88
|
+
first_value = sub_value if parameter_one
|
89
|
+
second_value = sup_value if parameter_two
|
90
|
+
mask = options&.dig(:mask) if options&.key?(:mask)
|
91
|
+
"#{nary_attr_value}#{mask}#{first_value}#{second_value}#{naryand_value(parameter_three)}"
|
92
|
+
end
|
93
|
+
|
74
94
|
def nary_values(display_style)
|
75
95
|
[
|
76
96
|
narypr(hide_function_name ? "" : nary_attr_value),
|
@@ -98,6 +118,32 @@ module Plurimath
|
|
98
118
|
obj.update(Utility.filter_values(obj.value))
|
99
119
|
end
|
100
120
|
end
|
121
|
+
|
122
|
+
def is_nary_function?
|
123
|
+
true
|
124
|
+
end
|
125
|
+
|
126
|
+
protected
|
127
|
+
|
128
|
+
def sup_value
|
129
|
+
if parameter_two&.mini_sized? || prime_unicode?(parameter_two)
|
130
|
+
parameter_two.to_unicodemath
|
131
|
+
elsif parameter_two.is_a?(Math::Function::Power)
|
132
|
+
"^#{parameter_two.to_unicodemath}"
|
133
|
+
else
|
134
|
+
"^#{unicodemath_parens(parameter_two)}"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def sub_value
|
139
|
+
if parameter_one&.mini_sized?
|
140
|
+
parameter_one.to_unicodemath
|
141
|
+
elsif parameter_one.is_a?(Math::Function::Base)
|
142
|
+
"_#{parameter_one.to_unicodemath}"
|
143
|
+
else
|
144
|
+
"_#{unicodemath_parens(parameter_one)}"
|
145
|
+
end
|
146
|
+
end
|
101
147
|
end
|
102
148
|
end
|
103
149
|
end
|
@@ -31,18 +31,26 @@ module Plurimath
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def to_omml_without_math_tag(display_style)
|
34
|
+
attribute = { "m:val": "off" }
|
34
35
|
rad_element = Utility.ox_element("rad", namespace: "m")
|
35
36
|
pr_element = Utility.ox_element("radPr", namespace: "m")
|
37
|
+
pr_element << Utility.ox_element("degHide", namespace: "m", attributes: attribute)
|
36
38
|
Utility.update_nodes(
|
37
39
|
rad_element,
|
38
40
|
[
|
39
|
-
|
41
|
+
pr_element,
|
40
42
|
omml_parameter(parameter_two, display_style, tag_name: "deg"),
|
41
43
|
omml_parameter(parameter_one, display_style, tag_name: "e"),
|
42
44
|
],
|
43
45
|
)
|
44
46
|
[rad_element]
|
45
47
|
end
|
48
|
+
|
49
|
+
def to_unicodemath
|
50
|
+
first_value = parameter_one.to_unicodemath if parameter_one
|
51
|
+
second_value = parameter_two.to_unicodemath if parameter_two
|
52
|
+
"√(#{first_value}&#{second_value})"
|
53
|
+
end
|
46
54
|
end
|
47
55
|
end
|
48
56
|
end
|
@@ -6,6 +6,8 @@ module Plurimath
|
|
6
6
|
module Math
|
7
7
|
module Function
|
8
8
|
class Sqrt < UnaryFunction
|
9
|
+
attr_accessor :options
|
10
|
+
|
9
11
|
def to_mathml_without_math_tag
|
10
12
|
sqrt_tag = Utility.ox_element("msqrt")
|
11
13
|
Utility.update_nodes(
|
@@ -21,7 +23,7 @@ module Plurimath
|
|
21
23
|
pr_element << Utility.ox_element(
|
22
24
|
"degHide",
|
23
25
|
namespace: "m",
|
24
|
-
attributes: { "m:val": "
|
26
|
+
attributes: { "m:val": "on" },
|
25
27
|
)
|
26
28
|
Utility.update_nodes(
|
27
29
|
rad_element,
|
@@ -38,6 +40,10 @@ module Plurimath
|
|
38
40
|
parameter_one&.line_breaking(obj)
|
39
41
|
obj.update(Utility.filter_values(obj.value)) if obj.value_exist?
|
40
42
|
end
|
43
|
+
|
44
|
+
def to_unicodemath
|
45
|
+
"√#{unicodemath_parens(parameter_one)}"
|
46
|
+
end
|
41
47
|
end
|
42
48
|
end
|
43
49
|
end
|
@@ -48,6 +48,12 @@ module Plurimath
|
|
48
48
|
[limupp]
|
49
49
|
end
|
50
50
|
|
51
|
+
def to_unicodemath
|
52
|
+
first_value = "(#{parameter_one&.to_unicodemath})"
|
53
|
+
second_value = "(#{parameter_two&.to_unicodemath})"
|
54
|
+
"#{second_value}┴#{first_value}"
|
55
|
+
end
|
56
|
+
|
51
57
|
def line_breaking(obj)
|
52
58
|
parameter_one.line_breaking(obj)
|
53
59
|
if obj.value_exist?
|
@@ -30,6 +30,10 @@ module Plurimath
|
|
30
30
|
def to_omml_without_math_tag(display_style)
|
31
31
|
Table.new(parameter_one).to_omml_without_math_tag(display_style)
|
32
32
|
end
|
33
|
+
|
34
|
+
def to_unicodemath
|
35
|
+
"■(#{parameter_one.compact.map(&:to_unicodemath).join("@")})"
|
36
|
+
end
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
@@ -6,6 +6,7 @@ module Plurimath
|
|
6
6
|
module Math
|
7
7
|
module Function
|
8
8
|
class Sum < TernaryFunction
|
9
|
+
attr_accessor :options
|
9
10
|
FUNCTION = {
|
10
11
|
name: "summation",
|
11
12
|
first_value: "subscript",
|
@@ -13,6 +14,18 @@ module Plurimath
|
|
13
14
|
third_value: "term",
|
14
15
|
}.freeze
|
15
16
|
|
17
|
+
def initialize(parameter_one = nil,
|
18
|
+
parameter_two = nil,
|
19
|
+
parameter_three = nil,
|
20
|
+
options = {})
|
21
|
+
super(parameter_one, parameter_two, parameter_three)
|
22
|
+
@options = options unless options&.empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
def ==(object)
|
26
|
+
super(object) && object.options == options
|
27
|
+
end
|
28
|
+
|
16
29
|
def to_asciimath
|
17
30
|
first_value = "_#{wrapped(parameter_one)}" if parameter_one
|
18
31
|
second_value = "^#{wrapped(parameter_two)}" if parameter_two
|
@@ -28,31 +41,28 @@ module Plurimath
|
|
28
41
|
def to_mathml_without_math_tag
|
29
42
|
first_value = ox_element("mo")
|
30
43
|
first_value << invert_unicode_symbols.to_s unless hide_function_name
|
44
|
+
return first_value unless all_values_exist?
|
31
45
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
)
|
53
|
-
else
|
54
|
-
first_value
|
55
|
-
end
|
46
|
+
value_array = [
|
47
|
+
parameter_one&.to_mathml_without_math_tag,
|
48
|
+
parameter_two&.to_mathml_without_math_tag,
|
49
|
+
]
|
50
|
+
tag_name = if parameter_two && parameter_one
|
51
|
+
"underover"
|
52
|
+
else
|
53
|
+
parameter_one ? "under" : "over"
|
54
|
+
end
|
55
|
+
munderover_tag = Utility.ox_element("m#{tag_name}")
|
56
|
+
Utility.update_nodes(munderover_tag, value_array.insert(0, first_value))
|
57
|
+
return munderover_tag if parameter_three.nil?
|
58
|
+
|
59
|
+
Utility.update_nodes(
|
60
|
+
ox_element("mrow"),
|
61
|
+
[
|
62
|
+
munderover_tag,
|
63
|
+
parameter_three&.to_mathml_without_math_tag,
|
64
|
+
],
|
65
|
+
)
|
56
66
|
end
|
57
67
|
|
58
68
|
def to_html
|
@@ -61,6 +71,13 @@ module Plurimath
|
|
61
71
|
"<i>∑</i>#{first_value}#{second_value}"
|
62
72
|
end
|
63
73
|
|
74
|
+
def to_unicodemath
|
75
|
+
first_value = "_#{unicodemath_parens(parameter_one)}" if parameter_one
|
76
|
+
second_value = "^#{unicodemath_parens(parameter_two)}" if parameter_two
|
77
|
+
mask = options&.dig(:mask) if options&.key?(:mask)
|
78
|
+
"∑#{mask}#{first_value}#{second_value}#{naryand_value(parameter_three)}"
|
79
|
+
end
|
80
|
+
|
64
81
|
def to_omml_without_math_tag(display_style)
|
65
82
|
return r_element("∑", rpr_tag: false) unless all_values_exist?
|
66
83
|
|
@@ -101,6 +118,10 @@ module Plurimath
|
|
101
118
|
obj.update(Utility.filter_values(obj.value))
|
102
119
|
end
|
103
120
|
end
|
121
|
+
|
122
|
+
def is_nary_function?
|
123
|
+
true
|
124
|
+
end
|
104
125
|
end
|
105
126
|
end
|
106
127
|
end
|
@@ -24,11 +24,24 @@ module Plurimath
|
|
24
24
|
table_tag,
|
25
25
|
value&.map(&:to_mathml_without_math_tag),
|
26
26
|
)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
Utility.update_nodes(
|
28
|
+
Utility.ox_element("mrow"),
|
29
|
+
[
|
30
|
+
mo_element(mathml_parenthesis(open_paren)),
|
31
|
+
table_tag,
|
32
|
+
mo_element(mathml_parenthesis(close_paren)),
|
33
|
+
],
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_unicodemath
|
38
|
+
"#{matrix_symbol}(#{value.map(&:to_unicodemath).join("@")})"
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def matrix_symbol
|
44
|
+
open_paren == "{" ? "Ⓢ" : "ⓢ"
|
32
45
|
end
|
33
46
|
end
|
34
47
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../table"
|
4
|
+
|
5
|
+
module Plurimath
|
6
|
+
module Math
|
7
|
+
module Function
|
8
|
+
class Table
|
9
|
+
class Cases < Table
|
10
|
+
def initialize(value = [],
|
11
|
+
open_paren = "{",
|
12
|
+
close_paren = ":}",
|
13
|
+
options = {})
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_unicodemath
|
18
|
+
"Ⓒ(#{value.map(&:to_unicodemath).join("@")})"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../table"
|
4
|
+
|
5
|
+
module Plurimath
|
6
|
+
module Math
|
7
|
+
module Function
|
8
|
+
class Table
|
9
|
+
class Eqarray < Table
|
10
|
+
def initialize(value = [],
|
11
|
+
open_paren = "",
|
12
|
+
close_paren = "",
|
13
|
+
options = {})
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_unicodemath
|
18
|
+
"#{open_paren}█(#{value&.map(&:to_unicodemath).join("@")})#{close_paren}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -23,12 +23,32 @@ module Plurimath
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def to_mathml_without_math_tag
|
26
|
-
table_tag = Utility.
|
26
|
+
table_tag = Utility.update_nodes(
|
27
|
+
ox_element("mtable", attributes: table_attribute),
|
28
|
+
value&.map(&:to_mathml_without_math_tag)
|
29
|
+
)
|
30
|
+
return table_tag if table_tag_only?
|
31
|
+
|
27
32
|
Utility.update_nodes(
|
28
|
-
|
29
|
-
|
33
|
+
ox_element("mrow"),
|
34
|
+
[mo_tag(open_paren), table_tag, mo_tag(close_paren)]
|
30
35
|
)
|
31
36
|
end
|
37
|
+
|
38
|
+
def to_unicodemath
|
39
|
+
first_value = value.map(&:to_unicodemath).join("@")
|
40
|
+
"#{open_paren}■(#{first_value})#{close_paren}"
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def mo_tag(paren)
|
46
|
+
(ox_element("mo") << paren) unless validate_paren(paren)
|
47
|
+
end
|
48
|
+
|
49
|
+
def table_tag_only?
|
50
|
+
(open_paren&.include?("(") && close_paren&.include?(")")) || !(open_paren && close_paren)
|
51
|
+
end
|
32
52
|
end
|
33
53
|
end
|
34
54
|
end
|
@@ -17,6 +17,16 @@ module Plurimath
|
|
17
17
|
def to_latex
|
18
18
|
"\\begin#{opening}#{latex_content}\\end#{matrix_class}"
|
19
19
|
end
|
20
|
+
|
21
|
+
def to_unicodemath
|
22
|
+
"#{matrix_symbol}(#{value.map(&:to_unicodemath).join("@")})"
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def matrix_symbol
|
28
|
+
open_paren == "norm[" ? "⒩" : "⒱"
|
29
|
+
end
|
20
30
|
end
|
21
31
|
end
|
22
32
|
end
|