asciimath2unitsml 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +2 -0
- data/.gitmodules +4 -0
- data/README.adoc +147 -6
- data/asciimath2unitsml.gemspec +24 -2
- data/lib/asciimath2unitsml.rb +1 -0
- data/lib/asciimath2unitsml/conv.rb +94 -146
- data/lib/asciimath2unitsml/parse.rb +126 -21
- data/lib/asciimath2unitsml/render.rb +53 -0
- data/lib/asciimath2unitsml/unit.rb +78 -0
- data/lib/asciimath2unitsml/version.rb +1 -1
- data/lib/unitsdb/dimensions.yaml +802 -0
- data/lib/unitsdb/prefixes.yaml +154 -27
- data/lib/unitsdb/quantities.yaml +2246 -440
- data/lib/unitsdb/unit_systems.yaml +16 -0
- data/lib/unitsdb/units.yaml +10196 -1714
- data/lib/unitsdb_ruby/unitsdb.rb +163 -0
- data/spec/conv_spec.rb +330 -111
- metadata +22 -2
@@ -0,0 +1,163 @@
|
|
1
|
+
module UnitsDB
|
2
|
+
class Dimension
|
3
|
+
attr_reader :id, :length, :mass, :time, :electric_current, :thermodynamic_temperature,
|
4
|
+
:amount_of_substance, :luminous_intensity, :plane_angle, :dimensionless
|
5
|
+
|
6
|
+
def initialize(id, hash)
|
7
|
+
begin
|
8
|
+
@id = id
|
9
|
+
@dimensionless = hash[:dimensionless]
|
10
|
+
hash[:length] and @length = hash[:length][:powerNumerator].to_i
|
11
|
+
hash[:mass] and @mass = hash[:mass][:powerNumerator].to_i
|
12
|
+
hash[:time] and @time = hash[:time][:powerNumerator].to_i
|
13
|
+
hash[:electric_current] and @electric_current = hash[:electric_current][:powerNumerator].to_i
|
14
|
+
hash[:thermodynamic_temperature] and
|
15
|
+
@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
|
19
|
+
rescue
|
20
|
+
raise StandardError.new "Parse fail on Dimension #{id}: #{hash}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def keys
|
25
|
+
ret = []
|
26
|
+
@length and ret << "Length"
|
27
|
+
@mass and ret << "Mass"
|
28
|
+
@time and ret << "Time"
|
29
|
+
@electric_current and ret << "ElectricCurrent"
|
30
|
+
@thermodynamic_temperature and ret << "ThermodynamicTemperature"
|
31
|
+
@amount_of_substance and ret << "AmountOfSubstance"
|
32
|
+
@luminous_intensity and ret << "LuminousIntensity"
|
33
|
+
@plane_angle and ret << "PlaneAngle"
|
34
|
+
ret
|
35
|
+
end
|
36
|
+
|
37
|
+
def exponent(key)
|
38
|
+
case key
|
39
|
+
when "Length" then @length
|
40
|
+
when "Mass" then @mass
|
41
|
+
when "Time" then @time
|
42
|
+
when "ElectricCurrent" then @electric_current
|
43
|
+
when "ThermodynamicTemperature" then @thermodynamic_temperature
|
44
|
+
when "AmountOfSubstance" then @amount_of_substance
|
45
|
+
when "LuminousIntensity" then @luminous_intensity
|
46
|
+
when "PlaneAngle" then @plane_angle
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def vector
|
51
|
+
"#{@length}:#{@mass}:#{@time}:#{@electric_current}:#{@thermodynamic_temperature}:#{@amount_of_substance}:"\
|
52
|
+
"#{@luminous_intensity}:#{@plane_angle}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class Prefix
|
57
|
+
attr_reader :id, :name, :base, :power, :symbol
|
58
|
+
|
59
|
+
def initialize(id, hash)
|
60
|
+
begin
|
61
|
+
@id = id
|
62
|
+
@name = hash[:name]
|
63
|
+
@base = hash[:base]
|
64
|
+
@power = hash[:power]
|
65
|
+
@symbol = hash[:symbol] # always is a hash
|
66
|
+
rescue
|
67
|
+
raise StandardError.new "Parse fail on Prefix #{id}: #{hash}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def ascii
|
72
|
+
@symbol[:ascii]
|
73
|
+
end
|
74
|
+
|
75
|
+
def symbolid
|
76
|
+
@symbol[:ascii]
|
77
|
+
end
|
78
|
+
|
79
|
+
def html
|
80
|
+
@symbol[:html]
|
81
|
+
end
|
82
|
+
|
83
|
+
def mathml
|
84
|
+
@symbol[:html]
|
85
|
+
end
|
86
|
+
|
87
|
+
def latex
|
88
|
+
@symbol[:latex]
|
89
|
+
end
|
90
|
+
|
91
|
+
def unicode
|
92
|
+
@symbol[:unicode]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class Quantity
|
97
|
+
attr_reader :id, :dimension, :type, :names, :units
|
98
|
+
|
99
|
+
def initialize(id, hash)
|
100
|
+
begin
|
101
|
+
@id = id
|
102
|
+
@dimension = hash[:dimension_url].sub(/^#/, "")
|
103
|
+
@type = hash[:quantity_type]
|
104
|
+
hash[:quantity_name] and @names = hash[:quantity_name]
|
105
|
+
hash[:unit_reference] and @units = hash[:unit_reference].map { |x| x[:url].sub(/^#/, "") }
|
106
|
+
rescue
|
107
|
+
raise StandardError.new "Parse fail on Quantity #{id}: #{hash}"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def name
|
112
|
+
@names&.first
|
113
|
+
end
|
114
|
+
|
115
|
+
def unit
|
116
|
+
@units&.first
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
class Unit
|
121
|
+
attr_reader :id, :dimension, :short, :root, :unit_system, :names, :symbols, :symbols_hash, :root_units, :quantities,
|
122
|
+
:si_derived_bases, :prefixed
|
123
|
+
|
124
|
+
def initialize(id, hash)
|
125
|
+
begin
|
126
|
+
@id = id
|
127
|
+
@short = short
|
128
|
+
@dimension = hash[:dimension_url].sub(/^#/, "")
|
129
|
+
hash[:short] && !hash[:short].empty? and @short = hash[:short]
|
130
|
+
@unit_system = hash[:unit_system]
|
131
|
+
@names = hash[:unit_name]
|
132
|
+
@symbols_hash = hash[:unit_symbols]&.each_with_object({}) { |h, m| m[h[:id]] = h } || {}
|
133
|
+
@symbols = hash[:unit_symbols]
|
134
|
+
hash[:root_units] and hash[:root_units][:enumerated_root_units] and
|
135
|
+
@root = hash[:root_units][:enumerated_root_units]
|
136
|
+
hash[:quantity_reference] and @quantities = hash[:quantity_reference].map { |x| x[:url].sub(/^#/, "") }
|
137
|
+
hash[:si_derived_bases] and @si_derived_bases = hash[:si_derived_bases]
|
138
|
+
rescue
|
139
|
+
raise StandardError.new "Parse fail on Unit #{id}: #{hash}"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def system_name
|
144
|
+
@unit_system[:name]
|
145
|
+
end
|
146
|
+
|
147
|
+
def system_type
|
148
|
+
@unit_system[:type]
|
149
|
+
end
|
150
|
+
|
151
|
+
def name
|
152
|
+
@names.first
|
153
|
+
end
|
154
|
+
|
155
|
+
def symbolid
|
156
|
+
@symbols ? @symbols.first[:id] : @short
|
157
|
+
end
|
158
|
+
|
159
|
+
def symbolids
|
160
|
+
@symbols ? @symbols.map { |s| s[:id] } : [ @short ]
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
data/spec/conv_spec.rb
CHANGED
@@ -3,13 +3,14 @@ require "spec_helper"
|
|
3
3
|
RSpec.describe Asciimath2UnitsML do
|
4
4
|
it "converts an AsciiMath string to MathML + UnitsML" do
|
5
5
|
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
|
6
|
-
1 "unitsml(
|
6
|
+
1 "unitsml(mm*s^-2)"
|
7
7
|
INPUT
|
8
|
-
|
8
|
+
<?xml version='1.0'?>
|
9
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
9
10
|
<mn>1</mn>
|
10
11
|
<mo rspace='thickmathspace'>⁢</mo>
|
11
|
-
<mrow xref='
|
12
|
-
<mi mathvariant='normal'>
|
12
|
+
<mrow xref='U_mm.s-2'>
|
13
|
+
<mi mathvariant='normal'>mm</mi>
|
13
14
|
<mo>·</mo>
|
14
15
|
<msup>
|
15
16
|
<mrow>
|
@@ -21,17 +22,17 @@ RSpec.describe Asciimath2UnitsML do
|
|
21
22
|
</mrow>
|
22
23
|
</msup>
|
23
24
|
</mrow>
|
24
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='
|
25
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_mm.s-2' dimensionURL='#NISTd28'>
|
25
26
|
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
26
|
-
<UnitName xml:lang='en'>
|
27
|
+
<UnitName xml:lang='en'>mm*s^-2</UnitName>
|
27
28
|
<UnitSymbol type='HTML'>
|
28
|
-
|
29
|
+
mm·s
|
29
30
|
<sup>−2</sup>
|
30
31
|
</UnitSymbol>
|
31
32
|
<UnitSymbol type='MathML'>
|
32
33
|
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
33
34
|
<mrow>
|
34
|
-
<mi mathvariant='normal'>
|
35
|
+
<mi mathvariant='normal'>mm</mi>
|
35
36
|
<mo>·</mo>
|
36
37
|
<msup>
|
37
38
|
<mrow>
|
@@ -46,26 +47,111 @@ RSpec.describe Asciimath2UnitsML do
|
|
46
47
|
</math>
|
47
48
|
</UnitSymbol>
|
48
49
|
<RootUnits>
|
49
|
-
<EnumeratedRootUnit unit='
|
50
|
+
<EnumeratedRootUnit unit='meter' prefix='m'/>
|
50
51
|
<EnumeratedRootUnit unit='second' powerNumerator='-2'/>
|
51
52
|
</RootUnits>
|
52
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>
|
66
|
+
OUTPUT
|
67
|
+
end
|
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)"
|
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'>⁢</mo>
|
77
|
+
<mrow xref='U_um'>
|
78
|
+
<mi mathvariant='normal'>um</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>
|
87
|
+
<mi mathvariant='normal'>um</mi>
|
88
|
+
</mrow>
|
89
|
+
</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'>μ</PrefixSymbol>
|
99
|
+
<PrefixSymbol type='LaTeX'>$mu$</PrefixSymbol>
|
100
|
+
<PrefixSymbol type='HTML'>&micro;</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
|
108
|
+
|
109
|
+
it "deals with kg and g" do
|
110
|
+
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
|
111
|
+
1 "unitsml(kg)" + 1 "unitsml(g)"
|
112
|
+
INPUT
|
113
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
114
|
+
<mn>1</mn>
|
115
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
116
|
+
<mrow xref='U_NISTu2'>
|
117
|
+
<mi mathvariant='normal'>kg</mi>
|
118
|
+
</mrow>
|
119
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu2' dimensionURL='#NISTd2'>
|
120
|
+
<UnitSystem name='SI' type='SI_base' xml:lang='en-US'/>
|
121
|
+
<UnitName xml:lang='en'>kilogram</UnitName>
|
122
|
+
<UnitSymbol type='HTML'>kg</UnitSymbol>
|
123
|
+
<UnitSymbol type='MathML'>
|
124
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
125
|
+
<mrow>
|
126
|
+
<mi mathvariant='normal'>kg</mi>
|
127
|
+
</mrow>
|
128
|
+
</math>
|
129
|
+
</UnitSymbol>
|
130
|
+
<RootUnits>
|
131
|
+
<EnumeratedRootUnit unit='gram' prefix='k'/>
|
132
|
+
</RootUnits>
|
133
|
+
</Unit>
|
53
134
|
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
|
54
135
|
<PrefixName xml:lang='en'>kilo</PrefixName>
|
55
136
|
<PrefixSymbol type='ASCII'>k</PrefixSymbol>
|
137
|
+
<PrefixSymbol type='unicode'>k</PrefixSymbol>
|
138
|
+
<PrefixSymbol type='LaTeX'>k</PrefixSymbol>
|
139
|
+
<PrefixSymbol type='HTML'>k</PrefixSymbol>
|
56
140
|
</Prefix>
|
57
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='
|
141
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd2'>
|
58
142
|
<Mass symbol='M' powerNumerator='1'/>
|
59
|
-
<Time symbol='T' powerNumerator='-2'/>
|
60
143
|
</Dimension>
|
61
|
-
<
|
62
|
-
|
144
|
+
<Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq2' dimensionURL='#NISTd2' quantityType='base'>
|
145
|
+
<QuantityName xml:lang='en-US'>mass</QuantityName>
|
146
|
+
</Quantity>
|
147
|
+
<mo>+</mo>
|
148
|
+
<mn>1</mn>
|
63
149
|
<mo rspace='thickmathspace'>⁢</mo>
|
64
150
|
<mrow xref='U_NISTu27'>
|
65
151
|
<mi mathvariant='normal'>g</mi>
|
66
152
|
</mrow>
|
67
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu27' dimensionURL='#
|
68
|
-
<UnitSystem name='SI' type='
|
153
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu27' dimensionURL='#NISTd2'>
|
154
|
+
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
69
155
|
<UnitName xml:lang='en'>gram</UnitName>
|
70
156
|
<UnitSymbol type='HTML'>g</UnitSymbol>
|
71
157
|
<UnitSymbol type='MathML'>
|
@@ -76,9 +162,6 @@ RSpec.describe Asciimath2UnitsML do
|
|
76
162
|
</math>
|
77
163
|
</UnitSymbol>
|
78
164
|
</Unit>
|
79
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_M'>
|
80
|
-
<Mass symbol='M' powerNumerator='1'/>
|
81
|
-
</Dimension>
|
82
165
|
</math>
|
83
166
|
OUTPUT
|
84
167
|
end
|
@@ -105,6 +188,14 @@ RSpec.describe Asciimath2UnitsML do
|
|
105
188
|
</math>
|
106
189
|
</UnitSymbol>
|
107
190
|
</Unit>
|
191
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd16'>
|
192
|
+
<Length symbol='L' powerNumerator='2'/>
|
193
|
+
<Mass symbol='M' powerNumerator='1'/>
|
194
|
+
<Time symbol='T' powerNumerator='-3'/>
|
195
|
+
</Dimension>
|
196
|
+
<Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq20' dimensionURL='#NISTd16' quantityType='base'>
|
197
|
+
<QuantityName xml:lang='en-US'>power</QuantityName>
|
198
|
+
</Quantity>
|
108
199
|
</math>
|
109
200
|
OUTPUT
|
110
201
|
end
|
@@ -129,7 +220,7 @@ RSpec.describe Asciimath2UnitsML do
|
|
129
220
|
</mrow>
|
130
221
|
</msup>
|
131
222
|
</mrow>
|
132
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#
|
223
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
|
133
224
|
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
134
225
|
<UnitName xml:lang='en'>kg*s^-2</UnitName>
|
135
226
|
<UnitSymbol type='HTML'>
|
@@ -161,8 +252,11 @@ RSpec.describe Asciimath2UnitsML do
|
|
161
252
|
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
|
162
253
|
<PrefixName xml:lang='en'>kilo</PrefixName>
|
163
254
|
<PrefixSymbol type='ASCII'>k</PrefixSymbol>
|
255
|
+
<PrefixSymbol type='unicode'>k</PrefixSymbol>
|
256
|
+
<PrefixSymbol type='LaTeX'>k</PrefixSymbol>
|
257
|
+
<PrefixSymbol type='HTML'>k</PrefixSymbol>
|
164
258
|
</Prefix>
|
165
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='
|
259
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
|
166
260
|
<Mass symbol='M' powerNumerator='1'/>
|
167
261
|
<Time symbol='T' powerNumerator='-2'/>
|
168
262
|
</Dimension>
|
@@ -182,64 +276,100 @@ RSpec.describe Asciimath2UnitsML do
|
|
182
276
|
</mrow>
|
183
277
|
</msup>
|
184
278
|
</mrow>
|
185
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#D_MT-2'>
|
186
|
-
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
187
|
-
<UnitName xml:lang='en'>kg*s^-2</UnitName>
|
188
|
-
<UnitSymbol type='HTML'>
|
189
|
-
kg·s
|
190
|
-
<sup>−2</sup>
|
191
|
-
</UnitSymbol>
|
192
|
-
<UnitSymbol type='MathML'>
|
193
|
-
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
194
|
-
<mrow>
|
195
|
-
<mi mathvariant='normal'>kg</mi>
|
196
|
-
<mo>·</mo>
|
197
|
-
<msup>
|
198
|
-
<mrow>
|
199
|
-
<mi mathvariant='normal'>s</mi>
|
200
|
-
</mrow>
|
201
|
-
<mrow>
|
202
|
-
<mo>−</mo>
|
203
|
-
<mn>2</mn>
|
204
|
-
</mrow>
|
205
|
-
</msup>
|
206
|
-
</mrow>
|
207
|
-
</math>
|
208
|
-
</UnitSymbol>
|
209
|
-
<RootUnits>
|
210
|
-
<EnumeratedRootUnit unit='gram' prefix='k'/>
|
211
|
-
<EnumeratedRootUnit unit='second' powerNumerator='-2'/>
|
212
|
-
</RootUnits>
|
213
|
-
</Unit>
|
214
|
-
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
|
215
|
-
<PrefixName xml:lang='en'>kilo</PrefixName>
|
216
|
-
<PrefixSymbol type='ASCII'>k</PrefixSymbol>
|
217
|
-
</Prefix>
|
218
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_MT-2'>
|
219
|
-
<Mass symbol='M' powerNumerator='1'/>
|
220
|
-
<Time symbol='T' powerNumerator='-2'/>
|
221
|
-
</Dimension>
|
222
279
|
</math>
|
223
280
|
OUTPUT
|
224
281
|
end
|
225
282
|
|
226
|
-
=begin
|
227
283
|
it "deals with notational variants" do
|
228
284
|
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
|
229
285
|
9 "unitsml(degK)" + 10 "unitsml(K)"
|
230
286
|
INPUT
|
287
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
288
|
+
<mn>9</mn>
|
289
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
290
|
+
<mrow xref='U_NISTu5'>
|
291
|
+
<mi mathvariant='normal'>°K</mi>
|
292
|
+
</mrow>
|
293
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu5' dimensionURL='#NISTd5'>
|
294
|
+
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
295
|
+
<UnitName xml:lang='en'>kelvin</UnitName>
|
296
|
+
<UnitSymbol type='HTML'>K</UnitSymbol>
|
297
|
+
<UnitSymbol type='MathML'>
|
298
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
299
|
+
<mrow>
|
300
|
+
<mi mathvariant='normal'>K</mi>
|
301
|
+
</mrow>
|
302
|
+
</math>
|
303
|
+
</UnitSymbol>
|
304
|
+
</Unit>
|
305
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd5'>
|
306
|
+
<ThermodynamicTemperature symbol='Theta' powerNumerator='1'/>
|
307
|
+
</Dimension>
|
308
|
+
<Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq5' dimensionURL='#NISTd5' quantityType='base'>
|
309
|
+
<QuantityName xml:lang='en-US'>thermodynamic temperature</QuantityName>
|
310
|
+
</Quantity>
|
311
|
+
<mo>+</mo>
|
312
|
+
<mn>10</mn>
|
313
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
314
|
+
<mrow xref='U_NISTu5'>
|
315
|
+
<mi mathvariant='normal'>K</mi>
|
316
|
+
</mrow>
|
317
|
+
</math>
|
231
318
|
OUTPUT
|
232
319
|
end
|
233
|
-
|
320
|
+
|
321
|
+
it "deals with prefixed units" do
|
322
|
+
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
|
323
|
+
9 "unitsml(mbar)"
|
324
|
+
INPUT
|
325
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
326
|
+
<mn>9</mn>
|
327
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
328
|
+
<mrow xref='U_NISTu362'>
|
329
|
+
<mi mathvariant='normal'>mbar</mi>
|
330
|
+
</mrow>
|
331
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu362'>
|
332
|
+
<UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
|
333
|
+
<UnitName xml:lang='en'>millibar</UnitName>
|
334
|
+
<UnitSymbol type='HTML'>mbar</UnitSymbol>
|
335
|
+
<UnitSymbol type='MathML'>
|
336
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
337
|
+
<mrow>
|
338
|
+
<mi mathvariant='normal'>mbar</mi>
|
339
|
+
</mrow>
|
340
|
+
</math>
|
341
|
+
</UnitSymbol>
|
342
|
+
<RootUnits>
|
343
|
+
<EnumeratedRootUnit unit='bar' prefix='m'/>
|
344
|
+
</RootUnits>
|
345
|
+
</Unit>
|
346
|
+
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-3' xml:id='NISTp10_-3'>
|
347
|
+
<PrefixName xml:lang='en'>milli</PrefixName>
|
348
|
+
<PrefixSymbol type='ASCII'>m</PrefixSymbol>
|
349
|
+
<PrefixSymbol type='unicode'>m</PrefixSymbol>
|
350
|
+
<PrefixSymbol type='LaTeX'>m</PrefixSymbol>
|
351
|
+
<PrefixSymbol type='HTML'>m</PrefixSymbol>
|
352
|
+
</Prefix>
|
353
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd14'>
|
354
|
+
<Length symbol='L' powerNumerator='-1'/>
|
355
|
+
<Mass symbol='M' powerNumerator='1'/>
|
356
|
+
<Time symbol='T' powerNumerator='-2'/>
|
357
|
+
</Dimension>
|
358
|
+
</math>
|
359
|
+
OUTPUT
|
360
|
+
end
|
361
|
+
|
234
362
|
|
235
363
|
it "deals with units division" do
|
236
364
|
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
|
237
|
-
9 "unitsml(C^3
|
365
|
+
9 "unitsml(A*C^3)" + 13 "unitsml(A/C^-3)"
|
238
366
|
INPUT
|
239
367
|
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
240
368
|
<mn>9</mn>
|
241
369
|
<mo rspace='thickmathspace'>⁢</mo>
|
242
|
-
<mrow xref='
|
370
|
+
<mrow xref='U_A.C3'>
|
371
|
+
<mi mathvariant='normal'>A</mi>
|
372
|
+
<mo>·</mo>
|
243
373
|
<msup>
|
244
374
|
<mrow>
|
245
375
|
<mi mathvariant='normal'>C</mi>
|
@@ -248,20 +378,19 @@ INPUT
|
|
248
378
|
<mn>3</mn>
|
249
379
|
</mrow>
|
250
380
|
</msup>
|
251
|
-
<mo>·</mo>
|
252
|
-
<mi mathvariant='normal'>A</mi>
|
253
381
|
</mrow>
|
254
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='
|
382
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_A.C3' dimensionURL='#D_M3I4'>
|
255
383
|
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
256
|
-
<UnitName xml:lang='en'>C^3
|
384
|
+
<UnitName xml:lang='en'>A*C^3</UnitName>
|
257
385
|
<UnitSymbol type='HTML'>
|
258
|
-
C
|
386
|
+
A·C
|
259
387
|
<sup>3</sup>
|
260
|
-
·A
|
261
388
|
</UnitSymbol>
|
262
389
|
<UnitSymbol type='MathML'>
|
263
390
|
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
264
391
|
<mrow>
|
392
|
+
<mi mathvariant='normal'>A</mi>
|
393
|
+
<mo>·</mo>
|
265
394
|
<msup>
|
266
395
|
<mrow>
|
267
396
|
<mi mathvariant='normal'>C</mi>
|
@@ -270,18 +399,16 @@ INPUT
|
|
270
399
|
<mn>3</mn>
|
271
400
|
</mrow>
|
272
401
|
</msup>
|
273
|
-
<mo>·</mo>
|
274
|
-
<mi mathvariant='normal'>A</mi>
|
275
402
|
</mrow>
|
276
403
|
</math>
|
277
404
|
</UnitSymbol>
|
278
405
|
<RootUnits>
|
279
|
-
<EnumeratedRootUnit unit='coulomb' powerNumerator='3'/>
|
280
406
|
<EnumeratedRootUnit unit='ampere'/>
|
407
|
+
<EnumeratedRootUnit unit='coulomb' powerNumerator='3'/>
|
281
408
|
</RootUnits>
|
282
409
|
</Unit>
|
283
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='
|
284
|
-
<
|
410
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_M3I4'>
|
411
|
+
<Mass symbol='M' powerNumerator='3'/>
|
285
412
|
<ElectricCurrent symbol='I' powerNumerator='4'/>
|
286
413
|
</Dimension>
|
287
414
|
<mo>+</mo>
|
@@ -300,39 +427,6 @@ INPUT
|
|
300
427
|
</mrow>
|
301
428
|
</msup>
|
302
429
|
</mrow>
|
303
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_A/C-3' dimensionURL='#D_T3I4'>
|
304
|
-
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
305
|
-
<UnitName xml:lang='en'>A*C^3</UnitName>
|
306
|
-
<UnitSymbol type='HTML'>
|
307
|
-
A/C
|
308
|
-
<sup>−3</sup>
|
309
|
-
</UnitSymbol>
|
310
|
-
<UnitSymbol type='MathML'>
|
311
|
-
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
312
|
-
<mrow>
|
313
|
-
<mi mathvariant='normal'>A</mi>
|
314
|
-
<mo>/</mo>
|
315
|
-
<msup>
|
316
|
-
<mrow>
|
317
|
-
<mi mathvariant='normal'>C</mi>
|
318
|
-
</mrow>
|
319
|
-
<mrow>
|
320
|
-
<mo>−</mo>
|
321
|
-
<mn>3</mn>
|
322
|
-
</mrow>
|
323
|
-
</msup>
|
324
|
-
</mrow>
|
325
|
-
</math>
|
326
|
-
</UnitSymbol>
|
327
|
-
<RootUnits>
|
328
|
-
<EnumeratedRootUnit unit='ampere'/>
|
329
|
-
<EnumeratedRootUnit unit='coulomb' powerNumerator='3'/>
|
330
|
-
</RootUnits>
|
331
|
-
</Unit>
|
332
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_T3I4'>
|
333
|
-
<Time symbol='T' powerNumerator='3'/>
|
334
|
-
<ElectricCurrent symbol='I' powerNumerator='4'/>
|
335
|
-
</Dimension>
|
336
430
|
</math>
|
337
431
|
OUTPUT
|
338
432
|
end
|
@@ -389,10 +483,16 @@ OUTPUT
|
|
389
483
|
</mrow>
|
390
484
|
</math>
|
391
485
|
</UnitSymbol>
|
486
|
+
<RootUnits>
|
487
|
+
<EnumeratedRootUnit unit='gram' prefix='k' powerNumerator='-2'/>
|
488
|
+
</RootUnits>
|
392
489
|
</Unit>
|
393
490
|
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
|
394
491
|
<PrefixName xml:lang='en'>kilo</PrefixName>
|
395
492
|
<PrefixSymbol type='ASCII'>k</PrefixSymbol>
|
493
|
+
<PrefixSymbol type='unicode'>k</PrefixSymbol>
|
494
|
+
<PrefixSymbol type='LaTeX'>k</PrefixSymbol>
|
495
|
+
<PrefixSymbol type='HTML'>k</PrefixSymbol>
|
396
496
|
</Prefix>
|
397
497
|
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='D_M-2'>
|
398
498
|
<Mass symbol='M' powerNumerator='-2'/>
|
@@ -429,7 +529,7 @@ OUTPUT
|
|
429
529
|
</mrow>
|
430
530
|
</msup>
|
431
531
|
</mrow>
|
432
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#
|
532
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
|
433
533
|
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
434
534
|
<UnitName xml:lang='en'>kg*s^-2</UnitName>
|
435
535
|
<UnitSymbol type='HTML'>
|
@@ -461,8 +561,11 @@ OUTPUT
|
|
461
561
|
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
|
462
562
|
<PrefixName xml:lang='en'>kilo</PrefixName>
|
463
563
|
<PrefixSymbol type='ASCII'>k</PrefixSymbol>
|
564
|
+
<PrefixSymbol type='unicode'>k</PrefixSymbol>
|
565
|
+
<PrefixSymbol type='LaTeX'>k</PrefixSymbol>
|
566
|
+
<PrefixSymbol type='HTML'>k</PrefixSymbol>
|
464
567
|
</Prefix>
|
465
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='
|
568
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
|
466
569
|
<Mass symbol='M' powerNumerator='1'/>
|
467
570
|
<Time symbol='T' powerNumerator='-2'/>
|
468
571
|
</Dimension>
|
@@ -487,7 +590,7 @@ OUTPUT
|
|
487
590
|
</mrow>
|
488
591
|
</msup>
|
489
592
|
</mrow>
|
490
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#
|
593
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
|
491
594
|
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
492
595
|
<UnitName xml:lang='en'>kg*s^-2</UnitName>
|
493
596
|
<UnitSymbol type='HTML'>
|
@@ -519,8 +622,11 @@ OUTPUT
|
|
519
622
|
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
|
520
623
|
<PrefixName xml:lang='en'>kilo</PrefixName>
|
521
624
|
<PrefixSymbol type='ASCII'>k</PrefixSymbol>
|
625
|
+
<PrefixSymbol type='unicode'>k</PrefixSymbol>
|
626
|
+
<PrefixSymbol type='LaTeX'>k</PrefixSymbol>
|
627
|
+
<PrefixSymbol type='HTML'>k</PrefixSymbol>
|
522
628
|
</Prefix>
|
523
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='
|
629
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
|
524
630
|
<Mass symbol='M' powerNumerator='1'/>
|
525
631
|
<Time symbol='T' powerNumerator='-2'/>
|
526
632
|
</Dimension>
|
@@ -545,7 +651,7 @@ OUTPUT
|
|
545
651
|
</mrow>
|
546
652
|
</msup>
|
547
653
|
</mrow>
|
548
|
-
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#
|
654
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_kg.s-2' dimensionURL='#NISTd37'>
|
549
655
|
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
550
656
|
<UnitName xml:lang='en'>kg*s^-2</UnitName>
|
551
657
|
<UnitSymbol type='HTML'>
|
@@ -577,12 +683,125 @@ OUTPUT
|
|
577
683
|
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='3' xml:id='NISTp10_3'>
|
578
684
|
<PrefixName xml:lang='en'>kilo</PrefixName>
|
579
685
|
<PrefixSymbol type='ASCII'>k</PrefixSymbol>
|
686
|
+
<PrefixSymbol type='unicode'>k</PrefixSymbol>
|
687
|
+
<PrefixSymbol type='LaTeX'>k</PrefixSymbol>
|
688
|
+
<PrefixSymbol type='HTML'>k</PrefixSymbol>
|
580
689
|
</Prefix>
|
581
|
-
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='
|
690
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd37'>
|
582
691
|
<Mass symbol='M' powerNumerator='1'/>
|
583
692
|
<Time symbol='T' powerNumerator='-2'/>
|
584
693
|
</Dimension>
|
585
694
|
</math>
|
586
695
|
OUTPUT
|
587
696
|
end
|
697
|
+
|
698
|
+
it "deals with quantity input" do
|
699
|
+
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
|
700
|
+
9 "unitsml(m, quantity: NISTq103)"
|
701
|
+
INPUT
|
702
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
703
|
+
<mn>9</mn>
|
704
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
705
|
+
<mrow xref='U_NISTu1'>
|
706
|
+
<mi mathvariant='normal'>m</mi>
|
707
|
+
</mrow>
|
708
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_NISTu1' dimensionURL='#NISTd1'>
|
709
|
+
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
710
|
+
<UnitName xml:lang='en'>meter</UnitName>
|
711
|
+
<UnitSymbol type='HTML'>m</UnitSymbol>
|
712
|
+
<UnitSymbol type='MathML'>
|
713
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
714
|
+
<mrow>
|
715
|
+
<mi mathvariant='normal'>m</mi>
|
716
|
+
</mrow>
|
717
|
+
</math>
|
718
|
+
</UnitSymbol>
|
719
|
+
</Unit>
|
720
|
+
<Dimension xmlns='http://unitsml.nist.gov/2005' xml:id='NISTd1'>
|
721
|
+
<Length symbol='L' powerNumerator='1'/>
|
722
|
+
</Dimension>
|
723
|
+
<Quantity xmlns='http://unitsml.nist.gov/2005' xml:id='NISTq103' dimensionURL='#NISTd1' quantityType='base'>
|
724
|
+
<QuantityName xml:lang='en-US'>position vector</QuantityName>
|
725
|
+
</Quantity>
|
726
|
+
</math>
|
727
|
+
OUTPUT
|
728
|
+
end
|
729
|
+
|
730
|
+
it "deals with name input" do
|
731
|
+
expect(xmlpp(Asciimath2UnitsML::Conv.new().Asciimath2UnitsML(<<~INPUT))).to be_equivalent_to xmlpp(<<~OUTPUT)
|
732
|
+
9 "unitsml(cal_th/cm^2, name: langley)"
|
733
|
+
INPUT
|
734
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
735
|
+
<mn>9</mn>
|
736
|
+
<mo rspace='thickmathspace'>⁢</mo>
|
737
|
+
<mrow xref='U_cal_th/cm2'>
|
738
|
+
<msub>
|
739
|
+
<mrow>
|
740
|
+
<mi mathvariant='normal'>cal</mi>
|
741
|
+
</mrow>
|
742
|
+
<mrow>
|
743
|
+
<mi mathvariant='normal'>th</mi>
|
744
|
+
</mrow>
|
745
|
+
</msub>
|
746
|
+
<mo>/</mo>
|
747
|
+
<msup>
|
748
|
+
<mrow>
|
749
|
+
<mi mathvariant='normal'>cm</mi>
|
750
|
+
</mrow>
|
751
|
+
<mrow>
|
752
|
+
<mn>2</mn>
|
753
|
+
</mrow>
|
754
|
+
</msup>
|
755
|
+
</mrow>
|
756
|
+
<Unit xmlns='http://unitsml.nist.gov/2005' xml:id='U_cal_th.cm-2'>
|
757
|
+
<UnitSystem name='not_SI' type='not_SI' xml:lang='en-US'/>
|
758
|
+
<UnitSystem name='SI' type='SI_derived' xml:lang='en-US'/>
|
759
|
+
<UnitName xml:lang='en'>langley</UnitName>
|
760
|
+
<UnitSymbol type='HTML'>
|
761
|
+
cal
|
762
|
+
<sub>th</sub>
|
763
|
+
·cm
|
764
|
+
<sup>−2</sup>
|
765
|
+
</UnitSymbol>
|
766
|
+
<UnitSymbol type='MathML'>
|
767
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
768
|
+
<mrow>
|
769
|
+
<msub>
|
770
|
+
<mrow>
|
771
|
+
<mi mathvariant='normal'>cal</mi>
|
772
|
+
</mrow>
|
773
|
+
<mrow>
|
774
|
+
<mi mathvariant='normal'>th</mi>
|
775
|
+
</mrow>
|
776
|
+
</msub>
|
777
|
+
<mo>·</mo>
|
778
|
+
<msup>
|
779
|
+
<mrow>
|
780
|
+
<mi mathvariant='normal'>cm</mi>
|
781
|
+
</mrow>
|
782
|
+
<mrow>
|
783
|
+
<mo>−</mo>
|
784
|
+
<mn>2</mn>
|
785
|
+
</mrow>
|
786
|
+
</msup>
|
787
|
+
</mrow>
|
788
|
+
</math>
|
789
|
+
</UnitSymbol>
|
790
|
+
<RootUnits>
|
791
|
+
<EnumeratedRootUnit unit='thermochemical calorie'/>
|
792
|
+
<EnumeratedRootUnit unit='meter' prefix='c' powerNumerator='-2'/>
|
793
|
+
</RootUnits>
|
794
|
+
</Unit>
|
795
|
+
<Prefix xmlns='http://unitsml.nist.gov/2005' prefixBase='10' prefixPower='-2' xml:id='NISTp10_-2'>
|
796
|
+
<PrefixName xml:lang='en'>centi</PrefixName>
|
797
|
+
<PrefixSymbol type='ASCII'>c</PrefixSymbol>
|
798
|
+
<PrefixSymbol type='unicode'>c</PrefixSymbol>
|
799
|
+
<PrefixSymbol type='LaTeX'>c</PrefixSymbol>
|
800
|
+
<PrefixSymbol type='HTML'>c</PrefixSymbol>
|
801
|
+
</Prefix>
|
802
|
+
</math>
|
803
|
+
OUTPUT
|
804
|
+
end
|
805
|
+
|
806
|
+
|
588
807
|
end
|