plurimath 0.8.15 → 0.8.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1783cc0eadbbb06f0f9f8cf7ec7c1c67151ae7c85e5a8f6bd8d4f325a2823fc7
4
- data.tar.gz: 8f59467437e61ab7e53d828256967f014eed2417400f6df29d3a9a037b7f9545
3
+ metadata.gz: 9de48dbb937f65122d95415947e417692fc0d5a11d48e7a1caa1b54f3c4465bf
4
+ data.tar.gz: 2f1e748929a2569b2e7b291381624648fc11a3fc2b93d44406a9a92c2fa21068
5
5
  SHA512:
6
- metadata.gz: 91199c6a3c324fd5ac78147c402ba60ff1dc972d4f99dd33006230700f0b9aa07042e38f677f8440a6873663e977c1c0f9c6db09ce04dac1206535f99cdc43da
7
- data.tar.gz: f21bffba36efc43968174c803319992edde54f4cf64e9dc840d5fa7fe9637898c01068d30021b933972ce349615d82ca477dd79ff63142178bd981feb8c09fd5
6
+ metadata.gz: c8054b884f09d830a6b7a1e98d1c5679434540f6ad018c4135654f3ea4495336aa4971e43be842def4ad0fc139664ffa477c12407cef5553c55c46f9d0f2037d
7
+ data.tar.gz: 852c85f6edab822fc8e880ceded6913283be3e65300069be0fd7a898b6d057bb1143fee9f1e5b182a9dee36213c564e11038cb38040b58586c5acbd16b0d063d
@@ -1,9 +1,4 @@
1
- require_relative "supported_locales"
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
@@ -14,6 +14,7 @@ module Plurimath
14
14
  group_digits: 3,
15
15
  significant: 0,
16
16
  digit_count: 0,
17
+ precision: 0,
17
18
  decimal: ".",
18
19
  group: ",",
19
20
  times: "x",
@@ -21,16 +22,17 @@ module Plurimath
21
22
  }.freeze
22
23
 
23
24
  def initialize(locale: "en", string_format: nil, options: {}, precision: nil)
24
- @precision = precision
25
25
  super(
26
26
  locale,
27
27
  localize_number: string_format,
28
28
  localizer_symbols: set_default_options(options),
29
+ precision: precision,
29
30
  )
30
31
  end
31
32
 
32
33
  def set_default_options(options)
33
34
  default_options = self.class::DEFAULT_OPTIONS
35
+ self.precision ||= default_options[:precision]
34
36
  options ||= default_options
35
37
  options[:fraction_group_digits] ||= default_options[:fraction_group_digits]
36
38
  options[:fraction_group] ||= default_options[:fraction_group]
@@ -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(/\d+(\.[0-9]+)|\d/).repeat(1).as(:number) |
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("}"))
@@ -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(display_style: displaystyle, split_on_linebreak: false, intent: false, formatter: nil)
52
- options = { formatter: formatter }
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
 
@@ -329,6 +336,12 @@ module Plurimath
329
336
  end
330
337
  end
331
338
 
339
+ def wrapped_unitsml_xml(mrow)
340
+ node = Plurimath.xml_engine.load("<mrow>#{unitsml_xml}</mrow>")
341
+ mrow.attributes[:xref] = node.locate("*/@id").first if node.locate("*/@id").any?
342
+ node.nodes
343
+ end
344
+
332
345
  def space_element(node)
333
346
  element = (ox_element("mo") << "&#x2062;")
334
347
  element[:rspace] = "thickmathspace" if text_in_tag?(node.xml_nodes.nodes)
@@ -8,6 +8,7 @@ require_relative "html"
8
8
  require_relative "latex"
9
9
  require_relative "unitsml"
10
10
  require_relative "number_formatter"
11
+ require_relative "formatter/standard"
11
12
  require_relative "math/core"
12
13
  require_relative "math/number"
13
14
  require_relative "math/symbols"
@@ -1,17 +1,17 @@
1
- require_relative "formatter/numeric_formatter"
2
- require_relative "formatter/supported_locales"
1
+ require_relative "formatter"
3
2
 
4
3
  module Plurimath
5
4
  class NumberFormatter
6
- attr_accessor :locale, :localize_number, :localizer_symbols
5
+ attr_accessor :locale, :localize_number, :localizer_symbols, :precision
7
6
 
8
- def initialize(locale = "en", localize_number: nil, localizer_symbols: {})
7
+ def initialize(locale = "en", localize_number: nil, localizer_symbols: {}, precision: nil)
9
8
  @locale = supported_locale(locale)
10
9
  @localize_number = localize_number
11
10
  @localizer_symbols = localizer_symbols
11
+ @precision = precision
12
12
  end
13
13
 
14
- def localized_number(number_string, locale: @locale, precision: nil, format: {})
14
+ def localized_number(number_string, locale: @locale, precision: @precision, format: {})
15
15
  prev_symbols = symbols(locale).dup
16
16
  Formatter::NumericFormatter.new(
17
17
  supported_locale(locale),
@@ -11,9 +11,11 @@ module Plurimath
11
11
  end
12
12
 
13
13
  def to_formula
14
- formula = ::Unitsml.parse(text).to_plurimath
14
+ unitsml = ::Unitsml.parse(text)
15
+ formula = unitsml.to_plurimath
15
16
  formula.unitsml = true
16
17
  formula.input_string = text
18
+ formula.unitsml_xml = unitsml.to_xml
17
19
  formula
18
20
  end
19
21
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Plurimath
4
- VERSION = "0.8.15"
4
+ VERSION = "0.8.16"
5
5
  end
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.8.15
4
+ version: 0.8.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-09-11 00:00:00.000000000 Z
11
+ date: 2024-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet
@@ -102,6 +102,7 @@ files:
102
102
  - lib/plurimath/asciimath/parser.rb
103
103
  - lib/plurimath/asciimath/transform.rb
104
104
  - lib/plurimath/cli.rb
105
+ - lib/plurimath/formatter.rb
105
106
  - lib/plurimath/formatter/number_formatter.rb
106
107
  - lib/plurimath/formatter/numbers/base.rb
107
108
  - lib/plurimath/formatter/numbers/fraction.rb