pubid-ieee 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|