pubid-ieee 0.1.1 → 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/lib/pubid/ieee/identifier/base.rb +33 -208
- data/lib/pubid/ieee/identifier.rb +4 -0
- data/lib/pubid/ieee/parser.rb +39 -20
- data/lib/pubid/ieee/renderer/base.rb +184 -0
- data/lib/pubid/ieee/type.rb +5 -5
- data/lib/pubid/ieee/version.rb +1 -1
- data/lib/pubid/ieee.rb +1 -0
- data/update_codes.yaml +8 -0
- metadata +10 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7e1afc434b65e9562eee47e920f306e671d74f075a6ec4663fd2e23ed27bdee
|
4
|
+
data.tar.gz: 1e040ec64d46b196af3b0aa25c7357d2a5256c12debe7372541bc5df6a0eafa9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0fc9067d5152e381e170a2844d87e39e437c1a43ba7c3fa8a8502e214aa1309af1281baa393742c3d6ea88958abf10797d8a256e7d282a58dd1f67fb251f732
|
7
|
+
data.tar.gz: f91ae801824aa571246fb8141fc724f1ab21f7470db4d1ed1f86f1e8f995340a59f2758e9282a6303081796b1f498dd6efe020dab7bc52f10052a58f17c5770e
|
@@ -1,26 +1,38 @@
|
|
1
1
|
require 'date'
|
2
2
|
require "yaml"
|
3
3
|
|
4
|
-
UPDATE_CODES = YAML.load_file(File.join(File.dirname(__FILE__), "../../../../update_codes.yaml"))
|
5
|
-
|
6
4
|
module Pubid::Ieee
|
5
|
+
UPDATE_CODES = YAML.load_file(File.join(File.dirname(__FILE__), "../../../../update_codes.yaml"))
|
6
|
+
|
7
7
|
module Identifier
|
8
8
|
class Base < Pubid::Core::Identifier::Base
|
9
|
-
attr_accessor :
|
10
|
-
:edition, :draft, :redline, :year, :month, :type, :alternative,
|
9
|
+
attr_accessor :subpart, :edition, :draft, :redline, :month, :alternative,
|
11
10
|
:draft_status, :revision, :adoption_year, :amendment, :supersedes,
|
12
11
|
:corrigendum, :corrigendum_comment, :reaffirmed, :incorporates,
|
13
|
-
:supplement, :proposal, :iso_identifier, :iso_amendment
|
12
|
+
:supplement, :proposal, :iso_identifier, :iso_amendment,
|
13
|
+
:iteration, :includes, :adoption
|
14
14
|
|
15
15
|
def initialize(publisher: "IEEE", number: nil, stage: nil, subpart: nil, edition: nil,
|
16
16
|
draft: nil, redline: nil, month: nil, revision: nil,
|
17
|
-
iso_identifier: nil, type: :std, alternative: nil,
|
18
|
-
|
19
|
-
|
17
|
+
iso_identifier: nil, type: :std, alternative: nil,
|
18
|
+
draft_status: nil, adoption_year: nil,
|
19
|
+
amendment: nil, supersedes: nil, corrigendum: nil,
|
20
|
+
corrigendum_comment: nil, reaffirmed: nil,
|
21
|
+
incorporates: nil, supplement: nil, proposal: nil,
|
22
|
+
iso_amendment: nil, iteration: nil, includes: nil, adoption: nil, **opts)
|
20
23
|
|
21
24
|
super(**opts.merge(number: number, publisher: publisher))#.merge(amendments: amendments, corrigendums: corrigendums))
|
22
25
|
|
23
|
-
|
26
|
+
if edition
|
27
|
+
@edition = edition.update(edition) do |key, value|
|
28
|
+
case key
|
29
|
+
when :year, :month
|
30
|
+
value.to_i
|
31
|
+
else
|
32
|
+
value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
24
36
|
|
25
37
|
@proposal = @number.to_s[0] == "P"
|
26
38
|
@revision = revision
|
@@ -56,6 +68,9 @@ module Pubid::Ieee
|
|
56
68
|
@supplement = supplement
|
57
69
|
@proposal = proposal
|
58
70
|
@iso_amendment = iso_amendment
|
71
|
+
@iteration = iteration
|
72
|
+
@includes = includes
|
73
|
+
@adoption = adoption
|
59
74
|
end
|
60
75
|
|
61
76
|
def self.type
|
@@ -95,217 +110,27 @@ module Pubid::Ieee
|
|
95
110
|
Identifier.create(**Identifier.convert_parser_parameters(**identifier_params))
|
96
111
|
end
|
97
112
|
|
98
|
-
def self.get_transformer_class
|
99
|
-
Transformer
|
100
|
-
end
|
101
|
-
|
102
113
|
# @param [:short, :full] format
|
103
114
|
def to_s(format = :short, with_trademark: false)
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
end
|
115
|
+
opts = { format: format, with_trademark: with_trademark }
|
116
|
+
(@iso_identifier ? @iso_identifier.to_s(format: :ref_num_short) : "") +
|
117
|
+
self.class.get_renderer_class.new(get_params).render(**opts) +
|
118
|
+
(with_trademark ? trademark(@number) : "")
|
109
119
|
end
|
110
120
|
|
111
121
|
def trademark(number)
|
112
122
|
%w(802 2030).include?(number.to_s) ? "\u00AE" : "\u2122"
|
113
123
|
end
|
114
124
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
def dual_identifier
|
120
|
-
@number ? " (#{identifier})#{parameters}" : "#{identifier}#{parameters}"
|
121
|
-
end
|
122
|
-
|
123
|
-
def publisher
|
124
|
-
"#{@publisher}#{copublisher} " if @publisher && @number
|
125
|
-
end
|
126
|
-
|
127
|
-
def identifier(format = :short)
|
128
|
-
"#{publisher}#{draft_status(format)}#{type(format)}#{number}#{part}"\
|
129
|
-
"#{subpart}#{year}#{revision_date}"
|
130
|
-
end
|
131
|
-
|
132
|
-
def parameters
|
133
|
-
"#{corrigendum}#{draft}#{edition}#{alternative}#{supersedes}"\
|
134
|
-
"#{reaffirmed}#{incorporates}#{supplement}#{revision}#{amendment}#{redline}"
|
135
|
-
end
|
136
|
-
|
137
|
-
def copublisher
|
138
|
-
return "" unless @copublisher
|
139
|
-
|
140
|
-
if @copublisher.is_a?(Array)
|
141
|
-
@copublisher&.map { |c| "/#{c}" }&.join
|
142
|
-
else
|
143
|
-
"/#{@copublisher}"
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def part
|
148
|
-
"#{@part}" if @part
|
149
|
-
end
|
150
|
-
|
151
|
-
def subpart
|
152
|
-
@subpart if @subpart && !@subpart.to_s.empty?
|
153
|
-
end
|
154
|
-
|
155
|
-
def type(format)
|
156
|
-
return unless @type
|
157
|
-
|
158
|
-
@type.to_s(@publisher != "IEEE" ? :alternative : format)
|
159
|
-
end
|
160
|
-
|
161
|
-
def year
|
162
|
-
return "" if @month
|
163
|
-
return "" unless @year
|
164
|
-
|
165
|
-
if @corrigendum_comment
|
166
|
-
@corrigendum_comment.year
|
167
|
-
elsif @reaffirmed && @reaffirmed.key?(:reaffirmation_of)
|
168
|
-
@reaffirmed[:reaffirmation_of].year
|
169
|
-
else
|
170
|
-
"-#{@year}"
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
def alternative
|
175
|
-
if @alternative
|
176
|
-
if @alternative.is_a?(Array)
|
177
|
-
" (#{@alternative.map { |a| self.class.new(**Identifier.convert_parser_parameters(**a)) }.join(', ')})"
|
178
|
-
else
|
179
|
-
" (#{self.class.new(**Identifier.convert_parser_parameters(**@alternative))})"
|
180
|
-
end
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
def edition
|
185
|
-
return "" unless @edition
|
186
|
-
|
187
|
-
result = ""
|
188
|
-
if @edition[:version]
|
189
|
-
result += @edition[:version] == "First" ? " Edition 1.0 " : " Edition #{@edition[:version]} "
|
190
|
-
end
|
191
|
-
|
192
|
-
if @edition[:year]
|
193
|
-
result += if @edition[:version]
|
194
|
-
"#{@edition[:year]}"
|
195
|
-
else
|
196
|
-
" #{@edition[:year]} Edition"
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
if @edition[:month]
|
201
|
-
month = @edition[:month]
|
202
|
-
month = Date.parse(@edition[:month]).month if month.to_i.zero?
|
203
|
-
result += "-#{sprintf('%02d', month)}"
|
204
|
-
end
|
205
|
-
result += "-#{@edition[:day]}" if @edition[:day]
|
206
|
-
result
|
207
|
-
end
|
208
|
-
|
209
|
-
def draft
|
210
|
-
return "" unless @draft
|
211
|
-
|
212
|
-
@draft = Identifier.merge_parameters(@draft) if @draft.is_a?(Array)
|
213
|
-
|
214
|
-
result = "/D#{@draft[:version].is_a?(Array) ? @draft[:version].join('D') : @draft[:version]}"
|
215
|
-
result += ".#{@draft[:revision]}" if @draft[:revision]
|
216
|
-
result += ", #{@draft[:month]}" if @draft[:month]
|
217
|
-
result += " #{@draft[:day]}," if @draft[:day]
|
218
|
-
result += " #{@draft[:year]}" if @draft[:year]
|
219
|
-
result
|
220
|
-
end
|
221
|
-
|
222
|
-
def draft_status(format)
|
223
|
-
"#{@draft_status} " if @draft_status && format == :full
|
224
|
-
end
|
225
|
-
|
226
|
-
def revision
|
227
|
-
" (Revision of #{@revision.join(' and ')})" if @revision
|
228
|
-
end
|
229
|
-
|
230
|
-
def revision_date
|
231
|
-
return nil unless @month
|
232
|
-
", #{@month} #{@year}"
|
233
|
-
end
|
234
|
-
|
235
|
-
def amendment
|
236
|
-
return unless @amendment || @iso_amendment
|
237
|
-
|
238
|
-
if @iso_amendment
|
239
|
-
if @iso_amendment[:year]
|
240
|
-
return "/Amd#{@iso_amendment[:version]}-#{@iso_amendment[:year]}"
|
241
|
-
else
|
242
|
-
return "/Amd#{@iso_amendment[:version]}"
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
return " (Amendment to #{@amendment})" unless @amendment.is_a?(Array)
|
247
|
-
|
248
|
-
result = " (Amendment to #{@amendment.first} as amended by "
|
249
|
-
result += if @amendment.length > 2
|
250
|
-
"#{@amendment[1..-2].map(&:to_s).join(', ')}, and #{@amendment[-1]}"
|
251
|
-
else
|
252
|
-
@amendment.last.to_s
|
253
|
-
end
|
254
|
-
|
255
|
-
"#{result})"
|
256
|
-
end
|
257
|
-
|
258
|
-
def redline
|
259
|
-
" - Redline" if @redline
|
260
|
-
end
|
261
|
-
|
262
|
-
def adoption
|
263
|
-
if @adoption_year
|
264
|
-
adoption_id = dup
|
265
|
-
adoption_id.year = @adoption_year
|
266
|
-
" (Adoption of #{adoption_id.identifier})"
|
125
|
+
class << self
|
126
|
+
def get_renderer_class
|
127
|
+
Renderer::Base
|
267
128
|
end
|
268
|
-
end
|
269
|
-
|
270
|
-
def supersedes
|
271
|
-
return unless @supersedes
|
272
129
|
|
273
|
-
|
274
|
-
|
275
|
-
else
|
276
|
-
" (Supersedes #{@supersedes.join(' and ')})"
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
def corrigendum
|
281
|
-
if @corrigendum.nil?
|
282
|
-
(@year && @corrigendum_comment && "/Cor 1-#{@year}") || ""
|
283
|
-
else
|
284
|
-
if @corrigendum[:year]
|
285
|
-
"/Cor #{@corrigendum[:version]}-#{@corrigendum[:year]}"
|
286
|
-
else
|
287
|
-
"/Cor #{@corrigendum[:version]}"
|
288
|
-
end
|
130
|
+
def get_transformer_class
|
131
|
+
Transformer
|
289
132
|
end
|
290
133
|
end
|
291
|
-
|
292
|
-
def reaffirmed
|
293
|
-
return unless @reaffirmed
|
294
|
-
|
295
|
-
return " (Reaffirmed #{@year})" if @reaffirmed.key?(:reaffirmation_of)
|
296
|
-
|
297
|
-
" (Reaffirmed #{@reaffirmed[:year]})" if @reaffirmed[:year]
|
298
|
-
end
|
299
|
-
|
300
|
-
def incorporates
|
301
|
-
# " (Supersedes #{@supersedes.join(', ')})"
|
302
|
-
|
303
|
-
" (Incorporates #{@incorporates.join(', and ')})" if @incorporates
|
304
|
-
end
|
305
|
-
|
306
|
-
def supplement
|
307
|
-
" (Supplement to #{@supplement})" if @supplement
|
308
|
-
end
|
309
134
|
end
|
310
135
|
end
|
311
136
|
end
|
data/lib/pubid/ieee/parser.rb
CHANGED
@@ -27,9 +27,7 @@ module Pubid::Ieee
|
|
27
27
|
end
|
28
28
|
|
29
29
|
rule(:year) do
|
30
|
-
|
31
|
-
dash >> year_digits.as(:adoption_year) >> publication_date |
|
32
|
-
(dot | dash) >> year_digits.as(:year) >> str("(E)").maybe
|
30
|
+
(dot | dash) >> year_digits.as(:year) >> str("(E)").maybe
|
33
31
|
end
|
34
32
|
|
35
33
|
rule(:organization) do
|
@@ -68,7 +66,7 @@ module Pubid::Ieee
|
|
68
66
|
end
|
69
67
|
|
70
68
|
rule(:draft_status) do
|
71
|
-
(str("Active Unapproved") | str("Unapproved") | str("Approved"))
|
69
|
+
(str("Active Unapproved") | str("Unapproved") | str("Approved"))
|
72
70
|
end
|
73
71
|
|
74
72
|
rule(:draft_prefix) do
|
@@ -87,7 +85,8 @@ module Pubid::Ieee
|
|
87
85
|
# for D1D2
|
88
86
|
(str("D") >> digits.as(:version)).repeat(2) |
|
89
87
|
# for DD3, D3Q
|
90
|
-
|
88
|
+
# don't parse "DIS" as draft
|
89
|
+
(str("D") >> str("IS").absent? >> words_digits.as(:version)).repeat(1, 1)
|
91
90
|
end
|
92
91
|
|
93
92
|
rule(:draft) do
|
@@ -99,11 +98,11 @@ module Pubid::Ieee
|
|
99
98
|
end
|
100
99
|
|
101
100
|
rule(:part) do
|
102
|
-
((dot | dash) >> words_digits).as(:part)
|
101
|
+
((dot | dash) >> iso_stage_iteration.absent? >> words_digits).as(:part)
|
103
102
|
end
|
104
103
|
|
105
104
|
rule(:subpart) do
|
106
|
-
(dot | dash) >> match('[\da-z]').repeat(1)
|
105
|
+
(dot | dash) >> ((str("REV") | str("Rev")).maybe >> match('[\da-z]').repeat(1) | (str("REV") | str("Rev")))
|
107
106
|
end
|
108
107
|
|
109
108
|
rule(:part_subpart_year) do
|
@@ -159,6 +158,10 @@ module Pubid::Ieee
|
|
159
158
|
).as(:revision)
|
160
159
|
end
|
161
160
|
|
161
|
+
rule(:adoption) do
|
162
|
+
str("Adoption of ") >> identifier_without_dual_pubids.as(:adoption)
|
163
|
+
end
|
164
|
+
|
162
165
|
rule(:previous_amendments) do
|
163
166
|
# IEEE P802.3bp/D3.4, April 2016 (Amendment of IEEE Std 802.3-2015 as amended by IEEE Std 802.3bw-2015,
|
164
167
|
# IEEE Std 802.3by-201X, and IEEE Std 802.3bq-201X)
|
@@ -205,9 +208,15 @@ module Pubid::Ieee
|
|
205
208
|
(str("Supplement") >> str("s").maybe >> str(" to ") >> identifier_without_dual_pubids.as(:identifier)).as(:supplement)
|
206
209
|
end
|
207
210
|
|
211
|
+
rule(:includes) do
|
212
|
+
(str("Includes ") >>
|
213
|
+
((str("Supplement ") >> identifier_without_dual_pubids.as(:identifier)).as(:supplement) | identifier_without_dual_pubids.as(:identifier))).as(:includes)
|
214
|
+
end
|
215
|
+
|
208
216
|
rule(:additional_parameters) do
|
209
217
|
(space? >> str("(") >> (
|
210
|
-
(reaffirmed | revision | amendment | supersedes |
|
218
|
+
(reaffirmed | revision | amendment | supersedes |
|
219
|
+
corrigendum_comment| incorporates | supplement | includes | adoption) >>
|
211
220
|
((str("/") | str(",")) >> space?).maybe).repeat >> str(")").maybe
|
212
221
|
).repeat >> redline.maybe
|
213
222
|
end
|
@@ -216,7 +225,7 @@ module Pubid::Ieee
|
|
216
225
|
# otherwise extra identifiers parsed as dual PubIDs to the main identifier
|
217
226
|
def parameters(atom, without_dual_pubids: false, skip_parameters: false)
|
218
227
|
atom >>
|
219
|
-
((draft_status >> space).maybe >> (str("Draft ").maybe >>
|
228
|
+
((draft_status.as(:draft_status) >> space).maybe >> (str("Draft ").maybe >>
|
220
229
|
type.as(:type) >> space.maybe).maybe).as(:type_status) >>
|
221
230
|
number_prefix >> number >>
|
222
231
|
(
|
@@ -224,6 +233,9 @@ module Pubid::Ieee
|
|
224
233
|
(draft |
|
225
234
|
part_subpart_year.maybe >> corrigendum.maybe >> draft.maybe >> iso_amendment.maybe
|
226
235
|
) >>
|
236
|
+
# iso_stage_part_iteration.maybe >>
|
237
|
+
# ((str("-") | str("/") | str("_")) >> (str("D") >> digits).absent? >>
|
238
|
+
# (iso_parser.typed_stage.as(:stage) | iso_parser.stage.as(:stage))) >> digits.as(:iteration).maybe >>
|
227
239
|
if skip_parameters
|
228
240
|
str("")
|
229
241
|
else
|
@@ -302,14 +314,13 @@ module Pubid::Ieee
|
|
302
314
|
end
|
303
315
|
|
304
316
|
rule(:iso_part_stage_iteration) do
|
305
|
-
iso_part >>
|
306
|
-
(str("-") >> iso_parser.typed_stage.as(:stage)) >> iso_parser.iteration.maybe
|
317
|
+
iso_part >> (str("-") | str("/") | str("_")) >> iso_stage_iteration >> iso_parser.iteration.maybe
|
307
318
|
end
|
308
319
|
|
309
320
|
rule(:iso_stage_part_iteration) do
|
310
321
|
# don't consume draft from IEEE format
|
311
|
-
(
|
312
|
-
iso_part.maybe >> iso_parser.iteration.maybe
|
322
|
+
(str("-") | str("/") | str("_") | space) >> (str("D") >> digits).absent? >>
|
323
|
+
iso_stage_iteration >> iso_part.maybe >> iso_parser.iteration.maybe
|
313
324
|
end
|
314
325
|
|
315
326
|
# add rule when don't have stage
|
@@ -318,12 +329,16 @@ module Pubid::Ieee
|
|
318
329
|
iso_part >> iso_parser.iteration.maybe
|
319
330
|
end
|
320
331
|
|
332
|
+
rule(:iso_stage_iteration) do
|
333
|
+
(iso_parser.typed_stage | iso_parser.stage).as(:stage) >> digits.as(:iteration).maybe
|
334
|
+
end
|
335
|
+
|
321
336
|
rule(:iso_part_stage_iteration_matcher) do
|
322
337
|
# consumes "/"
|
323
|
-
iso_stage_part_iteration |
|
324
338
|
iso_part_stage_iteration |
|
325
|
-
|
326
|
-
|
339
|
+
iso_stage_part_iteration |
|
340
|
+
iso_part_iteration# |
|
341
|
+
# iso_stage_iteration
|
327
342
|
end
|
328
343
|
|
329
344
|
rule(:iso_identifier) do
|
@@ -335,9 +350,11 @@ module Pubid::Ieee
|
|
335
350
|
iso_parser.originator >> ((str(" ") | str("/")) >>
|
336
351
|
# for ISO/FDIS
|
337
352
|
(iso_parser.type | iso_parser.typed_stage.as(:stage))).maybe >>
|
353
|
+
# draft std
|
354
|
+
# (space >> (draft_status >> space).maybe >> (str("Draft ").maybe >> type >> space.maybe)).maybe >>
|
338
355
|
# for ISO/IEC WD TS 25025
|
339
356
|
str(" ").maybe >> ((iso_parser.typed_stage.as(:stage) | iso_parser.stage.as(:stage) | iso_parser.type) >> str(" ")).maybe >>
|
340
|
-
(str("P").maybe >> iso_parser.digits).as(:number) >>
|
357
|
+
(str("P").maybe >> iso_parser.digits).as(:number) >> iso_parser.iteration.maybe >>
|
341
358
|
# for identifiers like ISO 5537/IDF 26
|
342
359
|
(str("|") >> (str("IDF") >> str(" ") >> digits).as(:joint_document)).maybe >>
|
343
360
|
iso_part_stage_iteration_matcher.maybe >>
|
@@ -371,10 +388,12 @@ module Pubid::Ieee
|
|
371
388
|
|
372
389
|
rule(:iso_or_ieee_identifier) do
|
373
390
|
ieee_without_prefix |
|
391
|
+
parameters((organizations >> space).maybe) |
|
374
392
|
(iso_identifier >> iso_parameters) |
|
375
393
|
# (iso identifier) >> space >> (ieee identifier) ?
|
376
|
-
iso_identifier >> space >> parameters((organizations >> space).maybe) | iso_identifier
|
377
|
-
|
394
|
+
iso_identifier >> space >> parameters((organizations >> space).maybe) | iso_identifier
|
395
|
+
|
396
|
+
# iso_identifier >> iso_parameters
|
378
397
|
end
|
379
398
|
|
380
399
|
rule(:parameters_with_optional_organizations) do
|
@@ -382,7 +401,7 @@ module Pubid::Ieee
|
|
382
401
|
end
|
383
402
|
|
384
403
|
rule(:identifier_without_dual_pubids) do
|
385
|
-
iso_identifier >> iso_parameters |
|
404
|
+
(iso_identifier >> iso_parameters) |
|
386
405
|
parameters((organizations >> space).maybe, without_dual_pubids: true)
|
387
406
|
end
|
388
407
|
|
@@ -0,0 +1,184 @@
|
|
1
|
+
module Pubid::Ieee::Renderer
|
2
|
+
class Base < Pubid::Core::Renderer::Base
|
3
|
+
def render_identifier(params)
|
4
|
+
if params[:iso_identifier].to_s != "" && params[:number] != ""
|
5
|
+
" (%{publisher}%{stage}%{draft_status}%{type}%{number}%{iteration}%{part}%{subpart}%{month}%{year}%{corrigendum_comment}"\
|
6
|
+
"%{corrigendum}%{draft}%{edition})%{alternative}%{supersedes}%{reaffirmed}%{incorporates}%{supplement}"\
|
7
|
+
"%{revision}%{iso_amendment}%{amendment}%{includes}%{redline}%{adoption}" % params
|
8
|
+
else
|
9
|
+
"%{publisher}%{stage}%{draft_status}%{type}%{number}%{iteration}%{part}%{subpart}%{month}%{year}%{corrigendum_comment}"\
|
10
|
+
"%{corrigendum}%{draft}%{edition}%{alternative}%{supersedes}%{reaffirmed}%{incorporates}%{supplement}"\
|
11
|
+
"%{revision}%{iso_amendment}%{amendment}%{includes}%{redline}%{adoption}" % params
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def render_number(number, _opts, _params)
|
16
|
+
" #{number}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def render_publisher(publisher, opts, params)
|
20
|
+
# don't render publisher if no number assigned
|
21
|
+
super if params[:number]
|
22
|
+
end
|
23
|
+
|
24
|
+
def render_type(type, opts, params)
|
25
|
+
result = type.to_s(params[:publisher] == "IEEE" ? opts[:format] : :alternative)
|
26
|
+
|
27
|
+
" #{result}" unless result.empty?
|
28
|
+
#" #{type}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def render_part(part, _opts, _params)
|
32
|
+
"#{part}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def render_month(month, _opts, _params)
|
36
|
+
", #{month}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def render_corrigendum_comment(corrigendum_comment, _opts, params)
|
40
|
+
"/Cor 1-#{params[:year]}" if params[:year]
|
41
|
+
end
|
42
|
+
|
43
|
+
def render_year(year, _opts, params)
|
44
|
+
return " #{year}" if params[:month]
|
45
|
+
|
46
|
+
if params[:corrigendum_comment]
|
47
|
+
"-#{params[:corrigendum_comment].year}"
|
48
|
+
elsif params[:reaffirmed] && params[:reaffirmed].key?(:reaffirmation_of)
|
49
|
+
"-#{params[:reaffirmed][:reaffirmation_of].year}"
|
50
|
+
else
|
51
|
+
"-#{year}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def render_includes(includes, _opts, _params)
|
56
|
+
if includes.is_a?(Hash) && includes[:supplement]
|
57
|
+
return " (Includes Supplement #{includes[:supplement]})"
|
58
|
+
end
|
59
|
+
|
60
|
+
" (Includes #{includes})"
|
61
|
+
end
|
62
|
+
|
63
|
+
def render_edition(edition, _opts, _params)
|
64
|
+
result = ""
|
65
|
+
if edition[:version]
|
66
|
+
result += edition[:version] == "First" ? " Edition 1.0 " : " Edition #{edition[:version]} "
|
67
|
+
end
|
68
|
+
|
69
|
+
if edition[:year]
|
70
|
+
result += if edition[:version]
|
71
|
+
"#{edition[:year]}"
|
72
|
+
else
|
73
|
+
" #{edition[:year]} Edition"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
if edition[:month]
|
78
|
+
month = edition[:month]
|
79
|
+
month = Date.parse(edition[:month]).month if month.to_i.zero?
|
80
|
+
result += "-#{sprintf('%02d', month)}"
|
81
|
+
end
|
82
|
+
result += "-#{edition[:day]}" if edition[:day]
|
83
|
+
result
|
84
|
+
end
|
85
|
+
|
86
|
+
def render_alternative(alternative, _opts, _params)
|
87
|
+
if alternative.is_a?(Array)
|
88
|
+
" (#{alternative.map { |a| Pubid::Ieee::Identifier::Base.new(**Pubid::Ieee::Identifier.convert_parser_parameters(**a)) }.join(', ')})"
|
89
|
+
else
|
90
|
+
" (#{Pubid::Ieee::Identifier::Base.new(**Pubid::Ieee::Identifier.convert_parser_parameters(**alternative))})"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def render_draft(draft, _opts, _params)
|
95
|
+
draft = Pubid::Ieee::Identifier.merge_parameters(draft) if draft.is_a?(Array)
|
96
|
+
|
97
|
+
result = "/D#{draft[:version].is_a?(Array) ? draft[:version].join('D') : draft[:version]}"
|
98
|
+
result += ".#{draft[:revision]}" if draft[:revision]
|
99
|
+
result += ", #{draft[:month]}" if draft[:month]
|
100
|
+
result += " #{draft[:day]}," if draft[:day]
|
101
|
+
result += " #{draft[:year]}" if draft[:year]
|
102
|
+
result
|
103
|
+
end
|
104
|
+
|
105
|
+
def render_draft_status(draft_status, opts, _params)
|
106
|
+
" #{draft_status}" if opts[:format] == :full
|
107
|
+
end
|
108
|
+
|
109
|
+
def render_revision(revision, _opts, _params)
|
110
|
+
" (Revision of #{revision.join(' and ')})" if revision
|
111
|
+
end
|
112
|
+
|
113
|
+
def render_redline(_redline, _opts, _params)
|
114
|
+
" - Redline"
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
def render_amendment(amendment, _opts, _params)
|
119
|
+
return " (Amendment to #{amendment})" unless amendment.is_a?(Array)
|
120
|
+
|
121
|
+
result = " (Amendment to #{amendment.first} as amended by "
|
122
|
+
result += if amendment.length > 2
|
123
|
+
"#{amendment[1..-2].map(&:to_s).join(', ')}, and #{amendment[-1]}"
|
124
|
+
else
|
125
|
+
amendment.last.to_s
|
126
|
+
end
|
127
|
+
|
128
|
+
"#{result})"
|
129
|
+
end
|
130
|
+
|
131
|
+
def render_corrigendum(corrigendum, _opts, params)
|
132
|
+
# if corrigendum.nil?
|
133
|
+
# (params[:year] && corrigendum_comment && "/Cor 1-#{params[:year]}") || ""
|
134
|
+
# else
|
135
|
+
if corrigendum[:year]
|
136
|
+
"/Cor #{corrigendum[:version]}-#{corrigendum[:year]}"
|
137
|
+
else
|
138
|
+
"/Cor #{corrigendum[:version]}"
|
139
|
+
end
|
140
|
+
# end
|
141
|
+
end
|
142
|
+
|
143
|
+
def render_supersedes(supersedes, _opts, _params)
|
144
|
+
if supersedes.length > 2
|
145
|
+
" (Supersedes #{supersedes.join(', ')})"
|
146
|
+
else
|
147
|
+
" (Supersedes #{supersedes.join(' and ')})"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def render_reaffirmed(reaffirmed, _opts, params)
|
152
|
+
return " (Reaffirmed #{params[:year]})" if reaffirmed.key?(:reaffirmation_of)
|
153
|
+
|
154
|
+
" (Reaffirmed #{reaffirmed[:year]})" if reaffirmed[:year]
|
155
|
+
end
|
156
|
+
|
157
|
+
def render_incorporates(incorporates, _opts, _params)
|
158
|
+
" (Incorporates #{incorporates.join(', and ')})"
|
159
|
+
end
|
160
|
+
|
161
|
+
def render_supplement(supplement, _opts, _params)
|
162
|
+
" (Supplement to #{supplement})" if supplement
|
163
|
+
end
|
164
|
+
|
165
|
+
def render_adoption_year(adoption_year, _opts, _params)
|
166
|
+
adoption_id = dup
|
167
|
+
adoption_id.year = adoption_year
|
168
|
+
" (Adoption of #{adoption_id.identifier})"
|
169
|
+
end
|
170
|
+
|
171
|
+
def render_adoption(adoption, _opts, _params)
|
172
|
+
adoption
|
173
|
+
end
|
174
|
+
|
175
|
+
def render_iso_amendment(iso_amendment, _opts, _params)
|
176
|
+
"/Amd#{iso_amendment[:version]}" +
|
177
|
+
(iso_amendment[:year] ? "-#{iso_amendment[:year]}" : "")
|
178
|
+
end
|
179
|
+
|
180
|
+
def render_adoption(adoption, opts, _params)
|
181
|
+
" (Adoption of #{Pubid::Ieee::Identifier::Base.transform(**adoption)})"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
data/lib/pubid/ieee/type.rb
CHANGED
@@ -5,16 +5,16 @@ module Pubid::Ieee
|
|
5
5
|
TYPE_NAMES = {
|
6
6
|
std: {
|
7
7
|
long: "Standard",
|
8
|
-
full: "Std
|
9
|
-
short: "Std
|
8
|
+
full: "Std",
|
9
|
+
short: "Std",
|
10
10
|
match: %w[STD Std Standard],
|
11
11
|
alternative: "",
|
12
12
|
},
|
13
13
|
draft: {
|
14
|
-
full: "Draft Std
|
15
|
-
short: "Draft Std
|
14
|
+
full: "Draft Std",
|
15
|
+
short: "Draft Std",
|
16
16
|
match: %w[Draft],
|
17
|
-
alternative: "Draft
|
17
|
+
alternative: "Draft",
|
18
18
|
},
|
19
19
|
}.freeze
|
20
20
|
|
data/lib/pubid/ieee/version.rb
CHANGED
data/lib/pubid/ieee.rb
CHANGED
data/update_codes.yaml
CHANGED
@@ -51,3 +51,11 @@ IEEE 278-1967: IEEE No 278-1967
|
|
51
51
|
IEEE 730-1989: IEEE No 730-1989
|
52
52
|
IEEE 751-1991: IEEE No 751-1991
|
53
53
|
IEEE 1023-2020 (Revision of IEEE Std 1023-2004): IEEE No 1023-2020 (Revision of IEEE Std 1023-2004)
|
54
|
+
# Remove Unapproved Draft Std for ISO style identifiers with iso stage
|
55
|
+
# using "[A-Z]{2,}" to exclude /D12 (drafts) from match
|
56
|
+
# IEEE Unapproved Draft Std P15026.2/FCD -> IEEE P15026.2/FCD
|
57
|
+
/(IEEE )(?:Unapproved )?(?:Draft )?Std (P[\d.]+[_/][A-Z]{2,}\d?)/: \1\2
|
58
|
+
IEEE P90003-2014, April 2015: IEEE P90003, April 2015
|
59
|
+
# Add space between year and month for dates without space, e.g. "Jul2014" -> "Jul 2014"
|
60
|
+
/, (\w{3,4})(\d{4,4})$/: ", \\1 \\2"
|
61
|
+
IEC/IEEE P61886-1_D2_May2020: IEC/IEEE P61886-1_D2, May 2020
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pubid-ieee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,76 +38,34 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: nokogiri
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: thor
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: lightly
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
41
|
- !ruby/object:Gem::Dependency
|
84
42
|
name: parslet
|
85
43
|
requirement: !ruby/object:Gem::Requirement
|
86
44
|
requirements:
|
87
|
-
- - "
|
45
|
+
- - "~>"
|
88
46
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
47
|
+
version: 2.0.0
|
90
48
|
type: :runtime
|
91
49
|
prerelease: false
|
92
50
|
version_requirements: !ruby/object:Gem::Requirement
|
93
51
|
requirements:
|
94
|
-
- - "
|
52
|
+
- - "~>"
|
95
53
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
54
|
+
version: 2.0.0
|
97
55
|
- !ruby/object:Gem::Dependency
|
98
56
|
name: pubid-iso
|
99
57
|
requirement: !ruby/object:Gem::Requirement
|
100
58
|
requirements:
|
101
59
|
- - "~>"
|
102
60
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
61
|
+
version: 0.6.0
|
104
62
|
type: :runtime
|
105
63
|
prerelease: false
|
106
64
|
version_requirements: !ruby/object:Gem::Requirement
|
107
65
|
requirements:
|
108
66
|
- - "~>"
|
109
67
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
68
|
+
version: 0.6.0
|
111
69
|
description: Library to generate, parse and manipulate IEEE PubID.
|
112
70
|
email:
|
113
71
|
- open.source@ribose.com
|
@@ -125,6 +83,7 @@ files:
|
|
125
83
|
- lib/pubid/ieee/identifier.rb
|
126
84
|
- lib/pubid/ieee/identifier/base.rb
|
127
85
|
- lib/pubid/ieee/parser.rb
|
86
|
+
- lib/pubid/ieee/renderer/base.rb
|
128
87
|
- lib/pubid/ieee/transformer.rb
|
129
88
|
- lib/pubid/ieee/type.rb
|
130
89
|
- lib/pubid/ieee/version.rb
|
@@ -148,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
107
|
- !ruby/object:Gem::Version
|
149
108
|
version: '0'
|
150
109
|
requirements: []
|
151
|
-
rubygems_version: 3.
|
110
|
+
rubygems_version: 3.3.26
|
152
111
|
signing_key:
|
153
112
|
specification_version: 4
|
154
113
|
summary: Library to generate, parse and manipulate IEEE PubID.
|