asciimath2unitsml 0.2.4 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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