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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9302100f8fc58e3b1c356d866a982f830a8c3331257ee7069e9c1160d347abe7
4
- data.tar.gz: bd327f07a78a631284ea36d0962ff6ecbbe3dbb917e25152643b43e6882202a3
3
+ metadata.gz: c7e1afc434b65e9562eee47e920f306e671d74f075a6ec4663fd2e23ed27bdee
4
+ data.tar.gz: 1e040ec64d46b196af3b0aa25c7357d2a5256c12debe7372541bc5df6a0eafa9
5
5
  SHA512:
6
- metadata.gz: 24de2e26b1e31b1547f0f557cbc3ddc0414a7a5dc37bc0c8ca31e697cfb11a214372e9923c23e26f2221822752a0556be5183e097ee79ba3ce6b2d614cd55c5b
7
- data.tar.gz: 828523c08cd2bcca2229e00120f2c309cae15281f9984123574b0e8eb575c988bc0dfc2d91711a33c8e6234023f3313e2c2b5ce21ced35d9c8b810052c5e4f7f
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 :number, :publisher, :copublisher, :stage, :part, :subpart,
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, draft_status: nil, adoption_year: nil,
18
- amendment: nil, supersedes: nil, corrigendum: nil, corrigendum_comment: nil, reaffirmed: nil,
19
- incorporates: nil, supplement: nil, proposal: nil, iso_amendment: nil, **opts)
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
- @edition = edition if edition
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
- if @iso_identifier
105
- "#{@iso_identifier.to_s(format: :ref_num_short)}#{iso_amendment}#{dual_identifier}"
106
- else
107
- "#{identifier(format)}#{with_trademark ? trademark(@number) : ''}#{parameters}#{adoption}"
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
- def iso_amendment
116
-
117
- end
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
- if @supersedes.length > 2
274
- " (Supersedes #{@supersedes.join(', ')})"
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
@@ -41,6 +41,10 @@ module Pubid::Ieee
41
41
  end
42
42
  result
43
43
  end
44
+
45
+ def has_stage?(stage)
46
+ Pubid::Iso::Identifier.has_stage?(stage)
47
+ end
44
48
  end
45
49
  end
46
50
  end
@@ -27,9 +27,7 @@ module Pubid::Ieee
27
27
  end
28
28
 
29
29
  rule(:year) do
30
- # -2014, April 2015
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")).as(:draft_status)
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
- (str("D") >> words_digits.as(:version)).repeat(1, 1)
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 | corrigendum_comment| incorporates | supplement) >>
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
- ((str("-") | str("/")) >> (str("D") >> digits).absent? >> (iso_parser.typed_stage.as(:stage) | iso_parser.stage.as(:stage))) >>
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
- iso_part_iteration
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
- parameters((organizations >> space).maybe)
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
@@ -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
 
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Ieee
3
- VERSION = "0.1.1".freeze
3
+ VERSION = "0.2.0".freeze
4
4
  end
5
5
  end
data/lib/pubid/ieee.rb CHANGED
@@ -10,6 +10,7 @@ require_relative "ieee/errors"
10
10
  require_relative "ieee/parser"
11
11
  require_relative "ieee/transformer"
12
12
  require_relative "ieee/type"
13
+ require_relative "ieee/renderer/base"
13
14
  require_relative "ieee/identifier"
14
15
  require_relative "ieee/identifier/base"
15
16
 
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.1.1
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: 2023-05-19 00:00:00.000000000 Z
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: '0'
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: '0'
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.5.2
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.5.2
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.0.3.1
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.