pubid-ieee 0.1.1 → 0.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9302100f8fc58e3b1c356d866a982f830a8c3331257ee7069e9c1160d347abe7
4
- data.tar.gz: bd327f07a78a631284ea36d0962ff6ecbbe3dbb917e25152643b43e6882202a3
3
+ metadata.gz: 8c39ac43789fb576d032ed8907c5c130c99a4efc3c1a3d25d24e697b89814aba
4
+ data.tar.gz: 0e7094c52ca4117f48e350e35e0bdfacb84d7256a75766a2da0d1a0728a91bdf
5
5
  SHA512:
6
- metadata.gz: 24de2e26b1e31b1547f0f557cbc3ddc0414a7a5dc37bc0c8ca31e697cfb11a214372e9923c23e26f2221822752a0556be5183e097ee79ba3ce6b2d614cd55c5b
7
- data.tar.gz: 828523c08cd2bcca2229e00120f2c309cae15281f9984123574b0e8eb575c988bc0dfc2d91711a33c8e6234023f3313e2c2b5ce21ced35d9c8b810052c5e4f7f
6
+ metadata.gz: 5de60ef5c6a3c5220eefeb989c183a508e5db312c983eab114d4771702d5bd5a4ee01028d93499036916ea38ea1062e45ad7f9b1999093b3fbf8ba037c372f1f
7
+ data.tar.gz: a55911eebc7b2a4964f6a8be5955ad0c0f750c5f6047daa0bd392d35b19aa719d30a4c42c29b1c75a0ddb0f3d6999597a583d8416c09c47a3e74cc2eaa47b835
@@ -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(to_h(deep: false)).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.1".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.1
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-17 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.7'
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.7'
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.