pubid 2.0.20 → 2.0.22

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +73 -31
  3. data/data/iec/legacy-notation.md +298 -0
  4. data/data/iho/s4-reserved-specs.yaml +15 -0
  5. data/data/iso/historic-schemes.md +368 -0
  6. data/data/parg/bipm.json +1 -1
  7. data/data/parg/bipm.parg +46 -11
  8. data/data/parg/iec.json +1 -1
  9. data/data/parg/iho.json +1 -1
  10. data/data/parg/iho.parg +128 -11
  11. data/data/parg/iso.json +1 -1
  12. data/data/parg/iso.parg +142 -2
  13. data/data/parg/plateau.json +1 -1
  14. data/data/parg/tables/iec_typed_stages.yaml +3 -0
  15. data/data/parg/tables/typed_stages_ballots.yaml +6 -0
  16. data/data/parg/tables/typed_stages_supplements.yaml +1 -0
  17. data/lib/pubid/bipm/CLAUDE.md +6 -1
  18. data/lib/pubid/bipm/builder.rb +20 -1
  19. data/lib/pubid/bipm/renderer.rb +14 -2
  20. data/lib/pubid/bipm/urn_generator.rb +80 -14
  21. data/lib/pubid/bipm/urn_parser.rb +70 -6
  22. data/lib/pubid/ecma/CLAUDE.md +12 -0
  23. data/lib/pubid/ecma/identifier.rb +1 -2
  24. data/lib/pubid/ecma/parser.rb +49 -0
  25. data/lib/pubid/iec/CLAUDE.md +9 -1
  26. data/lib/pubid/iec/builder.rb +47 -0
  27. data/lib/pubid/iec/identifier.rb +19 -70
  28. data/lib/pubid/iec/identifiers/amendment.rb +34 -0
  29. data/lib/pubid/iec/identifiers/corrigendum.rb +6 -1
  30. data/lib/pubid/iec/identifiers/fragment_identifier.rb +3 -3
  31. data/lib/pubid/iec/single_identifier.rb +69 -4
  32. data/lib/pubid/iec/supplement_identifier.rb +89 -83
  33. data/lib/pubid/iho/CLAUDE.md +54 -1
  34. data/lib/pubid/iho/builder.rb +105 -2
  35. data/lib/pubid/iho/identifiers/base.rb +52 -1
  36. data/lib/pubid/iho/pubid_urn_schema.rb +12 -4
  37. data/lib/pubid/iho/renderer.rb +39 -2
  38. data/lib/pubid/iho/reserved_specs.rb +54 -0
  39. data/lib/pubid/iho/urn_generator.rb +6 -0
  40. data/lib/pubid/iho/urn_parser.rb +50 -9
  41. data/lib/pubid/iho.rb +1 -0
  42. data/lib/pubid/iso/CLAUDE.md +49 -0
  43. data/lib/pubid/iso/builder.rb +77 -0
  44. data/lib/pubid/iso/identifiers/amendment.rb +1 -1
  45. data/lib/pubid/iso/single_identifier.rb +7 -1
  46. data/lib/pubid/nist/CLAUDE.md +49 -0
  47. data/lib/pubid/nist/builder.rb +5 -0
  48. data/lib/pubid/nist/identifiers/base.rb +42 -1
  49. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +44 -5
  50. data/lib/pubid/nist/preprocessor.rb +18 -0
  51. data/lib/pubid/nist/urn_parser.rb +1 -1
  52. data/lib/pubid/plateau/CLAUDE.md +35 -0
  53. data/lib/pubid/plateau/builder.rb +4 -0
  54. data/lib/pubid/plateau/identifiers/handbook.rb +10 -2
  55. data/lib/pubid/plateau/pubid_urn_schema.rb +1 -0
  56. data/lib/pubid/plateau/renderer.rb +6 -1
  57. data/lib/pubid/sae/CLAUDE.md +11 -2
  58. data/lib/pubid/version.rb +1 -1
  59. metadata +7 -2
@@ -4,10 +4,18 @@ module Pubid
4
4
  module Plateau
5
5
  module Identifiers
6
6
  # PLATEAU Handbook
7
- # Format: PLATEAU Handbook #NN[-annex] [第X.Y版]
7
+ # Format: PLATEAU Handbook #NN[-annex] [第X.Y版[ volume]]
8
8
  # Example: PLATEAU Handbook #00 第1.0版
9
+ # Example: PLATEAU Handbook #00 第5.0版 本編+付録
9
10
  class Handbook < Identifier
10
11
  attribute :edition, :string, default: -> {}
12
+ # The volume label MLIT prints after the edition: "本編" (the main
13
+ # volume alone) or "本編+付録" (main volume and appendix, one PDF).
14
+ attribute :volume, :string, default: -> {}
15
+
16
+ # A nil `volume` means the publication has no volume label:
17
+ # `#00 第5.0版` does not subsume `#00 第5.0版 本編+付録`.
18
+ subset_strict :volume
11
19
 
12
20
  def type_string
13
21
  "Handbook"
@@ -20,7 +28,7 @@ module Pubid
20
28
  def ==(other)
21
29
  return false unless other.is_a?(Handbook)
22
30
 
23
- super && edition == other.edition
31
+ super && edition == other.edition && volume == other.volume
24
32
  end
25
33
  end
26
34
  end
@@ -13,6 +13,7 @@ module Pubid
13
13
  atom "publisher", "pub"
14
14
  atom "edition", "ed"
15
15
  atom "annex", "annex", kind: :int
16
+ atom "volume", "vol"
16
17
 
17
18
  number = [["number", :int]]
18
19
  type "pubid:plateau:annex", "annex", core: [],
@@ -39,7 +39,12 @@ module Pubid
39
39
 
40
40
  def render_handbook(id)
41
41
  result = "#{id.publisher} #{id.type_string} #{id.formatted_number}#{id.formatted_annex}"
42
- result += " #{id.formatted_edition}" if id.edition
42
+ return result unless id.edition
43
+
44
+ # The grammar reads a volume label only after an edition, so a
45
+ # volume without one (e.g. after exclude(:edition)) is not printed.
46
+ result += " #{id.formatted_edition}"
47
+ result += " #{id.volume}" if id.volume
43
48
  result
44
49
  end
45
50
 
@@ -12,8 +12,17 @@ Measured on the full deposit list (2026-11-04, 47,692 DOIs): **46,726
12
12
  parse**, and every parsed code round-trips through `to_s`, `from_hash` and
13
13
  the URN, with **0 `to_hash` collisions**. The 966 that do not parse are:
14
14
 
15
- - **791 CP\*** (`CPGM`, `CPFD`, `CPKW`, …): collected-paper products, not
16
- standards. Out of scope by decision.
15
+ - **791 CP\*** (`CPGM`, `CPFD`, `CPKW`, …): SAE "Certified Power" data
16
+ products — engine power/torque data certified under SAE J1349, one per
17
+ vehicle and level (`CPGM2_15LFXCOCA`: "J1349 Certified Power Engine Data
18
+ for GM as used in 2015 LFX Colorado/Canyon - Level 2"). The letters after
19
+ `CP` name the manufacturer (`GM`, `FD` Ford, `FC` FCA, …). They are data
20
+ products, not standards, and stay out of `TYPES` by decision (pubid#686).
21
+ `SAE CPGM2016` in pubid#686 is not a deposit: it is the synthetic DOI of
22
+ relaton's "reports a record pubid cannot parse" spec
23
+ (`spec/sae/relaton/sae/data_fetcher_spec.rb`), which, with
24
+ `bibliography_spec.rb` and `docs/sae.md`, relies on it failing to parse.
25
+ `spec/pubid/sae/crossref_coverage_spec.rb` pins the rejection.
17
26
  - **175 one-offs**, none more than 32 of a kind: `SUP1` supplements
18
27
  (`AS4468SUP1A`, `ARP4737SUP1`), language tails (`AS9101F_PTBR`,
19
28
  `IA9137_DEDE`), `J2534-2/10_5_00`, `_4Q2012`, type-less `SAE6857`,
data/lib/pubid/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pubid
4
- VERSION = "2.0.20"
4
+ VERSION = "2.0.22"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubid
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.20
4
+ version: 2.0.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-11-10 00:00:00.000000000 Z
11
+ date: 2026-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lutaml-model
@@ -68,9 +68,12 @@ files:
68
68
  - conformance/pending.yaml
69
69
  - data/bipm/update_codes.yaml
70
70
  - data/ccsds/update_codes.yaml
71
+ - data/iec/legacy-notation.md
71
72
  - data/iec/stage-codes.md
72
73
  - data/iec/update_codes.yaml
73
74
  - data/ieee/update_codes.yaml
75
+ - data/iho/s4-reserved-specs.yaml
76
+ - data/iso/historic-schemes.md
74
77
  - data/iso/update_codes.yaml
75
78
  - data/nist/series.yaml
76
79
  - data/nist/stages.yaml
@@ -141,6 +144,7 @@ files:
141
144
  - data/parg/tables/organizations.yaml
142
145
  - data/parg/tables/tc_types.yaml
143
146
  - data/parg/tables/typed_stages.yaml
147
+ - data/parg/tables/typed_stages_ballots.yaml
144
148
  - data/parg/tables/typed_stages_supplements.yaml
145
149
  - data/parg/tables/wg_types.yaml
146
150
  - data/parg/tgpp.json
@@ -733,6 +737,7 @@ files:
733
737
  - lib/pubid/iho/identifiers/standard.rb
734
738
  - lib/pubid/iho/pubid_urn_schema.rb
735
739
  - lib/pubid/iho/renderer.rb
740
+ - lib/pubid/iho/reserved_specs.rb
736
741
  - lib/pubid/iho/urn_generator.rb
737
742
  - lib/pubid/iho/urn_parser.rb
738
743
  - lib/pubid/isbn.rb