pubid-iso 0.5.2 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6f3adc0da212bf94d36e4cf03a2c0df042faec56fd9c218d2ffad51fa63dfb0e
4
- data.tar.gz: a0daec7e03a71688ebb1959531415d4c842b75dd1e0c8ed7b48f8399148e5848
3
+ metadata.gz: 11124938cd55ceae313c720ac11b3c19c475e1398bb7e0eed93ac07ebbbe9eb4
4
+ data.tar.gz: 72de1b3ce2af85a21b888e2180410d5efbe57f6ea297ff7b412a9758e024d1e5
5
5
  SHA512:
6
- metadata.gz: 48d74a1e76b6ee3c7e064c56ce7c6623533f584e85b4c227ea9e0e68993a82c98fb2d30e4e19c5ed61670ce9160503bcfcc6142c277c66812b3cd3bffb51d0ee
7
- data.tar.gz: 0764db7a06d34fdf687f577663f3b03b1e2181a38444f03eba5f3ec8678c787ad01e83aadf27baebd9bdf3f72a1d90edaa7817683173ed271a93c7379c12e00f
6
+ metadata.gz: dd4d5c372306186736e8c44c446e445758c8b7d871d73454096c739ed1e5e7fcc7890b8ea0189c44f5418150d54f6802d325687ab77dcf71984277ec244f303a
7
+ data.tar.gz: f93770f6fb62a8401e99a59d1e47c99eb6f97c5be34385acb9f01187bb8eab504ccff0dc8ae50162037ef3f5080a0e0f2a8add11a2f789ef67cf153128c339eb
data/README.adoc CHANGED
@@ -1,5 +1,7 @@
1
1
  = ISO publication identifiers ("ISO PubID")
2
2
 
3
+ image:https://badge.fury.io/rb/pubid-iso.svg["Gem Version", link="https://badge.fury.io/rb/pubid-iso"]
4
+
3
5
  == Purpose
4
6
 
5
7
  This gem implements a mechanism to parse and utilize ISO publication
@@ -349,12 +351,19 @@ final draft International Standards (FDIS) and International Standards`",
349
351
  distinguished by a numerical suffix (.2, .3, etc.).
350
352
  ____
351
353
 
352
- The stage iteration number is assigned accordingly for all stages, which is
353
- patterned as:
354
+ [example]
355
+ ====
356
+ ISO/CD TR 10064-2.2
357
+ ISO/IEC CD 23264-2.4
358
+ ISO/DIS 80369-3.2
359
+ ====
360
+
361
+ In an ISO PubID, the stage iteration number is applied to the standard
362
+ number, patterned as:
354
363
 
355
- * `{document stage}` (no suffix if iteration is 1); or
356
- * `{document stage}.{iteration number}`
357
- (suffix including iteration number after 1).
364
+ * `{document stage} {document number}` (if iteration is 1); or
365
+ * `{document stage} {document number}.{iteration number}`
366
+ (if iteration is larger than 1).
358
367
 
359
368
  Once the document is published (stage 60 substage 60), no status abbreviation is
360
369
  given.
@@ -0,0 +1,24 @@
1
+ require_relative "../renderer/addendum"
2
+
3
+ module Pubid::Iso
4
+ module Identifier
5
+ class Addendum < Supplement
6
+ def_delegators 'Pubid::Iso::Identifier::Addendum', :type
7
+
8
+ TYPED_STAGES = {
9
+ dad: {
10
+ abbr: "DAD",
11
+ name: "Draft Addendum",
12
+ harmonized_stages: %w[],
13
+ },
14
+ }.freeze
15
+ def self.type
16
+ { key: :add, title: "Addendum" }
17
+ end
18
+
19
+ def self.get_renderer_class
20
+ Renderer::Addendum
21
+ end
22
+ end
23
+ end
24
+ end
@@ -186,6 +186,13 @@ module Pubid::Iso
186
186
  )
187
187
  end
188
188
 
189
+ if identifier_params[:extract]
190
+ base_parameters = params.reject { |k, _| k == :extract }
191
+
192
+ return Identifier.create(base: Identifier.create(**base_parameters),
193
+ type: :ext, **identifier_params[:extract])
194
+ end
195
+
189
196
  Identifier.create(**identifier_params)
190
197
  end
191
198
 
@@ -0,0 +1,19 @@
1
+ require_relative "../renderer/extract"
2
+
3
+ module Pubid::Iso
4
+ module Identifier
5
+ class Extract < Base
6
+ def_delegators 'Pubid::Iso::Identifier::Extract', :type
7
+
8
+ TYPED_STAGES = {}.freeze
9
+
10
+ def self.type
11
+ { key: :ext, title: "Extract" }
12
+ end
13
+
14
+ def self.get_renderer_class
15
+ Renderer::Extract
16
+ end
17
+ end
18
+ end
19
+ end
@@ -4,6 +4,11 @@ module Pubid::Iso
4
4
  def_delegators 'Pubid::Iso::Identifier::InternationalStandard', :type
5
5
 
6
6
  TYPED_STAGES = {
7
+ dp: {
8
+ abbr: "DP",
9
+ name: "Draft Proposal",
10
+ harmonized_stages: %w[],
11
+ },
7
12
  dis: {
8
13
  abbr: "DIS",
9
14
  name: "Draft International Standard",
@@ -3,7 +3,7 @@ require_relative "renderer/base"
3
3
 
4
4
  module Pubid::Iso
5
5
  class Parser < Pubid::Core::Parser
6
- STAGES = %w[NP NWIP WD CD PRF AWI PWI FPD].freeze
6
+ STAGES = %w[NP NWIP WD CD FCD PRF AWI PWI FPD].freeze
7
7
  TYPES = %w[DATA ISP IWA R TTA TS TR IS PAS Guide GUIDE DIR].freeze
8
8
  # TYPED_STAGES = %w[DIS FDIS DPAS FDTR FDTS DTS DTR PDTR PDTS].freeze
9
9
  SUPPLEMENTS = %w[Amd Cor AMD COR Suppl].freeze
@@ -18,13 +18,17 @@ module Pubid::Iso
18
18
  end.flatten +
19
19
  %w[pDCOR PDAM]
20
20
 
21
+ STAGED_ADDENDA = Pubid::Iso::Identifier::Addendum::TYPED_STAGES.map do |_, v|
22
+ v[:abbr]
23
+ end
24
+
21
25
  DIR_SUPPLEMENTS = %w[Supplement SUP].freeze
22
26
 
23
- TYPED_STAGES = Identifier.config.types.map do |type|
27
+ TYPED_STAGES = (Identifier.config.types.map do |type|
24
28
  type::TYPED_STAGES.map do |_, v|
25
29
  v.key?(:legacy_abbr) ? (v[:legacy_abbr] + [v[:abbr]]) : v[:abbr]
26
30
  end
27
- end.flatten - STAGED_SUPPLEMENTS + %w[PDTR PDTS]
31
+ end.flatten - STAGED_SUPPLEMENTS + %w[PDTR PDTS]).sort_by(&:length).reverse
28
32
 
29
33
  TCTYPES = ["TC", "JTC", "PC", "IT", "CAB", "CASCO", "COPOLCO",
30
34
  "COUNCIL", "CPSG", "CS", "DEVCO", "GA", "GAAB", "INFCO",
@@ -40,6 +44,10 @@ module Pubid::Iso
40
44
  "CSC/SP", "CSC/FIN", "JAG"].freeze
41
45
 
42
46
  ORGANIZATIONS = %w[IEC IEEE CIW SAE CIE ASME ASTM OECD ISO HL7 CEI].freeze
47
+ rule(:dash) do
48
+ str("-") | str("‑") | str("‐")
49
+ end
50
+
43
51
  rule(:stage) do
44
52
  array_to_str(Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:stage].values) | array_to_str(STAGES)
45
53
  end
@@ -60,6 +68,10 @@ module Pubid::Iso
60
68
  (array_to_str(Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:type].values) | array_to_str(TYPES)).as(:type)
61
69
  end
62
70
 
71
+ rule(:staged_addenda) do
72
+ array_to_str(STAGED_ADDENDA)
73
+ end
74
+
63
75
  rule(:tctype) do
64
76
  # tc-types
65
77
  array_to_str(TCTYPES)
@@ -79,14 +91,14 @@ module Pubid::Iso
79
91
 
80
92
  rule(:year_digits) { (str("19") | str("20")) >> match('\d').repeat(2, 2) >> digits.absent? }
81
93
 
82
-
83
94
  rule(:part_matcher) do
84
95
  year_digits.absent? >>
85
- (str("Amd") | str("Cor")).absent? >> ((roman_numerals >> digits.absent?) | match['[\dA-Z]'].repeat(1)).as(:part)
96
+ supplements.absent? >>
97
+ staged_addenda.absent? >> ((roman_numerals >> digits.absent?) | match['[\dA-Z]'].repeat(1)).as(:part)
86
98
  end
87
99
 
88
100
  rule(:part) do
89
- (str("/") | str("-")) >> space? >> part_matcher >> (str("-") >> part_matcher).repeat
101
+ (str("/") | dash) >> space? >> part_matcher >> (dash >> part_matcher).repeat
90
102
  end
91
103
 
92
104
  rule(:organization) do
@@ -109,13 +121,19 @@ module Pubid::Iso
109
121
  (space | str(".")).repeat(1).maybe >>
110
122
  digits.as(:number).maybe >>
111
123
  (str(".") >> digits.as(:iteration)).maybe >>
112
- ((str(":") | str("-")) >> digits.as(:year)).maybe).repeat(1).as(:supplements)
124
+ ((str(":") | dash) >> digits.as(:year)).maybe).repeat(1).as(:supplements)
113
125
  end
114
126
 
115
127
  rule(:addendum) do
116
128
  (
117
- ((str("/") >> (str("Add") | str("ADD"))) | (str(" — Addendum"))) >> space >> digits.as(:number) >> ((str(":")) >> digits.as(:year)).maybe
118
- ).as(:addendum)
129
+ (((str("/") >> (str("Add") | str("ADD")).as(:type)) | (str(" — ") >> str("Addendum").as(:type))) |
130
+ (str("/") >> staged_addenda.as(:typed_stage))) >>
131
+ space >> digits.as(:number) >> ((str(":")) >> digits.as(:year)).maybe
132
+ ).repeat(1).as(:supplements)
133
+ end
134
+
135
+ rule(:extract) do
136
+ str("/") >> str("Ext") >> space >> (digits.as(:number) >> str(":") >> digits.as(:year)).as(:extract)
119
137
  end
120
138
 
121
139
  rule(:language) do
@@ -157,15 +175,16 @@ module Pubid::Iso
157
175
  end
158
176
 
159
177
  rule(:std_document_body) do
160
- (type | stage.as(:stage)).maybe >>
178
+ (type | (stage.as(:stage) >> digits.as(:iteration).maybe)).maybe >>
161
179
  # for ISO/IEC WD TS 25025
162
180
  space? >> ((stage.as(:stage) | typed_stage.as(:stage) | type) >> space).maybe >>
163
181
  digits.as(:number) >>
164
182
  # for identifiers like ISO 5537/IDF 26
165
183
  (str("|") >> (str("IDF").as(:publisher) >> space >> digits.as(:number)).as(:joint_document)).maybe >>
166
184
  part.maybe >> iteration.maybe >>
167
- (space? >> (str(":") | str("-")) >> year).maybe >>
185
+ (space? >> (str(":") | dash) >> year).maybe >>
168
186
  supplement.maybe >>
187
+ extract.maybe >>
169
188
  addendum.maybe >>
170
189
  edition.maybe >>
171
190
  language.maybe
@@ -0,0 +1,7 @@
1
+ require_relative "supplement"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Addendum < Supplement
5
+ TYPE = "Add".freeze
6
+ end
7
+ end
@@ -64,7 +64,7 @@ module Pubid::Iso::Renderer
64
64
  end
65
65
  [publisher, copublishers].join("/")
66
66
  when Array
67
- ([publisher] + copublishers.map(&:to_s).sort).map do |pub|
67
+ ([publisher] + copublishers.map(&:to_s)).map do |pub|
68
68
  if opts[:language]
69
69
  (TRANSLATION[opts[:language]][:publisher][pub] || pub).gsub('-', '/')
70
70
  else
@@ -156,8 +156,6 @@ module Pubid::Iso::Renderer
156
156
  end
157
157
 
158
158
  def render_part(part, opts, _params)
159
- return "-#{part.reverse.join('-')}" if part.is_a?(Array)
160
-
161
159
  "-#{part}"
162
160
  end
163
161
 
@@ -0,0 +1,9 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Extract < Supplement
5
+ def render_identifier(params, opts)
6
+ "/Ext%{number}%{year}" % params
7
+ end
8
+ end
9
+ end
@@ -2,7 +2,7 @@ require_relative "identifier/base"
2
2
  require_relative "renderer/base"
3
3
 
4
4
  module Pubid::Iso
5
- class Transformer < Parslet::Transform
5
+ class Transformer < Pubid::Core::Transformer
6
6
  rule(edition: "Ed") do
7
7
  { edition: "1" }
8
8
  end
@@ -29,7 +29,12 @@ module Pubid::Iso
29
29
  end
30
30
  )
31
31
  else
32
- supplement
32
+ case supplement[:type]
33
+ when "Addendum"
34
+ supplement.merge({ type: "Add" })
35
+ else
36
+ supplement
37
+ end
33
38
  end
34
39
  end
35
40
  context
@@ -91,6 +96,10 @@ module Pubid::Iso
91
96
  { publisher: russian_publisher&.to_s || publisher }
92
97
  end
93
98
 
99
+ rule(part: sequence(:part)) do
100
+ { part: part.map(&:to_s).join("-") }
101
+ end
102
+
94
103
  rule(joint_document: subtree(:joint_document)) do |context|
95
104
  context[:joint_document] =
96
105
  Identifier.create(**context[:joint_document])
@@ -103,36 +112,6 @@ module Pubid::Iso
103
112
  context.select { |k, v| k != :dir_joint_document }
104
113
  end
105
114
 
106
-
107
- rule(roman_numerals: simple(:roman_numerals)) do |context|
108
- roman_to_int(context[:roman_numerals])
109
- # case roman_numerals
110
- # when "III"
111
- # 3
112
- # else
113
- # nil
114
- # end
115
- end
116
-
117
- ROMAN_TO_INT = {
118
- "I" => 1,
119
- "V" => 5,
120
- "X" => 10,
121
- "L" => 50,
122
- "C" => 100,
123
- "D" => 500,
124
- "M" => 1000,
125
- }
126
-
127
- def self.roman_to_int(roman)
128
- sum = ROMAN_TO_INT[roman.to_s[0]]
129
- roman.to_s.chars.each_cons(2) do |c1, c2|
130
- sum += ROMAN_TO_INT[c2]
131
- sum -= ROMAN_TO_INT[c1] * 2 if ROMAN_TO_INT[c1] < ROMAN_TO_INT[c2]
132
- end
133
- sum
134
- end
135
-
136
115
  def self.convert_stage(code)
137
116
  russian_code = Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:stage].key(code.to_s)
138
117
  return { stage: russian_code } if russian_code
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Iso
3
- VERSION = "0.5.2".freeze
3
+ VERSION = "0.6.0".freeze
4
4
  end
5
5
  end
data/lib/pubid/iso.rb CHANGED
@@ -28,6 +28,8 @@ require_relative "iso/identifier/guide"
28
28
  require_relative "iso/identifier/recommendation"
29
29
  require_relative "iso/identifier/technology_trends_assessments"
30
30
  require_relative "iso/identifier/international_workshop_agreement"
31
+ require_relative "iso/identifier/extract"
32
+ require_relative "iso/identifier/addendum"
31
33
 
32
34
  config = Pubid::Core::Configuration.new
33
35
  config.stages = YAML.load_file(File.join(File.dirname(__FILE__), "../../stages.yaml"))
@@ -46,7 +48,9 @@ config.types = [Pubid::Iso::Identifier::InternationalStandard,
46
48
  Pubid::Iso::Identifier::TechnicalReport,
47
49
  Pubid::Iso::Identifier::TechnicalSpecification,
48
50
  Pubid::Iso::Identifier::TechnologyTrendsAssessments,
49
- Pubid::Iso::Identifier::Guide]
51
+ Pubid::Iso::Identifier::Guide,
52
+ Pubid::Iso::Identifier::Extract,
53
+ Pubid::Iso::Identifier::Addendum]
50
54
  config.type_names = { tr: {
51
55
  long: "Technical Report",
52
56
  short: "TR",
data/stages.yaml CHANGED
@@ -4,6 +4,7 @@ abbreviations:
4
4
  AWI: ["20.00", "10.99"]
5
5
  WD: ["20.20", "20.60", "20.98", "20.99"]
6
6
  CD: ["30.00", "30.20", "30.60", "30.92", "30.98", "30.99"]
7
+ FCD: ["40.00", "40.20", "40.60", "40.92", "40.98", "40.99"]
7
8
  PRF: ["50.00", "50.20", "50.60", "50.92", "50.98", "50.99"]
8
9
 
9
10
  names:
@@ -11,6 +12,7 @@ names:
11
12
  PWI: Preliminary Work Item
12
13
  NP: New Proposal
13
14
  CD: Committee Draft
15
+ FCD: Final Committee Draft
14
16
  PRF: Proof of a new
15
17
 
16
18
  codes_description:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubid-iso
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.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-03-31 00:00:00.000000000 Z
11
+ date: 2023-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -38,48 +38,6 @@ 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
@@ -100,14 +58,14 @@ dependencies:
100
58
  requirements:
101
59
  - - "~>"
102
60
  - !ruby/object:Gem::Version
103
- version: 1.8.0
61
+ version: 1.8.6
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: 1.8.0
68
+ version: 1.8.6
111
69
  description: Library to generate, parse and manipulate ISO PubID.
112
70
  email:
113
71
  - open.source@ribose.com
@@ -123,10 +81,12 @@ files:
123
81
  - lib/pubid/iso.rb
124
82
  - lib/pubid/iso/errors.rb
125
83
  - lib/pubid/iso/identifier.rb
84
+ - lib/pubid/iso/identifier/addendum.rb
126
85
  - lib/pubid/iso/identifier/amendment.rb
127
86
  - lib/pubid/iso/identifier/base.rb
128
87
  - lib/pubid/iso/identifier/corrigendum.rb
129
88
  - lib/pubid/iso/identifier/directives.rb
89
+ - lib/pubid/iso/identifier/extract.rb
130
90
  - lib/pubid/iso/identifier/guide.rb
131
91
  - lib/pubid/iso/identifier/international_standard.rb
132
92
  - lib/pubid/iso/identifier/international_standardized_profile.rb
@@ -139,10 +99,12 @@ files:
139
99
  - lib/pubid/iso/identifier/technical_specification.rb
140
100
  - lib/pubid/iso/identifier/technology_trends_assessments.rb
141
101
  - lib/pubid/iso/parser.rb
102
+ - lib/pubid/iso/renderer/addendum.rb
142
103
  - lib/pubid/iso/renderer/amendment.rb
143
104
  - lib/pubid/iso/renderer/base.rb
144
105
  - lib/pubid/iso/renderer/corrigendum.rb
145
106
  - lib/pubid/iso/renderer/dir.rb
107
+ - lib/pubid/iso/renderer/extract.rb
146
108
  - lib/pubid/iso/renderer/guide.rb
147
109
  - lib/pubid/iso/renderer/international_standard.rb
148
110
  - lib/pubid/iso/renderer/international_standardized_profile.rb