asciimath2unitsml 0.2.4 → 0.3.3

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.
@@ -7,7 +7,8 @@ module Asciimath2UnitsML
7
7
  when :nospace
8
8
  { html: "", mathml: "<mo>&#x2062;</mo>" }
9
9
  else
10
- { html: HTMLEntities.new.encode(x), mathml: "<mo>#{HTMLEntities.new.encode(x)}</mo>" }
10
+ { html: HTMLEntities.new.encode(x),
11
+ mathml: "<mo>#{HTMLEntities.new.encode(x)}</mo>" }
11
12
  end
12
13
  end
13
14
 
@@ -15,18 +16,21 @@ module Asciimath2UnitsML
15
16
  @symbols[unit][style] || unit
16
17
  end
17
18
 
18
- def htmlent(x)
19
- HTMLEntities.new.decode(x).split(/([<>&])/)
20
- .map { |c| /[<>'"]/.match(c) ? c : HTMLEntities.new.encode(c, :hexadecimal) }.join
19
+ def htmlent(xml)
20
+ HTMLEntities.new.decode(xml).split(/([<>&])/).map do |c|
21
+ /[<>'"]/.match?(c) ? c : HTMLEntities.new.encode(c, :hexadecimal)
22
+ end.join
21
23
  end
22
24
 
23
25
  def htmlsymbol(units, normalise)
24
26
  units.map do |u|
25
- if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:html] : u[:multiplier]
27
+ if u[:multiplier]
28
+ u[:multiplier] == "*" ? @multiplier[:html] : u[:multiplier]
26
29
  elsif u[:unit].nil? && u[:prefix]
27
30
  @prefixes[u[:prefix]].html
28
31
  else
29
- base = (u[:prefix] || "") + render(normalise ? @units[u[:unit]].symbolid : u[:unit], :html)
32
+ base = (u[:prefix] || "") +
33
+ render(normalise ? @units[u[:unit]].symbolid : u[:unit], :html)
30
34
  htmlsymbol_exponent(u, base)
31
35
  end
32
36
  end.join("")
@@ -36,15 +40,17 @@ module Asciimath2UnitsML
36
40
  if u[:display_exponent] == "0.5"
37
41
  base = "&#x221a;#{base}"
38
42
  elsif u[:display_exponent]
39
- exp = "<sup>#{u[:display_exponent].sub(/-/, "&#x2212;")}</sup>"
43
+ exp = "<sup>#{u[:display_exponent].sub(/-/, '&#x2212;')}</sup>"
40
44
  base += exp
41
45
  end
42
46
  base
43
47
  end
44
48
 
45
- def mathmlsymbol(units, normalise)
46
- exp = units.map do |u|
47
- if u[:multiplier] then u[:multiplier] == "*" ? @multiplier[:mathml] : "<mo>#{u[:multiplier]}</mo>"
49
+ def mathmlsymbol(units, normalise, multiplier = nil)
50
+ multiplier = multiplier ? "<mo>#{multiplier}</mo>" : @multiplier[:mathml]
51
+ units.map do |u|
52
+ if u[:multiplier]
53
+ u[:multiplier] == "*" ? multiplier : "<mo>#{u[:multiplier]}</mo>"
48
54
  elsif u[:unit].nil? && u[:prefix]
49
55
  %(<mi mathvariant='normal'>#{htmlent(@prefixes[u[:prefix]].html)}</mi>)
50
56
  else
@@ -64,20 +70,21 @@ module Asciimath2UnitsML
64
70
  mathmlsymbol_exponent(u, base)
65
71
  end
66
72
 
67
- def mathmlsymbol_exponent(u, base)
68
- if u[:display_exponent] == "0.5"
73
+ def mathmlsymbol_exponent(unit, base)
74
+ if unit[:display_exponent] == "0.5"
69
75
  base = "<msqrt>#{base}</msqrt>"
70
- elsif u[:display_exponent]
71
- exp = "<mn>#{u[:display_exponent]}</mn>".sub(/<mn>-/, "<mo>&#x2212;</mo><mn>")
76
+ elsif unit[:display_exponent]
77
+ exp = "<mn>#{unit[:display_exponent]}</mn>"
78
+ .sub(/<mn>-/, "<mo>&#x2212;</mo><mn>")
72
79
  base = "<msup><mrow>#{base}</mrow><mrow>#{exp}</mrow></msup>"
73
80
  end
74
81
  base
75
82
  end
76
83
 
77
84
  def mathmlsymbolwrap(units, normalise)
78
- <<~END
79
- <math xmlns='#{MATHML_NS}'><mrow>#{mathmlsymbol(units, normalise)}</mrow></math>
80
- END
85
+ <<~XML
86
+ <math xmlns='#{MATHML_NS}'><mrow>#{mathmlsymbol(units, normalise)}</mrow></math>
87
+ XML
81
88
  end
82
89
  end
83
90
  end
@@ -12,16 +12,17 @@ module Asciimath2UnitsML
12
12
 
13
13
  def unit(units, origtext, normtext, dims, name)
14
14
  return if units_only(units).any? { |x| x[:unit].nil? }
15
+
15
16
  dimid = dim_id(dims)
16
17
  norm_units = normalise_units(units)
17
- <<~END
18
- <Unit xmlns='#{UNITSML_NS}' xml:id='#{unit_id(normtext)}'#{dimid ? " dimensionURL='##{dimid}'" : ""}>
19
- #{unitsystem(units)}
20
- #{unitname(norm_units, normtext, name)}
21
- #{unitsymbol(norm_units)}
22
- #{rootunits(units)}
23
- </Unit>
24
- END
18
+ <<~XML
19
+ <Unit xmlns='#{UNITSML_NS}' xml:id='#{unit_id(normtext)}'#{dimid ? " dimensionURL='##{dimid}'" : ""}>
20
+ #{unitsystem(units)}
21
+ #{unitname(norm_units, normtext, name)}
22
+ #{unitsymbol(norm_units)}
23
+ #{rootunits(units)}
24
+ </Unit>
25
+ XML
25
26
  end
26
27
 
27
28
  def normalise_units(units)
@@ -36,6 +37,7 @@ module Asciimath2UnitsML
36
37
  # kg exception
37
38
  def unitsystem(units)
38
39
  return if units_only(units).any? { |x| x[:unit].nil? }
40
+
39
41
  ret = []
40
42
  units = units_only(units)
41
43
  units.any? { |x| @units[x[:unit]].system_name != "SI" } and
@@ -43,7 +45,7 @@ module Asciimath2UnitsML
43
45
  if units.any? { |x| @units[x[:unit]].system_name == "SI" }
44
46
  base = units.size == 1 && @units[units[0][:unit]].system_type == "SI-base"
45
47
  base = true if units.size == 1 && units[0][:unit] == "g" && units[0][:prefix] == "k"
46
- ret << "<UnitSystem name='SI' type='#{base ? "SI_base" : "SI_derived"}' xml:lang='en-US'/>"
48
+ ret << "<UnitSystem name='SI' type='#{base ? 'SI_base' : 'SI_derived'}' xml:lang='en-US'/>"
47
49
  end
48
50
  ret.join("\n")
49
51
  end
@@ -59,23 +61,25 @@ module Asciimath2UnitsML
59
61
  end
60
62
 
61
63
  def unitsymbol(units)
62
- <<~END
63
- <UnitSymbol type="HTML">#{htmlsymbol(units, true)}</UnitSymbol>
64
- <UnitSymbol type="MathML">#{mathmlsymbolwrap(units, true)}</UnitSymbol>
65
- END
64
+ <<~XML
65
+ <UnitSymbol type="HTML">#{htmlsymbol(units, true)}</UnitSymbol>
66
+ <UnitSymbol type="MathML">#{mathmlsymbolwrap(units, true)}</UnitSymbol>
67
+ XML
66
68
  end
67
69
 
68
70
  def rootunits(units)
69
71
  return if units_only(units).any? { |x| x[:unit].nil? }
70
72
  return if units.size == 1 && !units[0][:prefix]
73
+
71
74
  exp = units_only(units).map do |u|
72
75
  prefix = " prefix='#{u[:prefix]}'" if u[:prefix]
73
- exponent = " powerNumerator='#{u[:exponent]}'" if u[:exponent] && u[:exponent] != "1"
76
+ u[:exponent] && u[:exponent] != "1" and
77
+ exponent = " powerNumerator='#{u[:exponent]}'"
74
78
  "<EnumeratedRootUnit unit='#{@units[u[:unit]].name}'#{prefix}#{exponent}/>"
75
79
  end.join("\n")
76
- <<~END
77
- <RootUnits>#{exp}</RootUnits>
78
- END
80
+ <<~XML
81
+ <RootUnits>#{exp}</RootUnits>
82
+ XML
79
83
  end
80
84
  end
81
85
  end
@@ -0,0 +1,57 @@
1
+ module Asciimath2UnitsML
2
+ class Conv
3
+ def validate_yaml(hash, path)
4
+ return hash if path == "../unitsdb/quantities.yaml"
5
+ return hash if path == "../unitsdb/dimensions.yaml"
6
+
7
+ hash.each_with_object({}) do |(k, v), m|
8
+ path == "../unitsdb/units.yaml" and validate_unit(v)
9
+ m = validate_symbols(m, v)
10
+ v[:unit_symbols]&.each { |s| validate_unit_symbol_cardinality(s, k) }
11
+ end
12
+ hash
13
+ end
14
+
15
+ def validate_unit(unit)
16
+ if unit[:quantity_reference]
17
+ unit[:quantity_reference].is_a?(Array) or
18
+ raise StandardError.new "No quantity_reference array provided for unit: #{unit}"
19
+ end
20
+ if unit[:unit_name]
21
+ unit[:unit_name].is_a?(Array) or
22
+ raise StandardError.new "No unit_name array provided for unit: #{unit}"
23
+ end
24
+ end
25
+
26
+ def validate_symbols(m, v)
27
+ symbol = symbol_key(v)
28
+ !symbol.nil? or
29
+ raise StandardError.new "No symbol provided for unit: #{v}"
30
+ Array(symbol)&.each do |s|
31
+ m[s] && s != "1" and
32
+ raise StandardError.new "symbol #{s} is not unique in #{v}: "\
33
+ "already used for #{m[s]}"
34
+ m[s] = v
35
+ end
36
+ m
37
+ end
38
+
39
+ def validate_unit_symbol_cardinality(sym, k)
40
+ return true if sym.nil?
41
+
42
+ !sym[:id].nil? && !sym[:ascii].nil? && !sym[:html].nil? &&
43
+ !sym[:mathml].nil? && !sym[:latex].nil? &&
44
+ !sym[:unicode].nil? and return true
45
+ raise StandardError.new "malformed unit_symbol for #{k}: #{sym}"
46
+ end
47
+
48
+ def symbol_key(v)
49
+ symbol = v[:unit_symbols]&.each_with_object([]) do |s, m|
50
+ m << (s["id"] || s[:id])
51
+ end || v.dig(:symbol, :ascii) || v[:symbol] #|| v[:short]
52
+ !symbol.nil? && v[:unit_symbols] && !symbol.is_a?(Array) and
53
+ symbol = [symbol]
54
+ symbol
55
+ end
56
+ end
57
+ end
@@ -1,3 +1,3 @@
1
1
  module Asciimath2UnitsML
2
- VERSION = '0.2.4'.freeze
2
+ VERSION = "0.3.3".freeze
3
3
  end
@@ -1,6 +1,7 @@
1
1
  module UnitsDB
2
2
  class Dimension
3
- attr_reader :id, :length, :mass, :time, :electric_current, :thermodynamic_temperature,
3
+ attr_reader :id, :length, :mass, :time, :electric_current,
4
+ :thermodynamic_temperature,
4
5
  :amount_of_substance, :luminous_intensity, :plane_angle, :dimensionless
5
6
 
6
7
  def initialize(id, hash)
@@ -10,12 +11,16 @@ module UnitsDB
10
11
  hash[:length] and @length = hash[:length][:powerNumerator].to_i
11
12
  hash[:mass] and @mass = hash[:mass][:powerNumerator].to_i
12
13
  hash[:time] and @time = hash[:time][:powerNumerator].to_i
13
- hash[:electric_current] and @electric_current = hash[:electric_current][:powerNumerator].to_i
14
+ hash[:electric_current] and
15
+ @electric_current = hash[:electric_current][:powerNumerator].to_i
14
16
  hash[:thermodynamic_temperature] and
15
17
  @thermodynamic_temperature = hash[:thermodynamic_temperature][:powerNumerator].to_i
16
- hash[:amount_of_substance] and @amount_of_substance = hash[:amount_of_substance][:powerNumerator].to_i
17
- hash[:luminous_intensity] and @luminous_intensity = hash[:luminous_intensity][:powerNumerator].to_i
18
- hash[:plane_angle] and @plane_angle = hash[:plane_angle][:powerNumerator].to_i
18
+ hash[:amount_of_substance] and
19
+ @amount_of_substance = hash[:amount_of_substance][:powerNumerator].to_i
20
+ hash[:luminous_intensity] and
21
+ @luminous_intensity = hash[:luminous_intensity][:powerNumerator].to_i
22
+ hash[:plane_angle] and
23
+ @plane_angle = hash[:plane_angle][:powerNumerator].to_i
19
24
  rescue
20
25
  raise StandardError.new "Parse fail on Dimension #{id}: #{hash}"
21
26
  end
@@ -48,7 +53,8 @@ module UnitsDB
48
53
  end
49
54
 
50
55
  def vector
51
- "#{@length}:#{@mass}:#{@time}:#{@electric_current}:#{@thermodynamic_temperature}:#{@amount_of_substance}:"\
56
+ "#{@length}:#{@mass}:#{@time}:#{@electric_current}:"\
57
+ "#{@thermodynamic_temperature}:#{@amount_of_substance}:"\
52
58
  "#{@luminous_intensity}:#{@plane_angle}"
53
59
  end
54
60
  end
@@ -102,7 +108,8 @@ module UnitsDB
102
108
  @dimension = hash[:dimension_url].sub(/^#/, "")
103
109
  @type = hash[:quantity_type]
104
110
  hash[:quantity_name] and @names = hash[:quantity_name]
105
- hash[:unit_reference] and @units = hash[:unit_reference].map { |x| x[:url].sub(/^#/, "") }
111
+ hash[:unit_reference] and
112
+ @units = hash[:unit_reference].map { |x| x[:url].sub(/^#/, "") }
106
113
  rescue
107
114
  raise StandardError.new "Parse fail on Quantity #{id}: #{hash}"
108
115
  end
@@ -118,7 +125,8 @@ module UnitsDB
118
125
  end
119
126
 
120
127
  class Unit
121
- attr_reader :id, :dimension, :short, :root, :unit_system, :names, :symbols, :symbols_hash, :root_units, :quantities,
128
+ attr_reader :id, :dimension, :short, :root, :unit_system, :names,
129
+ :symbols, :symbols_hash, :root_units, :quantities,
122
130
  :si_derived_bases, :prefixed
123
131
 
124
132
  def initialize(id, hash)
@@ -129,11 +137,13 @@ module UnitsDB
129
137
  hash[:short] && !hash[:short].empty? and @short = hash[:short]
130
138
  @unit_system = hash[:unit_system]
131
139
  @names = hash[:unit_name]
132
- @symbols_hash = hash[:unit_symbols]&.each_with_object({}) { |h, m| m[h[:id]] = h } || {}
140
+ @symbols_hash =
141
+ hash[:unit_symbols]&.each_with_object({}) { |h, m| m[h[:id]] = h } || {}
133
142
  @symbols = hash[:unit_symbols]
134
143
  hash[:root_units] and hash[:root_units][:enumerated_root_units] and
135
144
  @root = hash[:root_units][:enumerated_root_units]
136
- hash[:quantity_reference] and @quantities = hash[:quantity_reference].map { |x| x[:url].sub(/^#/, "") }
145
+ hash[:quantity_reference] and
146
+ @quantities = hash[:quantity_reference].map { |x| x[:url].sub(/^#/, "") }
137
147
  hash[:si_derived_bases] and @si_derived_bases = hash[:si_derived_bases]
138
148
  @prefixed = (hash[:prefixed] == true)
139
149
  rescue
@@ -158,7 +168,7 @@ module UnitsDB
158
168
  end
159
169
 
160
170
  def symbolids
161
- @symbols ? @symbols.map { |s| s[:id] } : [ @short ]
171
+ @symbols ? @symbols.map { |s| s[:id] } : [@short]
162
172
  end
163
173
  end
164
174
  end
data/spec/conv_spec.rb CHANGED
@@ -2,623 +2,731 @@ require "spec_helper"
2
2
 
3
3
  RSpec.describe Asciimath2UnitsML do
4
4
  it "converts an AsciiMath string to MathML + UnitsML" do
5
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
6
- 1 "unitsml(mm*s^-2)"
5
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
6
+ 1 "unitsml(mm*s^-2)"
7
7
  INPUT
8
- <?xml version='1.0'?>
9
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
10
- <mn>1</mn>
11
- <mo rspace='thickmathspace'>&#x2062;</mo>
12
- <mrow xref='U_mm.s-2'>
13
- <mi mathvariant='normal'>mm</mi>
14
- <mo>&#xB7;</mo>
15
- <msup>
16
- <mrow>
17
- <mi mathvariant='normal'>s</mi>
18
- </mrow>
19
- <mrow>
20
- <mo>&#x2212;</mo>
21
- <mn>2</mn>
22
- </mrow>
23
- </msup>
24
- </mrow>
25
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_mm.s-2' dimensionURL='#NISTd28'>
26
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
27
- <UnitName xml:lang='en'>mm*s^-2</UnitName>
28
- <UnitSymbol type='HTML'>
29
- mm&#xB7;s
30
- <sup>&#x2212;2</sup>
31
- </UnitSymbol>
32
- <UnitSymbol type='MathML'>
33
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
8
+ <?xml version='1.0'?>
9
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
10
+ <mn>1</mn>
11
+ <mo rspace='thickmathspace'>&#x2062;</mo>
12
+ <mrow xref='U_mm.s-2'>
13
+ <mi mathvariant='normal'>mm</mi>
14
+ <mo>&#x22C5;</mo>
15
+ <msup>
34
16
  <mrow>
35
- <mi mathvariant='normal'>mm</mi>
36
- <mo>&#xB7;</mo>
37
- <msup>
38
- <mrow>
39
- <mi mathvariant='normal'>s</mi>
40
- </mrow>
41
- <mrow>
42
- <mo>&#x2212;</mo>
43
- <mn>2</mn>
44
- </mrow>
45
- </msup>
17
+ <mi mathvariant='normal'>s</mi>
46
18
  </mrow>
47
- </math>
48
- </UnitSymbol>
49
- <RootUnits>
50
- <EnumeratedRootUnit unit='meter' prefix='m'/>
51
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
52
- </RootUnits>
53
- </Unit>
54
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
55
- <PrefixName xml:lang='en'>milli</PrefixName>
56
- <PrefixSymbol type='ASCII'>m</PrefixSymbol>
57
- <PrefixSymbol type='unicode'>m</PrefixSymbol>
58
- <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
59
- <PrefixSymbol type='HTML'>m</PrefixSymbol>
60
- </Prefix>
61
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd28'>
62
- <Length symbol='L' powerNumerator='1'/>
63
- <Time symbol='T' powerNumerator='-2'/>
64
- </Dimension>
65
- </math>
19
+ <mrow>
20
+ <mo>&#x2212;</mo>
21
+ <mn>2</mn>
22
+ </mrow>
23
+ </msup>
24
+ </mrow>
25
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mm.s-2' dimensionURL='#NISTd28'>
26
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
27
+ <UnitName xml:lang='en'>mm*s^-2</UnitName>
28
+ <UnitSymbol type='HTML'>
29
+ mm&#x22C5;s
30
+ <sup>&#x2212;2</sup>
31
+ </UnitSymbol>
32
+ <UnitSymbol type='MathML'>
33
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
34
+ <mrow>
35
+ <mi mathvariant='normal'>mm</mi>
36
+ <mo>&#x22C5;</mo>
37
+ <msup>
38
+ <mrow>
39
+ <mi mathvariant='normal'>s</mi>
40
+ </mrow>
41
+ <mrow>
42
+ <mo>&#x2212;</mo>
43
+ <mn>2</mn>
44
+ </mrow>
45
+ </msup>
46
+ </mrow>
47
+ </math>
48
+ </UnitSymbol>
49
+ <RootUnits>
50
+ <EnumeratedRootUnit unit='meter' prefix='m'/>
51
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
52
+ </RootUnits>
53
+ </Unit>
54
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
55
+ <PrefixName xml:lang='en'>milli</PrefixName>
56
+ <PrefixSymbol type='ASCII'>m</PrefixSymbol>
57
+ <PrefixSymbol type='unicode'>m</PrefixSymbol>
58
+ <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
59
+ <PrefixSymbol type='HTML'>m</PrefixSymbol>
60
+ </Prefix>
61
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
62
+ <Length symbol='L' powerNumerator='1'/>
63
+ <Time symbol='T' powerNumerator='-2'/>
64
+ </Dimension>
65
+ </math>
66
66
  OUTPUT
67
67
  end
68
68
 
69
- it "deals with non-Ascii units and prefixes" do
70
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
71
- 1 "unitsml(um)"
69
+ it "deals with non-Ascii units and prefixes" do
70
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
71
+ 1 "unitsml(um)"
72
72
  INPUT
73
- <?xml version='1.0'?>
74
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
75
- <mn>1</mn>
76
- <mo rspace='thickmathspace'>&#x2062;</mo>
77
- <mrow xref='U_um'>
78
- <mi mathvariant='normal'>&#xB5;m</mi>
79
- </mrow>
80
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_um' dimensionURL='#NISTd1'>
81
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
82
- <UnitName xml:lang='en'>um</UnitName>
83
- <UnitSymbol type='HTML'>um</UnitSymbol>
84
- <UnitSymbol type='MathML'>
85
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
86
- <mrow>
73
+ <?xml version='1.0'?>
74
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
75
+ <mn>1</mn>
76
+ <mo rspace='thickmathspace'>&#x2062;</mo>
77
+ <mrow xref='U_um'>
87
78
  <mi mathvariant='normal'>&#xB5;m</mi>
88
79
  </mrow>
80
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
81
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
82
+ <UnitName xml:lang='en'>um</UnitName>
83
+ <UnitSymbol type='HTML'>um</UnitSymbol>
84
+ <UnitSymbol type='MathML'>
85
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
86
+ <mrow>
87
+ <mi mathvariant='normal'>&#xB5;m</mi>
88
+ </mrow>
89
+ </math>
90
+ </UnitSymbol>
91
+ <RootUnits>
92
+ <EnumeratedRootUnit unit='meter' prefix='u'/>
93
+ </RootUnits>
94
+ </Unit>
95
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
96
+ <PrefixName xml:lang='en'>micro</PrefixName>
97
+ <PrefixSymbol type='ASCII'>u</PrefixSymbol>
98
+ <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
99
+ <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
100
+ <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
101
+ </Prefix>
102
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
103
+ <Length symbol='L' powerNumerator='1'/>
104
+ </Dimension>
89
105
  </math>
90
- </UnitSymbol>
91
- <RootUnits>
92
- <EnumeratedRootUnit unit='meter' prefix='u'/>
93
- </RootUnits>
94
- </Unit>
95
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
96
- <PrefixName xml:lang='en'>micro</PrefixName>
97
- <PrefixSymbol type='ASCII'>u</PrefixSymbol>
98
- <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
99
- <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
100
- <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
101
- </Prefix>
102
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
103
- <Length symbol='L' powerNumerator='1'/>
104
- </Dimension>
105
- </math>
106
- OUTPUT
107
- end
106
+ OUTPUT
107
+ end
108
108
 
109
109
  it "does not insert space before non-alphabetic units" do
110
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
111
- 1 "unitsml(degK)" + 1 "unitsml(prime)"
112
- INPUT
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'>
110
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
111
+ 1 "unitsml(degK)" + 1 "unitsml(prime)" + ii(theta) = s//r "unitsml(rad)" + 10^(12) "unitsml(Hz)"
112
+ INPUT
124
113
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
125
- <mrow>
126
- <mi mathvariant='normal'>K</mi>
114
+ <mn>1</mn>
115
+ <mo rspace='thickmathspace'>&#x2062;</mo>
116
+ <mrow xref='U_NISTu5'>
117
+ <mi mathvariant='normal'>&#xB0;K</mi>
127
118
  </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>
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'>
150
141
  <mi mathvariant='normal'>&#x2032;</mi>
151
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>
152
220
  </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>
163
- OUTPUT
164
- end
221
+ OUTPUT
222
+ end
165
223
 
166
224
  it "does not insert space before operators" do
167
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
168
- 8 "unitsml(kg)" cdot "unitsml(m)"
169
- INPUT
170
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
171
- <mn>8</mn>
172
- <mo rspace='thickmathspace'>&#x2062;</mo>
173
- <mrow xref='U_NISTu2'>
174
- <mi mathvariant='normal'>kg</mi>
175
- </mrow>
176
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
177
- <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
178
- <UnitName xml:lang='en'>kilogram</UnitName>
179
- <UnitSymbol type='HTML'>kg</UnitSymbol>
180
- <UnitSymbol type='MathML'>
181
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
182
- <mrow>
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'>
183
232
  <mi mathvariant='normal'>kg</mi>
184
233
  </mrow>
185
- </math>
186
- </UnitSymbol>
187
- <RootUnits>
188
- <EnumeratedRootUnit unit='gram' prefix='k'/>
189
- </RootUnits>
190
- </Unit>
191
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
192
- <PrefixName xml:lang='en'>kilo</PrefixName>
193
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
194
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
195
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
196
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
197
- </Prefix>
198
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd2'>
199
- <Mass symbol='M' powerNumerator='1'/>
200
- </Dimension>
201
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
202
- <QuantityName xml:lang='en-US'>mass</QuantityName>
203
- </Quantity>
204
- <mo>&#x22C5;</mo>
205
- <mrow xref='U_NISTu1'>
206
- <mi mathvariant='normal'>m</mi>
207
- </mrow>
208
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
209
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
210
- <UnitName xml:lang='en'>meter</UnitName>
211
- <UnitSymbol type='HTML'>m</UnitSymbol>
212
- <UnitSymbol type='MathML'>
213
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
214
- <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'>
215
264
  <mi mathvariant='normal'>m</mi>
216
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>
217
281
  </math>
218
- </UnitSymbol>
219
- </Unit>
220
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
221
- <Length symbol='L' powerNumerator='1'/>
222
- </Dimension>
223
- </math>
224
- OUTPUT
282
+ OUTPUT
225
283
  end
226
284
 
227
285
  it "deals with sqrt units" do
228
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
229
- 1 "unitsml(sqrt(Hz))"
286
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
287
+ 1 "unitsml(sqrt(Hz))"
230
288
  INPUT
231
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
232
- <mn>1</mn>
233
- <mo rspace='thickmathspace'>&#x2062;</mo>
234
- <mrow xref='U_sqrtHz'>
235
- <msqrt>
236
- <mi mathvariant='normal'>Hz</mi>
237
- </msqrt>
238
- </mrow>
239
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_Hz0.5' dimensionURL='#D_T-0.5'>
240
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
241
- <UnitName xml:lang='en'>Hz^0.5</UnitName>
242
- <UnitSymbol type='HTML'>&#x221A;Hz</UnitSymbol>
243
- <UnitSymbol type='MathML'>
244
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
245
- <mrow>
289
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
290
+ <mn>1</mn>
291
+ <mo rspace='thickmathspace'>&#x2062;</mo>
292
+ <mrow xref='U_sqrtHz'>
246
293
  <msqrt>
247
294
  <mi mathvariant='normal'>Hz</mi>
248
295
  </msqrt>
249
296
  </mrow>
297
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_Hz0.5' dimensionURL='#D_T-0.5'>
298
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
299
+ <UnitName xml:lang='en'>Hz^0.5</UnitName>
300
+ <UnitSymbol type='HTML'>&#x221A;Hz</UnitSymbol>
301
+ <UnitSymbol type='MathML'>
302
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
303
+ <mrow>
304
+ <msqrt>
305
+ <mi mathvariant='normal'>Hz</mi>
306
+ </msqrt>
307
+ </mrow>
308
+ </math>
309
+ </UnitSymbol>
310
+ </Unit>
311
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_T-0.5'>
312
+ <Time symbol='T' powerNumerator='-0.5'/>
313
+ </Dimension>
250
314
  </math>
251
- </UnitSymbol>
252
- </Unit>
253
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_T-0.5'>
254
- <Time symbol='T' powerNumerator='-0.5'/>
255
- </Dimension>
256
- </math>
257
315
  OUTPUT
258
316
  end
259
317
 
260
318
  it "deals with kg and g" do
261
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
262
- 1 "unitsml(kg)" + 1 "unitsml(g)"
319
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
320
+ 1 "unitsml(kg)" + 1 "unitsml(g)"
263
321
  INPUT
264
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
265
- <mn>1</mn>
266
- <mo rspace='thickmathspace'>&#x2062;</mo>
267
- <mrow xref='U_NISTu2'>
268
- <mi mathvariant='normal'>kg</mi>
269
- </mrow>
270
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
271
- <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
272
- <UnitName xml:lang='en'>kilogram</UnitName>
273
- <UnitSymbol type='HTML'>kg</UnitSymbol>
274
- <UnitSymbol type='MathML'>
275
322
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
276
- <mrow>
323
+ <mn>1</mn>
324
+ <mo rspace='thickmathspace'>&#x2062;</mo>
325
+ <mrow xref='U_NISTu2'>
277
326
  <mi mathvariant='normal'>kg</mi>
278
327
  </mrow>
279
- </math>
280
- </UnitSymbol>
281
- <RootUnits>
282
- <EnumeratedRootUnit unit='gram' prefix='k'/>
283
- </RootUnits>
284
- </Unit>
285
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
286
- <PrefixName xml:lang='en'>kilo</PrefixName>
287
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
288
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
289
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
290
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
291
- </Prefix>
292
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd2'>
293
- <Mass symbol='M' powerNumerator='1'/>
294
- </Dimension>
295
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
296
- <QuantityName xml:lang='en-US'>mass</QuantityName>
297
- </Quantity>
298
- <mo>+</mo>
299
- <mn>1</mn>
300
- <mo rspace='thickmathspace'>&#x2062;</mo>
301
- <mrow xref='U_NISTu27'>
302
- <mi mathvariant='normal'>g</mi>
303
- </mrow>
304
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu27' dimensionURL='#NISTd2'>
305
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
306
- <UnitName xml:lang='en'>gram</UnitName>
307
- <UnitSymbol type='HTML'>g</UnitSymbol>
308
- <UnitSymbol type='MathML'>
309
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
310
- <mrow>
328
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
329
+ <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
330
+ <UnitName xml:lang='en'>kilogram</UnitName>
331
+ <UnitSymbol type='HTML'>kg</UnitSymbol>
332
+ <UnitSymbol type='MathML'>
333
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
334
+ <mrow>
335
+ <mi mathvariant='normal'>kg</mi>
336
+ </mrow>
337
+ </math>
338
+ </UnitSymbol>
339
+ <RootUnits>
340
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
341
+ </RootUnits>
342
+ </Unit>
343
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
344
+ <PrefixName xml:lang='en'>kilo</PrefixName>
345
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
346
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
347
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
348
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
349
+ </Prefix>
350
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
351
+ <Mass symbol='M' powerNumerator='1'/>
352
+ </Dimension>
353
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
354
+ <QuantityName xml:lang='en-US'>mass</QuantityName>
355
+ </Quantity>
356
+ <mo>+</mo>
357
+ <mn>1</mn>
358
+ <mo rspace='thickmathspace'>&#x2062;</mo>
359
+ <mrow xref='U_NISTu27'>
311
360
  <mi mathvariant='normal'>g</mi>
312
361
  </mrow>
362
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu27' dimensionURL='#NISTd2'>
363
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
364
+ <UnitName xml:lang='en'>gram</UnitName>
365
+ <UnitSymbol type='HTML'>g</UnitSymbol>
366
+ <UnitSymbol type='MathML'>
367
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
368
+ <mrow>
369
+ <mi mathvariant='normal'>g</mi>
370
+ </mrow>
371
+ </math>
372
+ </UnitSymbol>
373
+ </Unit>
313
374
  </math>
314
- </UnitSymbol>
315
- </Unit>
316
- </math>
317
375
  OUTPUT
318
376
  end
319
377
 
320
378
  it "deals with non-metric" do
321
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
322
- 1 "unitsml(hp)"
379
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
380
+ 1 "unitsml(hp)"
323
381
  INPUT
324
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
325
- <mn>1</mn>
326
- <mo rspace='thickmathspace'>&#x2062;</mo>
327
- <mrow xref='U_NISTu284'>
328
- <mi mathvariant='normal'>hp</mi>
329
- </mrow>
330
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu284'>
331
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
332
- <UnitName xml:lang='en'>horsepower</UnitName>
333
- <UnitSymbol type='HTML'>hp</UnitSymbol>
334
- <UnitSymbol type='MathML'>
335
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
336
- <mrow>
382
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
383
+ <mn>1</mn>
384
+ <mo rspace='thickmathspace'>&#x2062;</mo>
385
+ <mrow xref='U_NISTu284'>
337
386
  <mi mathvariant='normal'>hp</mi>
338
387
  </mrow>
388
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu284'>
389
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
390
+ <UnitName xml:lang='en'>horsepower</UnitName>
391
+ <UnitSymbol type='HTML'>hp</UnitSymbol>
392
+ <UnitSymbol type='MathML'>
393
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
394
+ <mrow>
395
+ <mi mathvariant='normal'>hp</mi>
396
+ </mrow>
397
+ </math>
398
+ </UnitSymbol>
399
+ </Unit>
400
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd16'>
401
+ <Length symbol='L' powerNumerator='2'/>
402
+ <Mass symbol='M' powerNumerator='1'/>
403
+ <Time symbol='T' powerNumerator='-3'/>
404
+ </Dimension>
405
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq20' dimensionURL='#NISTd16' quantityType='base'>
406
+ <QuantityName xml:lang='en-US'>power</QuantityName>
407
+ </Quantity>
339
408
  </math>
340
- </UnitSymbol>
341
- </Unit>
342
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd16'>
343
- <Length symbol='L' powerNumerator='2'/>
344
- <Mass symbol='M' powerNumerator='1'/>
345
- <Time symbol='T' powerNumerator='-3'/>
346
- </Dimension>
347
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq20' dimensionURL='#NISTd16' quantityType='base'>
348
- <QuantityName xml:lang='en-US'>power</QuantityName>
349
- </Quantity>
350
- </math>
351
409
  OUTPUT
352
410
  end
353
411
 
354
412
  it "deals with duplicate units" do
355
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
356
- 1 "unitsml(kg*s^-2)" xx 9 "unitsml(kg*s^-2)"
413
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
414
+ 1 "unitsml(kg*s^-2)" xx 9 "unitsml(kg*s^-2)"
357
415
  INPUT
358
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
359
- <mn>1</mn>
360
- <mo rspace='thickmathspace'>&#x2062;</mo>
361
- <mrow xref='U_kg.s-2'>
362
- <mi mathvariant='normal'>kg</mi>
363
- <mo>&#xB7;</mo>
364
- <msup>
365
- <mrow>
366
- <mi mathvariant='normal'>s</mi>
367
- </mrow>
368
- <mrow>
369
- <mo>&#x2212;</mo>
370
- <mn>2</mn>
371
- </mrow>
372
- </msup>
373
- </mrow>
374
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
375
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
376
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
377
- <UnitSymbol type='HTML'>
378
- kg&#xB7;s
379
- <sup>&#x2212;2</sup>
380
- </UnitSymbol>
381
- <UnitSymbol type='MathML'>
382
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
416
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
417
+ <mn>1</mn>
418
+ <mo rspace='thickmathspace'>&#x2062;</mo>
419
+ <mrow xref='U_kg.s-2'>
420
+ <mi mathvariant='normal'>kg</mi>
421
+ <mo>&#x22C5;</mo>
422
+ <msup>
383
423
  <mrow>
384
- <mi mathvariant='normal'>kg</mi>
385
- <mo>&#xB7;</mo>
386
- <msup>
387
- <mrow>
388
- <mi mathvariant='normal'>s</mi>
389
- </mrow>
390
- <mrow>
391
- <mo>&#x2212;</mo>
392
- <mn>2</mn>
393
- </mrow>
394
- </msup>
424
+ <mi mathvariant='normal'>s</mi>
395
425
  </mrow>
396
- </math>
397
- </UnitSymbol>
398
- <RootUnits>
399
- <EnumeratedRootUnit unit='gram' prefix='k'/>
400
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
401
- </RootUnits>
402
- </Unit>
403
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
404
- <PrefixName xml:lang='en'>kilo</PrefixName>
405
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
406
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
407
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
408
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
409
- </Prefix>
410
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
411
- <Mass symbol='M' powerNumerator='1'/>
412
- <Time symbol='T' powerNumerator='-2'/>
413
- </Dimension>
414
- <mo>&#xD7;</mo>
415
- <mn>9</mn>
416
- <mo rspace='thickmathspace'>&#x2062;</mo>
417
- <mrow xref='U_kg.s-2'>
418
- <mi mathvariant='normal'>kg</mi>
419
- <mo>&#xB7;</mo>
420
- <msup>
421
- <mrow>
422
- <mi mathvariant='normal'>s</mi>
423
- </mrow>
424
- <mrow>
425
- <mo>&#x2212;</mo>
426
- <mn>2</mn>
427
- </mrow>
428
- </msup>
429
- </mrow>
430
- </math>
426
+ <mrow>
427
+ <mo>&#x2212;</mo>
428
+ <mn>2</mn>
429
+ </mrow>
430
+ </msup>
431
+ </mrow>
432
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
433
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
434
+ <UnitName xml:lang='en'>kg*s^-2</UnitName>
435
+ <UnitSymbol type='HTML'>
436
+ kg&#x22C5;s
437
+ <sup>&#x2212;2</sup>
438
+ </UnitSymbol>
439
+ <UnitSymbol type='MathML'>
440
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
441
+ <mrow>
442
+ <mi mathvariant='normal'>kg</mi>
443
+ <mo>&#x22C5;</mo>
444
+ <msup>
445
+ <mrow>
446
+ <mi mathvariant='normal'>s</mi>
447
+ </mrow>
448
+ <mrow>
449
+ <mo>&#x2212;</mo>
450
+ <mn>2</mn>
451
+ </mrow>
452
+ </msup>
453
+ </mrow>
454
+ </math>
455
+ </UnitSymbol>
456
+ <RootUnits>
457
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
458
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
459
+ </RootUnits>
460
+ </Unit>
461
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
462
+ <PrefixName xml:lang='en'>kilo</PrefixName>
463
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
464
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
465
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
466
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
467
+ </Prefix>
468
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
469
+ <Mass symbol='M' powerNumerator='1'/>
470
+ <Time symbol='T' powerNumerator='-2'/>
471
+ </Dimension>
472
+ <mo>&#xD7;</mo>
473
+ <mn>9</mn>
474
+ <mo rspace='thickmathspace'>&#x2062;</mo>
475
+ <mrow xref='U_kg.s-2'>
476
+ <mi mathvariant='normal'>kg</mi>
477
+ <mo>&#x22C5;</mo>
478
+ <msup>
479
+ <mrow>
480
+ <mi mathvariant='normal'>s</mi>
481
+ </mrow>
482
+ <mrow>
483
+ <mo>&#x2212;</mo>
484
+ <mn>2</mn>
485
+ </mrow>
486
+ </msup>
487
+ </mrow>
488
+ </math>
489
+ OUTPUT
490
+ end
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>&#x22C5;</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&#x22C5;kg
511
+ <sup>&#x2212;1</sup>
512
+ &#x22C5;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>&#x22C5;</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>&#x22C5;</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>
431
561
  OUTPUT
432
562
  end
433
563
 
434
564
  it "deals with notational variants" do
435
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
436
- 9 "unitsml(degK)" + 10 "unitsml(K)"
437
- INPUT
438
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
439
- <mn>9</mn>
440
- <mo rspace='thickmathspace'>&#x2062;</mo>
441
- <mrow xref='U_NISTu5'>
442
- <mi mathvariant='normal'>&#xB0;K</mi>
443
- </mrow>
444
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
445
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
446
- <UnitName xml:lang='en'>kelvin</UnitName>
447
- <UnitSymbol type='HTML'>K</UnitSymbol>
448
- <UnitSymbol type='MathML'>
565
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
566
+ 9 "unitsml(degK)" + 10 "unitsml(K)"
567
+ INPUT
449
568
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
450
- <mrow>
569
+ <mn>9</mn>
570
+ <mo rspace='thickmathspace'>&#x2062;</mo>
571
+ <mrow xref='U_NISTu5'>
572
+ <mi mathvariant='normal'>&#xB0;K</mi>
573
+ </mrow>
574
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
575
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
576
+ <UnitName xml:lang='en'>kelvin</UnitName>
577
+ <UnitSymbol type='HTML'>K</UnitSymbol>
578
+ <UnitSymbol type='MathML'>
579
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
580
+ <mrow>
581
+ <mi mathvariant='normal'>K</mi>
582
+ </mrow>
583
+ </math>
584
+ </UnitSymbol>
585
+ </Unit>
586
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd5'>
587
+ <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
588
+ </Dimension>
589
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
590
+ <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
591
+ </Quantity>
592
+ <mo>+</mo>
593
+ <mn>10</mn>
594
+ <mo rspace='thickmathspace'>&#x2062;</mo>
595
+ <mrow xref='U_NISTu5'>
451
596
  <mi mathvariant='normal'>K</mi>
452
597
  </mrow>
453
598
  </math>
454
- </UnitSymbol>
455
- </Unit>
456
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd5'>
457
- <ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
458
- </Dimension>
459
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
460
- <QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
461
- </Quantity>
462
- <mo>+</mo>
463
- <mn>10</mn>
464
- <mo rspace='thickmathspace'>&#x2062;</mo>
465
- <mrow xref='U_NISTu5'>
466
- <mi mathvariant='normal'>K</mi>
467
- </mrow>
468
- </math>
469
- OUTPUT
599
+ OUTPUT
470
600
  end
471
601
 
472
602
  it "deals with prefixed units" do
473
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
474
- 9 "unitsml(mbar)"
475
- INPUT
476
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
477
- <mn>9</mn>
478
- <mo rspace='thickmathspace'>&#x2062;</mo>
479
- <mrow xref='U_NISTu362'>
480
- <mi mathvariant='normal'>mbar</mi>
481
- </mrow>
482
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu362'>
483
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
484
- <UnitName xml:lang='en'>millibar</UnitName>
485
- <UnitSymbol type='HTML'>mbar</UnitSymbol>
486
- <UnitSymbol type='MathML'>
603
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
604
+ 9 "unitsml(mbar)"
605
+ INPUT
487
606
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
488
- <mrow>
607
+ <mn>9</mn>
608
+ <mo rspace='thickmathspace'>&#x2062;</mo>
609
+ <mrow xref='U_NISTu362'>
489
610
  <mi mathvariant='normal'>mbar</mi>
490
611
  </mrow>
612
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu362'>
613
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
614
+ <UnitName xml:lang='en'>millibar</UnitName>
615
+ <UnitSymbol type='HTML'>mbar</UnitSymbol>
616
+ <UnitSymbol type='MathML'>
617
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
618
+ <mrow>
619
+ <mi mathvariant='normal'>mbar</mi>
620
+ </mrow>
621
+ </math>
622
+ </UnitSymbol>
623
+ <RootUnits>
624
+ <EnumeratedRootUnit unit='bar' prefix='m'/>
625
+ </RootUnits>
626
+ </Unit>
627
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
628
+ <PrefixName xml:lang='en'>milli</PrefixName>
629
+ <PrefixSymbol type='ASCII'>m</PrefixSymbol>
630
+ <PrefixSymbol type='unicode'>m</PrefixSymbol>
631
+ <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
632
+ <PrefixSymbol type='HTML'>m</PrefixSymbol>
633
+ </Prefix>
634
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd14'>
635
+ <Length symbol='L' powerNumerator='-1'/>
636
+ <Mass symbol='M' powerNumerator='1'/>
637
+ <Time symbol='T' powerNumerator='-2'/>
638
+ </Dimension>
491
639
  </math>
492
- </UnitSymbol>
493
- <RootUnits>
494
- <EnumeratedRootUnit unit='bar' prefix='m'/>
495
- </RootUnits>
496
- </Unit>
497
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
498
- <PrefixName xml:lang='en'>milli</PrefixName>
499
- <PrefixSymbol type='ASCII'>m</PrefixSymbol>
500
- <PrefixSymbol type='unicode'>m</PrefixSymbol>
501
- <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
502
- <PrefixSymbol type='HTML'>m</PrefixSymbol>
503
- </Prefix>
504
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd14'>
505
- <Length symbol='L' powerNumerator='-1'/>
506
- <Mass symbol='M' powerNumerator='1'/>
507
- <Time symbol='T' powerNumerator='-2'/>
508
- </Dimension>
509
- </math>
510
- OUTPUT
640
+ OUTPUT
511
641
  end
512
642
 
513
643
  it "deals with standalone prefixes" do
514
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
515
- "unitsml(p-)" "unitsml(da-)"
644
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
645
+ "unitsml(p-)" "unitsml(da-)"
516
646
  INPUT
517
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
518
- <mrow xref='NISTp10_-12'>
519
- <mi mathvariant='normal'>p</mi>
520
- </mrow>
521
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-12' xml:id='NISTp10_-12'>
522
- <PrefixName xml:lang='en'>pico</PrefixName>
523
- <PrefixSymbol type='ASCII'>p</PrefixSymbol>
524
- <PrefixSymbol type='unicode'>p</PrefixSymbol>
525
- <PrefixSymbol type='LaTeX'>p</PrefixSymbol>
526
- <PrefixSymbol type='HTML'>p</PrefixSymbol>
527
- </Prefix>
528
- <mo rspace='thickmathspace'>&#x2062;</mo>
529
- <mrow xref='NISTp10_1'>
530
- <mi mathvariant='normal'>da</mi>
531
- </mrow>
532
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='1' xml:id='NISTp10_1'>
533
- <PrefixName xml:lang='en'>deka</PrefixName>
534
- <PrefixSymbol type='ASCII'>da</PrefixSymbol>
535
- <PrefixSymbol type='unicode'>da</PrefixSymbol>
536
- <PrefixSymbol type='LaTeX'>da</PrefixSymbol>
537
- <PrefixSymbol type='HTML'>da</PrefixSymbol>
538
- </Prefix>
539
- </math>
647
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
648
+ <mrow xref='NISTp10_-12'>
649
+ <mi mathvariant='normal'>p</mi>
650
+ </mrow>
651
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-12' xml:id='NISTp10_-12'>
652
+ <PrefixName xml:lang='en'>pico</PrefixName>
653
+ <PrefixSymbol type='ASCII'>p</PrefixSymbol>
654
+ <PrefixSymbol type='unicode'>p</PrefixSymbol>
655
+ <PrefixSymbol type='LaTeX'>p</PrefixSymbol>
656
+ <PrefixSymbol type='HTML'>p</PrefixSymbol>
657
+ </Prefix>
658
+ <mo rspace='thickmathspace'>&#x2062;</mo>
659
+ <mrow xref='NISTp10_1'>
660
+ <mi mathvariant='normal'>da</mi>
661
+ </mrow>
662
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='1' xml:id='NISTp10_1'>
663
+ <PrefixName xml:lang='en'>deka</PrefixName>
664
+ <PrefixSymbol type='ASCII'>da</PrefixSymbol>
665
+ <PrefixSymbol type='unicode'>da</PrefixSymbol>
666
+ <PrefixSymbol type='LaTeX'>da</PrefixSymbol>
667
+ <PrefixSymbol type='HTML'>da</PrefixSymbol>
668
+ </Prefix>
669
+ </math>
540
670
  OUTPUT
541
671
  end
542
672
 
543
673
  it "deals with HTML entities in UnitsDB" do
544
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
545
- "unitsml(u-)" + "unitsml(um)"
546
- INPUT
547
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
548
- <mrow xref='NISTp10_-6'>
549
- <mi mathvariant='normal'>&#xB5;</mi>
550
- </mrow>
551
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
552
- <PrefixName xml:lang='en'>micro</PrefixName>
553
- <PrefixSymbol type='ASCII'>u</PrefixSymbol>
554
- <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
555
- <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
556
- <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
557
- </Prefix>
558
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd2'>
559
- <Mass symbol='M' powerNumerator='1'/>
560
- </Dimension>
561
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
562
- <QuantityName xml:lang='en-US'>mass</QuantityName>
563
- </Quantity>
564
- <mo>+</mo>
565
- <mo rspace='thickmathspace'>&#x2062;</mo>
566
- <mrow xref='U_um'>
567
- <mi mathvariant='normal'>&#xB5;m</mi>
568
- </mrow>
569
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_um' dimensionURL='#NISTd1'>
570
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
571
- <UnitName xml:lang='en'>um</UnitName>
572
- <UnitSymbol type='HTML'>um</UnitSymbol>
573
- <UnitSymbol type='MathML'>
674
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
675
+ "unitsml(u-)" + "unitsml(um)"
676
+ INPUT
574
677
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
575
- <mrow>
678
+ <mrow xref='NISTp10_-6'>
679
+ <mi mathvariant='normal'>&#xB5;</mi>
680
+ </mrow>
681
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-6' xml:id='NISTp10_-6'>
682
+ <PrefixName xml:lang='en'>micro</PrefixName>
683
+ <PrefixSymbol type='ASCII'>u</PrefixSymbol>
684
+ <PrefixSymbol type='unicode'>&#x3BC;</PrefixSymbol>
685
+ <PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
686
+ <PrefixSymbol type='HTML'>&#xB5;</PrefixSymbol>
687
+ </Prefix>
688
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd2'>
689
+ <Mass symbol='M' powerNumerator='1'/>
690
+ </Dimension>
691
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
692
+ <QuantityName xml:lang='en-US'>mass</QuantityName>
693
+ </Quantity>
694
+ <mo>+</mo>
695
+ <mrow xref='U_um'>
576
696
  <mi mathvariant='normal'>&#xB5;m</mi>
577
697
  </mrow>
698
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_um' dimensionURL='#NISTd1'>
699
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
700
+ <UnitName xml:lang='en'>um</UnitName>
701
+ <UnitSymbol type='HTML'>um</UnitSymbol>
702
+ <UnitSymbol type='MathML'>
703
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
704
+ <mrow>
705
+ <mi mathvariant='normal'>&#xB5;m</mi>
706
+ </mrow>
707
+ </math>
708
+ </UnitSymbol>
709
+ <RootUnits>
710
+ <EnumeratedRootUnit unit='meter' prefix='u'/>
711
+ </RootUnits>
712
+ </Unit>
713
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
714
+ <Length symbol='L' powerNumerator='1'/>
715
+ </Dimension>
578
716
  </math>
579
- </UnitSymbol>
580
- <RootUnits>
581
- <EnumeratedRootUnit unit='meter' prefix='u'/>
582
- </RootUnits>
583
- </Unit>
584
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
585
- <Length symbol='L' powerNumerator='1'/>
586
- </Dimension>
587
- </math>
588
717
  OUTPUT
589
718
  end
590
719
 
591
720
  it "deals with units division" do
592
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
593
- 9 "unitsml(A*C^3)" + 13 "unitsml(A/C^-3)"
594
- INPUT
595
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
596
- <mn>9</mn>
597
- <mo rspace='thickmathspace'>&#x2062;</mo>
598
- <mrow xref='U_A.C3'>
599
- <mi mathvariant='normal'>A</mi>
600
- <mo>&#xB7;</mo>
601
- <msup>
602
- <mrow>
603
- <mi mathvariant='normal'>C</mi>
604
- </mrow>
605
- <mrow>
606
- <mn>3</mn>
607
- </mrow>
608
- </msup>
609
- </mrow>
610
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_A.C3' dimensionURL='#D_M3I4'>
611
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
612
- <UnitName xml:lang='en'>A*C^3</UnitName>
613
- <UnitSymbol type='HTML'>
614
- A&#xB7;C
615
- <sup>3</sup>
616
- </UnitSymbol>
617
- <UnitSymbol type='MathML'>
618
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
619
- <mrow>
721
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
722
+ 9 "unitsml(A*C^3)" + 13 "unitsml(A/C^-3)" + 2 "unitsml(J/kg*K)"
723
+ INPUT
724
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
725
+ <mn>9</mn>
726
+ <mo rspace='thickmathspace'>&#x2062;</mo>
727
+ <mrow xref='U_A.C3'>
620
728
  <mi mathvariant='normal'>A</mi>
621
- <mo>&#xB7;</mo>
729
+ <mo>&#x22C5;</mo>
622
730
  <msup>
623
731
  <mrow>
624
732
  <mi mathvariant='normal'>C</mi>
@@ -628,145 +736,217 @@ INPUT
628
736
  </mrow>
629
737
  </msup>
630
738
  </mrow>
739
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_A.C3' dimensionURL='#D_M3I4'>
740
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
741
+ <UnitName xml:lang='en'>A*C^3</UnitName>
742
+ <UnitSymbol type='HTML'>
743
+ A&#x22C5;C
744
+ <sup>3</sup>
745
+ </UnitSymbol>
746
+ <UnitSymbol type='MathML'>
747
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
748
+ <mrow>
749
+ <mi mathvariant='normal'>A</mi>
750
+ <mo>&#x22C5;</mo>
751
+ <msup>
752
+ <mrow>
753
+ <mi mathvariant='normal'>C</mi>
754
+ </mrow>
755
+ <mrow>
756
+ <mn>3</mn>
757
+ </mrow>
758
+ </msup>
759
+ </mrow>
760
+ </math>
761
+ </UnitSymbol>
762
+ <RootUnits>
763
+ <EnumeratedRootUnit unit='ampere'/>
764
+ <EnumeratedRootUnit unit='coulomb' powerNumerator='3'/>
765
+ </RootUnits>
766
+ </Unit>
767
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M3I4'>
768
+ <Mass symbol='M' powerNumerator='3'/>
769
+ <ElectricCurrent symbol='I' powerNumerator='4'/>
770
+ </Dimension>
771
+ <mo>+</mo>
772
+ <mn>13</mn>
773
+ <mo rspace='thickmathspace'>&#x2062;</mo>
774
+ <mrow xref='U_A/C-3'>
775
+ <mi mathvariant='normal'>A</mi>
776
+ <mo>/</mo>
777
+ <msup>
778
+ <mrow>
779
+ <mi mathvariant='normal'>C</mi>
780
+ </mrow>
781
+ <mrow>
782
+ <mo>&#x2212;</mo>
783
+ <mn>3</mn>
784
+ </mrow>
785
+ </msup>
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>&#x22C5;</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&#x22C5;kg
802
+ <sup>&#x2212;1</sup>
803
+ &#x22C5;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>&#x22C5;</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>&#x22C5;</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>
631
857
  </math>
632
- </UnitSymbol>
633
- <RootUnits>
634
- <EnumeratedRootUnit unit='ampere'/>
635
- <EnumeratedRootUnit unit='coulomb' powerNumerator='3'/>
636
- </RootUnits>
637
- </Unit>
638
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_M3I4'>
639
- <Mass symbol='M' powerNumerator='3'/>
640
- <ElectricCurrent symbol='I' powerNumerator='4'/>
641
- </Dimension>
642
- <mo>+</mo>
643
- <mn>13</mn>
644
- <mo rspace='thickmathspace'>&#x2062;</mo>
645
- <mrow xref='U_A/C-3'>
646
- <mi mathvariant='normal'>A</mi>
647
- <mo>/</mo>
648
- <msup>
649
- <mrow>
650
- <mi mathvariant='normal'>C</mi>
651
- </mrow>
652
- <mrow>
653
- <mo>&#x2212;</mo>
654
- <mn>3</mn>
655
- </mrow>
656
- </msup>
657
- </mrow>
658
- </math>
659
- OUTPUT
858
+ OUTPUT
660
859
  end
661
860
 
662
861
  it "converts MathML to MatML + UnitsML" do
663
862
  input = <<~INPUT
664
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
665
- <mn>32</mn>
666
- <mo>+</mo>
667
- <mn>5</mn>
668
- <mo>&#xD7;</mo>
669
- <mn>7</mn>
670
- <mtext>unitsml(kg^-2)</mtext>
671
- </math>
863
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
864
+ <mn>32</mn>
865
+ <mo>+</mo>
866
+ <mn>5</mn>
867
+ <mo>&#xD7;</mo>
868
+ <mn>7</mn>
869
+ <mtext>unitsml(kg^-2)</mtext>
870
+ </math>
672
871
  INPUT
673
872
  output = <<~OUTPUT
674
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
675
- <mn>32</mn>
676
- <mo>+</mo>
677
- <mn>5</mn>
678
- <mo>&#xD7;</mo>
679
- <mn>7</mn>
680
- <mo rspace='thickmathspace'>&#x2062;</mo>
681
- <mrow xref='U_kg-2'>
682
- <msup>
683
- <mrow>
684
- <mi mathvariant='normal'>kg</mi>
685
- </mrow>
873
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
874
+ <mn>32</mn>
875
+ <mo>+</mo>
876
+ <mn>5</mn>
877
+ <mo>&#xD7;</mo>
878
+ <mn>7</mn>
879
+ <mo rspace='thickmathspace'>&#x2062;</mo>
880
+ <mrow xref='U_kg-2'>
881
+ <msup>
882
+ <mrow>
883
+ <mi mathvariant='normal'>kg</mi>
884
+ </mrow>
885
+ <mrow>
886
+ <mo>&#x2212;</mo>
887
+ <mn>2</mn>
888
+ </mrow>
889
+ </msup>
890
+ </mrow>
891
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg-2' dimensionURL='#D_M-2'>
892
+ <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
893
+ <UnitName xml:lang='en'>kg^-2</UnitName>
894
+ <UnitSymbol type='HTML'>
895
+ kg
896
+ <sup>&#x2212;2</sup>
897
+ </UnitSymbol>
898
+ <UnitSymbol type='MathML'>
899
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
686
900
  <mrow>
687
- <mo>&#x2212;</mo>
688
- <mn>2</mn>
901
+ <msup>
902
+ <mrow>
903
+ <mi mathvariant='normal'>kg</mi>
904
+ </mrow>
905
+ <mrow>
906
+ <mo>&#x2212;</mo>
907
+ <mn>2</mn>
908
+ </mrow>
909
+ </msup>
689
910
  </mrow>
690
- </msup>
691
- </mrow>
692
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg-2' dimensionURL='#D_M-2'>
693
- <UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
694
- <UnitName xml:lang='en'>kg^-2</UnitName>
695
- <UnitSymbol type='HTML'>
696
- kg
697
- <sup>&#x2212;2</sup>
698
- </UnitSymbol>
699
- <UnitSymbol type='MathML'>
700
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
701
- <mrow>
702
- <msup>
703
- <mrow>
704
- <mi mathvariant='normal'>kg</mi>
705
- </mrow>
706
- <mrow>
707
- <mo>&#x2212;</mo>
708
- <mn>2</mn>
709
- </mrow>
710
- </msup>
711
- </mrow>
712
- </math>
713
- </UnitSymbol>
714
- <RootUnits>
715
- <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
716
- </RootUnits>
717
- </Unit>
718
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
719
- <PrefixName xml:lang='en'>kilo</PrefixName>
720
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
721
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
722
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
723
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
724
- </Prefix>
725
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_M-2'>
726
- <Mass symbol='M' powerNumerator='-2'/>
727
- </Dimension>
728
- </math>
729
- OUTPUT
730
- expect(xmlpp(Asciimath2UnitsML::Conv.new().MathML2UnitsML(input).to_xml)).to be_equivalent_to xmlpp(output)
731
- expect(xmlpp(Asciimath2UnitsML::Conv.new().MathML2UnitsML(Nokogiri::XML(input)).to_xml)).to be_equivalent_to xmlpp(output)
911
+ </math>
912
+ </UnitSymbol>
913
+ <RootUnits>
914
+ <EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
915
+ </RootUnits>
916
+ </Unit>
917
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
918
+ <PrefixName xml:lang='en'>kilo</PrefixName>
919
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
920
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
921
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
922
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
923
+ </Prefix>
924
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='D_M-2'>
925
+ <Mass symbol='M' powerNumerator='-2'/>
926
+ </Dimension>
927
+ </math>
928
+ OUTPUT
929
+ expect(xmlpp(Asciimath2UnitsML::Conv.new
930
+ .MathML2UnitsML(input).to_xml)).to be_equivalent_to xmlpp(output)
931
+ expect(xmlpp(Asciimath2UnitsML::Conv.new
932
+ .MathML2UnitsML(Nokogiri::XML(input)).to_xml))
933
+ .to be_equivalent_to xmlpp(output)
732
934
  end
733
935
 
734
936
  it "raises error for illegal unit" do
735
- expect{xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))}.to raise_error(Rsec::SyntaxError)
736
- 12 "unitsml(que?)"
937
+ expect { xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT)) }.to raise_error(Rsec::SyntaxError)
938
+ 12 "unitsml(que?)"
737
939
  INPUT
738
940
  end
739
941
 
740
942
  it "initialises multiplier" do
741
943
  expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: "\u00d7").Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
742
- 1 "unitsml(kg*s^-2)"
944
+ 1 "unitsml(kg*s^-2)"
743
945
  INPUT
744
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
745
- <mn>1</mn>
746
- <mo rspace='thickmathspace'>&#x2062;</mo>
747
- <mrow xref='U_kg.s-2'>
748
- <mi mathvariant='normal'>kg</mi>
749
- <mo>&#xD7;</mo>
750
- <msup>
751
- <mrow>
752
- <mi mathvariant='normal'>s</mi>
753
- </mrow>
754
- <mrow>
755
- <mo>&#x2212;</mo>
756
- <mn>2</mn>
757
- </mrow>
758
- </msup>
759
- </mrow>
760
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
761
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
762
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
763
- <UnitSymbol type='HTML'>
764
- kg&#xD7;s
765
- <sup>&#x2212;2</sup>
766
- </UnitSymbol>
767
- <UnitSymbol type='MathML'>
768
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
769
- <mrow>
946
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
947
+ <mn>1</mn>
948
+ <mo rspace='thickmathspace'>&#x2062;</mo>
949
+ <mrow xref='U_kg.s-2'>
770
950
  <mi mathvariant='normal'>kg</mi>
771
951
  <mo>&#xD7;</mo>
772
952
  <msup>
@@ -779,116 +959,116 @@ OUTPUT
779
959
  </mrow>
780
960
  </msup>
781
961
  </mrow>
962
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
963
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
964
+ <UnitName xml:lang='en'>kg*s^-2</UnitName>
965
+ <UnitSymbol type='HTML'>
966
+ kg&#xD7;s
967
+ <sup>&#x2212;2</sup>
968
+ </UnitSymbol>
969
+ <UnitSymbol type='MathML'>
970
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
971
+ <mrow>
972
+ <mi mathvariant='normal'>kg</mi>
973
+ <mo>&#xD7;</mo>
974
+ <msup>
975
+ <mrow>
976
+ <mi mathvariant='normal'>s</mi>
977
+ </mrow>
978
+ <mrow>
979
+ <mo>&#x2212;</mo>
980
+ <mn>2</mn>
981
+ </mrow>
982
+ </msup>
983
+ </mrow>
984
+ </math>
985
+ </UnitSymbol>
986
+ <RootUnits>
987
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
988
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
989
+ </RootUnits>
990
+ </Unit>
991
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
992
+ <PrefixName xml:lang='en'>kilo</PrefixName>
993
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
994
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
995
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
996
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
997
+ </Prefix>
998
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
999
+ <Mass symbol='M' powerNumerator='1'/>
1000
+ <Time symbol='T' powerNumerator='-2'/>
1001
+ </Dimension>
782
1002
  </math>
783
- </UnitSymbol>
784
- <RootUnits>
785
- <EnumeratedRootUnit unit='gram' prefix='k'/>
786
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
787
- </RootUnits>
788
- </Unit>
789
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
790
- <PrefixName xml:lang='en'>kilo</PrefixName>
791
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
792
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
793
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
794
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
795
- </Prefix>
796
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
797
- <Mass symbol='M' powerNumerator='1'/>
798
- <Time symbol='T' powerNumerator='-2'/>
799
- </Dimension>
800
- </math>
801
1003
  OUTPUT
802
1004
  expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :space).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
803
- 1 "unitsml(kg*s^-2)"
1005
+ 1 "unitsml(kg*s^-2)"
804
1006
  INPUT
805
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
806
- <mn>1</mn>
807
- <mo rspace='thickmathspace'>&#x2062;</mo>
808
- <mrow xref='U_kg.s-2'>
809
- <mi mathvariant='normal'>kg</mi>
1007
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1008
+ <mn>1</mn>
810
1009
  <mo rspace='thickmathspace'>&#x2062;</mo>
811
- <msup>
812
- <mrow>
813
- <mi mathvariant='normal'>s</mi>
814
- </mrow>
815
- <mrow>
816
- <mo>&#x2212;</mo>
817
- <mn>2</mn>
818
- </mrow>
819
- </msup>
820
- </mrow>
821
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
822
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
823
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
824
- <UnitSymbol type='HTML'>
825
- kg&#xA0;s
826
- <sup>&#x2212;2</sup>
827
- </UnitSymbol>
828
- <UnitSymbol type='MathML'>
829
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1010
+ <mrow xref='U_kg.s-2'>
1011
+ <mi mathvariant='normal'>kg</mi>
1012
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1013
+ <msup>
830
1014
  <mrow>
831
- <mi mathvariant='normal'>kg</mi>
832
- <mo rspace='thickmathspace'>&#x2062;</mo>
833
- <msup>
834
- <mrow>
835
- <mi mathvariant='normal'>s</mi>
836
- </mrow>
837
- <mrow>
838
- <mo>&#x2212;</mo>
839
- <mn>2</mn>
840
- </mrow>
841
- </msup>
1015
+ <mi mathvariant='normal'>s</mi>
842
1016
  </mrow>
843
- </math>
844
- </UnitSymbol>
845
- <RootUnits>
846
- <EnumeratedRootUnit unit='gram' prefix='k'/>
847
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
848
- </RootUnits>
849
- </Unit>
850
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
851
- <PrefixName xml:lang='en'>kilo</PrefixName>
852
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
853
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
854
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
855
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
856
- </Prefix>
857
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
858
- <Mass symbol='M' powerNumerator='1'/>
859
- <Time symbol='T' powerNumerator='-2'/>
860
- </Dimension>
861
- </math>
1017
+ <mrow>
1018
+ <mo>&#x2212;</mo>
1019
+ <mn>2</mn>
1020
+ </mrow>
1021
+ </msup>
1022
+ </mrow>
1023
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1024
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1025
+ <UnitName xml:lang='en'>kg*s^-2</UnitName>
1026
+ <UnitSymbol type='HTML'>
1027
+ kg&#xA0;s
1028
+ <sup>&#x2212;2</sup>
1029
+ </UnitSymbol>
1030
+ <UnitSymbol type='MathML'>
1031
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1032
+ <mrow>
1033
+ <mi mathvariant='normal'>kg</mi>
1034
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1035
+ <msup>
1036
+ <mrow>
1037
+ <mi mathvariant='normal'>s</mi>
1038
+ </mrow>
1039
+ <mrow>
1040
+ <mo>&#x2212;</mo>
1041
+ <mn>2</mn>
1042
+ </mrow>
1043
+ </msup>
1044
+ </mrow>
1045
+ </math>
1046
+ </UnitSymbol>
1047
+ <RootUnits>
1048
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
1049
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1050
+ </RootUnits>
1051
+ </Unit>
1052
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1053
+ <PrefixName xml:lang='en'>kilo</PrefixName>
1054
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1055
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
1056
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1057
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
1058
+ </Prefix>
1059
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1060
+ <Mass symbol='M' powerNumerator='1'/>
1061
+ <Time symbol='T' powerNumerator='-2'/>
1062
+ </Dimension>
1063
+ </math>
862
1064
  OUTPUT
863
1065
  expect(xmlpp(Asciimath2UnitsML::Conv.new(multiplier: :nospace).Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
864
- 1 "unitsml(kg*s^-2)"
1066
+ 1 "unitsml(kg*s^-2)"
865
1067
  INPUT
866
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
867
- <mn>1</mn>
868
- <mo rspace='thickmathspace'>&#x2062;</mo>
869
- <mrow xref='U_kg.s-2'>
870
- <mi mathvariant='normal'>kg</mi>
871
- <mo>&#x2062;</mo>
872
- <msup>
873
- <mrow>
874
- <mi mathvariant='normal'>s</mi>
875
- </mrow>
876
- <mrow>
877
- <mo>&#x2212;</mo>
878
- <mn>2</mn>
879
- </mrow>
880
- </msup>
881
- </mrow>
882
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
883
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
884
- <UnitName xml:lang='en'>kg*s^-2</UnitName>
885
- <UnitSymbol type='HTML'>
886
- kgs
887
- <sup>&#x2212;2</sup>
888
- </UnitSymbol>
889
- <UnitSymbol type='MathML'>
890
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
891
- <mrow>
1068
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1069
+ <mn>1</mn>
1070
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1071
+ <mrow xref='U_kg.s-2'>
892
1072
  <mi mathvariant='normal'>kg</mi>
893
1073
  <mo>&#x2062;</mo>
894
1074
  <msup>
@@ -901,60 +1081,60 @@ OUTPUT
901
1081
  </mrow>
902
1082
  </msup>
903
1083
  </mrow>
1084
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
1085
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1086
+ <UnitName xml:lang='en'>kg*s^-2</UnitName>
1087
+ <UnitSymbol type='HTML'>
1088
+ kgs
1089
+ <sup>&#x2212;2</sup>
1090
+ </UnitSymbol>
1091
+ <UnitSymbol type='MathML'>
1092
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1093
+ <mrow>
1094
+ <mi mathvariant='normal'>kg</mi>
1095
+ <mo>&#x2062;</mo>
1096
+ <msup>
1097
+ <mrow>
1098
+ <mi mathvariant='normal'>s</mi>
1099
+ </mrow>
1100
+ <mrow>
1101
+ <mo>&#x2212;</mo>
1102
+ <mn>2</mn>
1103
+ </mrow>
1104
+ </msup>
1105
+ </mrow>
1106
+ </math>
1107
+ </UnitSymbol>
1108
+ <RootUnits>
1109
+ <EnumeratedRootUnit unit='gram' prefix='k'/>
1110
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1111
+ </RootUnits>
1112
+ </Unit>
1113
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
1114
+ <PrefixName xml:lang='en'>kilo</PrefixName>
1115
+ <PrefixSymbol type='ASCII'>k</PrefixSymbol>
1116
+ <PrefixSymbol type='unicode'>k</PrefixSymbol>
1117
+ <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
1118
+ <PrefixSymbol type='HTML'>k</PrefixSymbol>
1119
+ </Prefix>
1120
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd37'>
1121
+ <Mass symbol='M' powerNumerator='1'/>
1122
+ <Time symbol='T' powerNumerator='-2'/>
1123
+ </Dimension>
904
1124
  </math>
905
- </UnitSymbol>
906
- <RootUnits>
907
- <EnumeratedRootUnit unit='gram' prefix='k'/>
908
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
909
- </RootUnits>
910
- </Unit>
911
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
912
- <PrefixName xml:lang='en'>kilo</PrefixName>
913
- <PrefixSymbol type='ASCII'>k</PrefixSymbol>
914
- <PrefixSymbol type='unicode'>k</PrefixSymbol>
915
- <PrefixSymbol type='LaTeX'>k</PrefixSymbol>
916
- <PrefixSymbol type='HTML'>k</PrefixSymbol>
917
- </Prefix>
918
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
919
- <Mass symbol='M' powerNumerator='1'/>
920
- <Time symbol='T' powerNumerator='-2'/>
921
- </Dimension>
922
- </math>
923
1125
  OUTPUT
924
1126
  end
925
1127
 
926
1128
  it "deals with dimension decomposition with like units" do
927
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
928
- 9 "unitsml(mW*cm^(-2))"
929
- INPUT
930
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
931
- <mn>9</mn>
932
- <mo rspace='thickmathspace'>&#x2062;</mo>
933
- <mrow xref='U_mW.cm-2'>
934
- <mi mathvariant='normal'>mW</mi>
935
- <mo>&#xB7;</mo>
936
- <msup>
937
- <mrow>
938
- <mi mathvariant='normal'>cm</mi>
939
- </mrow>
940
- <mrow>
941
- <mo>&#x2212;</mo>
942
- <mn>2</mn>
943
- </mrow>
944
- </msup>
945
- </mrow>
946
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_mW.cm-2'>
947
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
948
- <UnitName xml:lang='en'>mW*cm^-2</UnitName>
949
- <UnitSymbol type='HTML'>
950
- mW&#xB7;cm
951
- <sup>&#x2212;2</sup>
952
- </UnitSymbol>
953
- <UnitSymbol type='MathML'>
954
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
955
- <mrow>
1129
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1130
+ 9 "unitsml(mW*cm^(-2))"
1131
+ INPUT
1132
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1133
+ <mn>9</mn>
1134
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1135
+ <mrow xref='U_mW.cm-2'>
956
1136
  <mi mathvariant='normal'>mW</mi>
957
- <mo>&#xB7;</mo>
1137
+ <mo>&#x22C5;</mo>
958
1138
  <msup>
959
1139
  <mrow>
960
1140
  <mi mathvariant='normal'>cm</mi>
@@ -965,102 +1145,93 @@ INPUT
965
1145
  </mrow>
966
1146
  </msup>
967
1147
  </mrow>
1148
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_mW.cm-2'>
1149
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1150
+ <UnitName xml:lang='en'>mW*cm^-2</UnitName>
1151
+ <UnitSymbol type='HTML'>
1152
+ mW&#x22C5;cm
1153
+ <sup>&#x2212;2</sup>
1154
+ </UnitSymbol>
1155
+ <UnitSymbol type='MathML'>
1156
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1157
+ <mrow>
1158
+ <mi mathvariant='normal'>mW</mi>
1159
+ <mo>&#x22C5;</mo>
1160
+ <msup>
1161
+ <mrow>
1162
+ <mi mathvariant='normal'>cm</mi>
1163
+ </mrow>
1164
+ <mrow>
1165
+ <mo>&#x2212;</mo>
1166
+ <mn>2</mn>
1167
+ </mrow>
1168
+ </msup>
1169
+ </mrow>
1170
+ </math>
1171
+ </UnitSymbol>
1172
+ <RootUnits>
1173
+ <EnumeratedRootUnit unit='watt' prefix='m'/>
1174
+ <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1175
+ </RootUnits>
1176
+ </Unit>
1177
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
1178
+ <PrefixName xml:lang='en'>milli</PrefixName>
1179
+ <PrefixSymbol type='ASCII'>m</PrefixSymbol>
1180
+ <PrefixSymbol type='unicode'>m</PrefixSymbol>
1181
+ <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
1182
+ <PrefixSymbol type='HTML'>m</PrefixSymbol>
1183
+ </Prefix>
1184
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1185
+ <PrefixName xml:lang='en'>centi</PrefixName>
1186
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1187
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1188
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1189
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1190
+ </Prefix>
968
1191
  </math>
969
- </UnitSymbol>
970
- <RootUnits>
971
- <EnumeratedRootUnit unit='watt' prefix='m'/>
972
- <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
973
- </RootUnits>
974
- </Unit>
975
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
976
- <PrefixName xml:lang='en'>milli</PrefixName>
977
- <PrefixSymbol type='ASCII'>m</PrefixSymbol>
978
- <PrefixSymbol type='unicode'>m</PrefixSymbol>
979
- <PrefixSymbol type='LaTeX'>m</PrefixSymbol>
980
- <PrefixSymbol type='HTML'>m</PrefixSymbol>
981
- </Prefix>
982
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
983
- <PrefixName xml:lang='en'>centi</PrefixName>
984
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
985
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
986
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
987
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
988
- </Prefix>
989
- </math>
990
- OUTPUT
1192
+ OUTPUT
991
1193
  end
992
1194
 
993
1195
  it "deals with quantity input" do
994
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
995
- 9 "unitsml(m, quantity: NISTq103)"
996
- INPUT
997
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
998
- <mn>9</mn>
999
- <mo rspace='thickmathspace'>&#x2062;</mo>
1000
- <mrow xref='U_NISTu1'>
1001
- <mi mathvariant='normal'>m</mi>
1002
- </mrow>
1003
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1004
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1005
- <UnitName xml:lang='en'>meter</UnitName>
1006
- <UnitSymbol type='HTML'>m</UnitSymbol>
1007
- <UnitSymbol type='MathML'>
1196
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1197
+ 9 "unitsml(m, quantity: NISTq103)"
1198
+ INPUT
1008
1199
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
1009
- <mrow>
1200
+ <mn>9</mn>
1201
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1202
+ <mrow xref='U_NISTu1'>
1010
1203
  <mi mathvariant='normal'>m</mi>
1011
1204
  </mrow>
1205
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1206
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1207
+ <UnitName xml:lang='en'>meter</UnitName>
1208
+ <UnitSymbol type='HTML'>m</UnitSymbol>
1209
+ <UnitSymbol type='MathML'>
1210
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1211
+ <mrow>
1212
+ <mi mathvariant='normal'>m</mi>
1213
+ </mrow>
1214
+ </math>
1215
+ </UnitSymbol>
1216
+ </Unit>
1217
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1218
+ <Length symbol='L' powerNumerator='1'/>
1219
+ </Dimension>
1220
+ <Quantity xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
1221
+ <QuantityName xml:lang='en-US'>position vector</QuantityName>
1222
+ </Quantity>
1012
1223
  </math>
1013
- </UnitSymbol>
1014
- </Unit>
1015
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
1016
- <Length symbol='L' powerNumerator='1'/>
1017
- </Dimension>
1018
- <Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
1019
- <QuantityName xml:lang='en-US'>position vector</QuantityName>
1020
- </Quantity>
1021
- </math>
1022
- OUTPUT
1023
- end
1224
+ OUTPUT
1225
+ end
1024
1226
 
1025
1227
  it "deals with name input" do
1026
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1027
- 9 "unitsml(cal_th/cm^2, name: langley)"
1028
- INPUT
1029
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1030
- <mn>9</mn>
1031
- <mo rspace='thickmathspace'>&#x2062;</mo>
1032
- <mrow xref='U_cal_th/cm2'>
1033
- <msub>
1034
- <mrow>
1035
- <mi mathvariant='normal'>cal</mi>
1036
- </mrow>
1037
- <mrow>
1038
- <mi mathvariant='normal'>th</mi>
1039
- </mrow>
1040
- </msub>
1041
- <mo>/</mo>
1042
- <msup>
1043
- <mrow>
1044
- <mi mathvariant='normal'>cm</mi>
1045
- </mrow>
1046
- <mrow>
1047
- <mn>2</mn>
1048
- </mrow>
1049
- </msup>
1050
- </mrow>
1051
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_cal_th.cm-2'>
1052
- <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
1053
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1054
- <UnitName xml:lang='en'>langley</UnitName>
1055
- <UnitSymbol type='HTML'>
1056
- cal
1057
- <sub>th</sub>
1058
- &#xB7;cm
1059
- <sup>&#x2212;2</sup>
1060
- </UnitSymbol>
1061
- <UnitSymbol type='MathML'>
1062
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1063
- <mrow>
1228
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1229
+ 9 "unitsml(cal_th/cm^2, name: langley)"
1230
+ INPUT
1231
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1232
+ <mn>9</mn>
1233
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1234
+ <mrow xref='U_cal_th/cm2'>
1064
1235
  <msub>
1065
1236
  <mrow>
1066
1237
  <mi mathvariant='normal'>cal</mi>
@@ -1069,125 +1240,218 @@ INPUT
1069
1240
  <mi mathvariant='normal'>th</mi>
1070
1241
  </mrow>
1071
1242
  </msub>
1072
- <mo>&#xB7;</mo>
1243
+ <mo>/</mo>
1073
1244
  <msup>
1074
1245
  <mrow>
1075
1246
  <mi mathvariant='normal'>cm</mi>
1076
1247
  </mrow>
1077
1248
  <mrow>
1078
- <mo>&#x2212;</mo>
1079
1249
  <mn>2</mn>
1080
1250
  </mrow>
1081
1251
  </msup>
1082
1252
  </mrow>
1253
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cal_th.cm-2'>
1254
+ <UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
1255
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1256
+ <UnitName xml:lang='en'>langley</UnitName>
1257
+ <UnitSymbol type='HTML'>
1258
+ cal
1259
+ <sub>th</sub>
1260
+ &#x22C5;cm
1261
+ <sup>&#x2212;2</sup>
1262
+ </UnitSymbol>
1263
+ <UnitSymbol type='MathML'>
1264
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1265
+ <mrow>
1266
+ <msub>
1267
+ <mrow>
1268
+ <mi mathvariant='normal'>cal</mi>
1269
+ </mrow>
1270
+ <mrow>
1271
+ <mi mathvariant='normal'>th</mi>
1272
+ </mrow>
1273
+ </msub>
1274
+ <mo>&#x22C5;</mo>
1275
+ <msup>
1276
+ <mrow>
1277
+ <mi mathvariant='normal'>cm</mi>
1278
+ </mrow>
1279
+ <mrow>
1280
+ <mo>&#x2212;</mo>
1281
+ <mn>2</mn>
1282
+ </mrow>
1283
+ </msup>
1284
+ </mrow>
1285
+ </math>
1286
+ </UnitSymbol>
1287
+ <RootUnits>
1288
+ <EnumeratedRootUnit unit='thermochemical calorie'/>
1289
+ <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1290
+ </RootUnits>
1291
+ </Unit>
1292
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1293
+ <PrefixName xml:lang='en'>centi</PrefixName>
1294
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1295
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1296
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1297
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1298
+ </Prefix>
1083
1299
  </math>
1084
- </UnitSymbol>
1085
- <RootUnits>
1086
- <EnumeratedRootUnit unit='thermochemical calorie'/>
1087
- <EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
1088
- </RootUnits>
1089
- </Unit>
1090
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1091
- <PrefixName xml:lang='en'>centi</PrefixName>
1092
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1093
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1094
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1095
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1096
- </Prefix>
1097
- </math>
1098
- OUTPUT
1099
- end
1300
+ OUTPUT
1301
+ end
1100
1302
 
1101
- it "deals with symbol input" do
1102
- expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1103
- 9 "unitsml(m, symbol: La)" + 10 "unitsml(cm*s^-2, symbol: cm cdot s^-2)"
1104
- INPUT
1105
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1106
- <mn>9</mn>
1107
- <mo rspace='thickmathspace'>&#x2062;</mo>
1108
- <mrow xref='U_NISTu1'>
1109
- <math>
1110
- <mi mathvariant='normal'>L</mi>
1111
- <mi mathvariant='normal'>a</mi>
1112
- </math>
1113
- </mrow>
1114
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1115
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1116
- <UnitName xml:lang='en'>meter</UnitName>
1117
- <UnitSymbol type='HTML'>m</UnitSymbol>
1118
- <UnitSymbol type='MathML'>
1303
+ it "deals with symbol input" do
1304
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1305
+ 9 "unitsml(m, symbol: La)" + 10 "unitsml(cm*s^-2, symbol: cm cdot s^-2)"
1306
+ INPUT
1119
1307
  <math xmlns='http://www.w3.org/1998/Math/MathML'>
1120
- <mrow>
1121
- <mi mathvariant='normal'>m</mi>
1308
+ <mn>9</mn>
1309
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1310
+ <mrow xref='U_NISTu1'>
1311
+ <math>
1312
+ <mi mathvariant='normal'>L</mi>
1313
+ <mi mathvariant='normal'>a</mi>
1314
+ </math>
1122
1315
  </mrow>
1123
- </math>
1124
- </UnitSymbol>
1125
- </Unit>
1126
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
1127
- <Length symbol='L' powerNumerator='1'/>
1128
- </Dimension>
1129
- <mo>+</mo>
1130
- <mn>10</mn>
1131
- <mo rspace='thickmathspace'>&#x2062;</mo>
1132
- <mrow xref='U_cm.s-2'>
1133
- <math>
1134
- <mi mathvariant='normal'>c</mi>
1135
- <mi mathvariant='normal'>m</mi>
1136
- <mo>&#x22C5;</mo>
1137
- <msup>
1138
- <mrow>
1139
- <mi mathvariant='normal'>s</mi>
1140
- </mrow>
1141
- <mrow>
1142
- <mo>&#x2212;</mo>
1143
- </mrow>
1144
- </msup>
1145
- <mn>2</mn>
1146
- </math>
1147
- </mrow>
1148
- <Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1149
- <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1150
- <UnitName xml:lang='en'>cm*s^-2</UnitName>
1151
- <UnitSymbol type='HTML'>
1152
- cm&#xB7;s
1153
- <sup>&#x2212;2</sup>
1154
- </UnitSymbol>
1155
- <UnitSymbol type='MathML'>
1156
- <math xmlns='http://www.w3.org/1998/Math/MathML'>
1157
- <mrow>
1158
- <mi mathvariant='normal'>cm</mi>
1159
- <mo>&#xB7;</mo>
1160
- <msup>
1161
- <mrow>
1162
- <mi mathvariant='normal'>s</mi>
1163
- </mrow>
1164
- <mrow>
1165
- <mo>&#x2212;</mo>
1166
- <mn>2</mn>
1167
- </mrow>
1168
- </msup>
1316
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
1317
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1318
+ <UnitName xml:lang='en'>meter</UnitName>
1319
+ <UnitSymbol type='HTML'>m</UnitSymbol>
1320
+ <UnitSymbol type='MathML'>
1321
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1322
+ <mrow>
1323
+ <mi mathvariant='normal'>m</mi>
1324
+ </mrow>
1325
+ </math>
1326
+ </UnitSymbol>
1327
+ </Unit>
1328
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd1'>
1329
+ <Length symbol='L' powerNumerator='1'/>
1330
+ </Dimension>
1331
+ <mo>+</mo>
1332
+ <mn>10</mn>
1333
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1334
+ <mrow xref='U_cm.s-2'>
1335
+ <math>
1336
+ <mi mathvariant='normal'>c</mi>
1337
+ <mi mathvariant='normal'>m</mi>
1338
+ <mo>&#x22C5;</mo>
1339
+ <msup>
1340
+ <mrow>
1341
+ <mi mathvariant='normal'>s</mi>
1342
+ </mrow>
1343
+ <mrow>
1344
+ <mo>&#x2212;</mo>
1345
+ </mrow>
1346
+ </msup>
1347
+ <mn>2</mn>
1348
+ </math>
1169
1349
  </mrow>
1350
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1351
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1352
+ <UnitName xml:lang='en'>cm*s^-2</UnitName>
1353
+ <UnitSymbol type='HTML'>
1354
+ cm&#x22C5;s
1355
+ <sup>&#x2212;2</sup>
1356
+ </UnitSymbol>
1357
+ <UnitSymbol type='MathML'>
1358
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1359
+ <mrow>
1360
+ <mi mathvariant='normal'>cm</mi>
1361
+ <mo>&#x22C5;</mo>
1362
+ <msup>
1363
+ <mrow>
1364
+ <mi mathvariant='normal'>s</mi>
1365
+ </mrow>
1366
+ <mrow>
1367
+ <mo>&#x2212;</mo>
1368
+ <mn>2</mn>
1369
+ </mrow>
1370
+ </msup>
1371
+ </mrow>
1372
+ </math>
1373
+ </UnitSymbol>
1374
+ <RootUnits>
1375
+ <EnumeratedRootUnit unit='meter' prefix='c'/>
1376
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1377
+ </RootUnits>
1378
+ </Unit>
1379
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1380
+ <PrefixName xml:lang='en'>centi</PrefixName>
1381
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1382
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1383
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1384
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1385
+ </Prefix>
1386
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1387
+ <Length symbol='L' powerNumerator='1'/>
1388
+ <Time symbol='T' powerNumerator='-2'/>
1389
+ </Dimension>
1170
1390
  </math>
1171
- </UnitSymbol>
1172
- <RootUnits>
1173
- <EnumeratedRootUnit unit='meter' prefix='c'/>
1174
- <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1175
- </RootUnits>
1176
- </Unit>
1177
- <Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1178
- <PrefixName xml:lang='en'>centi</PrefixName>
1179
- <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1180
- <PrefixSymbol type='unicode'>c</PrefixSymbol>
1181
- <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1182
- <PrefixSymbol type='HTML'>c</PrefixSymbol>
1183
- </Prefix>
1184
- <Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd28'>
1185
- <Length symbol='L' powerNumerator='1'/>
1186
- <Time symbol='T' powerNumerator='-2'/>
1187
- </Dimension>
1188
- </math>
1189
- OUTPUT
1190
- end
1191
-
1391
+ OUTPUT
1392
+ end
1192
1393
 
1394
+ it "deals with multiplier input" do
1395
+ expect(xmlpp(Asciimath2UnitsML::Conv.new.Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
1396
+ 10 "unitsml(cm*s^-2, multiplier: xx)"
1397
+ INPUT
1398
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1399
+ <mn>10</mn>
1400
+ <mo rspace='thickmathspace'>&#x2062;</mo>
1401
+ <mrow xref='U_cm.s-2'>
1402
+ <mi mathvariant='normal'>cm</mi>
1403
+ <mo>xx</mo>
1404
+ <msup>
1405
+ <mrow>
1406
+ <mi mathvariant='normal'>s</mi>
1407
+ </mrow>
1408
+ <mrow>
1409
+ <mo>&#x2212;</mo>
1410
+ <mn>2</mn>
1411
+ </mrow>
1412
+ </msup>
1413
+ </mrow>
1414
+ <Unit xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='U_cm.s-2' dimensionURL='#NISTd28'>
1415
+ <UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
1416
+ <UnitName xml:lang='en'>cm*s^-2</UnitName>
1417
+ <UnitSymbol type='HTML'>
1418
+ cm&#x22C5;s
1419
+ <sup>&#x2212;2</sup>
1420
+ </UnitSymbol>
1421
+ <UnitSymbol type='MathML'>
1422
+ <math xmlns='http://www.w3.org/1998/Math/MathML'>
1423
+ <mrow>
1424
+ <mi mathvariant='normal'>cm</mi>
1425
+ <mo>&#x22C5;</mo>
1426
+ <msup>
1427
+ <mrow>
1428
+ <mi mathvariant='normal'>s</mi>
1429
+ </mrow>
1430
+ <mrow>
1431
+ <mo>&#x2212;</mo>
1432
+ <mn>2</mn>
1433
+ </mrow>
1434
+ </msup>
1435
+ </mrow>
1436
+ </math>
1437
+ </UnitSymbol>
1438
+ <RootUnits>
1439
+ <EnumeratedRootUnit unit='meter' prefix='c'/>
1440
+ <EnumeratedRootUnit unit='second' powerNumerator='-2'/>
1441
+ </RootUnits>
1442
+ </Unit>
1443
+ <Prefix xmlns='https://schema.unitsml.org/unitsml/1.0' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
1444
+ <PrefixName xml:lang='en'>centi</PrefixName>
1445
+ <PrefixSymbol type='ASCII'>c</PrefixSymbol>
1446
+ <PrefixSymbol type='unicode'>c</PrefixSymbol>
1447
+ <PrefixSymbol type='LaTeX'>c</PrefixSymbol>
1448
+ <PrefixSymbol type='HTML'>c</PrefixSymbol>
1449
+ </Prefix>
1450
+ <Dimension xmlns='https://schema.unitsml.org/unitsml/1.0' xml:id='NISTd28'>
1451
+ <Length symbol='L' powerNumerator='1'/>
1452
+ <Time symbol='T' powerNumerator='-2'/>
1453
+ </Dimension>
1454
+ </math>
1455
+ OUTPUT
1456
+ end
1193
1457
  end