plurimath 0.2.6 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/plurimath/asciimath/transform.rb +6 -0
- data/lib/plurimath/math/function/semantics.rb +44 -0
- data/lib/plurimath/mathml/constants.rb +2 -2
- data/lib/plurimath/mathml/parser.rb +7 -1
- data/lib/plurimath/mathml/transform.rb +12 -10
- data/lib/plurimath/utility.rb +1 -1
- data/lib/plurimath/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10dc48ba50b0b3ace7230a0dc8c55ea8fa208e1b8e124cbbf19e2b081ddb6918
|
4
|
+
data.tar.gz: 36aa56b4193aa367343195e33160d5213dbd3efe9655b110a387b5fa84374e22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59b85358ee2f0de5f345a0179aca97243483aa5d31e0a7a858ef4c9421ce546d9a9ee72094a4306c704b350d7caa80315bc331b7e8d500ffbf0175a0d1c859b5
|
7
|
+
data.tar.gz: c3ada4b68b411110f533dfb2297f9d0f9cad47200a5b39475b300c9f1687b18ed5e199fd12b5d8d0f3ff971ae1790187d28629e162eba14edd575aafeab1ee74
|
@@ -1117,6 +1117,12 @@ module Plurimath
|
|
1117
1117
|
Math::Function::Text.new(text)
|
1118
1118
|
end
|
1119
1119
|
|
1120
|
+
rule(lparen: simple(:lparen),
|
1121
|
+
text: sequence(:text),
|
1122
|
+
rparen: simple(:rparen)) do
|
1123
|
+
Math::Function::Text.new(text.flatten.compact.join)
|
1124
|
+
end
|
1125
|
+
|
1120
1126
|
rule(lparen: simple(:lparen),
|
1121
1127
|
rgb_color: sequence(:color),
|
1122
1128
|
rparen: simple(:rparen)) do
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "binary_function"
|
4
|
+
|
5
|
+
module Plurimath
|
6
|
+
module Math
|
7
|
+
module Function
|
8
|
+
class Semantics < BinaryFunction
|
9
|
+
def to_mathml_without_math_tag
|
10
|
+
first_value = parameter_one&.to_mathml_without_math_tag
|
11
|
+
second_value = other_tags(parameter_two)
|
12
|
+
Utility.update_nodes(
|
13
|
+
Utility.ox_element("semantics"),
|
14
|
+
second_value.insert(0, first_value),
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_latex
|
19
|
+
parameter_one&.to_latex
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_asciimath
|
23
|
+
parameter_one&.to_asciimath
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def other_tags(array)
|
29
|
+
contented = []
|
30
|
+
array&.each do |hash|
|
31
|
+
hash.each do |tag, content|
|
32
|
+
tag_element = Utility.ox_element(tag&.to_s)
|
33
|
+
contented << Utility.update_nodes(
|
34
|
+
tag_element,
|
35
|
+
content&.map(&:to_mathml_without_math_tag),
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
contented
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -6,6 +6,7 @@ module Plurimath
|
|
6
6
|
class Mathml
|
7
7
|
class Parser
|
8
8
|
attr_accessor :text
|
9
|
+
SUPPORTED_ATTRIBUTES = %w[columnlines mathvariant mathcolor notation close open].freeze
|
9
10
|
|
10
11
|
def initialize(text)
|
11
12
|
@text = text
|
@@ -28,7 +29,7 @@ module Plurimath
|
|
28
29
|
elsif !node.attributes.empty?
|
29
30
|
{
|
30
31
|
node.name.to_sym => {
|
31
|
-
attributes: node.attributes
|
32
|
+
attributes: validate_attributes(node.attributes),
|
32
33
|
value: parse_nodes(node.nodes),
|
33
34
|
},
|
34
35
|
}
|
@@ -37,6 +38,11 @@ module Plurimath
|
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
41
|
+
|
42
|
+
def validate_attributes(attributes)
|
43
|
+
attributes&.select! { |key, _| SUPPORTED_ATTRIBUTES.include?(key&.to_s) }
|
44
|
+
attributes&.transform_keys(&:to_sym) if attributes&.any?
|
45
|
+
end
|
40
46
|
end
|
41
47
|
end
|
42
48
|
end
|
@@ -6,13 +6,9 @@ module Plurimath
|
|
6
6
|
rule(mi: simple(:mi)) { mi }
|
7
7
|
rule(mo: simple(:mo)) { mo }
|
8
8
|
rule(mo: sequence(:mo)) { Utility.mathml_unary_classes(mo) }
|
9
|
-
rule(xref: simple(:xref)) { nil }
|
10
9
|
rule(mtd: sequence(:mtd)) { Math::Function::Td.new(mtd) }
|
11
10
|
rule(mtr: sequence(:mtr)) { Math::Function::Tr.new(mtr) }
|
12
|
-
rule(accent: simple(:acc)) { nil }
|
13
11
|
rule(none: sequence(:none)) { nil }
|
14
|
-
rule(maxsize: simple(:att)) { nil }
|
15
|
-
rule(minsize: simple(:att)) { nil }
|
16
12
|
rule(notation: simple(:att)) { Math::Function::Menclose.new(att) }
|
17
13
|
rule(mtable: simple(:table)) { table }
|
18
14
|
rule(msqrt: sequence(:sqrt)) { Math::Function::Sqrt.new(sqrt.first) }
|
@@ -25,7 +21,6 @@ module Plurimath
|
|
25
21
|
rule(mfenced: simple(:mfenced)) { mfenced }
|
26
22
|
rule(mtable: sequence(:mtable)) { Math::Function::Table.new(mtable) }
|
27
23
|
rule(mscarry: sequence(:scarry)) { nil }
|
28
|
-
rule(displaystyle: simple(:att)) { nil }
|
29
24
|
rule(menclose: simple(:enclose)) { enclose }
|
30
25
|
rule(mlabeledtr: sequence(:mtr)) { Math::Function::Tr.new(mtr) }
|
31
26
|
rule(mpadded: sequence(:padded)) { Utility.filter_values(padded) }
|
@@ -204,10 +199,10 @@ module Plurimath
|
|
204
199
|
)
|
205
200
|
end
|
206
201
|
|
207
|
-
rule(mtext:
|
202
|
+
rule(mtext: subtree(:mtext)) do
|
208
203
|
entities = HTMLEntities.new
|
209
204
|
symbols = Constants::UNICODE_SYMBOLS.transform_keys(&:to_s)
|
210
|
-
text = entities.encode(mtext.
|
205
|
+
text = entities.encode(mtext.flatten.join, :hexadecimal)
|
211
206
|
symbols.each do |code, string|
|
212
207
|
text.gsub!(code.downcase, "unicode[:#{string}]")
|
213
208
|
end
|
@@ -227,7 +222,7 @@ module Plurimath
|
|
227
222
|
rule(mfenced: sequence(:fenced)) do
|
228
223
|
Math::Function::Fenced.new(
|
229
224
|
Math::Symbol.new("("),
|
230
|
-
fenced,
|
225
|
+
fenced.compact,
|
231
226
|
Math::Symbol.new(")"),
|
232
227
|
)
|
233
228
|
end
|
@@ -281,14 +276,21 @@ module Plurimath
|
|
281
276
|
|
282
277
|
rule(attributes: simple(:attrs),
|
283
278
|
value: subtree(:value)) do
|
284
|
-
Utility.join_attr_value(attrs, value
|
279
|
+
Utility.join_attr_value(attrs, value&.flatten&.compact)
|
280
|
+
end
|
281
|
+
|
282
|
+
rule(semantics: subtree(:value)) do
|
283
|
+
Math::Function::Semantics.new(
|
284
|
+
value.shift,
|
285
|
+
value,
|
286
|
+
)
|
285
287
|
end
|
286
288
|
|
287
289
|
rule(attributes: subtree(:attrs),
|
288
290
|
value: sequence(:value)) do
|
289
291
|
Utility.join_attr_value(
|
290
292
|
attrs.is_a?(Hash) ? nil : attrs,
|
291
|
-
value.
|
293
|
+
value&.flatten.compact,
|
292
294
|
)
|
293
295
|
end
|
294
296
|
end
|
data/lib/plurimath/utility.rb
CHANGED
@@ -315,7 +315,7 @@ module Plurimath
|
|
315
315
|
attrs.parameter_two = filter_values(value)
|
316
316
|
attrs
|
317
317
|
elsif attrs.is_a?(Math::Function::Fenced)
|
318
|
-
attrs.parameter_two = value
|
318
|
+
attrs.parameter_two = value.compact
|
319
319
|
attrs
|
320
320
|
elsif attrs.is_a?(Math::Function::FontStyle)
|
321
321
|
attrs.parameter_one = filter_values(value)
|
data/lib/plurimath/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plurimath
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|
@@ -158,6 +158,7 @@ files:
|
|
158
158
|
- lib/plurimath/math/function/scarry.rb
|
159
159
|
- lib/plurimath/math/function/sec.rb
|
160
160
|
- lib/plurimath/math/function/sech.rb
|
161
|
+
- lib/plurimath/math/function/semantics.rb
|
161
162
|
- lib/plurimath/math/function/sin.rb
|
162
163
|
- lib/plurimath/math/function/sinh.rb
|
163
164
|
- lib/plurimath/math/function/sqrt.rb
|