plurimath 0.8.15 → 0.8.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/gen_docs.yml +10 -8
- data/README.adoc +4 -0
- data/Rakefile +55 -8
- data/intent_supported_classes.adoc +82 -0
- data/lib/plurimath/formatter/number_formatter.rb +6 -6
- data/lib/plurimath/formatter/numeric_formatter.rb +6 -8
- data/lib/plurimath/formatter/standard.rb +5 -1
- data/lib/plurimath/formatter.rb +14 -0
- data/lib/plurimath/latex/parse.rb +2 -1
- data/lib/plurimath/math/core.rb +2 -2
- data/lib/plurimath/math/formula.rb +26 -6
- data/lib/plurimath/math/function/abs.rb +5 -1
- data/lib/plurimath/math/function/fenced.rb +19 -7
- data/lib/plurimath/math/function/frac.rb +8 -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/nary.rb +13 -1
- data/lib/plurimath/math/function/oint.rb +5 -1
- data/lib/plurimath/math/function/prod.rb +5 -1
- 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 +12 -0
- data/lib/plurimath/math/function/unary_function.rb +5 -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/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/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/upcase_dd.rb +4 -0
- data/lib/plurimath/math.rb +1 -0
- data/lib/plurimath/mathml/transform.rb +2 -0
- data/lib/plurimath/number_formatter.rb +5 -5
- data/lib/plurimath/unitsml.rb +3 -1
- data/lib/plurimath/utility/intent_encoding.rb +21 -21
- data/lib/plurimath/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f232ae9e7e95e99742976ce89205bd3a21269cfaf2df31941de6fbd9594aff9e
|
4
|
+
data.tar.gz: 93a5a1f1e6faf693ea589c17cb0429aaba81426c838ce9c993747c8db185beb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41e48748d0e213ee5910a6e5e6fcf2d012e87bc7a0731d1036b2e432e40677460c841fe50340763cf7c8778a9ac30ed91c2f1b6795b601bb2ad843f148a2cebc
|
7
|
+
data.tar.gz: 5262d5b7474b0544c82937e50e1b44342d2b2b64aa85adadf4b9a5ec0f9afbbfb23db8d45e514c25745c326c22aef8eae8321ad699a803e04ed084793c9d86e3
|
@@ -9,6 +9,13 @@ on:
|
|
9
9
|
jobs:
|
10
10
|
generate_docs:
|
11
11
|
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
filename:
|
15
|
+
- supported_parens_list.adoc
|
16
|
+
- supported_symbols_list.adoc
|
17
|
+
- intent_supported_classes.adoc
|
18
|
+
|
12
19
|
steps:
|
13
20
|
- uses: actions/checkout@v4
|
14
21
|
|
@@ -17,12 +24,7 @@ jobs:
|
|
17
24
|
ruby-version: '3.3'
|
18
25
|
bundler-cache: true
|
19
26
|
|
20
|
-
- name: Generate
|
21
|
-
run: |
|
22
|
-
rm -f supported_parens_list.adoc
|
23
|
-
bundle exec rake supported_parens_list.adoc
|
24
|
-
|
25
|
-
- name: Generate supported_symbols_list.adoc
|
27
|
+
- name: Generate documentation
|
26
28
|
run: |
|
27
|
-
rm -f
|
28
|
-
bundle exec rake
|
29
|
+
rm -f ${{ matrix.filename }}
|
30
|
+
bundle exec rake ${{ matrix.filename }}
|
data/README.adoc
CHANGED
@@ -583,6 +583,10 @@ Consult the following tables for details on supported symbols and parentheses:
|
|
583
583
|
* link:supported_symbols_list.adoc[Symbols]
|
584
584
|
* link:supported_parens_list.adoc[Parentheses]
|
585
585
|
|
586
|
+
The following table shows the classes that support MathML "intent" encoding:
|
587
|
+
|
588
|
+
* link:intent_supported_classes.adoc[Classes that support MathML Intent]
|
589
|
+
|
586
590
|
NOTE: To regenerate these files, delete them and run:
|
587
591
|
`bundle exec rake supported_symbols_list.adoc`.
|
588
592
|
|
data/Rakefile
CHANGED
@@ -18,6 +18,7 @@ end
|
|
18
18
|
DOC_FILES = {
|
19
19
|
"supported_parens_list.adoc" => :paren,
|
20
20
|
"supported_symbols_list.adoc" => :symbols,
|
21
|
+
"intent_supported_classes.adoc" => :intent,
|
21
22
|
}.freeze
|
22
23
|
|
23
24
|
DOC_FILES.each do |file_name, type|
|
@@ -28,17 +29,26 @@ end
|
|
28
29
|
|
29
30
|
def write_doc_file(doc_file, type:)
|
30
31
|
File.open(doc_file, "a") do |file|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
file_name = File.basename(klass.const_source_location(:INPUT).first, ".rb")
|
37
|
-
file.write(documentation_content(file_name, klass))
|
32
|
+
case type
|
33
|
+
when :intent
|
34
|
+
write_intent_doc_file(file)
|
35
|
+
else
|
36
|
+
paren_symbols_doc(file, type)
|
38
37
|
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def paren_symbols_doc(file, type)
|
42
|
+
file.write(file_header)
|
39
43
|
|
40
|
-
|
44
|
+
Plurimath::Utility.send(:"#{type}_files").each do |klass|
|
45
|
+
next if klass::INPUT.empty?
|
46
|
+
|
47
|
+
file_name = File.basename(klass.const_source_location(:INPUT).first, ".rb")
|
48
|
+
file.write(documentation_content(file_name, klass))
|
41
49
|
end
|
50
|
+
|
51
|
+
file.write("|===")
|
42
52
|
end
|
43
53
|
|
44
54
|
def documentation_content(file_name, klass)
|
@@ -75,4 +85,41 @@ def format_input(format, klass)
|
|
75
85
|
end.join(", ").gsub(/\|/, "\\|")
|
76
86
|
end
|
77
87
|
|
88
|
+
def write_intent_doc_file(file)
|
89
|
+
file.write("= List of classes supporting `intent` encoding with relevant values\n")
|
90
|
+
|
91
|
+
intent_classes.each do |klass|
|
92
|
+
intents = klass.new.intent_names.values.map do |intent|
|
93
|
+
"`#{intent}`"
|
94
|
+
end
|
95
|
+
|
96
|
+
file.write(
|
97
|
+
<<~INTENT
|
98
|
+
|
99
|
+
* `#{klass.name.gsub("Plurimath::Math::", "")}`
|
100
|
+
** #{intents.join("\n** ")}
|
101
|
+
INTENT
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
file.write("\nIntent for unary classes like, sin, cos, tan, etc. will be `Function`.\n")
|
106
|
+
end
|
107
|
+
|
108
|
+
def intent_classes
|
109
|
+
intent_classes = [
|
110
|
+
Plurimath::Math::Function::TernaryFunction.descendants,
|
111
|
+
Plurimath::Math::Function::BinaryFunction.descendants,
|
112
|
+
Plurimath::Math::Function::UnaryFunction.descendants,
|
113
|
+
Plurimath::Math::Function::Table.descendants,
|
114
|
+
Plurimath::Math::Symbols::Symbol.descendants,
|
115
|
+
Plurimath::Math::Function::UnaryFunction,
|
116
|
+
Plurimath::Math::Function::Table,
|
117
|
+
Plurimath::Math::Function::Nary,
|
118
|
+
Plurimath::Math::Formula,
|
119
|
+
].flatten
|
120
|
+
intent_classes.select do |klass|
|
121
|
+
klass.instance_methods(false).include?(:intent_names)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
78
125
|
task :default => :spec
|
@@ -0,0 +1,82 @@
|
|
1
|
+
= List of classes supporting `intent` encoding with relevant values
|
2
|
+
|
3
|
+
* `Function::Fenced`
|
4
|
+
** `open-closed-interval`
|
5
|
+
** `closed-open-interval`
|
6
|
+
** `binomial-coefficient`
|
7
|
+
** `closed-interval`
|
8
|
+
** `open-interval`
|
9
|
+
** `:fenced`
|
10
|
+
|
11
|
+
* `Function::Int`
|
12
|
+
** `:integral`
|
13
|
+
|
14
|
+
* `Function::Oint`
|
15
|
+
** `:contour integral`
|
16
|
+
|
17
|
+
* `Function::Prod`
|
18
|
+
** `:product`
|
19
|
+
|
20
|
+
* `Function::Sum`
|
21
|
+
** `:sum`
|
22
|
+
|
23
|
+
* `Function::Frac`
|
24
|
+
** `:derivative`
|
25
|
+
** `:partial-derivative`
|
26
|
+
|
27
|
+
* `Function::Inf`
|
28
|
+
** `:function`
|
29
|
+
|
30
|
+
* `Function::Intent`
|
31
|
+
** `:derivative`
|
32
|
+
|
33
|
+
* `Function::Lim`
|
34
|
+
** `:function`
|
35
|
+
|
36
|
+
* `Function::Abs`
|
37
|
+
** `absolute-value`
|
38
|
+
|
39
|
+
* `Symbols::Dd`
|
40
|
+
** `ⅆ`
|
41
|
+
|
42
|
+
* `Symbols::Ii`
|
43
|
+
** `ⅈ`
|
44
|
+
|
45
|
+
* `Symbols::Intercal`
|
46
|
+
** `transpose`
|
47
|
+
|
48
|
+
* `Symbols::Jj`
|
49
|
+
** `ⅉ`
|
50
|
+
|
51
|
+
* `Symbols::UpcaseDd`
|
52
|
+
** `ⅅ`
|
53
|
+
|
54
|
+
* `Function::UnaryFunction`
|
55
|
+
** `:function`
|
56
|
+
|
57
|
+
* `Function::Table`
|
58
|
+
** `:curly-braced-matrix`
|
59
|
+
** `:parenthesized-matrix`
|
60
|
+
** `:bracketed-matrix`
|
61
|
+
** `:normed-matrix`
|
62
|
+
** `:determinant`
|
63
|
+
** `:equations`
|
64
|
+
** `:cases`
|
65
|
+
|
66
|
+
* `Function::Nary`
|
67
|
+
** `:n-ary`
|
68
|
+
** `:anticlockwise contour integral`
|
69
|
+
** `:coproduct`
|
70
|
+
** `:quadruple integral`
|
71
|
+
** `:triple integral`
|
72
|
+
** `:double integral`
|
73
|
+
** `:clockwise contour integral`
|
74
|
+
** `:volume integral`
|
75
|
+
** `:surface integral`
|
76
|
+
** `:contour integral`
|
77
|
+
|
78
|
+
* `Formula`
|
79
|
+
** `:partial-derivative`
|
80
|
+
** `:derivative`
|
81
|
+
|
82
|
+
Intent for unary classes like, sin, cos, tan, etc. will be `Function`.
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Plurimath
|
4
4
|
module Formatter
|
5
5
|
class NumberFormatter
|
6
|
-
attr_reader :number, :data_reader
|
6
|
+
attr_reader :number, :data_reader, :prefix
|
7
7
|
|
8
8
|
STRING_SYMBOLS = {
|
9
9
|
dot: ".".freeze,
|
@@ -13,6 +13,7 @@ module Plurimath
|
|
13
13
|
def initialize(number, data_reader = {})
|
14
14
|
@number = number
|
15
15
|
@data_reader = data_reader
|
16
|
+
@prefix = "-" if number.negative?
|
16
17
|
end
|
17
18
|
|
18
19
|
def format(precision: nil)
|
@@ -20,16 +21,15 @@ module Plurimath
|
|
20
21
|
int, frac, integer_format, fraction_format, signif_format = *partition_tokens(number)
|
21
22
|
result = integer_format.apply(int, data_reader)
|
22
23
|
result << fraction_format.apply(frac, data_reader, int) if frac
|
23
|
-
|
24
24
|
result = signif_format.apply(result, integer_format, fraction_format)
|
25
|
-
|
26
|
-
result
|
25
|
+
result = "+#{result}" if number.positive? && data_reader[:number_sign] == :plus
|
26
|
+
"#{prefix}#{result}"
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
30
30
|
|
31
31
|
def partition_tokens(number)
|
32
|
-
int, fraction = parse_number(number
|
32
|
+
int, fraction = parse_number(number)
|
33
33
|
[
|
34
34
|
int,
|
35
35
|
fraction,
|
@@ -46,7 +46,7 @@ module Plurimath
|
|
46
46
|
parts.size == 2 ? parts[1].size : 0
|
47
47
|
end
|
48
48
|
|
49
|
-
def parse_number(number, options =
|
49
|
+
def parse_number(number, options = data_reader)
|
50
50
|
precision = options[:precision] || precision_from(number)
|
51
51
|
|
52
52
|
num = if precision == 0
|
@@ -1,9 +1,4 @@
|
|
1
|
-
|
2
|
-
require_relative "numbers/base"
|
3
|
-
require_relative "numbers/integer"
|
4
|
-
require_relative "numbers/fraction"
|
5
|
-
require_relative "numbers/significant"
|
6
|
-
require_relative "number_formatter"
|
1
|
+
# frozen_string_literal: true
|
7
2
|
|
8
3
|
module Plurimath
|
9
4
|
module Formatter
|
@@ -77,7 +72,9 @@ module Plurimath
|
|
77
72
|
|
78
73
|
def update_exponent_value(number_str)
|
79
74
|
exponent_number = BigDecimal(number_str) - 1
|
80
|
-
|
75
|
+
return exponent_number.to_i if exponent_number.negative? || @exponent_sign != :plus
|
76
|
+
|
77
|
+
"+#{exponent_number.to_i}"
|
81
78
|
end
|
82
79
|
|
83
80
|
def notation_chars(num_str)
|
@@ -117,7 +114,8 @@ module Plurimath
|
|
117
114
|
|
118
115
|
chars.first.delete!(".")
|
119
116
|
chars.first.insert(index + 1, ".") unless chars.first[index + 2].nil?
|
120
|
-
|
117
|
+
exponent = chars[-1]
|
118
|
+
chars[-1] = "#{"+" if exponent.to_s.start_with?("+")}#{exponent.to_i - index}"
|
121
119
|
end
|
122
120
|
end
|
123
121
|
end
|
@@ -10,10 +10,12 @@ module Plurimath
|
|
10
10
|
fraction_group_digits: 3,
|
11
11
|
exponent_sign: "plus",
|
12
12
|
fraction_group: "'",
|
13
|
+
number_sign: "plus",
|
13
14
|
notation: :basic,
|
14
15
|
group_digits: 3,
|
15
16
|
significant: 0,
|
16
17
|
digit_count: 0,
|
18
|
+
precision: 0,
|
17
19
|
decimal: ".",
|
18
20
|
group: ",",
|
19
21
|
times: "x",
|
@@ -21,21 +23,23 @@ module Plurimath
|
|
21
23
|
}.freeze
|
22
24
|
|
23
25
|
def initialize(locale: "en", string_format: nil, options: {}, precision: nil)
|
24
|
-
@precision = precision
|
25
26
|
super(
|
26
27
|
locale,
|
27
28
|
localize_number: string_format,
|
28
29
|
localizer_symbols: set_default_options(options),
|
30
|
+
precision: precision,
|
29
31
|
)
|
30
32
|
end
|
31
33
|
|
32
34
|
def set_default_options(options)
|
33
35
|
default_options = self.class::DEFAULT_OPTIONS
|
36
|
+
self.precision ||= default_options[:precision]
|
34
37
|
options ||= default_options
|
35
38
|
options[:fraction_group_digits] ||= default_options[:fraction_group_digits]
|
36
39
|
options[:fraction_group] ||= default_options[:fraction_group]
|
37
40
|
options[:exponent_sign] ||= default_options[:exponent_sign]
|
38
41
|
options[:group_digits] ||= default_options[:group_digits]
|
42
|
+
options[:number_sign] ||= default_options[:number_sign]
|
39
43
|
options[:significant] ||= default_options[:significant]
|
40
44
|
options[:notation] ||= default_options[:notation]
|
41
45
|
options[:decimal] ||= default_options[:decimal]
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "formatter/numeric_formatter"
|
4
|
+
require_relative "formatter/supported_locales"
|
5
|
+
require_relative "formatter/numbers/base"
|
6
|
+
require_relative "formatter/numbers/integer"
|
7
|
+
require_relative "formatter/numbers/fraction"
|
8
|
+
require_relative "formatter/numbers/significant"
|
9
|
+
require_relative "formatter/number_formatter"
|
10
|
+
|
11
|
+
module Plurimath
|
12
|
+
module Formatter
|
13
|
+
end
|
14
|
+
end
|
@@ -97,7 +97,8 @@ module Plurimath
|
|
97
97
|
rparen.absent? >> symbol_class_commands |
|
98
98
|
(slash >> math_operators_classes) |
|
99
99
|
match["a-zA-Z"].as(:symbols) |
|
100
|
-
match
|
100
|
+
(match["0-9"].repeat(0) >> str(".").maybe >> match["0-9"].repeat(1)).as(:number) |
|
101
|
+
match["0-9"].repeat(1).as(:number) |
|
101
102
|
(str("\\\\").as("\\\\") >> match(/\s/).repeat) |
|
102
103
|
str("\\ ").as(:space) |
|
103
104
|
(str("\\operatorname{") >> match("[^}]").repeat.as(:symbols) >> str("}"))
|
data/lib/plurimath/math/core.rb
CHANGED
@@ -344,10 +344,10 @@ module Plurimath
|
|
344
344
|
ox_element("mrow") << xml_engine_node
|
345
345
|
end
|
346
346
|
|
347
|
-
def intentify(tag, intent, func_name:, intent_name: nil)
|
347
|
+
def intentify(tag, intent, func_name:, intent_name: nil, options: {})
|
348
348
|
return tag unless intent
|
349
349
|
|
350
|
-
Utility::IntentEncoding.send("#{func_name}_intent", tag, intent_name)
|
350
|
+
Utility::IntentEncoding.send("#{func_name}_intent", tag, intent_name, options)
|
351
351
|
end
|
352
352
|
|
353
353
|
def masked_tag(tag)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Plurimath
|
4
4
|
module Math
|
5
5
|
class Formula < Core
|
6
|
-
attr_accessor :value, :left_right_wrapper, :displaystyle, :input_string, :unitsml
|
6
|
+
attr_accessor :value, :left_right_wrapper, :displaystyle, :input_string, :unitsml, :unitsml_xml
|
7
7
|
|
8
8
|
MATH_ZONE_TYPES = %i[
|
9
9
|
omml
|
@@ -48,8 +48,14 @@ module Plurimath
|
|
48
48
|
parse_error!(:asciimath)
|
49
49
|
end
|
50
50
|
|
51
|
-
def to_mathml(
|
52
|
-
|
51
|
+
def to_mathml(
|
52
|
+
intent: false,
|
53
|
+
formatter: nil,
|
54
|
+
unitsml_xml: nil,
|
55
|
+
split_on_linebreak: false,
|
56
|
+
display_style: displaystyle
|
57
|
+
)
|
58
|
+
options = { formatter: formatter, unitsml_xml: unitsml_xml }
|
53
59
|
return line_breaked_mathml(display_style, intent, options: options) if split_on_linebreak
|
54
60
|
|
55
61
|
math_attrs = {
|
@@ -80,6 +86,7 @@ module Plurimath
|
|
80
86
|
attributes = intent_attribute(mathml_value) if intent
|
81
87
|
mrow = ox_element("mrow", attributes: attributes)
|
82
88
|
mrow[:unitsml] = true if unitsml
|
89
|
+
mathml_value += wrapped_unitsml_xml(mrow) if unitsml_xml && options[:unitsml_xml]
|
83
90
|
Utility.update_nodes(mrow, mathml_value)
|
84
91
|
end
|
85
92
|
|
@@ -290,6 +297,13 @@ module Plurimath
|
|
290
297
|
true if value&.first&.mini_sized?
|
291
298
|
end
|
292
299
|
|
300
|
+
def intent_names
|
301
|
+
{
|
302
|
+
partial_derivative: ":partial-derivative",
|
303
|
+
derivative: ":derivative",
|
304
|
+
}
|
305
|
+
end
|
306
|
+
|
293
307
|
protected
|
294
308
|
|
295
309
|
def boolean_display_style(display_style = displaystyle)
|
@@ -329,6 +343,12 @@ module Plurimath
|
|
329
343
|
end
|
330
344
|
end
|
331
345
|
|
346
|
+
def wrapped_unitsml_xml(mrow)
|
347
|
+
node = Plurimath.xml_engine.load("<mrow>#{unitsml_xml}</mrow>")
|
348
|
+
mrow.attributes[:xref] = node.locate("*/@id").first if node.locate("*/@id").any?
|
349
|
+
node.nodes
|
350
|
+
end
|
351
|
+
|
332
352
|
def space_element(node)
|
333
353
|
element = (ox_element("mo") << "⁢")
|
334
354
|
element[:rspace] = "thickmathspace" if text_in_tag?(node.xml_nodes.nodes)
|
@@ -476,7 +496,7 @@ module Plurimath
|
|
476
496
|
prime_str = encode(nodes.last.nodes.first) if valid_prime?(nodes.last)
|
477
497
|
second_arg.insert(-1, prime_str) unless second_arg.match?(/[0-9]$/)
|
478
498
|
end
|
479
|
-
":
|
499
|
+
"#{intent_names[:partial_derivative]}(#{first_arg},$f,#{second_arg})"
|
480
500
|
end
|
481
501
|
|
482
502
|
def f_arg(tag_nodes, index)
|
@@ -548,7 +568,7 @@ module Plurimath
|
|
548
568
|
end
|
549
569
|
break
|
550
570
|
end
|
551
|
-
intent_name = ":derivative(1,#{second_arg},#{third_arg})"
|
571
|
+
intent_name = "#{intent_names[:derivative]}(1,#{second_arg},#{third_arg})"
|
552
572
|
mrow = ox_element("mrow", attributes: { intent: intent_name })
|
553
573
|
nodes.insert(0, Utility.update_nodes(mrow, mrow_nodes))
|
554
574
|
end
|
@@ -563,7 +583,7 @@ module Plurimath
|
|
563
583
|
|
564
584
|
if DERIVATIVE_CONSTS.include?(node.nodes[0]&.nodes&.first)
|
565
585
|
iteration += 1
|
566
|
-
node["intent"] = ":derivative#{derivative_intent_name(node.nodes[1], nodes[iteration..-1], type: node.name)}"
|
586
|
+
node["intent"] = "#{intent_names[:derivative]}#{derivative_intent_name(node.nodes[1], nodes[iteration..-1], type: node.name)}"
|
567
587
|
next_node = nodes[iteration]
|
568
588
|
case next_node.name
|
569
589
|
when "mi", "mrow"
|
@@ -14,7 +14,7 @@ module Plurimath
|
|
14
14
|
first_value = first_value&.insert(0, symbol) unless open_paren
|
15
15
|
first_value << symbol unless close_paren
|
16
16
|
mrow = Utility.update_nodes(ox_element("mrow"), first_value)
|
17
|
-
intentify(mrow, intent, func_name: :abs, intent_name: :
|
17
|
+
intentify(mrow, intent, func_name: :abs, intent_name: intent_names[:name])
|
18
18
|
end
|
19
19
|
|
20
20
|
def to_omml_without_math_tag(display_style, options:)
|
@@ -39,6 +39,10 @@ module Plurimath
|
|
39
39
|
"⒜#{unicodemath_parens(parameter_one, options: options)}"
|
40
40
|
end
|
41
41
|
|
42
|
+
def intent_names
|
43
|
+
{ name: "absolute-value" }
|
44
|
+
end
|
45
|
+
|
42
46
|
protected
|
43
47
|
|
44
48
|
def md_tag
|
@@ -39,6 +39,7 @@ module Plurimath
|
|
39
39
|
intent,
|
40
40
|
func_name: :interval_fence,
|
41
41
|
intent_name: intent_value(mrow_value, options: options),
|
42
|
+
options: intent_names,
|
42
43
|
)
|
43
44
|
end
|
44
45
|
|
@@ -145,6 +146,17 @@ module Plurimath
|
|
145
146
|
"#{parameter_one.to_unicodemath(options: options)}#{fenced_value}#{parameter_three.to_unicodemath(options: options)}"
|
146
147
|
end
|
147
148
|
|
149
|
+
def intent_names
|
150
|
+
{
|
151
|
+
open_closed_interval: "open-closed-interval",
|
152
|
+
closed_open_interval: "closed-open-interval",
|
153
|
+
binomial_coefficient: "binomial-coefficient",
|
154
|
+
closed_interval: "closed-interval",
|
155
|
+
open_interval: "open-interval",
|
156
|
+
fenced: ":fenced",
|
157
|
+
}
|
158
|
+
end
|
159
|
+
|
148
160
|
protected
|
149
161
|
|
150
162
|
def open_paren(dpr, options:)
|
@@ -253,11 +265,11 @@ module Plurimath
|
|
253
265
|
end
|
254
266
|
|
255
267
|
def intent_value(value, options:)
|
256
|
-
return
|
268
|
+
return :binomial_coefficient if binomial_coefficient?(value)
|
257
269
|
|
258
270
|
open_paren = symbol_or_paren(parameter_one, lang: :latex, options: options)
|
259
271
|
close_paren = symbol_or_paren(parameter_three, lang: :latex, options: options)
|
260
|
-
return
|
272
|
+
return :fenced unless interval_intent?(value, open_paren, close_paren)
|
261
273
|
|
262
274
|
interval_intent(value, open_paren, close_paren)
|
263
275
|
end
|
@@ -270,15 +282,15 @@ module Plurimath
|
|
270
282
|
def interval_intent(value, open_paren, close_paren)
|
271
283
|
case open_paren
|
272
284
|
when "("
|
273
|
-
|
285
|
+
:open_closed_interval if close_paren == ']'
|
274
286
|
when "["
|
275
|
-
return
|
287
|
+
return :closed_interval if close_paren == ']'
|
276
288
|
|
277
|
-
|
289
|
+
:closed_open_interval if (close_paren == '[' || close_paren == ')')
|
278
290
|
when "]"
|
279
|
-
return
|
291
|
+
return :open_closed_interval if close_paren == ']'
|
280
292
|
|
281
|
-
|
293
|
+
:open_interval if close_paren == '['
|
282
294
|
end
|
283
295
|
end
|
284
296
|
|
@@ -41,7 +41,7 @@ module Plurimath
|
|
41
41
|
frac_tag.set_attr(self.options.reject { |opt| opt == :choose }) if tag_name == "mfrac" && self.options
|
42
42
|
Utility.update_nodes(frac_tag, mathml_value)
|
43
43
|
update_derivative(frac_tag, mathml_value[0], mathml_value[1]) if intent
|
44
|
-
intentify(frac_tag, intent, func_name: :frac)
|
44
|
+
intentify(frac_tag, intent, func_name: :frac, options: intent_names)
|
45
45
|
end
|
46
46
|
|
47
47
|
def to_latex(options:)
|
@@ -98,6 +98,13 @@ module Plurimath
|
|
98
98
|
"#{first_value}⒞#{second_value}"
|
99
99
|
end
|
100
100
|
|
101
|
+
def intent_names
|
102
|
+
{
|
103
|
+
derivative: ":derivative",
|
104
|
+
partial_derivative: ":partial-derivative",
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
101
108
|
protected
|
102
109
|
|
103
110
|
def fpr_element
|
@@ -36,7 +36,7 @@ module Plurimath
|
|
36
36
|
parameter_two&.to_mathml_without_math_tag(intent, options: options),
|
37
37
|
],
|
38
38
|
)
|
39
|
-
intentify(inf_tag, intent, func_name: :function, intent_name: :
|
39
|
+
intentify(inf_tag, intent, func_name: :function, intent_name: intent_names[:name])
|
40
40
|
end
|
41
41
|
|
42
42
|
def to_omml_without_math_tag(display_style, options:)
|
@@ -57,6 +57,10 @@ module Plurimath
|
|
57
57
|
"inf#{sub_value(options: options)}#{sup_value(options: options)}"
|
58
58
|
end
|
59
59
|
|
60
|
+
def intent_names
|
61
|
+
{ name: ":function" }
|
62
|
+
end
|
63
|
+
|
60
64
|
protected
|
61
65
|
|
62
66
|
def sup_value(options:)
|
@@ -62,7 +62,7 @@ module Plurimath
|
|
62
62
|
wrap_mrow(parameter_three&.to_mathml_without_math_tag(intent, options: options), intent),
|
63
63
|
].flatten.compact,
|
64
64
|
)
|
65
|
-
intentify(mrow, intent, func_name: :naryand, intent_name: :
|
65
|
+
intentify(mrow, intent, func_name: :naryand, intent_name: intent_names[:name])
|
66
66
|
end
|
67
67
|
|
68
68
|
def to_omml_without_math_tag(display_style, options:)
|
@@ -116,6 +116,10 @@ module Plurimath
|
|
116
116
|
true
|
117
117
|
end
|
118
118
|
|
119
|
+
def intent_names
|
120
|
+
{ name: ":integral" }
|
121
|
+
end
|
122
|
+
|
119
123
|
protected
|
120
124
|
|
121
125
|
def sup_value(options:)
|
@@ -17,15 +17,19 @@ module Plurimath
|
|
17
17
|
"ⓘ#{first_value}"
|
18
18
|
end
|
19
19
|
|
20
|
+
def intent_names
|
21
|
+
{ name: ":derivative" }
|
22
|
+
end
|
23
|
+
|
20
24
|
private
|
21
25
|
|
22
26
|
def encoded_intent(tag)
|
23
|
-
if parameter_two.value ==
|
27
|
+
if parameter_two.value == intent_names[:name] && encodable?
|
24
28
|
field = parameter_one.value
|
25
29
|
unicode = encode(field[0].parameter_one.value)
|
26
30
|
unfenced_str = fence_value(tag.nodes[1].nodes[1..-2]) if tag.nodes[1]["intent"] == ":fenced"
|
27
31
|
fenced_str = "(#{unfenced_str})" unless unfenced_str.empty?
|
28
|
-
":
|
32
|
+
"#{intent_names[:name]}(1,#{unicode}#{fenced_str},#{unfenced_str})"
|
29
33
|
else
|
30
34
|
Utility.html_entity_to_unicode(parameter_two.value)
|
31
35
|
end
|
@@ -42,7 +42,7 @@ module Plurimath
|
|
42
42
|
parameter_two&.to_mathml_without_math_tag(intent, options: options),
|
43
43
|
],
|
44
44
|
)
|
45
|
-
intentify(lim_tag, intent, func_name: :function, intent_name: :
|
45
|
+
intentify(lim_tag, intent, func_name: :function, intent_name: intent_names[:name])
|
46
46
|
end
|
47
47
|
|
48
48
|
def to_omml_without_math_tag(display_style, options:)
|
@@ -64,6 +64,10 @@ module Plurimath
|
|
64
64
|
self.parameter_two = nil
|
65
65
|
end
|
66
66
|
end
|
67
|
+
|
68
|
+
def intent_names
|
69
|
+
{ name: ":function" }
|
70
|
+
end
|
67
71
|
end
|
68
72
|
end
|
69
73
|
end
|