plurimath 0.6.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/lib/plurimath/asciimath/parse.rb +3 -2
- data/lib/plurimath/asciimath/transform.rb +32 -5
- data/lib/plurimath/latex/constants.rb +2 -1
- data/lib/plurimath/latex/transform.rb +9 -13
- data/lib/plurimath/math/core.rb +134 -20
- data/lib/plurimath/math/formula.rb +88 -18
- data/lib/plurimath/math/function/abs.rb +28 -15
- data/lib/plurimath/math/function/bar.rb +5 -0
- data/lib/plurimath/math/function/base.rb +14 -0
- data/lib/plurimath/math/function/binary_function.rb +2 -8
- data/lib/plurimath/math/function/ceil.rb +24 -9
- data/lib/plurimath/math/function/ddot.rb +6 -1
- data/lib/plurimath/math/function/deg.rb +4 -1
- data/lib/plurimath/math/function/det.rb +4 -1
- data/lib/plurimath/math/function/dim.rb +4 -1
- data/lib/plurimath/math/function/dot.rb +5 -0
- data/lib/plurimath/math/function/exp.rb +4 -1
- data/lib/plurimath/math/function/fenced.rb +25 -16
- data/lib/plurimath/math/function/floor.rb +23 -13
- data/lib/plurimath/math/function/font_style.rb +18 -8
- data/lib/plurimath/math/function/frac.rb +32 -18
- data/lib/plurimath/math/function/gcd.rb +4 -1
- data/lib/plurimath/math/function/glb.rb +8 -1
- data/lib/plurimath/math/function/hat.rb +16 -5
- data/lib/plurimath/math/function/hom.rb +4 -1
- data/lib/plurimath/math/function/inf.rb +16 -0
- data/lib/plurimath/math/function/int.rb +28 -9
- data/lib/plurimath/math/function/ker.rb +4 -1
- data/lib/plurimath/math/function/lcm.rb +17 -1
- data/lib/plurimath/math/function/left.rb +1 -1
- data/lib/plurimath/math/function/lg.rb +4 -1
- data/lib/plurimath/math/function/lim.rb +10 -0
- data/lib/plurimath/math/function/liminf.rb +4 -1
- data/lib/plurimath/math/function/limits.rb +22 -9
- data/lib/plurimath/math/function/limsup.rb +4 -1
- data/lib/plurimath/math/function/linebreak.rb +95 -0
- data/lib/plurimath/math/function/ln.rb +4 -1
- data/lib/plurimath/math/function/log.rb +21 -12
- data/lib/plurimath/math/function/longdiv.rb +19 -0
- data/lib/plurimath/math/function/lub.rb +4 -1
- data/lib/plurimath/math/function/max.rb +4 -1
- data/lib/plurimath/math/function/mbox.rb +8 -7
- data/lib/plurimath/math/function/merror.rb +12 -3
- data/lib/plurimath/math/function/min.rb +4 -1
- data/lib/plurimath/math/function/mod.rb +42 -15
- data/lib/plurimath/math/function/msgroup.rb +4 -0
- data/lib/plurimath/math/function/msline.rb +10 -0
- data/lib/plurimath/math/function/multiscript.rb +20 -0
- data/lib/plurimath/math/function/nary.rb +39 -5
- data/lib/plurimath/math/function/norm.rb +24 -15
- data/lib/plurimath/math/function/obrace.rb +5 -0
- data/lib/plurimath/math/function/oint.rb +42 -20
- data/lib/plurimath/math/function/over.rb +23 -10
- data/lib/plurimath/math/function/overset.rb +13 -10
- data/lib/plurimath/math/function/phantom.rb +24 -6
- data/lib/plurimath/math/function/power.rb +13 -4
- data/lib/plurimath/math/function/power_base.rb +28 -6
- data/lib/plurimath/math/function/prod.rb +33 -14
- data/lib/plurimath/math/function/right.rb +1 -1
- data/lib/plurimath/math/function/rule.rb +1 -1
- data/lib/plurimath/math/function/scarries.rb +14 -0
- data/lib/plurimath/math/function/semantics.rb +9 -0
- data/lib/plurimath/math/function/sqrt.rb +5 -0
- data/lib/plurimath/math/function/stackrel.rb +8 -0
- data/lib/plurimath/math/function/substack.rb +12 -51
- data/lib/plurimath/math/function/sum.rb +43 -20
- data/lib/plurimath/math/function/sup.rb +11 -2
- data/lib/plurimath/math/function/table/array.rb +1 -1
- data/lib/plurimath/math/function/table/matrix.rb +4 -0
- data/lib/plurimath/math/function/table.rb +11 -3
- data/lib/plurimath/math/function/td.rb +14 -4
- data/lib/plurimath/math/function/ternary_function.rb +8 -10
- data/lib/plurimath/math/function/text.rb +1 -1
- data/lib/plurimath/math/function/tilde.rb +5 -0
- data/lib/plurimath/math/function/tr.rb +1 -1
- data/lib/plurimath/math/function/ubrace.rb +5 -0
- data/lib/plurimath/math/function/unary_function.rb +72 -26
- data/lib/plurimath/math/function/underover.rb +25 -8
- data/lib/plurimath/math/function/underset.rb +19 -9
- data/lib/plurimath/math/function/vec.rb +5 -0
- data/lib/plurimath/math/number.rb +3 -3
- data/lib/plurimath/math/symbol.rb +13 -5
- data/lib/plurimath/mathml/parser.rb +2 -0
- data/lib/plurimath/mathml/transform.rb +23 -15
- data/lib/plurimath/omml/transform.rb +22 -10
- data/lib/plurimath/unitsml.rb +2 -1
- data/lib/plurimath/utility.rb +29 -28
- data/lib/plurimath/version.rb +1 -1
- metadata +3 -3
- data/lib/plurimath/math/function/scarry.rb +0 -12
data/lib/plurimath/utility.rb
CHANGED
@@ -21,6 +21,7 @@ module Plurimath
|
|
21
21
|
mathrm: Math::Function::FontStyle::Normal,
|
22
22
|
textrm: Math::Function::FontStyle::Normal,
|
23
23
|
italic: Math::Function::FontStyle::Italic,
|
24
|
+
mathit: Math::Function::FontStyle::Italic,
|
24
25
|
mathbf: Math::Function::FontStyle::Bold,
|
25
26
|
textbf: Math::Function::FontStyle::Bold,
|
26
27
|
script: Math::Function::FontStyle::Script,
|
@@ -46,6 +47,8 @@ module Plurimath
|
|
46
47
|
arccos
|
47
48
|
arcsin
|
48
49
|
arctan
|
50
|
+
liminf
|
51
|
+
limsup
|
49
52
|
right
|
50
53
|
sech
|
51
54
|
sinh
|
@@ -58,6 +61,7 @@ module Plurimath
|
|
58
61
|
min
|
59
62
|
sec
|
60
63
|
sin
|
64
|
+
sup
|
61
65
|
deg
|
62
66
|
det
|
63
67
|
dim
|
@@ -65,6 +69,8 @@ module Plurimath
|
|
65
69
|
gcd
|
66
70
|
glb
|
67
71
|
lub
|
72
|
+
lcm
|
73
|
+
ker
|
68
74
|
tan
|
69
75
|
cos
|
70
76
|
cot
|
@@ -103,14 +109,13 @@ module Plurimath
|
|
103
109
|
table = []
|
104
110
|
table_data = []
|
105
111
|
table_row = []
|
106
|
-
table_separators = ["&", "\\\\"].freeze
|
107
112
|
organize_options(array, column_align) if options
|
108
113
|
string_columns = column_align&.map(&:value)
|
109
114
|
array.each do |data|
|
110
|
-
if data
|
115
|
+
if data&.separate_table
|
111
116
|
table_row << Math::Function::Td.new(filter_table_data(table_data).compact)
|
112
117
|
table_data = []
|
113
|
-
if data.
|
118
|
+
if data.linebreak
|
114
119
|
organize_tds(table_row.flatten, string_columns.dup, options)
|
115
120
|
table << Math::Function::Tr.new(table_row)
|
116
121
|
table_row = []
|
@@ -230,12 +235,10 @@ module Plurimath
|
|
230
235
|
end
|
231
236
|
|
232
237
|
def filter_values(array)
|
233
|
-
return array unless array.is_a?(Array)
|
238
|
+
return array unless array.is_a?(Array) || array.is_a?(Math::Formula)
|
234
239
|
|
235
|
-
array = array.flatten.compact
|
236
|
-
if array.length > 1
|
237
|
-
return Math::Formula.new(array)
|
238
|
-
end
|
240
|
+
array = array.is_a?(Math::Formula) ? array.value : array.flatten.compact
|
241
|
+
return Math::Formula.new(array) if array.length > 1
|
239
242
|
|
240
243
|
array.first
|
241
244
|
end
|
@@ -266,11 +269,6 @@ module Plurimath
|
|
266
269
|
)
|
267
270
|
end
|
268
271
|
|
269
|
-
def find_class_name(object)
|
270
|
-
new_object = object.value.first.parameter_one if object.is_a?(Math::Formula)
|
271
|
-
get_class(new_object) unless new_object.nil?
|
272
|
-
end
|
273
|
-
|
274
272
|
def find_pos_chr(fonts_array, key)
|
275
273
|
fonts_array.find { |d| d.is_a?(Hash) && d[key] }
|
276
274
|
end
|
@@ -287,7 +285,8 @@ module Plurimath
|
|
287
285
|
end
|
288
286
|
|
289
287
|
def symbol_value(object, value)
|
290
|
-
object.is_a?(Math::Symbol) && object.value.include?(value)
|
288
|
+
(object.is_a?(Math::Symbol) && object.value.include?(value)) ||
|
289
|
+
(value == "\\\\" && object.is_a?(Math::Function::Linebreak))
|
291
290
|
end
|
292
291
|
|
293
292
|
def td_value(td_object)
|
@@ -299,20 +298,18 @@ module Plurimath
|
|
299
298
|
td_object
|
300
299
|
end
|
301
300
|
|
302
|
-
def mathml_unary_classes(text_array, omml: false)
|
301
|
+
def mathml_unary_classes(text_array, omml: false, unicode_only: false)
|
303
302
|
return [] if text_array.empty?
|
304
303
|
|
305
304
|
compacted = text_array.compact
|
306
|
-
|
307
|
-
compacted.first
|
308
|
-
else
|
309
|
-
compacted.join
|
310
|
-
end
|
311
|
-
return string unless string.is_a?(String)
|
305
|
+
return filter_values(compacted) unless compacted.any?(String)
|
312
306
|
|
307
|
+
string = compacted.join
|
313
308
|
classes = Mathml::Constants::CLASSES
|
314
309
|
unicode = string_to_html_entity(string)
|
315
|
-
|
310
|
+
return Math::Symbol.new(unicode) if unicode_only && unicode
|
311
|
+
|
312
|
+
symbol = Mathml::Constants::UNICODE_SYMBOLS[unicode.strip.to_sym]
|
316
313
|
if classes.include?(symbol&.strip)
|
317
314
|
get_class(symbol.strip).new
|
318
315
|
elsif classes.any?(string&.strip)
|
@@ -347,17 +344,21 @@ module Plurimath
|
|
347
344
|
value
|
348
345
|
end
|
349
346
|
|
350
|
-
def join_attr_value(attrs, value)
|
347
|
+
def join_attr_value(attrs, value, unicode_only: false)
|
351
348
|
if value.any?(String)
|
352
|
-
new_value = mathml_unary_classes(value)
|
349
|
+
new_value = mathml_unary_classes(value, unicode_only: unicode_only)
|
353
350
|
array_value = Array(new_value)
|
354
|
-
attrs.nil? ? array_value : join_attr_value(attrs, array_value)
|
351
|
+
attrs.nil? ? array_value : join_attr_value(attrs, array_value, unicode_only: unicode_only)
|
355
352
|
elsif attrs.nil?
|
356
353
|
value
|
357
354
|
elsif attrs.is_a?(String) && ["solid", "none"].include?(attrs.split.first.downcase)
|
358
355
|
table_separator(attrs.split, value)
|
359
|
-
elsif attrs.is_a?(Hash)
|
360
|
-
|
356
|
+
elsif attrs.is_a?(Hash)
|
357
|
+
if (attrs.key?(:accent) || attrs.key?(:accentunder))
|
358
|
+
attr_is_accent(attrs, value)
|
359
|
+
elsif attrs.key?(:linebreak)
|
360
|
+
Math::Function::Linebreak.new(value.first, attrs)
|
361
|
+
end
|
361
362
|
elsif attrs.is_a?(Math::Core)
|
362
363
|
attr_is_function(attrs, value)
|
363
364
|
end
|
@@ -470,7 +471,7 @@ module Plurimath
|
|
470
471
|
end
|
471
472
|
|
472
473
|
def valid_class(object)
|
473
|
-
text = object.
|
474
|
+
text = object.extract_class_name_from_text
|
474
475
|
(object.extractable? && Asciimath::Constants::SUB_SUP_CLASSES.include?(text)) ||
|
475
476
|
Latex::Constants::SYMBOLS[text.to_sym] == :power_base
|
476
477
|
end
|
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.
|
4
|
+
version: 0.7.1
|
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-
|
11
|
+
date: 2023-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- lib/plurimath/math/function/liminf.rb
|
136
136
|
- lib/plurimath/math/function/limits.rb
|
137
137
|
- lib/plurimath/math/function/limsup.rb
|
138
|
+
- lib/plurimath/math/function/linebreak.rb
|
138
139
|
- lib/plurimath/math/function/ln.rb
|
139
140
|
- lib/plurimath/math/function/log.rb
|
140
141
|
- lib/plurimath/math/function/longdiv.rb
|
@@ -162,7 +163,6 @@ files:
|
|
162
163
|
- lib/plurimath/math/function/root.rb
|
163
164
|
- lib/plurimath/math/function/rule.rb
|
164
165
|
- lib/plurimath/math/function/scarries.rb
|
165
|
-
- lib/plurimath/math/function/scarry.rb
|
166
166
|
- lib/plurimath/math/function/sec.rb
|
167
167
|
- lib/plurimath/math/function/sech.rb
|
168
168
|
- lib/plurimath/math/function/semantics.rb
|