asciimath2unitsml 0.2.2 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 559a334bc2dbe285ed496346392630e62b5c301fc23e521ff57a6f2161a3a0ed
4
- data.tar.gz: 981ab1de7d97ce54dd464d707217aab81bfb9be404686c52f3999ef3ec7f44af
3
+ metadata.gz: 2eabcf099e41ebc168ea5904e903893af61c95667e0f778fdf17e39e18fd867a
4
+ data.tar.gz: 6316d4d968b656249cd69b255e8c68f9f0c7307055fe55d205902c9409d21a9b
5
5
  SHA512:
6
- metadata.gz: fa493805c784f5f18bad7b16eecaf4e4bac7667e72088f5cf712017c8693703a0006122c827e42f8b4665ad5c3a75d8a86bf79ed361409db5555b77f0694f0c5
7
- data.tar.gz: 8c0cf5a14e1cba4e915266c838fd2eb2f019009cab9b029f14241d89c2f9c0f78bcb53b7f03712324fccbc9f4914b8f9af461cdc65037c63ee919e7cba4b4a14
6
+ metadata.gz: 4450d314da42fa0941730c668090c7d3bef43ccd8da4a9ad7e5b29a008dcb8abbf9935732229f988a58cbe624ec10eba52e2400efddb7b09a71b6fe51d9ee579
7
+ data.tar.gz: 66e66fee285dc9788006a58b98e0e3660b8e829aa29c601eb45a3d2ad263da31582df9267a2a93053f24d0ff89503092395b0ec1ff3ffe8d99ec6161b05a260c
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .rubocop-https--*
data/.rubocop.yml ADDED
@@ -0,0 +1,14 @@
1
+ # This project follows the Ribose OSS style guide.
2
+ # https://github.com/riboseinc/oss-guides
3
+ # All project-specific additions and overrides should be specified in this file.
4
+ inherit_from:
5
+ - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
6
+
7
+ # local repo-specific modifications
8
+
9
+ AllCops:
10
+ DisplayCopNames: false
11
+ StyleGuideCopsOnly: false
12
+ TargetRubyVersion: 2.4
13
+ Rails:
14
+ Enabled: true
data/README.adoc CHANGED
@@ -53,6 +53,8 @@ from UnitsDB. For example, `unitsml(cal_th/cm^2, name: langley)`.
53
53
  The unit-string gives the canonical representation of the unit, but SYMBOL is what will be rendered.
54
54
  For example, `unitsml(cal_th/cm^2, name: langley, symbol: La)`, or `unitsml(mm*s^-2, symbol: mm cdot s^-2)`.
55
55
  (All variables in SYMBOL are rendered upright, as is the default for units.)
56
+ * `unitsml(unit-string, multiplier: SYMBOL)` provides an alternate symbol for the multiliper of
57
+ units. The options are an XML entity, or the values `space` or `nospace` (for which see discussion under _Usage_).
56
58
 
57
59
  Standalone prefixes can be recognised by replacing the unit with hyphen; so `unitsml(p-)` corresponds
58
60
  to the standalone prefix "pico" (and is rendered as "p").
@@ -230,7 +232,7 @@ This table can be generated (in Asciidoc format) through `Asciimath2UnitsML::Con
230
232
  | ton | ton of TNT (energy equivalent): `ton_TNT` | ton of refrigeration (12 000 Btu_IT/h): `ton_refrigeration` | | | |
231
233
  | tsp | teaspoon: `tsp` | teaspoon (FDA): `tsp_label` | | | |
232
234
  | yd | yard: `yd` | yard (based on US survey foot): `yd_US_survey` | | | |
233
- | º | degree (degree of arc): `deg` | | | | |
235
+ | ° | degree (degree of arc): `deg` | | | | |
234
236
  | γ | gamma: `gamma` | | | | |
235
237
  | μ | micron: `micron` | | | | |
236
238
  | Ω | ohm: `Ohm` | | | | |
@@ -258,3 +260,4 @@ This table can be generated (in Asciidoc format) through `Asciimath2UnitsML::Con
258
260
  | °R | degree Rankine: `degR` | | | | |
259
261
  | ƛ~C~ | natural unit of length: `lambda-bar_C` | | | | |
260
262
  |===
263
+
@@ -57,7 +57,7 @@ Gem::Specification.new do |spec|
57
57
  spec.add_development_dependency "guard-rspec", "~> 4.7"
58
58
  spec.add_development_dependency "rake", "~> 12.0"
59
59
  spec.add_development_dependency "rspec", "~> 3.6"
60
- spec.add_development_dependency "rubocop", "= 0.54.0"
60
+ spec.add_development_dependency "rubocop", "~> 1.5.2"
61
61
  spec.add_development_dependency "simplecov", "~> 0.15"
62
62
  spec.add_development_dependency "timecop", "~> 0.9"
63
63
  spec.add_development_dependency "rexml"
@@ -10,21 +10,25 @@ require_relative "unit"
10
10
 
11
11
  module Asciimath2UnitsML
12
12
  MATHML_NS = "http://www.w3.org/1998/Math/MathML".freeze
13
- UNITSML_NS = "http://unitsml.nist.gov/2005".freeze
13
+ UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0".freeze
14
14
 
15
15
  class Conv
16
16
  def initialize(options = {})
17
- @dimensions_id = read_yaml("../unitsdb/dimensions.yaml").each_with_object({}) do |(k, v), m|
17
+ @dimensions_id = read_yaml("../unitsdb/dimensions.yaml").
18
+ each_with_object({}) do |(k, v), m|
18
19
  m[k.to_s] = UnitsDB::Dimension.new(k, v)
19
20
  end
20
- @prefixes_id = read_yaml("../unitsdb/prefixes.yaml").each_with_object({}) do |(k, v), m|
21
+ @prefixes_id = read_yaml("../unitsdb/prefixes.yaml").
22
+ each_with_object({}) do |(k, v), m|
21
23
  m[k] = UnitsDB::Prefix.new(k, v)
22
24
  end
23
25
  @prefixes = flip_name_and_symbol(@prefixes_id)
24
- @quantities = read_yaml("../unitsdb/quantities.yaml").each_with_object({}) do |(k, v), m|
26
+ @quantities = read_yaml("../unitsdb/quantities.yaml").
27
+ each_with_object({}) do |(k, v), m|
25
28
  m[k.to_s] = UnitsDB::Quantity.new(k, v)
26
29
  end
27
- @units_id = read_yaml("../unitsdb/units.yaml").each_with_object({}) do |(k, v), m|
30
+ @units_id = read_yaml("../unitsdb/units.yaml").
31
+ each_with_object({}) do |(k, v), m|
28
32
  m[k.to_s] = UnitsDB::Unit.new(k.to_s, v)
29
33
  end
30
34
  @units = flip_name_and_symbols(@units_id)
@@ -63,14 +67,16 @@ module Asciimath2UnitsML
63
67
  END
64
68
  end
65
69
 
66
- U2D = {
70
+ U2D = {
67
71
  "m" => { dimension: "Length", order: 1, symbol: "L" },
68
72
  "g" => { dimension: "Mass", order: 2, symbol: "M" },
69
73
  "kg" => { dimension: "Mass", order: 2, symbol: "M" },
70
74
  "s" => { dimension: "Time", order: 3, symbol: "T" },
71
75
  "A" => { dimension: "ElectricCurrent", order: 4, symbol: "I" },
72
- "K" => { dimension: "ThermodynamicTemperature", order: 5, symbol: "Theta" },
73
- "degK" => { dimension: "ThermodynamicTemperature", order: 5, symbol: "Theta" },
76
+ "K" => { dimension: "ThermodynamicTemperature", order: 5,
77
+ symbol: "Theta" },
78
+ "degK" => { dimension: "ThermodynamicTemperature", order: 5,
79
+ symbol: "Theta" },
74
80
  "mol" => { dimension: "AmountOfSubstance", order: 6, symbol: "N" },
75
81
  "cd" => { dimension: "LuminousIntensity", order: 7, symbol: "J" },
76
82
  "deg" => { dimension: "PlaneAngle", order: 8, symbol: "Phi" },
@@ -78,7 +84,9 @@ module Asciimath2UnitsML
78
84
 
79
85
  def units2dimensions(units)
80
86
  norm = decompose_units(units)
81
- return if norm.any? { |u| u[:unit] == "unknown" || u[:prefix] == "unknown" || u[:unit].nil? }
87
+ return if norm.any? do |u|
88
+ u[:unit] == "unknown" || u[:prefix] == "unknown" || u[:unit].nil?
89
+ end
82
90
  norm.map do |u|
83
91
  { dimension: U2D[u[:unit]][:dimension],
84
92
  unit: u[:unit],
@@ -88,7 +96,8 @@ module Asciimath2UnitsML
88
96
  end
89
97
 
90
98
  def dimension1(u)
91
- %(<#{u[:dimension]} symbol="#{u[:symbol]}" powerNumerator="#{float_to_display(u[:exponent])}"/>)
99
+ %(<#{u[:dimension]} symbol="#{u[:symbol]}"
100
+ powerNumerator="#{float_to_display(u[:exponent])}"/>)
92
101
  end
93
102
 
94
103
  def dim_id(dims)
@@ -97,9 +106,11 @@ module Asciimath2UnitsML
97
106
  dimsvector = %w(Length Mass Time ElectricCurrent ThermodynamicTemperature
98
107
  AmountOfSubstance LuminousIntensity PlaneAngle)
99
108
  .map { |h| dimhash.dig(h, :exponent) }.join(":")
100
- id = @dimensions_id&.values&.select { |d| d.vector == dimsvector }&.first&.id and return id.to_s
109
+ id = @dimensions_id&.values&.select { |d| d.vector == dimsvector }&.
110
+ first&.id and return id.to_s
101
111
  "D_" + dims.map do |d|
102
- U2D[d[:unit]][:symbol] + (d[:exponent] == 1 ? "" : float_to_display(d[:exponent]))
112
+ U2D[d[:unit]][:symbol] +
113
+ (d[:exponent] == 1 ? "" : float_to_display(d[:exponent]))
103
114
  end.join("")
104
115
  end
105
116
 
@@ -111,9 +122,12 @@ module Asciimath2UnitsML
111
122
  units.sort { |a, b| a[:unit] <=> b[:unit] }.each_with_object([]) do |k, m|
112
123
  if m.empty? || m[-1][:unit] != k[:unit] then m << k
113
124
  else
114
- m[-1] = { prefix: combine_prefixes(@prefixes[m[-1][:prefix]], @prefixes[k[:prefix]]),
115
- unit: m[-1][:unit],
116
- exponent: (k[:exponent]&.to_f || 1) + (m[-1][:exponent]&.to_f || 1) }
125
+ m[-1] = {
126
+ prefix: combine_prefixes(
127
+ @prefixes[m[-1][:prefix]], @prefixes[k[:prefix]]),
128
+ unit: m[-1][:unit],
129
+ exponent: (k[:exponent]&.to_f || 1) +
130
+ (m[-1][:exponent]&.to_f || 1) }
117
131
  end
118
132
  end
119
133
  end
@@ -128,8 +142,10 @@ module Asciimath2UnitsML
128
142
  { prefix: u[:prefix], unit: "unknown", exponent: u[:exponent] }
129
143
  else
130
144
  @units[u[:unit]].si_derived_bases.each_with_object([]) do |k, m|
131
- m << { prefix: !k[:prefix].nil? && !k[:prefix].empty? ?
132
- combine_prefixes(@prefixes_id[k[:prefix]], @prefixes[u[:prefix]]) : u[:prefix],
145
+ prefix = !k[:prefix].nil? && !k[:prefix].empty? ?
146
+ combine_prefixes(@prefixes_id[k[:prefix]], @prefixes[u[:prefix]]) :
147
+ u[:prefix]
148
+ m << { prefix: prefix,
133
149
  unit: @units_id[k[:id]].symbolid,
134
150
  exponent: (k[:power]&.to_i || 1) * (u[:exponent]&.to_f || 1) }
135
151
  end
@@ -156,9 +172,11 @@ module Asciimath2UnitsML
156
172
  end
157
173
 
158
174
  def quantity(normtext, quantity)
159
- return unless @units[normtext] && @units[normtext].quantities.size == 1 || @quantities[quantity]
175
+ return unless @units[normtext] && @units[normtext].quantities.size == 1 ||
176
+ @quantities[quantity]
160
177
  id = quantity || @units[normtext].quantities.first
161
- dim = %( dimensionURL="##{@units[normtext].dimension}") if @units[normtext]&.dimension
178
+ @units[normtext]&.dimension and
179
+ dim = %( dimensionURL="##{@units[normtext].dimension}")
162
180
  <<~END
163
181
  <Quantity xmlns='#{UNITSML_NS}' xml:id="#{id}"#{dim} quantityType="base">
164
182
  #{quantityname(id)}
@@ -87,7 +87,7 @@ module Asciimath2UnitsML
87
87
  prefix2 = /#{@prefixes.keys.select { |x| x.size == 2 }.join("|")}/.r
88
88
  prefix1 = /#{@prefixes.keys.select { |x| x.size == 1 }.join("|")}/.r
89
89
  unit_keys = @units.keys.reject do |k|
90
- @units[k].root&.any? { |x| x[:prefix] } || /\*|\^|\/|^1$/.match(k) || @units[k].prefixed
90
+ /\*|\^|\/|^1$/.match(k) || @units[k].prefixed
91
91
  end.map { |k| Regexp.escape(k) }
92
92
  unit1 = /#{unit_keys.sort_by(&:length).reverse.join("|")}/.r
93
93
  exponent = /\^\(-?\d+\)/.r.map { |m| m.sub(/\^/, "").gsub(/[()]/, "") } |
@@ -97,14 +97,15 @@ module Asciimath2UnitsML
97
97
  seq("sqrt(", unit1, ")") { |x| { prefix: nil, unit: x[1], display_exponent: "0.5" } } |
98
98
  seq("sqrt(", prefix1, unit1, ")") { |x| { prefix: x[1], unit: x[2], display_exponent: "0.5" } } |
99
99
  seq("sqrt(", prefix2, unit1, ")") { |x| { prefix: x[1], unit: x[2], display_exponent: "0.5" } } |
100
- seq(unit1, exponent._? & multiplier) { |x| { prefix: nil, unit: x[0], display_exponent: (x[1][0] )} } |
100
+ seq(unit1, exponent._? & (multiplier | ")".r)) { |x| { prefix: nil, unit: x[0], display_exponent: (x[1][0] )} } |
101
101
  seq(unit1, exponent._?).eof { |x| { prefix: nil, unit: x[0], display_exponent: (x[1][0] )} } |
102
102
  seq(prefix1, unit1, exponent._? ) { |x| { prefix: x[0], unit: x[1], display_exponent: (x[2][0] ) } } |
103
103
  seq(prefix2, unit1, exponent._? ) { |x| { prefix: x[0], unit: x[1], display_exponent: (x[2][0] ) } } |
104
- "1".r.map { |_| { prefix: nil, unit: "1", display_exponent: nil } }
104
+ "1".r.map { |_| { prefix: nil, unit: "1", display_exponent: nil } }
105
+ units1 = "(".r >> lazy{units} << ")" | unit
105
106
  units = seq(prefix2, "-") { |x| [{ prefix: x[0], unit: nil, display_exponent: nil }] } |
106
107
  seq(prefix1, "-") { |x| [{ prefix: x[0], unit: nil, display_exponent: nil }] } |
107
- unit.join(multiplier)
108
+ units1.join(multiplier)
108
109
  parser = units.eof
109
110
  end
110
111
 
@@ -119,22 +120,23 @@ module Asciimath2UnitsML
119
120
  end
120
121
 
121
122
  def postprocess(units, text)
122
- units = postprocess1(units)
123
+ units = postprocess1(units.flatten)
123
124
  quantity = text[1..-1]&.select { |x| /^quantity:/.match(x) }&.first&.sub(/^quantity:\s*/, "")
124
125
  name = text[1..-1]&.select { |x| /^name:/.match(x) }&.first&.sub(/^name:\s*/, "")
125
126
  symbol = text[1..-1]&.select { |x| /^symbol:/.match(x) }&.first&.sub(/^symbol:\s*/, "")
127
+ multiplier = text[1..-1]&.select { |x| /^multiplier:/.match(x) }&.first&.sub(/^multiplier:\s*/, "")
126
128
  normtext = units_only(units).each.map do |u|
127
129
  exp = u[:exponent] && u[:exponent] != "1" ? "^#{u[:exponent]}" : ""
128
130
  "#{u[:prefix]}#{u[:unit]}#{exp}"
129
131
  end.join("*")
130
- [units, text[0], normtext, quantity, name, symbol]
132
+ [units, text[0], normtext, quantity, name, symbol, multiplier]
131
133
  end
132
134
 
133
135
  def postprocess1(units)
134
136
  inverse = false
135
137
  units.each_with_object([]) do |u, m|
136
138
  if u[:multiplier]
137
- inverse = (u[:multiplier] == "/")
139
+ inverse = !inverse if (u[:multiplier] == "/")
138
140
  else
139
141
  u[:exponent] = inverse ? "-#{u[:display_exponent] || '1'}" : u[:display_exponent]
140
142
  u[:exponent] = u[:exponent]&.sub(/^--+/, "")
@@ -154,18 +156,22 @@ module Asciimath2UnitsML
154
156
  xml.xpath(".//m:mtext", "m" => MATHML_NS).each do |x|
155
157
  next unless %r{^unitsml\(.+\)$}.match(x.text)
156
158
  text = x.text.sub(%r{^unitsml\((.+)\)$}m, "\\1")
157
- units, origtext, normtext, quantity, name, symbol = parse(text)
158
- rendering = symbol ? embeddedmathml(asciimath2mathml(symbol)) : mathmlsymbol(units, false)
159
- delim = x&.previous_element ? delimspace(rendering) : ""
160
- x.replace("#{delim}<mrow xref='#{unit_id(origtext)}'>#{rendering}</mrow>\n"\
159
+ units, origtext, normtext, quantity, name, symbol, multiplier = parse(text)
160
+ rendering = symbol ? embeddedmathml(asciimath2mathml(symbol)) :
161
+ mathmlsymbol(units, false, multiplier)
162
+ x.replace("#{delimspace(rendering, x)}<mrow xref='#{unit_id(origtext)}'>#{rendering}</mrow>\n"\
161
163
  "#{unitsml(units, origtext, normtext, quantity, name)}")
162
164
  end
163
165
  dedup_ids(xml)
164
166
  end
165
167
 
166
- def delimspace(x)
167
- text = HTMLEntities.new.encode(Nokogiri::XML("<mrow>#{x}</mrow>").text.strip)
168
- /[[:alnum:]]/.match(text) ?
168
+ # if previous sibling's last descendent non-whitespace is MathML and mn or mi, no space
169
+ def delimspace(rendering, elem)
170
+ prec_text_elem = elem.xpath("./preceding-sibling::*[namespace-uri() = '#{MATHML_NS}']/"\
171
+ "descendant::text()[normalize-space()!=''][last()]/parent::*").last
172
+ return "" if prec_text_elem.nil? || !%w(mn mi).include?(prec_text_elem&.name)
173
+ text = HTMLEntities.new.encode(Nokogiri::XML("<mrow>#{rendering}</mrow>").text.strip)
174
+ /\p{L}|\p{N}/.match(text) ?
169
175
  "<mo rspace='thickmathspace'>&#x2062;</mo>" : "<mo>&#x2062;</mo>"
170
176
  end
171
177
 
@@ -42,9 +42,10 @@ module Asciimath2UnitsML
42
42
  base
43
43
  end
44
44
 
45
- def mathmlsymbol(units, normalise)
45
+ def mathmlsymbol(units, normalise, multiplier = nil)
46
+ multiplier = multiplier ? "<mo>#{multiplier}</mo>" : @multiplier[:mathml]
46
47
  exp = units.map do |u|
47
- if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:mathml] : "<mo>#{u[:multiplier]}</mo>"
48
+ if u[:multiplier] then u[:multiplier] == "*" ? multiplier : "<mo>#{u[:multiplier]}</mo>"
48
49
  elsif u[:unit].nil? && u[:prefix]
49
50
  %(<mi mathvariant='normal'>#{htmlent(@prefixes[u[:prefix]].html)}</mi>)
50
51
  else
@@ -1,3 +1,3 @@
1
1
  module Asciimath2UnitsML
2
- VERSION = '0.2.2'.freeze
2
+ VERSION = '0.3.1'.freeze
3
3
  end
@@ -1745,6 +1745,7 @@
1745
1745
  dimension_url: "#NISTd15"
1746
1746
  short:
1747
1747
  root: false
1748
+ prefixed: true
1748
1749
  unit_system:
1749
1750
  type: "non-SI_acceptable"
1750
1751
  name: "non-SI"
@@ -2046,6 +2047,7 @@
2046
2047
  dimension_url: "#NISTd16"
2047
2048
  short:
2048
2049
  root: false
2050
+ prefixed: true
2049
2051
  unit_system:
2050
2052
  type: "non-SI_not_acceptable"
2051
2053
  name: "non-SI"
@@ -2398,6 +2400,7 @@
2398
2400
  dimension_url: "#NISTd14"
2399
2401
  short:
2400
2402
  root: false
2403
+ prefixed: true
2401
2404
  unit_system:
2402
2405
  type: "non-SI_not_acceptable"
2403
2406
  name: "non-SI"
@@ -4337,8 +4340,8 @@
4337
4340
  unit_symbols:
4338
4341
  - id: "deg"
4339
4342
  ascii: "deg"
4340
- html: "&#186;"
4341
- mathml: "<mi mathvariant='normal'>&#186;</mi>"
4343
+ html: "&#176;"
4344
+ mathml: "<mi mathvariant='normal'>&#176;</mi>"
4342
4345
  latex: \ensuremath{\mathrm{^{\circ}}}
4343
4346
  unicode: "º"
4344
4347
  root_units:
@@ -9981,6 +9984,7 @@
9981
9984
  dimension_url: "#NISTd56"
9982
9985
  short:
9983
9986
  root: false
9987
+ prefixed: true
9984
9988
  unit_system:
9985
9989
  type: "non-SI_not_acceptable"
9986
9990
  name: "non-SI"
@@ -10439,7 +10443,7 @@
10439
10443
  url: "#NISTq1"
10440
10444
 
10441
10445
  "NISTu400":
10442
- dimension_url: "#NISTd85"
10446
+ dimension_url: "#NISTd80"
10443
10447
  short:
10444
10448
  root: false
10445
10449
  unit_system:
@@ -135,6 +135,7 @@ module UnitsDB
135
135
  @root = hash[:root_units][:enumerated_root_units]
136
136
  hash[:quantity_reference] and @quantities = hash[:quantity_reference].map { |x| x[:url].sub(/^#/, "") }
137
137
  hash[:si_derived_bases] and @si_derived_bases = hash[:si_derived_bases]
138
+ @prefixed = (hash[:prefixed] == true)
138
139
  rescue
139
140
  raise StandardError.new "Parse fail on Unit #{id}: #{hash}"
140
141
  end
data/spec/conv_spec.rb CHANGED
@@ -22,7 +22,7 @@ RSpec.describe Asciimath2UnitsML do
22
22
  </mrow>
23
23
  </msup>
24
24
  </mrow>
25
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_mm.s-2' dimensionURL='#NISTd28'>
25
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mm.s-2' dimensionURL='#NISTd28'>
26
26
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
27
27
  <UnitName xml:lang='en'>mm*s^-2</UnitName>
28
28
  <UnitSymbol type='HTML'>
@@ -51,14 +51,14 @@ RSpec.describe Asciimath2UnitsML do
51
51
  <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
52
52
  </RootUnits>
53
53
  </Unit>
54
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
54
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
55
55
  <PrefixName xml:lang='en'>milli</PrefixName>
56
56
  <PrefixSymbol type='ASCII'>m</PrefixSymbol>
57
57
  <PrefixSymbol type='unicode'>m</PrefixSymbol>
58
58
  <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
59
59
  <PrefixSymbol type='HTML'>m</PrefixSymbol>
60
60
  </Prefix>
61
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd28'>
61
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
62
62
  <Length symbol='L' powerNumerator='1'/>
63
63
  <Time symbol='T' powerNumerator='-2'/>
64
64
  </Dimension>
@@ -66,7 +66,7 @@ RSpec.describe Asciimath2UnitsML do
66
66
  OUTPUT
67
67
  end
68
68
 
69
- it "deals with non-Ascii units and prefixes" do
69
+ it "deals with non-Ascii units and prefixes" do
70
70
  expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
71
71
  1 "unitsml(um)"
72
72
  INPUT
@@ -77,7 +77,7 @@ RSpec.describe Asciimath2UnitsML do
77
77
  <mrow xref='U_um'>
78
78
  <mi mathvariant='normal'>&#xB5;m</mi>
79
79
  </mrow>
80
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_um' dimensionURL='#NISTd1'>
80
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
81
81
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
82
82
  <UnitName xml:lang='en'>um</UnitName>
83
83
  <UnitSymbol type='HTML'>um</UnitSymbol>
@@ -92,77 +92,196 @@ RSpec.describe Asciimath2UnitsML do
92
92
  <EnumeratedRootUnit unit='meter' prefix='u'/>
93
93
  </RootUnits>
94
94
  </Unit>
95
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
95
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
96
96
  <PrefixName xml:lang='en'>micro</PrefixName>
97
97
  <PrefixSymbol type='ASCII'>u</PrefixSymbol>
98
98
  <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
99
99
  <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
100
100
  <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
101
101
  </Prefix>
102
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
102
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
103
103
  <Length symbol='L' powerNumerator='1'/>
104
104
  </Dimension>
105
105
  </math>
106
106
  OUTPUT
107
107
  end
108
108
 
109
- it "does not insert space before non-alphabetic units" do
109
+ it "does not insert space before non-alphabetic units" do
110
110
  expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
111
- 1 "unitsml(degK)" + 1 "unitsml(prime)"
111
+ 1 "unitsml(degK)" + 1 "unitsml(prime)" + ii(theta) = s//r "unitsml(rad)" + 10^(12) "unitsml(Hz)"
112
112
  INPUT
113
113
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
114
- <mn>1</mn>
115
- <mo rspace='thickmathspace'>&#x2062;</mo>
116
- <mrow xref='U_NISTu5'>
117
- <mi mathvariant='normal'>&#xB0;K</mi>
118
- </mrow>
119
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
120
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
121
- <UnitName xml:lang='en'>kelvin</UnitName>
122
- <UnitSymbol type='HTML'>K</UnitSymbol>
123
- <UnitSymbol type='MathML'>
124
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
125
- <mrow>
126
- <mi mathvariant='normal'>K</mi>
127
- </mrow>
128
- </math>
129
- </UnitSymbol>
130
- </Unit>
131
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd5'>
132
- <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
133
- </Dimension>
134
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
135
- <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
136
- </Quantity>
137
- <mo>+</mo>
138
- <mn>1</mn>
139
- <mo>&#x2062;</mo>
140
- <mrow xref='U_NISTu147'>
141
- <mi mathvariant='normal'>&#x2032;</mi>
142
- </mrow>
143
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu147'>
144
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
145
- <UnitName xml:lang='en'>minute (minute of arc)</UnitName>
146
- <UnitSymbol type='HTML'>&#x2032;</UnitSymbol>
147
- <UnitSymbol type='MathML'>
148
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
149
- <mrow>
150
- <mi mathvariant='normal'>&#x2032;</mi>
151
- </mrow>
152
- </math>
153
- </UnitSymbol>
154
- </Unit>
155
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd9'>
156
- <PlaneAngle symbol='Phi' powerNumerator='1'/>
157
- </Dimension>
158
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq9' dimensionURL='#NISTd9' quantityType='base'>
159
- <QuantityName xml:lang='en-US'>plane angle</QuantityName>
160
- <QuantityName xml:lang='en-US'>angle</QuantityName>
161
- </Quantity>
162
- </math>
114
+ <mn>1</mn>
115
+ <mo rspace='thickmathspace'>&#x2062;</mo>
116
+ <mrow xref='U_NISTu5'>
117
+ <mi mathvariant='normal'>&#xB0;K</mi>
118
+ </mrow>
119
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
120
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
121
+ <UnitName xml:lang='en'>kelvin</UnitName>
122
+ <UnitSymbol type='HTML'>K</UnitSymbol>
123
+ <UnitSymbol type='MathML'>
124
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
125
+ <mrow>
126
+ <mi mathvariant='normal'>K</mi>
127
+ </mrow>
128
+ </math>
129
+ </UnitSymbol>
130
+ </Unit>
131
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
132
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
133
+ </Dimension>
134
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
135
+ <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
136
+ </Quantity>
137
+ <mo>+</mo>
138
+ <mn>1</mn>
139
+ <mo>&#x2062;</mo>
140
+ <mrow xref='U_NISTu147'>
141
+ <mi mathvariant='normal'>&#x2032;</mi>
142
+ </mrow>
143
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu147'>
144
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
145
+ <UnitName xml:lang='en'>minute (minute of arc)</UnitName>
146
+ <UnitSymbol type='HTML'>&#x2032;</UnitSymbol>
147
+ <UnitSymbol type='MathML'>
148
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
149
+ <mrow>
150
+ <mi mathvariant='normal'>&#x2032;</mi>
151
+ </mrow>
152
+ </math>
153
+ </UnitSymbol>
154
+ </Unit>
155
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd9'>
156
+ <PlaneAngle symbol='Phi' powerNumerator='1'/>
157
+ </Dimension>
158
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq9' dimensionURL='#NISTd9' quantityType='base'>
159
+ <QuantityName xml:lang='en-US'>plane angle</QuantityName>
160
+ <QuantityName xml:lang='en-US'>angle</QuantityName>
161
+ </Quantity>
162
+ <mo>+</mo>
163
+ <mstyle mathvariant='italic'>
164
+ <mi>&#x3B8;</mi>
165
+ </mstyle>
166
+ <mo>=</mo>
167
+ <mi>s</mi>
168
+ <mo>/</mo>
169
+ <mi>r</mi>
170
+ <mo rspace='thickmathspace'>&#x2062;</mo>
171
+ <mrow xref='U_NISTu9'>
172
+ <mi mathvariant='normal'>rad</mi>
173
+ </mrow>
174
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu9' dimensionURL='#D_L0'>
175
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
176
+ <UnitName xml:lang='en'>radian</UnitName>
177
+ <UnitSymbol type='HTML'>rad</UnitSymbol>
178
+ <UnitSymbol type='MathML'>
179
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
180
+ <mrow>
181
+ <mi mathvariant='normal'>rad</mi>
182
+ </mrow>
183
+ </math>
184
+ </UnitSymbol>
185
+ </Unit>
186
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L0'>
187
+ <Length symbol='L' powerNumerator='0'/>
188
+ </Dimension>
189
+ <mo>+</mo>
190
+ <msup>
191
+ <mrow>
192
+ <mn>10</mn>
193
+ </mrow>
194
+ <mrow>
195
+ <mn>12</mn>
196
+ </mrow>
197
+ </msup>
198
+ <mo rspace='thickmathspace'>&#x2062;</mo>
199
+ <mrow xref='U_NISTu31'>
200
+ <mi mathvariant='normal'>Hz</mi>
201
+ </mrow>
202
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu31' dimensionURL='#NISTd24'>
203
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
204
+ <UnitName xml:lang='en'>hertz</UnitName>
205
+ <UnitSymbol type='HTML'>Hz</UnitSymbol>
206
+ <UnitSymbol type='MathML'>
207
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
208
+ <mrow>
209
+ <mi mathvariant='normal'>Hz</mi>
210
+ </mrow>
211
+ </math>
212
+ </UnitSymbol>
213
+ </Unit>
214
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd24'>
215
+ <Time symbol='T' powerNumerator='-1'/>
216
+ </Dimension>
217
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq45' dimensionURL='#NISTd24' quantityType='base'>
218
+ <QuantityName xml:lang='en-US'>frequency</QuantityName>
219
+ </Quantity>
220
+ </math>
163
221
  OUTPUT
164
222
  end
165
223
 
224
+ it "does not insert space before operators" do
225
+ expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
226
+ 8 "unitsml(kg)" cdot "unitsml(m)"
227
+ INPUT
228
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
229
+ <mn>8</mn>
230
+ <mo rspace='thickmathspace'>&#x2062;</mo>
231
+ <mrow xref='U_NISTu2'>
232
+ <mi mathvariant='normal'>kg</mi>
233
+ </mrow>
234
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
235
+ <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
236
+ <UnitName xml:lang='en'>kilogram</UnitName>
237
+ <UnitSymbol type='HTML'>kg</UnitSymbol>
238
+ <UnitSymbol type='MathML'>
239
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
240
+ <mrow>
241
+ <mi mathvariant='normal'>kg</mi>
242
+ </mrow>
243
+ </math>
244
+ </UnitSymbol>
245
+ <RootUnits>
246
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
247
+ </RootUnits>
248
+ </Unit>
249
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
250
+ <PrefixName xml:lang='en'>kilo</PrefixName>
251
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
252
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
253
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
254
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
255
+ </Prefix>
256
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
257
+ <Mass symbol='M' powerNumerator='1'/>
258
+ </Dimension>
259
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
260
+ <QuantityName xml:lang='en-US'>mass</QuantityName>
261
+ </Quantity>
262
+ <mo>&#x22C5;</mo>
263
+ <mrow xref='U_NISTu1'>
264
+ <mi mathvariant='normal'>m</mi>
265
+ </mrow>
266
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
267
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
268
+ <UnitName xml:lang='en'>meter</UnitName>
269
+ <UnitSymbol type='HTML'>m</UnitSymbol>
270
+ <UnitSymbol type='MathML'>
271
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
272
+ <mrow>
273
+ <mi mathvariant='normal'>m</mi>
274
+ </mrow>
275
+ </math>
276
+ </UnitSymbol>
277
+ </Unit>
278
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
279
+ <Length symbol='L' powerNumerator='1'/>
280
+ </Dimension>
281
+ </math>
282
+ OUTPUT
283
+ end
284
+
166
285
  it "deals with sqrt units" do
167
286
  expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
168
287
  1 "unitsml(sqrt(Hz))"
@@ -175,7 +294,7 @@ OUTPUT
175
294
  <mi mathvariant='normal'>Hz</mi>
176
295
  </msqrt>
177
296
  </mrow>
178
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_Hz0.5' dimensionURL='#D_T-0.5'>
297
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_Hz0.5' dimensionURL='#D_T-0.5'>
179
298
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
180
299
  <UnitName xml:lang='en'>Hz^0.5</UnitName>
181
300
  <UnitSymbol type='HTML'>&#x221A;Hz</UnitSymbol>
@@ -189,7 +308,7 @@ OUTPUT
189
308
  </math>
190
309
  </UnitSymbol>
191
310
  </Unit>
192
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_T-0.5'>
311
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_T-0.5'>
193
312
  <Time symbol='T' powerNumerator='-0.5'/>
194
313
  </Dimension>
195
314
  </math>
@@ -206,7 +325,7 @@ OUTPUT
206
325
  <mrow xref='U_NISTu2'>
207
326
  <mi mathvariant='normal'>kg</mi>
208
327
  </mrow>
209
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
328
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
210
329
  <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
211
330
  <UnitName xml:lang='en'>kilogram</UnitName>
212
331
  <UnitSymbol type='HTML'>kg</UnitSymbol>
@@ -221,17 +340,17 @@ OUTPUT
221
340
  <EnumeratedRootUnit unit='gram' prefix='k'/>
222
341
  </RootUnits>
223
342
  </Unit>
224
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
343
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
225
344
  <PrefixName xml:lang='en'>kilo</PrefixName>
226
345
  <PrefixSymbol type='ASCII'>k</PrefixSymbol>
227
346
  <PrefixSymbol type='unicode'>k</PrefixSymbol>
228
347
  <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
229
348
  <PrefixSymbol type='HTML'>k</PrefixSymbol>
230
349
  </Prefix>
231
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd2'>
350
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
232
351
  <Mass symbol='M' powerNumerator='1'/>
233
352
  </Dimension>
234
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
353
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
235
354
  <QuantityName xml:lang='en-US'>mass</QuantityName>
236
355
  </Quantity>
237
356
  <mo>+</mo>
@@ -240,7 +359,7 @@ OUTPUT
240
359
  <mrow xref='U_NISTu27'>
241
360
  <mi mathvariant='normal'>g</mi>
242
361
  </mrow>
243
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu27' dimensionURL='#NISTd2'>
362
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu27' dimensionURL='#NISTd2'>
244
363
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
245
364
  <UnitName xml:lang='en'>gram</UnitName>
246
365
  <UnitSymbol type='HTML'>g</UnitSymbol>
@@ -266,7 +385,7 @@ OUTPUT
266
385
  <mrow xref='U_NISTu284'>
267
386
  <mi mathvariant='normal'>hp</mi>
268
387
  </mrow>
269
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu284'>
388
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu284'>
270
389
  <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
271
390
  <UnitName xml:lang='en'>horsepower</UnitName>
272
391
  <UnitSymbol type='HTML'>hp</UnitSymbol>
@@ -278,12 +397,12 @@ OUTPUT
278
397
  </math>
279
398
  </UnitSymbol>
280
399
  </Unit>
281
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd16'>
400
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd16'>
282
401
  <Length symbol='L' powerNumerator='2'/>
283
402
  <Mass symbol='M' powerNumerator='1'/>
284
403
  <Time symbol='T' powerNumerator='-3'/>
285
404
  </Dimension>
286
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq20' dimensionURL='#NISTd16' quantityType='base'>
405
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq20' dimensionURL='#NISTd16' quantityType='base'>
287
406
  <QuantityName xml:lang='en-US'>power</QuantityName>
288
407
  </Quantity>
289
408
  </math>
@@ -310,7 +429,7 @@ OUTPUT
310
429
  </mrow>
311
430
  </msup>
312
431
  </mrow>
313
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
432
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
314
433
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
315
434
  <UnitName xml:lang='en'>kg*s^-2</UnitName>
316
435
  <UnitSymbol type='HTML'>
@@ -339,14 +458,14 @@ OUTPUT
339
458
  <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
340
459
  </RootUnits>
341
460
  </Unit>
342
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
461
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
343
462
  <PrefixName xml:lang='en'>kilo</PrefixName>
344
463
  <PrefixSymbol type='ASCII'>k</PrefixSymbol>
345
464
  <PrefixSymbol type='unicode'>k</PrefixSymbol>
346
465
  <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
347
466
  <PrefixSymbol type='HTML'>k</PrefixSymbol>
348
467
  </Prefix>
349
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
468
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
350
469
  <Mass symbol='M' powerNumerator='1'/>
351
470
  <Time symbol='T' powerNumerator='-2'/>
352
471
  </Dimension>
@@ -370,6 +489,78 @@ OUTPUT
370
489
  OUTPUT
371
490
  end
372
491
 
492
+ it "deals with parentheses" do
493
+ expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
494
+ 10 "unitsml(K/(kg*m))"
495
+ INPUT
496
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
497
+ <mn>10</mn>
498
+ <mo rspace='thickmathspace'>&#x2062;</mo>
499
+ <mrow xref='U_K/kg.m'>
500
+ <mi mathvariant='normal'>K</mi>
501
+ <mo>/</mo>
502
+ <mi mathvariant='normal'>kg</mi>
503
+ <mo>&#xB7;</mo>
504
+ <mi mathvariant='normal'>m</mi>
505
+ </mrow>
506
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_K.kg-1.m-1' dimensionURL='#D_L-1M-1Theta'>
507
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
508
+ <UnitName xml:lang='en'>K*kg^-1*m^-1</UnitName>
509
+ <UnitSymbol type='HTML'>
510
+ K&#xB7;kg
511
+ <sup>&#x2212;1</sup>
512
+ &#xB7;m
513
+ <sup>&#x2212;1</sup>
514
+ </UnitSymbol>
515
+ <UnitSymbol type='MathML'>
516
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
517
+ <mrow>
518
+ <mi mathvariant='normal'>K</mi>
519
+ <mo>&#xB7;</mo>
520
+ <msup>
521
+ <mrow>
522
+ <mi mathvariant='normal'>kg</mi>
523
+ </mrow>
524
+ <mrow>
525
+ <mo>&#x2212;</mo>
526
+ <mn>1</mn>
527
+ </mrow>
528
+ </msup>
529
+ <mo>&#xB7;</mo>
530
+ <msup>
531
+ <mrow>
532
+ <mi mathvariant='normal'>m</mi>
533
+ </mrow>
534
+ <mrow>
535
+ <mo>&#x2212;</mo>
536
+ <mn>1</mn>
537
+ </mrow>
538
+ </msup>
539
+ </mrow>
540
+ </math>
541
+ </UnitSymbol>
542
+ <RootUnits>
543
+ <EnumeratedRootUnit unit='kelvin'/>
544
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
545
+ <EnumeratedRootUnit unit='meter' powerNumerator='-1'/>
546
+ </RootUnits>
547
+ </Unit>
548
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
549
+ <PrefixName xml:lang='en'>kilo</PrefixName>
550
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
551
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
552
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
553
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
554
+ </Prefix>
555
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L-1M-1Theta'>
556
+ <Length symbol='L' powerNumerator='-1'/>
557
+ <Mass symbol='M' powerNumerator='-1'/>
558
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
559
+ </Dimension>
560
+ </math>
561
+ OUTPUT
562
+ end
563
+
373
564
  it "deals with notational variants" do
374
565
  expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
375
566
  9 "unitsml(degK)" + 10 "unitsml(K)"
@@ -380,7 +571,7 @@ INPUT
380
571
  <mrow xref='U_NISTu5'>
381
572
  <mi mathvariant='normal'>&#xB0;K</mi>
382
573
  </mrow>
383
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
574
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
384
575
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
385
576
  <UnitName xml:lang='en'>kelvin</UnitName>
386
577
  <UnitSymbol type='HTML'>K</UnitSymbol>
@@ -392,10 +583,10 @@ INPUT
392
583
  </math>
393
584
  </UnitSymbol>
394
585
  </Unit>
395
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd5'>
586
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
396
587
  <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
397
588
  </Dimension>
398
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
589
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
399
590
  <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
400
591
  </Quantity>
401
592
  <mo>+</mo>
@@ -418,7 +609,7 @@ INPUT
418
609
  <mrow xref='U_NISTu362'>
419
610
  <mi mathvariant='normal'>mbar</mi>
420
611
  </mrow>
421
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu362'>
612
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu362'>
422
613
  <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
423
614
  <UnitName xml:lang='en'>millibar</UnitName>
424
615
  <UnitSymbol type='HTML'>mbar</UnitSymbol>
@@ -433,14 +624,14 @@ INPUT
433
624
  <EnumeratedRootUnit unit='bar' prefix='m'/>
434
625
  </RootUnits>
435
626
  </Unit>
436
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
627
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
437
628
  <PrefixName xml:lang='en'>milli</PrefixName>
438
629
  <PrefixSymbol type='ASCII'>m</PrefixSymbol>
439
630
  <PrefixSymbol type='unicode'>m</PrefixSymbol>
440
631
  <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
441
632
  <PrefixSymbol type='HTML'>m</PrefixSymbol>
442
633
  </Prefix>
443
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd14'>
634
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd14'>
444
635
  <Length symbol='L' powerNumerator='-1'/>
445
636
  <Mass symbol='M' powerNumerator='1'/>
446
637
  <Time symbol='T' powerNumerator='-2'/>
@@ -457,7 +648,7 @@ OUTPUT
457
648
  <mrow xref='NISTp10_-12'>
458
649
  <mi mathvariant='normal'>p</mi>
459
650
  </mrow>
460
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-12' xml:id='NISTp10_-12'>
651
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-12' xml:id='NISTp10_-12'>
461
652
  <PrefixName xml:lang='en'>pico</PrefixName>
462
653
  <PrefixSymbol type='ASCII'>p</PrefixSymbol>
463
654
  <PrefixSymbol type='unicode'>p</PrefixSymbol>
@@ -468,7 +659,7 @@ OUTPUT
468
659
  <mrow xref='NISTp10_1'>
469
660
  <mi mathvariant='normal'>da</mi>
470
661
  </mrow>
471
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='1' xml:id='NISTp10_1'>
662
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='1' xml:id='NISTp10_1'>
472
663
  <PrefixName xml:lang='en'>deka</PrefixName>
473
664
  <PrefixSymbol type='ASCII'>da</PrefixSymbol>
474
665
  <PrefixSymbol type='unicode'>da</PrefixSymbol>
@@ -487,25 +678,24 @@ INPUT
487
678
  <mrow xref='NISTp10_-6'>
488
679
  <mi mathvariant='normal'>&#xB5;</mi>
489
680
  </mrow>
490
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
681
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
491
682
  <PrefixName xml:lang='en'>micro</PrefixName>
492
683
  <PrefixSymbol type='ASCII'>u</PrefixSymbol>
493
684
  <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
494
685
  <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
495
686
  <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
496
687
  </Prefix>
497
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd2'>
688
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
498
689
  <Mass symbol='M' powerNumerator='1'/>
499
690
  </Dimension>
500
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
691
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
501
692
  <QuantityName xml:lang='en-US'>mass</QuantityName>
502
693
  </Quantity>
503
694
  <mo>+</mo>
504
- <mo rspace='thickmathspace'>&#x2062;</mo>
505
695
  <mrow xref='U_um'>
506
696
  <mi mathvariant='normal'>&#xB5;m</mi>
507
697
  </mrow>
508
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_um' dimensionURL='#NISTd1'>
698
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
509
699
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
510
700
  <UnitName xml:lang='en'>um</UnitName>
511
701
  <UnitSymbol type='HTML'>um</UnitSymbol>
@@ -520,7 +710,7 @@ INPUT
520
710
  <EnumeratedRootUnit unit='meter' prefix='u'/>
521
711
  </RootUnits>
522
712
  </Unit>
523
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
713
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
524
714
  <Length symbol='L' powerNumerator='1'/>
525
715
  </Dimension>
526
716
  </math>
@@ -529,7 +719,7 @@ INPUT
529
719
 
530
720
  it "deals with units division" do
531
721
  expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
532
- 9 "unitsml(A*C^3)" + 13 "unitsml(A/C^-3)"
722
+ 9 "unitsml(A*C^3)" + 13 "unitsml(A/C^-3)" + 2 "unitsml(J/kg*K)"
533
723
  INPUT
534
724
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
535
725
  <mn>9</mn>
@@ -546,7 +736,7 @@ INPUT
546
736
  </mrow>
547
737
  </msup>
548
738
  </mrow>
549
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_A.C3' dimensionURL='#D_M3I4'>
739
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_A.C3' dimensionURL='#D_M3I4'>
550
740
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
551
741
  <UnitName xml:lang='en'>A*C^3</UnitName>
552
742
  <UnitSymbol type='HTML'>
@@ -574,7 +764,7 @@ INPUT
574
764
  <EnumeratedRootUnit unit='coulomb' powerNumerator='3'/>
575
765
  </RootUnits>
576
766
  </Unit>
577
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_M3I4'>
767
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M3I4'>
578
768
  <Mass symbol='M' powerNumerator='3'/>
579
769
  <ElectricCurrent symbol='I' powerNumerator='4'/>
580
770
  </Dimension>
@@ -594,6 +784,76 @@ INPUT
594
784
  </mrow>
595
785
  </msup>
596
786
  </mrow>
787
+ <mo>+</mo>
788
+ <mn>2</mn>
789
+ <mo rspace='thickmathspace'>&#x2062;</mo>
790
+ <mrow xref='U_J/kg.K'>
791
+ <mi mathvariant='normal'>J</mi>
792
+ <mo>/</mo>
793
+ <mi mathvariant='normal'>kg</mi>
794
+ <mo>&#xB7;</mo>
795
+ <mi mathvariant='normal'>K</mi>
796
+ </mrow>
797
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu13.u27p10_3e-1/1.u5e-1/1' dimensionURL='#D_L2M0T-2Theta-1'>
798
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
799
+ <UnitName xml:lang='en'>joule per kilogram kelvin</UnitName>
800
+ <UnitSymbol type='HTML'>
801
+ J&#xB7;kg
802
+ <sup>&#x2212;1</sup>
803
+ &#xB7;K
804
+ <sup>&#x2212;1</sup>
805
+ </UnitSymbol>
806
+ <UnitSymbol type='MathML'>
807
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
808
+ <mrow>
809
+ <mi mathvariant='normal'>J</mi>
810
+ <mo>&#xB7;</mo>
811
+ <msup>
812
+ <mrow>
813
+ <mi mathvariant='normal'>kg</mi>
814
+ </mrow>
815
+ <mrow>
816
+ <mo>&#x2212;</mo>
817
+ <mn>1</mn>
818
+ </mrow>
819
+ </msup>
820
+ <mo>&#xB7;</mo>
821
+ <msup>
822
+ <mrow>
823
+ <mi mathvariant='normal'>K</mi>
824
+ </mrow>
825
+ <mrow>
826
+ <mo>&#x2212;</mo>
827
+ <mn>1</mn>
828
+ </mrow>
829
+ </msup>
830
+ </mrow>
831
+ </math>
832
+ </UnitSymbol>
833
+ <RootUnits>
834
+ <EnumeratedRootUnit unit='joule'/>
835
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-1'/>
836
+ <EnumeratedRootUnit unit='kelvin' powerNumerator='-1'/>
837
+ </RootUnits>
838
+ </Unit>
839
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
840
+ <PrefixName xml:lang='en'>kilo</PrefixName>
841
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
842
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
843
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
844
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
845
+ </Prefix>
846
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd40'>
847
+ <Length symbol='L' powerNumerator='2'/>
848
+ <Time symbol='T' powerNumerator='-2'/>
849
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='-1'/>
850
+ </Dimension>
851
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_L2M0T-2Theta-1'>
852
+ <Length symbol='L' powerNumerator='2'/>
853
+ <Mass symbol='M' powerNumerator='0'/>
854
+ <Time symbol='T' powerNumerator='-2'/>
855
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='-1'/>
856
+ </Dimension>
597
857
  </math>
598
858
  OUTPUT
599
859
  end
@@ -628,7 +888,7 @@ OUTPUT
628
888
  </mrow>
629
889
  </msup>
630
890
  </mrow>
631
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg-2' dimensionURL='#D_M-2'>
891
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg-2' dimensionURL='#D_M-2'>
632
892
  <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
633
893
  <UnitName xml:lang='en'>kg^-2</UnitName>
634
894
  <UnitSymbol type='HTML'>
@@ -654,14 +914,14 @@ OUTPUT
654
914
  <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
655
915
  </RootUnits>
656
916
  </Unit>
657
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
917
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
658
918
  <PrefixName xml:lang='en'>kilo</PrefixName>
659
919
  <PrefixSymbol type='ASCII'>k</PrefixSymbol>
660
920
  <PrefixSymbol type='unicode'>k</PrefixSymbol>
661
921
  <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
662
922
  <PrefixSymbol type='HTML'>k</PrefixSymbol>
663
923
  </Prefix>
664
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_M-2'>
924
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M-2'>
665
925
  <Mass symbol='M' powerNumerator='-2'/>
666
926
  </Dimension>
667
927
  </math>
@@ -696,7 +956,7 @@ OUTPUT
696
956
  </mrow>
697
957
  </msup>
698
958
  </mrow>
699
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
959
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
700
960
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
701
961
  <UnitName xml:lang='en'>kg*s^-2</UnitName>
702
962
  <UnitSymbol type='HTML'>
@@ -725,14 +985,14 @@ OUTPUT
725
985
  <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
726
986
  </RootUnits>
727
987
  </Unit>
728
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
988
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
729
989
  <PrefixName xml:lang='en'>kilo</PrefixName>
730
990
  <PrefixSymbol type='ASCII'>k</PrefixSymbol>
731
991
  <PrefixSymbol type='unicode'>k</PrefixSymbol>
732
992
  <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
733
993
  <PrefixSymbol type='HTML'>k</PrefixSymbol>
734
994
  </Prefix>
735
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
995
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
736
996
  <Mass symbol='M' powerNumerator='1'/>
737
997
  <Time symbol='T' powerNumerator='-2'/>
738
998
  </Dimension>
@@ -757,7 +1017,7 @@ OUTPUT
757
1017
  </mrow>
758
1018
  </msup>
759
1019
  </mrow>
760
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1020
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
761
1021
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
762
1022
  <UnitName xml:lang='en'>kg*s^-2</UnitName>
763
1023
  <UnitSymbol type='HTML'>
@@ -786,14 +1046,14 @@ OUTPUT
786
1046
  <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
787
1047
  </RootUnits>
788
1048
  </Unit>
789
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1049
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
790
1050
  <PrefixName xml:lang='en'>kilo</PrefixName>
791
1051
  <PrefixSymbol type='ASCII'>k</PrefixSymbol>
792
1052
  <PrefixSymbol type='unicode'>k</PrefixSymbol>
793
1053
  <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
794
1054
  <PrefixSymbol type='HTML'>k</PrefixSymbol>
795
1055
  </Prefix>
796
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
1056
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
797
1057
  <Mass symbol='M' powerNumerator='1'/>
798
1058
  <Time symbol='T' powerNumerator='-2'/>
799
1059
  </Dimension>
@@ -818,7 +1078,7 @@ OUTPUT
818
1078
  </mrow>
819
1079
  </msup>
820
1080
  </mrow>
821
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1081
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
822
1082
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
823
1083
  <UnitName xml:lang='en'>kg*s^-2</UnitName>
824
1084
  <UnitSymbol type='HTML'>
@@ -847,14 +1107,14 @@ OUTPUT
847
1107
  <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
848
1108
  </RootUnits>
849
1109
  </Unit>
850
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1110
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
851
1111
  <PrefixName xml:lang='en'>kilo</PrefixName>
852
1112
  <PrefixSymbol type='ASCII'>k</PrefixSymbol>
853
1113
  <PrefixSymbol type='unicode'>k</PrefixSymbol>
854
1114
  <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
855
1115
  <PrefixSymbol type='HTML'>k</PrefixSymbol>
856
1116
  </Prefix>
857
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
1117
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
858
1118
  <Mass symbol='M' powerNumerator='1'/>
859
1119
  <Time symbol='T' powerNumerator='-2'/>
860
1120
  </Dimension>
@@ -882,7 +1142,7 @@ INPUT
882
1142
  </mrow>
883
1143
  </msup>
884
1144
  </mrow>
885
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_mW.cm-2'>
1145
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mW.cm-2'>
886
1146
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
887
1147
  <UnitName xml:lang='en'>mW*cm^-2</UnitName>
888
1148
  <UnitSymbol type='HTML'>
@@ -911,14 +1171,14 @@ INPUT
911
1171
  <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
912
1172
  </RootUnits>
913
1173
  </Unit>
914
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
1174
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
915
1175
  <PrefixName xml:lang='en'>milli</PrefixName>
916
1176
  <PrefixSymbol type='ASCII'>m</PrefixSymbol>
917
1177
  <PrefixSymbol type='unicode'>m</PrefixSymbol>
918
1178
  <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
919
1179
  <PrefixSymbol type='HTML'>m</PrefixSymbol>
920
1180
  </Prefix>
921
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1181
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
922
1182
  <PrefixName xml:lang='en'>centi</PrefixName>
923
1183
  <PrefixSymbol type='ASCII'>c</PrefixSymbol>
924
1184
  <PrefixSymbol type='unicode'>c</PrefixSymbol>
@@ -939,7 +1199,7 @@ INPUT
939
1199
  <mrow xref='U_NISTu1'>
940
1200
  <mi mathvariant='normal'>m</mi>
941
1201
  </mrow>
942
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1202
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
943
1203
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
944
1204
  <UnitName xml:lang='en'>meter</UnitName>
945
1205
  <UnitSymbol type='HTML'>m</UnitSymbol>
@@ -951,10 +1211,10 @@ INPUT
951
1211
  </math>
952
1212
  </UnitSymbol>
953
1213
  </Unit>
954
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
1214
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
955
1215
  <Length symbol='L' powerNumerator='1'/>
956
1216
  </Dimension>
957
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
1217
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
958
1218
  <QuantityName xml:lang='en-US'>position vector</QuantityName>
959
1219
  </Quantity>
960
1220
  </math>
@@ -987,7 +1247,7 @@ INPUT
987
1247
  </mrow>
988
1248
  </msup>
989
1249
  </mrow>
990
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_cal_th.cm-2'>
1250
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cal_th.cm-2'>
991
1251
  <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
992
1252
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
993
1253
  <UnitName xml:lang='en'>langley</UnitName>
@@ -1026,7 +1286,7 @@ INPUT
1026
1286
  <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1027
1287
  </RootUnits>
1028
1288
  </Unit>
1029
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1289
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1030
1290
  <PrefixName xml:lang='en'>centi</PrefixName>
1031
1291
  <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1032
1292
  <PrefixSymbol type='unicode'>c</PrefixSymbol>
@@ -1050,7 +1310,7 @@ INPUT
1050
1310
  <mi mathvariant='normal'>a</mi>
1051
1311
  </math>
1052
1312
  </mrow>
1053
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1313
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1054
1314
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1055
1315
  <UnitName xml:lang='en'>meter</UnitName>
1056
1316
  <UnitSymbol type='HTML'>m</UnitSymbol>
@@ -1062,7 +1322,7 @@ INPUT
1062
1322
  </math>
1063
1323
  </UnitSymbol>
1064
1324
  </Unit>
1065
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
1325
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1066
1326
  <Length symbol='L' powerNumerator='1'/>
1067
1327
  </Dimension>
1068
1328
  <mo>+</mo>
@@ -1084,7 +1344,7 @@ INPUT
1084
1344
  <mn>2</mn>
1085
1345
  </math>
1086
1346
  </mrow>
1087
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1347
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1088
1348
  <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1089
1349
  <UnitName xml:lang='en'>cm*s^-2</UnitName>
1090
1350
  <UnitSymbol type='HTML'>
@@ -1113,14 +1373,14 @@ INPUT
1113
1373
  <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1114
1374
  </RootUnits>
1115
1375
  </Unit>
1116
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1376
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1117
1377
  <PrefixName xml:lang='en'>centi</PrefixName>
1118
1378
  <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1119
1379
  <PrefixSymbol type='unicode'>c</PrefixSymbol>
1120
1380
  <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1121
1381
  <PrefixSymbol type='HTML'>c</PrefixSymbol>
1122
1382
  </Prefix>
1123
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd28'>
1383
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1124
1384
  <Length symbol='L' powerNumerator='1'/>
1125
1385
  <Time symbol='T' powerNumerator='-2'/>
1126
1386
  </Dimension>
@@ -1128,5 +1388,68 @@ INPUT
1128
1388
  OUTPUT
1129
1389
  end
1130
1390
 
1391
+ it "deals with multiplier input" do
1392
+ expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1393
+ 10 "unitsml(cm*s^-2, multiplier: xx)"
1394
+ INPUT
1395
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1396
+ <mn>10</mn>
1397
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1398
+ <mrow xref='U_cm.s-2'>
1399
+ <mi mathvariant='normal'>cm</mi>
1400
+ <mo>xx</mo>
1401
+ <msup>
1402
+ <mrow>
1403
+ <mi mathvariant='normal'>s</mi>
1404
+ </mrow>
1405
+ <mrow>
1406
+ <mo>&#x2212;</mo>
1407
+ <mn>2</mn>
1408
+ </mrow>
1409
+ </msup>
1410
+ </mrow>
1411
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1412
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1413
+ <UnitName xml:lang='en'>cm*s^-2</UnitName>
1414
+ <UnitSymbol type='HTML'>
1415
+ cm&#xB7;s
1416
+ <sup>&#x2212;2</sup>
1417
+ </UnitSymbol>
1418
+ <UnitSymbol type='MathML'>
1419
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1420
+ <mrow>
1421
+ <mi mathvariant='normal'>cm</mi>
1422
+ <mo>&#xB7;</mo>
1423
+ <msup>
1424
+ <mrow>
1425
+ <mi mathvariant='normal'>s</mi>
1426
+ </mrow>
1427
+ <mrow>
1428
+ <mo>&#x2212;</mo>
1429
+ <mn>2</mn>
1430
+ </mrow>
1431
+ </msup>
1432
+ </mrow>
1433
+ </math>
1434
+ </UnitSymbol>
1435
+ <RootUnits>
1436
+ <EnumeratedRootUnit unit='meter' prefix='c'/>
1437
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1438
+ </RootUnits>
1439
+ </Unit>
1440
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1441
+ <PrefixName xml:lang='en'>centi</PrefixName>
1442
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1443
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1444
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1445
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1446
+ </Prefix>
1447
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1448
+ <Length symbol='L' powerNumerator='1'/>
1449
+ <Time symbol='T' powerNumerator='-2'/>
1450
+ </Dimension>
1451
+ </math>
1452
+ OUTPUT
1453
+ end
1131
1454
 
1132
1455
  end