unitsml 0.6.9 → 0.6.11

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.
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Unitsml
4
- module IntermediateExpRules
5
- include Parslet
6
-
7
- # Rules for slashed number
8
- rule(:slashed_number_int_exp) do
9
- slashed_number | (opening_paren >> slashed_number_named_int_exp.as(:int_exp) >> closing_paren)
10
- end
11
- rule(:slashed_number_named_int_exp) do
12
- (opening_paren.as(:open_paren) >> slashed_number_int_exp >> closing_paren.as(:close_paren)) |
13
- slashed_number_int_exp
14
- end
15
-
16
- # Rules for prefixes_units
17
- rule(:wrapper_prefixes_units_value) do
18
- int_exp_prefixes_units | prefixes_units_int_exp
19
- end
20
-
21
- rule(:extended_prefixed_units) do
22
- extender >> spaces? >> prefixes_units_int_exp.as(:sequence)
23
- end
24
-
25
- rule(:int_exp_prefixes_units) do
26
- opening_paren >> spaces? >> named_int_exp_prefixes_units.as(:int_exp) >> spaces? >> closing_paren
27
- end
28
-
29
- rule(:implicit_extended) do
30
- (prefixes_units.as(:first_set) >> spaces.as(:extender) >> prefixes_units.as(:second_set)) |
31
- (int_exp_prefixes_units.as(:first_int_exp_set) >> spaces? >> int_exp_prefixes_units.as(:second_int_exp_set)) |
32
- (prefixes_units.as(:first_set) >> spaces? >> int_exp_prefixes_units.as(:second_int_exp_set)) |
33
- (int_exp_prefixes_units.as(:first_int_exp_set) >> spaces? >> prefixes_units.as(:second_set))
34
- end
35
-
36
- rule(:prefixes_units_int_exp) do
37
- (implicit_extended.as(:implicit_extended) >> spaces? >> prefixes_units_int_exp.as(:sequence).maybe) |
38
- (implicit_extended.as(:implicit_extended) >> spaces? >> extender >> spaces? >> prefixes_units_int_exp.as(:sequence).maybe) |
39
- (int_exp_prefixes_units >> spaces? >> extender >> spaces? >> prefixes_units_int_exp.as(:sequence).maybe) |
40
- (prefixes_units >> spaces? >> extender >> spaces? >> prefixes_units_int_exp.as(:sequence).maybe) |
41
- (int_exp_prefixes_units >> prefixes_units_int_exp.as(:sequence).maybe) |
42
- (prefixes_units >> prefixes_units_int_exp.as(:sequence).maybe)
43
- end
44
-
45
- rule(:prefixes_units_named_int_exp) do
46
- opening_paren.as(:open_paren) >> spaces? >> wrapper_prefixes_units_value.as(:int_exp) >> spaces? >> closing_paren.as(:close_paren)
47
- end
48
-
49
- rule(:named_int_exp_prefixes_units) do
50
- (prefixes_units_named_int_exp.as(:int_exp) >> (prefixes_units_int_exp | extended_prefixed_units).maybe) |
51
- prefixes_units_int_exp
52
- end
53
-
54
- # Rules for dimension_rules
55
- rule(:dimension_rules_int_exp) do
56
- (dimension_rules.as(:first_set) >> spaces.as(:extender) >> dimension_rules.as(:second_set) >> dimension_rules_int_exp.maybe) |
57
- (dimension_rules.as(:first_set) >> spaces? >> int_exp_dimension_rules.as(:second_int_exp_set) >> dimension_rules_int_exp.maybe) |
58
- (int_exp_dimension_rules.as(:first_int_exp_set) >> spaces? >> dimension_rules.as(:second_set) >> dimension_rules_int_exp.maybe) |
59
- (int_exp_dimension_rules.as(:first_int_exp_set) >> spaces? >> int_exp_dimension_rules.as(:second_int_exp_set) >> dimension_rules_int_exp.maybe) |
60
- int_exp_dimension_rules |
61
- dimension_rules
62
- end
63
-
64
- rule(:int_exp_dimension_rules) do
65
- opening_paren >> dimension_rules_named_exp.as(:int_exp) >> closing_paren >> extended_dimension_rules.maybe
66
- end
67
-
68
- rule(:extended_dimension_rules) do
69
- spaces? >> extender >> spaces? >> dimension_rules_int_exp.as(:sequence)
70
- end
71
- rule(:dimension_rules_named_exp) do
72
- ((opening_paren.as(:open_paren) >> dimension_rules_int_exp.as(:int_exp) >> closing_paren.as(:close_paren)).as(:int_exp) >> spaces? >> (dimension_rules_int_exp | extended_dimension_rules).as(:sequence).maybe) |
73
- dimension_rules_int_exp
74
- end
75
-
76
- # Rules for dimensions
77
- rule(:sqrt_dimensions) do
78
- sqrt >> opening_paren >> dimension_rules_int_exp.as(:sqrt) >> closing_paren
79
- end
80
-
81
- # Rules for sequence
82
- rule(:sqrt_sequence) do
83
- sqrt >> opening_paren >> prefixes_units_int_exp.as(:sqrt) >> closing_paren
84
- end
85
- end
86
- end
data/lib/unitsml/parse.rb DELETED
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parslet"
4
-
5
- module Unitsml
6
- class Parse < Parslet::Parser
7
- include IntermediateExpRules
8
-
9
- rule(:sqrt) { str("sqrt") }
10
- rule(:power) { str("^") >> slashed_number_int_exp.as(:power_numerator) }
11
- rule(:hyphen) { str("-") }
12
- rule(:number) { hyphen.maybe >> match(/[0-9]/).repeat(1) }
13
- rule(:spaces) { match(/\s/).repeat(1) }
14
- rule(:spaces?) { spaces.maybe }
15
-
16
- rule(:extender) { (forward_slashes | str("*")).as(:extender) }
17
- rule(:sequence) do
18
- (single_letter_prefixes >> units) | (double_letter_prefixes >> units) | units
19
- end
20
-
21
- rule(:opening_paren) { str("(") }
22
- rule(:closing_paren) { str(")") }
23
- rule(:unit_and_power) { units >> power.maybe }
24
- rule(:slashed_number) do
25
- (number >> (forward_slashes >> number).maybe).as(:integer)
26
- end
27
- rule(:forward_slashes) { str("//") | str("/") }
28
- rule(:dimension_rules) do
29
- (sqrt_dimensions | powered_dimensions) >> extended_dimension_rules.maybe
30
- end
31
- rule(:powered_dimensions) { dimensions >> power.maybe }
32
-
33
- rule(:units) do
34
- @@filtered_units ||= arr_to_expression(::Unitsml::Unitsdb.units.filtered,
35
- "unit")
36
- end
37
-
38
- rule(:single_letter_prefixes) do
39
- @@prefixes1 ||= arr_to_expression(::Unitsml::Unitsdb.prefixes_by_size(1),
40
- "prefix")
41
- end
42
-
43
- rule(:double_letter_prefixes) do
44
- @@prefixes2 ||= arr_to_expression(::Unitsml::Unitsdb.prefixes_by_size(2),
45
- "prefix")
46
- end
47
-
48
- rule(:dimensions) do
49
- @@dimensions ||= arr_to_expression(
50
- ::Unitsml::Unitsdb.dimensions.parsables.keys, "dimension"
51
- )
52
- end
53
-
54
- rule(:prefixes_units) do
55
- (sqrt_sequence >> extended_prefixed_units.maybe) |
56
- (str("1").as(:unit) >> extended_prefixed_units.maybe) |
57
- (unit_and_power >> extended_prefixed_units) |
58
- (unit_and_power >> (any.absent? | (extender | opening_paren | closing_paren | spaces).present?)) |
59
- (double_letter_prefixes >> unit_and_power >> extended_prefixed_units) |
60
- (double_letter_prefixes >> unit_and_power) |
61
- (single_letter_prefixes >> unit_and_power >> extended_prefixed_units) |
62
- (single_letter_prefixes >> unit_and_power)
63
- end
64
-
65
- rule(:expression) do
66
- prefixes_units_int_exp |
67
- dimension_rules_int_exp |
68
- (single_letter_prefixes >> hyphen) |
69
- (double_letter_prefixes >> hyphen)
70
- end
71
-
72
- root :expression
73
-
74
- def arr_to_expression(arr, file_name)
75
- array = arr&.flatten&.compact&.sort_by(&:length)&.reverse
76
- array&.reduce do |expression, expr_string|
77
- expression = str(expression).as(file_name.to_sym) if expression.is_a?(String)
78
- expression | str(expr_string).as(file_name.to_sym)
79
- end
80
- end
81
- end
82
- end
@@ -1,205 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parslet"
4
- module Unitsml
5
- class Transform < Parslet::Transform
6
- rule(sqrt: simple(:sqrt)) { Sqrt.new(sqrt) }
7
- rule(unit: simple(:unit)) { Unit.new(unit.to_s) }
8
- rule(dimension: simple(:dimension)) { Dimension.new(dimension.to_s) }
9
- rule(prefix: simple(:prefix)) { Prefix.new(prefix.to_s) }
10
- rule(integer: simple(:integer)) { Number.new(integer.to_s) }
11
- rule(int_exp: simple(:int_exp)) { int_exp }
12
- rule(implicit_extended: simple(:implicit_extended)) { implicit_extended }
13
-
14
- rule(int_exp: simple(:int_exp),
15
- sequence: simple(:sequence)) do
16
- Formula.new([int_exp, sequence])
17
- end
18
-
19
- rule(first_int_exp_set: simple(:first_set),
20
- second_set: simple(:second_set)) do
21
- Formula.new([Utility.set_to_fence(first_set), second_set])
22
- end
23
-
24
- rule(first_int_exp_set: simple(:first_set),
25
- second_int_exp_set: simple(:second_set)) do
26
- Formula.new(
27
- [Utility.set_to_fence(first_set), Utility.set_to_fence(second_set)],
28
- )
29
- end
30
-
31
- rule(first_set: simple(:first_set),
32
- second_set: simple(:second_set)) do
33
- Formula.new(
34
- [
35
- first_set,
36
- second_set,
37
- ],
38
- )
39
- end
40
-
41
- rule(first_set: simple(:first_set),
42
- second_int_exp_set: simple(:second_set)) do
43
- Formula.new(
44
- [
45
- first_set,
46
- Utility.set_to_fence(second_set),
47
- ],
48
- )
49
- end
50
-
51
- rule(prefix: simple(:prefix),
52
- unit: simple(:unit)) do
53
- Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s))
54
- end
55
-
56
- rule(unit: simple(:unit),
57
- power_numerator: simple(:power_numerator)) do
58
- Unit.new(unit.to_s, power_numerator)
59
- end
60
-
61
- rule(dimension: simple(:dimension),
62
- power_numerator: simple(:power_numerator)) do
63
- Dimension.new(dimension.to_s, power_numerator)
64
- end
65
-
66
- rule(prefix: simple(:prefix),
67
- unit: simple(:unit),
68
- power_numerator: simple(:power_numerator)) do
69
- Unit.new(unit.to_s, power_numerator, prefix: Prefix.new(prefix.to_s))
70
- end
71
-
72
- rule(first_set: simple(:first_set),
73
- extender: simple(:extender),
74
- second_set: simple(:second_set)) do
75
- Formula.new(
76
- [
77
- first_set,
78
- Extender.new(extender.to_s),
79
- second_set,
80
- ],
81
- )
82
- end
83
-
84
- rule(implicit_extended: simple(:implicit_extended),
85
- extender: simple(:extender),
86
- sequence: simple(:sequence)) do
87
- Formula.new(
88
- [
89
- implicit_extended,
90
- Extender.new(extender.to_s),
91
- sequence,
92
- ],
93
- )
94
- end
95
-
96
- rule(int_exp: simple(:int_exp),
97
- extender: simple(:extender),
98
- sequence: simple(:sequence)) do
99
- Formula.new(
100
- [
101
- int_exp,
102
- Extender.new(extender.to_s),
103
- sequence,
104
- ],
105
- )
106
- end
107
-
108
- rule(unit: simple(:unit),
109
- extender: simple(:extender),
110
- sequence: simple(:sequence)) do
111
- Formula.new(
112
- [
113
- Unit.new(unit.to_s),
114
- Extender.new(extender.to_s),
115
- sequence,
116
- ],
117
- )
118
- end
119
-
120
- rule(dimension: simple(:dimension),
121
- extender: simple(:extender),
122
- sequence: simple(:sequence)) do
123
- Formula.new(
124
- [
125
- Dimension.new(dimension.to_s),
126
- Extender.new(extender.to_s),
127
- sequence,
128
- ],
129
- )
130
- end
131
-
132
- rule(open_paren: simple(:open_paren),
133
- int_exp: simple(:int_exp),
134
- close_paren: simple(:close_paren)) do
135
- Fenced.new(
136
- open_paren.to_s,
137
- int_exp,
138
- close_paren.to_s,
139
- )
140
- end
141
-
142
- rule(open_paren: simple(:open_paren),
143
- integer: simple(:integer),
144
- close_paren: simple(:close_paren)) do
145
- Fenced.new(
146
- open_paren.to_s,
147
- Number.new(integer.to_s),
148
- close_paren.to_s,
149
- )
150
- end
151
-
152
- rule(unit: simple(:unit),
153
- power_numerator: simple(:power_numerator),
154
- extender: simple(:ext),
155
- sequence: simple(:sequence)) do
156
- Formula.new(
157
- [
158
- Unit.new(unit.to_s, power_numerator),
159
- Extender.new(ext.to_s),
160
- sequence,
161
- ],
162
- )
163
- end
164
-
165
- rule(dimension: simple(:dimension),
166
- power_numerator: simple(:power_numerator),
167
- extender: simple(:ext),
168
- sequence: simple(:sequence)) do
169
- Formula.new(
170
- [
171
- Dimension.new(dimension.to_s, power_numerator),
172
- Extender.new(ext.to_s),
173
- sequence,
174
- ],
175
- )
176
- end
177
-
178
- rule(prefix: simple(:prefix),
179
- unit: simple(:unit),
180
- extender: simple(:ext),
181
- sequence: simple(:sequence)) do
182
- Formula.new(
183
- [
184
- Unit.new(unit.to_s, prefix: Prefix.new(prefix.to_s)),
185
- Extender.new(ext.to_s),
186
- sequence,
187
- ],
188
- )
189
- end
190
-
191
- rule(prefix: simple(:prefix),
192
- unit: simple(:unit),
193
- power_numerator: simple(:power_numerator),
194
- extender: simple(:ext),
195
- sequence: simple(:sequence)) do
196
- Formula.new(
197
- [
198
- Unit.new(unit.to_s, power_numerator, prefix: Prefix.new(prefix.to_s)),
199
- Extender.new(ext.to_s),
200
- sequence,
201
- ],
202
- )
203
- end
204
- end
205
- end