plurimath 0.8.16 → 0.8.18
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/.github/workflows/gen_docs.yml +10 -8
- data/Gemfile +1 -1
- data/README.adoc +4 -0
- data/Rakefile +55 -8
- data/intent_supported_classes.adoc +82 -0
- data/lib/plurimath/asciimath/parse.rb +1 -0
- data/lib/plurimath/asciimath/transform.rb +12 -0
- data/lib/plurimath/formatter/number_formatter.rb +6 -6
- data/lib/plurimath/formatter/numeric_formatter.rb +5 -2
- data/lib/plurimath/formatter/standard.rb +2 -0
- data/lib/plurimath/math/core.rb +65 -6
- data/lib/plurimath/math/formula/mrow.rb +193 -0
- data/lib/plurimath/math/formula/mstyle.rb +17 -0
- data/lib/plurimath/math/formula.rb +317 -7
- data/lib/plurimath/math/function/abs.rb +5 -1
- data/lib/plurimath/math/function/base.rb +4 -0
- data/lib/plurimath/math/function/color.rb +17 -4
- data/lib/plurimath/math/function/fenced.rb +238 -7
- data/lib/plurimath/math/function/frac.rb +12 -1
- data/lib/plurimath/math/function/inf.rb +5 -1
- data/lib/plurimath/math/function/int.rb +5 -1
- data/lib/plurimath/math/function/intent.rb +6 -2
- data/lib/plurimath/math/function/lim.rb +5 -1
- data/lib/plurimath/math/function/linebreak.rb +2 -2
- data/lib/plurimath/math/function/longdiv.rb +3 -0
- data/lib/plurimath/math/function/menclose.rb +3 -0
- data/lib/plurimath/math/function/merror.rb +5 -2
- data/lib/plurimath/math/function/mglyph.rb +27 -0
- data/lib/plurimath/math/function/mlabeledtr.rb +19 -0
- data/lib/plurimath/math/function/mpadded.rb +28 -1
- data/lib/plurimath/math/function/ms.rb +80 -0
- data/lib/plurimath/math/function/msgroup.rb +15 -0
- data/lib/plurimath/math/function/msline.rb +5 -2
- data/lib/plurimath/math/function/multiscript.rb +14 -0
- data/lib/plurimath/math/function/nary.rb +13 -1
- data/lib/plurimath/math/function/oint.rb +5 -1
- data/lib/plurimath/math/function/over.rb +3 -0
- data/lib/plurimath/math/function/overset.rb +11 -0
- data/lib/plurimath/math/function/phantom.rb +3 -0
- data/lib/plurimath/math/function/power.rb +3 -0
- data/lib/plurimath/math/function/power_base.rb +3 -0
- data/lib/plurimath/math/function/prod.rb +5 -1
- data/lib/plurimath/math/function/root.rb +3 -0
- data/lib/plurimath/math/function/scarries.rb +3 -0
- data/lib/plurimath/math/function/semantics.rb +14 -0
- data/lib/plurimath/math/function/sqrt.rb +3 -0
- data/lib/plurimath/math/function/stackrel.rb +3 -0
- data/lib/plurimath/math/function/sum.rb +5 -1
- data/lib/plurimath/math/function/table/array.rb +1 -1
- data/lib/plurimath/math/function/table/bmatrix.rb +1 -1
- data/lib/plurimath/math/function/table/cases.rb +2 -2
- data/lib/plurimath/math/function/table/eqarray.rb +2 -2
- data/lib/plurimath/math/function/table/pmatrix.rb +1 -1
- data/lib/plurimath/math/function/table/vmatrix.rb +1 -1
- data/lib/plurimath/math/function/table.rb +65 -0
- data/lib/plurimath/math/function/td.rb +4 -1
- data/lib/plurimath/math/function/text.rb +22 -2
- data/lib/plurimath/math/function/tr.rb +13 -0
- data/lib/plurimath/math/function/unary_function.rb +5 -1
- data/lib/plurimath/math/function/underover.rb +3 -0
- data/lib/plurimath/math/function/underset.rb +44 -0
- data/lib/plurimath/math/number.rb +10 -1
- data/lib/plurimath/math/symbols/bigwedge.rb +4 -0
- data/lib/plurimath/math/symbols/cap.rb +0 -4
- data/lib/plurimath/math/symbols/clockoint.rb +1 -1
- data/lib/plurimath/math/symbols/cntclockoint.rb +1 -1
- data/lib/plurimath/math/symbols/coprod.rb +1 -1
- data/lib/plurimath/math/symbols/dd.rb +4 -0
- data/lib/plurimath/math/symbols/dint.rb +4 -0
- data/lib/plurimath/math/symbols/duni.rb +4 -0
- data/lib/plurimath/math/symbols/gg.rb +4 -4
- data/lib/plurimath/math/symbols/ii.rb +4 -0
- data/lib/plurimath/math/symbols/iiiint.rb +1 -1
- data/lib/plurimath/math/symbols/iiint.rb +4 -0
- data/lib/plurimath/math/symbols/iint.rb +1 -1
- data/lib/plurimath/math/symbols/intclockwise.rb +1 -1
- data/lib/plurimath/math/symbols/intercal.rb +4 -0
- data/lib/plurimath/math/symbols/jj.rb +4 -0
- data/lib/plurimath/math/symbols/ll.rb +4 -4
- data/lib/plurimath/math/symbols/minus.rb +1 -1
- data/lib/plurimath/math/symbols/oiiint.rb +1 -1
- data/lib/plurimath/math/symbols/oiint.rb +1 -1
- data/lib/plurimath/math/symbols/oint.rb +1 -1
- data/lib/plurimath/math/symbols/symbol.rb +12 -4
- data/lib/plurimath/math/symbols/upcase_dd.rb +4 -0
- data/lib/plurimath/math.rb +2 -0
- data/lib/plurimath/mathml/parser.rb +45 -86
- data/lib/plurimath/mathml/utility/empty_defined_methods.rb +477 -0
- data/lib/plurimath/mathml/utility/formula_transformation.rb +472 -0
- data/lib/plurimath/mathml/utility.rb +363 -0
- data/lib/plurimath/mathml.rb +1 -0
- data/lib/plurimath/unicode_math/transform.rb +2 -2
- data/lib/plurimath/utility/intent_encoding.rb +21 -21
- data/lib/plurimath/utility.rb +5 -23
- data/lib/plurimath/version.rb +1 -1
- data/lib/plurimath.rb +9 -0
- data/plurimath.gemspec +4 -2
- metadata +38 -5
- data/lib/plurimath/mathml/transform.rb +0 -411
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "unary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Ms < UnaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
def to_mathml_without_math_tag(intent, **)
|
10
13
|
Utility.ox_element("ms") << parameter_one
|
11
14
|
end
|
@@ -27,6 +30,83 @@ module Plurimath
|
|
27
30
|
def to_unicodemath(options:)
|
28
31
|
Text.new(parameter_one).to_unicodemath(options: options)
|
29
32
|
end
|
33
|
+
|
34
|
+
def value
|
35
|
+
parameter_one
|
36
|
+
end
|
37
|
+
|
38
|
+
def value=(content)
|
39
|
+
internal_content = updated_temp_mathml_values.flatten.map(&:to_ms_value)
|
40
|
+
@parameter_one = [internal_content, content.is_a?(String) ? content : content].flatten.compact.join(" ")
|
41
|
+
end
|
42
|
+
|
43
|
+
def mi_value=(value)
|
44
|
+
return if value.nil?
|
45
|
+
|
46
|
+
@temp_mathml_order = replace_order_with_value(
|
47
|
+
@temp_mathml_order,
|
48
|
+
value,
|
49
|
+
"mi"
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
def mn_value=(value)
|
54
|
+
return if value.nil?
|
55
|
+
|
56
|
+
@temp_mathml_order = replace_order_with_value(
|
57
|
+
@temp_mathml_order,
|
58
|
+
value,
|
59
|
+
"mn"
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
def mo_value=(value)
|
64
|
+
return if value.nil?
|
65
|
+
|
66
|
+
@temp_mathml_order = replace_order_with_value(
|
67
|
+
@temp_mathml_order,
|
68
|
+
value,
|
69
|
+
"mo"
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
def msub_value=(value)
|
74
|
+
return if value.nil?
|
75
|
+
|
76
|
+
@temp_mathml_order = replace_order_with_value(
|
77
|
+
@temp_mathml_order,
|
78
|
+
value,
|
79
|
+
"msub"
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
def msup_value=(value)
|
84
|
+
return if value.nil?
|
85
|
+
|
86
|
+
@temp_mathml_order = replace_order_with_value(
|
87
|
+
@temp_mathml_order,
|
88
|
+
value,
|
89
|
+
"msup"
|
90
|
+
)
|
91
|
+
end
|
92
|
+
|
93
|
+
def msubsup_value=(value)
|
94
|
+
return if value.nil?
|
95
|
+
|
96
|
+
@temp_mathml_order = replace_order_with_value(
|
97
|
+
@temp_mathml_order,
|
98
|
+
value,
|
99
|
+
"msubsup"
|
100
|
+
)
|
101
|
+
end
|
102
|
+
|
103
|
+
def updated_temp_mathml_values
|
104
|
+
@temp_mathml_order.map do |element|
|
105
|
+
next element if element.is_a?(Math::Symbols::Symbol)
|
106
|
+
|
107
|
+
update_temp_mathml_values([element])
|
108
|
+
end
|
109
|
+
end
|
30
110
|
end
|
31
111
|
end
|
32
112
|
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "unary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Msgroup < UnaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
def to_asciimath(options:)
|
10
13
|
parameter_one.map { |param| param.to_asciimath(options: options) }.join
|
11
14
|
end
|
@@ -71,6 +74,18 @@ module Plurimath
|
|
71
74
|
def line_breaking(obj)
|
72
75
|
custom_array_line_breaking(obj)
|
73
76
|
end
|
77
|
+
|
78
|
+
def msgroup_text; end
|
79
|
+
|
80
|
+
def msgroup_text=(value)
|
81
|
+
return unless value
|
82
|
+
|
83
|
+
if value.is_a?(Array) && value.none? { |element| element.match?(/[^\s]/) }
|
84
|
+
@temp_mathml_order << Text.new(value.pop)
|
85
|
+
else
|
86
|
+
@temp_mathml_order << Text.new(value)
|
87
|
+
end
|
88
|
+
end
|
74
89
|
end
|
75
90
|
end
|
76
91
|
end
|
@@ -1,14 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "unary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Msline < UnaryFunction
|
9
|
-
|
10
|
+
include Mathml::Utility
|
10
11
|
|
11
|
-
def
|
12
|
+
def to_asciimath(**); end
|
13
|
+
|
14
|
+
def to_latex(**); end
|
12
15
|
|
13
16
|
def to_mathml_without_math_tag(intent, **)
|
14
17
|
ox_element("msline")
|
@@ -1,10 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "ternary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
5
|
+
|
4
6
|
module Plurimath
|
5
7
|
module Math
|
6
8
|
module Function
|
7
9
|
class Multiscript < TernaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
8
12
|
FUNCTION = {
|
9
13
|
name: "multiscript",
|
10
14
|
first_value: "base",
|
@@ -79,6 +83,16 @@ module Plurimath
|
|
79
83
|
end
|
80
84
|
end
|
81
85
|
|
86
|
+
def none_value=(value)
|
87
|
+
return if value.nil? || value.empty?
|
88
|
+
|
89
|
+
@temp_mathml_order = replace_order_with_value(
|
90
|
+
@temp_mathml_order,
|
91
|
+
value,
|
92
|
+
"none"
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
82
96
|
private
|
83
97
|
|
84
98
|
def prescripts
|
@@ -124,6 +124,17 @@ module Plurimath
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
+
def intent_names
|
128
|
+
@@names ||= Symbols::Symbol.descendants.map.with_object({}) do |symbol, hash|
|
129
|
+
sym_instance = symbol.new
|
130
|
+
next unless sym_instance.is_nary_symbol?
|
131
|
+
|
132
|
+
intent_name = sym_instance.nary_intent_name
|
133
|
+
next pp symbol.const_source_location(:INPUT) if intent_name.nil?
|
134
|
+
hash[intent_name.gsub(/\s|-/, '_').to_sym] = intent_name
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
127
138
|
protected
|
128
139
|
|
129
140
|
def chr_value(narypr, options:)
|
@@ -197,8 +208,9 @@ module Plurimath
|
|
197
208
|
end
|
198
209
|
end
|
199
210
|
|
211
|
+
# Function calling intent name for a specific symbol
|
200
212
|
def intent_name
|
201
|
-
return "n-ary" unless parameter_one&.is_nary_symbol?
|
213
|
+
return ":n-ary" unless parameter_one&.is_nary_symbol?
|
202
214
|
|
203
215
|
parameter_one.nary_intent_name
|
204
216
|
end
|
@@ -119,6 +119,10 @@ module Plurimath
|
|
119
119
|
true
|
120
120
|
end
|
121
121
|
|
122
|
+
def intent_names
|
123
|
+
{ name: ":contour integral"}
|
124
|
+
end
|
125
|
+
|
122
126
|
private
|
123
127
|
|
124
128
|
def ternary_intentify(tag, intent)
|
@@ -126,7 +130,7 @@ module Plurimath
|
|
126
130
|
tag,
|
127
131
|
intent,
|
128
132
|
func_name: :naryand,
|
129
|
-
intent_name:
|
133
|
+
intent_name: intent_names[:name],
|
130
134
|
)
|
131
135
|
end
|
132
136
|
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "binary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Over < BinaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
FUNCTION = {
|
10
13
|
name: "over",
|
11
14
|
first_value: "numerator",
|
@@ -1,12 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "binary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Overset < BinaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
attr_accessor :options
|
13
|
+
|
10
14
|
FUNCTION = {
|
11
15
|
name: "overset",
|
12
16
|
first_value: "base",
|
@@ -77,6 +81,13 @@ module Plurimath
|
|
77
81
|
parameter_two.is_nary_function? || parameter_two.is_nary_symbol?
|
78
82
|
end
|
79
83
|
|
84
|
+
def accent=(value)
|
85
|
+
return unless value
|
86
|
+
|
87
|
+
@options ||= {}
|
88
|
+
@options[:accent] = value
|
89
|
+
end
|
90
|
+
|
80
91
|
protected
|
81
92
|
|
82
93
|
def unicode_accent?(field)
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "unary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Phantom < UnaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
def to_asciimath(options:)
|
10
13
|
"#{Array.new(asciimath_value(options: options)&.length, '\ ').join}"
|
11
14
|
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "binary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Power < BinaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
FUNCTION = {
|
10
13
|
name: "superscript",
|
11
14
|
first_value: "base",
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "ternary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class PowerBase < TernaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
FUNCTION = {
|
10
13
|
name: "subsup",
|
11
14
|
first_value: "base",
|
@@ -116,6 +116,10 @@ module Plurimath
|
|
116
116
|
true
|
117
117
|
end
|
118
118
|
|
119
|
+
def intent_names
|
120
|
+
{ name: ":product" }
|
121
|
+
end
|
122
|
+
|
119
123
|
private
|
120
124
|
|
121
125
|
def sup_value(options:)
|
@@ -152,7 +156,7 @@ module Plurimath
|
|
152
156
|
tag,
|
153
157
|
intent,
|
154
158
|
func_name: :naryand,
|
155
|
-
intent_name: :
|
159
|
+
intent_name: intent_names[:name],
|
156
160
|
)
|
157
161
|
end
|
158
162
|
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "binary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Root < BinaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
FUNCTION = {
|
10
13
|
name: "root",
|
11
14
|
first_value: "radicand",
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "unary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Scarries < UnaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
def to_asciimath(options:)
|
10
13
|
asciimath_value(options: options)
|
11
14
|
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "binary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Semantics < BinaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
FUNCTION = {
|
10
13
|
name: "semantics",
|
11
14
|
first_value: "first argument",
|
@@ -41,6 +44,17 @@ module Plurimath
|
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
47
|
+
def annotation=(value)
|
48
|
+
return unless value
|
49
|
+
|
50
|
+
@parameter_two = [
|
51
|
+
{
|
52
|
+
annotation: value,
|
53
|
+
}
|
54
|
+
]
|
55
|
+
@temp_mathml_order.delete("annotation")
|
56
|
+
end
|
57
|
+
|
44
58
|
protected
|
45
59
|
|
46
60
|
def other_tags(array, intent, options:)
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "unary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Sqrt < UnaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
attr_accessor :options
|
10
13
|
|
11
14
|
def to_mathml_without_math_tag(intent, options:)
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "binary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Stackrel < BinaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
FUNCTION = {
|
10
13
|
name: "stackrel",
|
11
14
|
first_value: "above",
|
@@ -122,6 +122,10 @@ module Plurimath
|
|
122
122
|
true
|
123
123
|
end
|
124
124
|
|
125
|
+
def intent_names
|
126
|
+
{ name: ":sum"}
|
127
|
+
end
|
128
|
+
|
125
129
|
private
|
126
130
|
|
127
131
|
def sum_tag
|
@@ -138,7 +142,7 @@ module Plurimath
|
|
138
142
|
tag,
|
139
143
|
intent,
|
140
144
|
func_name: :naryand,
|
141
|
-
intent_name: :
|
145
|
+
intent_name: intent_names[:name],
|
142
146
|
)
|
143
147
|
end
|
144
148
|
end
|
@@ -22,7 +22,7 @@ module Plurimath
|
|
22
22
|
def to_mathml_without_math_tag(intent, **)
|
23
23
|
table_tag = super
|
24
24
|
set_table_intent(table_tag) if intent
|
25
|
-
table_tag.attributes["intent"] =
|
25
|
+
table_tag.attributes["intent"] = intent_names[:equations] if intent
|
26
26
|
table_tag
|
27
27
|
end
|
28
28
|
|
@@ -30,7 +30,7 @@ module Plurimath
|
|
30
30
|
|
31
31
|
def set_table_intent(tag)
|
32
32
|
table = tag.nodes.find { |tag| tag.name == "mtable" }
|
33
|
-
table["intent"] =
|
33
|
+
table["intent"] = intent_names[:cases]
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -22,7 +22,7 @@ module Plurimath
|
|
22
22
|
def to_mathml_without_math_tag(intent, **)
|
23
23
|
matrix = super
|
24
24
|
set_table_intent(matrix) if intent
|
25
|
-
matrix["intent"] =
|
25
|
+
matrix["intent"] = intent_names[:equations] if intent
|
26
26
|
matrix
|
27
27
|
end
|
28
28
|
|
@@ -32,7 +32,7 @@ module Plurimath
|
|
32
32
|
matrix = tag.nodes.find { |tag| tag.name == "mtable" }
|
33
33
|
return unless matrix
|
34
34
|
|
35
|
-
matrix["intent"] =
|
35
|
+
matrix["intent"] = intent_names[:cases]
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -1,9 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "../../mathml/utility"
|
4
|
+
|
3
5
|
module Plurimath
|
4
6
|
module Math
|
5
7
|
module Function
|
6
8
|
class Table < Core
|
9
|
+
include Mathml::Utility
|
10
|
+
|
7
11
|
attr_accessor :value, :open_paren, :close_paren, :options
|
8
12
|
|
9
13
|
SIMPLE_TABLES = %w[array align split].freeze
|
@@ -125,10 +129,71 @@ module Plurimath
|
|
125
129
|
]
|
126
130
|
end
|
127
131
|
|
132
|
+
def intent_names
|
133
|
+
{
|
134
|
+
curly_braced_matrix: ":curly-braced-matrix",
|
135
|
+
parenthesized_matrix: ":parenthesized-matrix",
|
136
|
+
bracketed_matrix: ":bracketed-matrix",
|
137
|
+
normed_matrix: ":normed-matrix",
|
138
|
+
determinant: ":determinant",
|
139
|
+
equations: ":equations",
|
140
|
+
cases: ":cases",
|
141
|
+
}
|
142
|
+
end
|
143
|
+
|
144
|
+
def mtr_value=(value)
|
145
|
+
return if value.nil? || value.empty?
|
146
|
+
|
147
|
+
self.value = replace_order_with_value(
|
148
|
+
clear_temp_order,
|
149
|
+
update_temp_mathml_values(value),
|
150
|
+
"mtr"
|
151
|
+
)
|
152
|
+
end
|
153
|
+
|
154
|
+
def mlabeledtr_value=(value)
|
155
|
+
return if value.nil? || value.empty?
|
156
|
+
|
157
|
+
self.value = replace_order_with_value(
|
158
|
+
clear_temp_order,
|
159
|
+
update_temp_mathml_values(value),
|
160
|
+
"mlabeledtr"
|
161
|
+
)
|
162
|
+
end
|
163
|
+
|
164
|
+
def frame=(value)
|
165
|
+
return if value.nil? || value.empty?
|
166
|
+
|
167
|
+
set_option(:frame, value)
|
168
|
+
end
|
169
|
+
|
170
|
+
def rowlines=(value)
|
171
|
+
return if value.nil? || value.empty?
|
172
|
+
|
173
|
+
set_option(:rowlines, value)
|
174
|
+
end
|
175
|
+
|
176
|
+
def columnlines=(value)
|
177
|
+
return if value.nil? || value.empty?
|
178
|
+
return if value.split.all? { |val| val.include?("none") }
|
179
|
+
|
180
|
+
Plurimath::Utility.table_separator(
|
181
|
+
value.split,
|
182
|
+
@value,
|
183
|
+
)
|
184
|
+
set_option(:columnlines, value)
|
185
|
+
end
|
186
|
+
|
128
187
|
protected
|
129
188
|
|
189
|
+
def set_option(option, value)
|
190
|
+
@options ||= {}
|
191
|
+
@options[option] = value
|
192
|
+
end
|
193
|
+
|
130
194
|
def mathml_parenthesis(field, intent, options:)
|
131
195
|
return "" unless field
|
196
|
+
|
132
197
|
if field&.class_name == "symbol"
|
133
198
|
paren = field&.to_mathml_without_math_tag(intent, options: options)&.nodes&.first
|
134
199
|
return invisible_paren?(paren) ? "" : paren.to_s
|
@@ -1,14 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "binary_function"
|
4
|
+
require_relative "../../mathml/utility"
|
4
5
|
|
5
6
|
module Plurimath
|
6
7
|
module Math
|
7
8
|
module Function
|
8
9
|
class Td < BinaryFunction
|
10
|
+
include Mathml::Utility
|
11
|
+
|
9
12
|
def initialize(parameter_one = nil, parameter_two = nil)
|
10
13
|
parameter_one&.delete_if { |td| td == "&" }
|
11
|
-
super(parameter_one, parameter_two)
|
14
|
+
super(Array(parameter_one), parameter_two)
|
12
15
|
end
|
13
16
|
|
14
17
|
def to_asciimath(options:)
|