plurimath 0.2.5 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/plurimath/latex/constants.rb +1 -1
- data/lib/plurimath/latex/parse.rb +2 -0
- data/lib/plurimath/latex/transform.rb +5 -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: 2ea66a26d225e41e692ad7d708c2b7d673de51d5398a504b183dea1bcaceb197
|
4
|
+
data.tar.gz: f9c4710c348e0bf351138f45d55c53da5f0525a90439c317c823d4c838d8ef5f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0af365c1786b6de865615fa5843ca3446556619ce99d1fb931455dc77e3a5a8f532c79c5eea4c3120b43805437f61a11b70aa5eec5bbf73855eac22c572ac706
|
7
|
+
data.tar.gz: d66fcf0ca35d06b2ebb64da22b6b9a99499ff2a7164cac69becc847dcc5bf3ba7c4d0329bb0f5df45b5f31b3f913629173f2532e16643d9842866286040fb2f8
|
@@ -197,6 +197,8 @@ module Plurimath
|
|
197
197
|
(slashed_value(first_value, :underover))
|
198
198
|
when :binary
|
199
199
|
(slashed_value(first_value, :binary) >> intermediate_exp.as(:first_value) >> intermediate_exp.as(:second_value)).as(:binary)
|
200
|
+
when :text
|
201
|
+
(slashed_value(first_value, :text) >> (str("{") >> (match("[^\}]").repeat).as(:first_value) >> str("}")))
|
200
202
|
end
|
201
203
|
end
|
202
204
|
|
@@ -357,6 +357,11 @@ module Plurimath
|
|
357
357
|
)
|
358
358
|
end
|
359
359
|
|
360
|
+
rule(text: simple(:text),
|
361
|
+
first_value: simple(:first_value)) do
|
362
|
+
Math::Function::Text.new(first_value)
|
363
|
+
end
|
364
|
+
|
360
365
|
rule(unary: simple(:unary),
|
361
366
|
first_value: simple(:first_value)) do
|
362
367
|
Utility.get_class(
|
@@ -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.7
|
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-14 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
|