pubid 2.0.0.alpha.10 → 2.0.0.pre.alpha.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.
Files changed (811) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +51 -54
  3. data/data/iec/update_codes.yaml +0 -3
  4. data/data/ieee/update_codes.yaml +1 -107
  5. data/data/nist/update_codes.yaml +0 -35
  6. data/lib/pubid/amca/builder.rb +6 -6
  7. data/lib/pubid/amca/identifier.rb +16 -2
  8. data/lib/pubid/amca/identifiers/base.rb +46 -74
  9. data/lib/pubid/amca/identifiers/interpretation.rb +30 -17
  10. data/lib/pubid/amca/identifiers/publication.rb +27 -14
  11. data/lib/pubid/amca/identifiers/standard.rb +5 -3
  12. data/lib/pubid/amca/identifiers.rb +1 -0
  13. data/lib/pubid/amca/parser.rb +1 -1
  14. data/lib/pubid/amca/scheme.rb +16 -0
  15. data/lib/pubid/amca/single_identifier.rb +24 -1
  16. data/lib/pubid/amca/urn_generator.rb +3 -4
  17. data/lib/pubid/amca.rb +3 -50
  18. data/lib/pubid/ansi/builder.rb +5 -7
  19. data/lib/pubid/ansi/identifier.rb +1 -19
  20. data/lib/pubid/ansi/identifiers/american_national_standard.rb +1 -2
  21. data/lib/pubid/ansi/identifiers/standard.rb +3 -2
  22. data/lib/pubid/ansi/parser.rb +1 -1
  23. data/lib/pubid/ansi/scheme.rb +15 -0
  24. data/lib/pubid/ansi/single_identifier.rb +31 -2
  25. data/lib/pubid/ansi/urn_generator.rb +38 -3
  26. data/lib/pubid/ansi.rb +6 -47
  27. data/lib/pubid/api/builder.rb +72 -45
  28. data/lib/pubid/api/identifier.rb +9 -30
  29. data/lib/pubid/api/identifiers/base.rb +14 -2
  30. data/lib/pubid/api/identifiers/bulletin.rb +2 -0
  31. data/lib/pubid/api/identifiers/continuous_operations_standard.rb +2 -0
  32. data/lib/pubid/api/identifiers/mpms.rb +28 -10
  33. data/lib/pubid/api/identifiers/publication.rb +2 -0
  34. data/lib/pubid/api/identifiers/recommended_practice.rb +2 -0
  35. data/lib/pubid/api/identifiers/specification.rb +2 -0
  36. data/lib/pubid/api/identifiers/standard.rb +2 -0
  37. data/lib/pubid/api/identifiers/technical_report.rb +2 -0
  38. data/lib/pubid/api/identifiers/typeless_standard.rb +16 -0
  39. data/lib/pubid/api/parser.rb +1 -1
  40. data/lib/pubid/api/scheme.rb +66 -0
  41. data/lib/pubid/api/single_identifier.rb +32 -10
  42. data/lib/pubid/api/urn_generator.rb +18 -0
  43. data/lib/pubid/api.rb +5 -56
  44. data/lib/pubid/ashrae/builder.rb +35 -56
  45. data/lib/pubid/ashrae/identifier.rb +16 -6
  46. data/lib/pubid/ashrae/identifiers/addenda_package.rb +11 -7
  47. data/lib/pubid/ashrae/identifiers/addendum.rb +20 -9
  48. data/lib/pubid/ashrae/identifiers/base.rb +15 -111
  49. data/lib/pubid/ashrae/identifiers/combined_addenda.rb +16 -8
  50. data/lib/pubid/ashrae/identifiers/errata.rb +10 -9
  51. data/lib/pubid/ashrae/identifiers/guideline.rb +0 -3
  52. data/lib/pubid/ashrae/identifiers/interpretation.rb +10 -16
  53. data/lib/pubid/ashrae/identifiers/standard.rb +0 -3
  54. data/lib/pubid/ashrae/identifiers.rb +1 -0
  55. data/lib/pubid/ashrae/parser.rb +16 -40
  56. data/lib/pubid/ashrae/scheme.rb +53 -0
  57. data/lib/pubid/ashrae/single_identifier.rb +14 -1
  58. data/lib/pubid/ashrae/supplement_identifier.rb +6 -21
  59. data/lib/pubid/ashrae/urn_generator.rb +10 -8
  60. data/lib/pubid/ashrae.rb +2 -58
  61. data/lib/pubid/asme/builder.rb +2 -11
  62. data/lib/pubid/asme/components/code.rb +2 -10
  63. data/lib/pubid/asme/identifier.rb +0 -9
  64. data/lib/pubid/asme/identifiers/base.rb +60 -0
  65. data/lib/pubid/asme/identifiers/standard.rb +2 -86
  66. data/lib/pubid/asme/parser.rb +1 -1
  67. data/lib/pubid/asme/scheme.rb +37 -0
  68. data/lib/pubid/asme/single_identifier.rb +2 -11
  69. data/lib/pubid/asme/urn_generator.rb +2 -2
  70. data/lib/pubid/asme.rb +1 -47
  71. data/lib/pubid/astm/builder.rb +3 -10
  72. data/lib/pubid/astm/components/code.rb +0 -9
  73. data/lib/pubid/astm/identifier.rb +0 -9
  74. data/lib/pubid/astm/identifiers/adjunct.rb +9 -16
  75. data/lib/pubid/astm/identifiers/data_series.rb +14 -2
  76. data/lib/pubid/astm/identifiers/iso_dual_published.rb +34 -25
  77. data/lib/pubid/astm/identifiers/manual.rb +25 -8
  78. data/lib/pubid/astm/identifiers/monograph.rb +14 -2
  79. data/lib/pubid/astm/identifiers/research_report.rb +5 -8
  80. data/lib/pubid/astm/identifiers/standard.rb +37 -8
  81. data/lib/pubid/astm/identifiers/technical_report.rb +13 -2
  82. data/lib/pubid/astm/identifiers/work_in_progress.rb +10 -1
  83. data/lib/pubid/astm/parser.rb +1 -1
  84. data/lib/pubid/astm/scheme.rb +55 -0
  85. data/lib/pubid/astm/single_identifier.rb +10 -32
  86. data/lib/pubid/astm/urn_generator.rb +5 -7
  87. data/lib/pubid/astm.rb +27 -44
  88. data/lib/pubid/bsi/builder.rb +107 -119
  89. data/lib/pubid/bsi/identifier.rb +25 -4
  90. data/lib/pubid/bsi/identifiers/addendum_document.rb +37 -3
  91. data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +47 -19
  92. data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +39 -8
  93. data/lib/pubid/bsi/identifiers/aerospace_standard.rb +55 -2
  94. data/lib/pubid/bsi/identifiers/amendment.rb +22 -30
  95. data/lib/pubid/bsi/identifiers/base.rb +11 -0
  96. data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +7 -1
  97. data/lib/pubid/bsi/identifiers/british_standard.rb +1 -2
  98. data/lib/pubid/bsi/identifiers/bundled_identifier.rb +87 -13
  99. data/lib/pubid/bsi/identifiers/committee_document.rb +17 -10
  100. data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +87 -19
  101. data/lib/pubid/bsi/identifiers/corrigendum.rb +10 -26
  102. data/lib/pubid/bsi/identifiers/detailed_specification.rb +36 -0
  103. data/lib/pubid/bsi/identifiers/disc.rb +29 -0
  104. data/lib/pubid/bsi/identifiers/draft_document.rb +46 -2
  105. data/lib/pubid/bsi/identifiers/electronic_book.rb +38 -2
  106. data/lib/pubid/bsi/identifiers/expert_commentary.rb +21 -10
  107. data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +47 -0
  108. data/lib/pubid/bsi/identifiers/flex.rb +34 -3
  109. data/lib/pubid/bsi/identifiers/handbook.rb +17 -1
  110. data/lib/pubid/bsi/identifiers/index.rb +32 -0
  111. data/lib/pubid/bsi/identifiers/method.rb +41 -0
  112. data/lib/pubid/bsi/identifiers/national_annex.rb +29 -4
  113. data/lib/pubid/bsi/identifiers/practice_guide.rb +7 -1
  114. data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +54 -2
  115. data/lib/pubid/bsi/identifiers/published_document.rb +54 -2
  116. data/lib/pubid/bsi/identifiers/section.rb +30 -0
  117. data/lib/pubid/bsi/identifiers/set.rb +20 -14
  118. data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -10
  119. data/lib/pubid/bsi/identifiers/supplement_document.rb +25 -3
  120. data/lib/pubid/bsi/identifiers/supplementary_index.rb +46 -0
  121. data/lib/pubid/bsi/identifiers/technical_specification.rb +47 -2
  122. data/lib/pubid/bsi/identifiers/test_method.rb +32 -0
  123. data/lib/pubid/bsi/identifiers/value_added_publication.rb +22 -7
  124. data/lib/pubid/bsi/identifiers.rb +1 -0
  125. data/lib/pubid/bsi/parser.rb +6 -20
  126. data/lib/pubid/bsi/scheme.rb +243 -0
  127. data/lib/pubid/bsi/single_identifier.rb +82 -94
  128. data/lib/pubid/bsi/urn_generator.rb +5 -13
  129. data/lib/pubid/bsi.rb +2 -252
  130. data/lib/pubid/builder/base.rb +13 -62
  131. data/lib/pubid/bundled_identifier.rb +10 -18
  132. data/lib/pubid/ccsds/builder.rb +4 -5
  133. data/lib/pubid/ccsds/identifier.rb +3 -63
  134. data/lib/pubid/ccsds/identifiers/base.rb +51 -14
  135. data/lib/pubid/ccsds/identifiers/corrigendum.rb +8 -9
  136. data/lib/pubid/ccsds/parser.rb +3 -5
  137. data/lib/pubid/ccsds/scheme.rb +57 -0
  138. data/lib/pubid/ccsds/single_identifier.rb +3 -6
  139. data/lib/pubid/ccsds/supplement_identifier.rb +13 -17
  140. data/lib/pubid/ccsds/urn_generator.rb +6 -6
  141. data/lib/pubid/ccsds.rb +1 -44
  142. data/lib/pubid/cen_cenelec/builder.rb +29 -61
  143. data/lib/pubid/cen_cenelec/identifier.rb +5 -28
  144. data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +4 -9
  145. data/lib/pubid/cen_cenelec/identifiers/amendment.rb +12 -2
  146. data/lib/pubid/cen_cenelec/identifiers/base.rb +46 -5
  147. data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -2
  148. data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -2
  149. data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +27 -6
  150. data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +17 -2
  151. data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +4 -62
  152. data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +7 -20
  153. data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -2
  154. data/lib/pubid/cen_cenelec/identifiers/fragment.rb +6 -2
  155. data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -2
  156. data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -2
  157. data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -2
  158. data/lib/pubid/cen_cenelec/parser.rb +1 -1
  159. data/lib/pubid/cen_cenelec/scheme.rb +164 -0
  160. data/lib/pubid/cen_cenelec/single_identifier.rb +91 -10
  161. data/lib/pubid/cen_cenelec/supplement_identifier.rb +7 -6
  162. data/lib/pubid/cen_cenelec/urn_generator.rb +7 -7
  163. data/lib/pubid/cen_cenelec.rb +1 -188
  164. data/lib/pubid/cie/builder.rb +24 -149
  165. data/lib/pubid/cie/components/code.rb +72 -0
  166. data/lib/pubid/cie/identifier.rb +5 -20
  167. data/lib/pubid/cie/identifiers/bundle.rb +5 -35
  168. data/lib/pubid/cie/identifiers/conference.rb +6 -11
  169. data/lib/pubid/cie/identifiers/corrigendum.rb +23 -17
  170. data/lib/pubid/cie/identifiers/dual_published.rb +6 -6
  171. data/lib/pubid/cie/identifiers/identical.rb +9 -9
  172. data/lib/pubid/cie/identifiers/joint_published.rb +10 -10
  173. data/lib/pubid/cie/identifiers/standard.rb +8 -43
  174. data/lib/pubid/cie/identifiers/supplement.rb +25 -27
  175. data/lib/pubid/cie/identifiers/tutorial_bundle.rb +3 -7
  176. data/lib/pubid/cie/identifiers.rb +0 -2
  177. data/lib/pubid/cie/parser.rb +6 -55
  178. data/lib/pubid/cie/scheme.rb +64 -0
  179. data/lib/pubid/cie/single_identifier.rb +5 -44
  180. data/lib/pubid/cie/supplement_identifier.rb +16 -29
  181. data/lib/pubid/cie/urn_generator.rb +8 -11
  182. data/lib/pubid/cie.rb +2 -57
  183. data/lib/pubid/components/code.rb +8 -22
  184. data/lib/pubid/components/date.rb +18 -41
  185. data/lib/pubid/components/edition.rb +6 -9
  186. data/lib/pubid/components/language.rb +4 -6
  187. data/lib/pubid/components/locality.rb +1 -10
  188. data/lib/pubid/components/publisher.rb +6 -9
  189. data/lib/pubid/components/stage.rb +14 -5
  190. data/lib/pubid/components/type.rb +15 -5
  191. data/lib/pubid/components/typed_stage.rb +8 -11
  192. data/lib/pubid/components.rb +0 -4
  193. data/lib/pubid/core/update_codes.rb +7 -28
  194. data/lib/pubid/csa/builder.rb +48 -48
  195. data/lib/pubid/csa/composite_identifier.rb +7 -18
  196. data/lib/pubid/csa/identifier.rb +78 -191
  197. data/lib/pubid/csa/identifiers/base.rb +123 -0
  198. data/lib/pubid/csa/identifiers/bundled.rb +9 -25
  199. data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
  200. data/lib/pubid/csa/identifiers/cec.rb +103 -40
  201. data/lib/pubid/csa/identifiers/combined.rb +69 -97
  202. data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
  203. data/lib/pubid/csa/identifiers/package.rb +4 -4
  204. data/lib/pubid/csa/identifiers/series.rb +104 -0
  205. data/lib/pubid/csa/parser.rb +8 -12
  206. data/lib/pubid/csa/scheme.rb +44 -0
  207. data/lib/pubid/csa/single_identifier.rb +5 -94
  208. data/lib/pubid/csa/urn_generator.rb +2 -9
  209. data/lib/pubid/csa/wrapper_identifier.rb +10 -43
  210. data/lib/pubid/csa.rb +1 -56
  211. data/lib/pubid/etsi/builder.rb +4 -13
  212. data/lib/pubid/etsi/components/code.rb +9 -10
  213. data/lib/pubid/etsi/components/version.rb +5 -0
  214. data/lib/pubid/etsi/identifier.rb +12 -2
  215. data/lib/pubid/etsi/identifiers/base.rb +24 -60
  216. data/lib/pubid/etsi/identifiers/etsi_standard.rb +4 -207
  217. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +14 -46
  218. data/lib/pubid/etsi/identifiers.rb +1 -0
  219. data/lib/pubid/etsi/parser.rb +3 -9
  220. data/lib/pubid/etsi/scheme.rb +42 -0
  221. data/lib/pubid/etsi.rb +2 -52
  222. data/lib/pubid/export/data_class_exporter.rb +59 -0
  223. data/lib/pubid/export/exporter.rb +47 -6
  224. data/lib/pubid/export/flavor_exporter.rb +276 -124
  225. data/lib/pubid/export/ieee_exporter.rb +78 -0
  226. data/lib/pubid/export/itu_exporter.rb +66 -0
  227. data/lib/pubid/export/nist_exporter.rb +64 -0
  228. data/lib/pubid/export/registry_exporter.rb +90 -0
  229. data/lib/pubid/export/scheme_exporter.rb +70 -0
  230. data/lib/pubid/export.rb +6 -0
  231. data/lib/pubid/identifier.rb +37 -920
  232. data/lib/pubid/identifier_metadata.rb +1 -1
  233. data/lib/pubid/identifier_registry.rb +198 -0
  234. data/lib/pubid/idf/builder.rb +7 -7
  235. data/lib/pubid/idf/identifier.rb +13 -23
  236. data/lib/pubid/idf/identifiers/amendment.rb +1 -2
  237. data/lib/pubid/idf/identifiers/corrigendum.rb +1 -2
  238. data/lib/pubid/idf/identifiers/international_standard.rb +1 -2
  239. data/lib/pubid/idf/identifiers/reviewed_method.rb +1 -2
  240. data/lib/pubid/idf/parser.rb +5 -6
  241. data/lib/pubid/idf/scheme.rb +61 -0
  242. data/lib/pubid/idf/supplement_identifier.rb +13 -5
  243. data/lib/pubid/idf/urn_generator.rb +39 -4
  244. data/lib/pubid/idf.rb +1 -65
  245. data/lib/pubid/iec/builder.rb +91 -92
  246. data/lib/pubid/iec/components/code.rb +32 -9
  247. data/lib/pubid/iec/components/publisher.rb +1 -1
  248. data/lib/pubid/iec/identifier.rb +8 -328
  249. data/lib/pubid/iec/identifiers/amendment.rb +5 -8
  250. data/lib/pubid/iec/identifiers/base.rb +31 -7
  251. data/lib/pubid/iec/identifiers/component_specification.rb +13 -3
  252. data/lib/pubid/iec/identifiers/conformity_assessment.rb +12 -1
  253. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +30 -29
  254. data/lib/pubid/iec/identifiers/corrigendum.rb +5 -4
  255. data/lib/pubid/iec/identifiers/fragment_identifier.rb +36 -43
  256. data/lib/pubid/iec/identifiers/guide.rb +18 -0
  257. data/lib/pubid/iec/identifiers/international_standard.rb +9 -24
  258. data/lib/pubid/iec/identifiers/interpretation_sheet.rb +3 -2
  259. data/lib/pubid/iec/identifiers/operational_document.rb +13 -3
  260. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +15 -2
  261. data/lib/pubid/iec/identifiers/sheet_identifier.rb +24 -26
  262. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +13 -3
  263. data/lib/pubid/iec/identifiers/systems_reference_document.rb +13 -2
  264. data/lib/pubid/iec/identifiers/technical_report.rb +21 -3
  265. data/lib/pubid/iec/identifiers/technical_specification.rb +21 -3
  266. data/lib/pubid/iec/identifiers/technology_report.rb +12 -1
  267. data/lib/pubid/iec/identifiers/test_report_form.rb +46 -3
  268. data/lib/pubid/iec/identifiers/vap_identifier.rb +34 -33
  269. data/lib/pubid/iec/identifiers/white_paper.rb +13 -3
  270. data/lib/pubid/iec/identifiers/working_document.rb +60 -26
  271. data/lib/pubid/iec/parser.rb +42 -73
  272. data/lib/pubid/iec/scheme.rb +71 -0
  273. data/lib/pubid/iec/single_identifier.rb +23 -15
  274. data/lib/pubid/iec/supplement_identifier.rb +67 -84
  275. data/lib/pubid/iec/urn_generator.rb +143 -195
  276. data/lib/pubid/iec/urn_parser.rb +246 -85
  277. data/lib/pubid/iec.rb +66 -45
  278. data/lib/pubid/ieee/aiee/builder.rb +3 -17
  279. data/lib/pubid/ieee/aiee/identifier.rb +62 -46
  280. data/lib/pubid/ieee/aiee/parser.rb +1 -1
  281. data/lib/pubid/ieee/builder.rb +81 -398
  282. data/lib/pubid/ieee/components/code.rb +0 -8
  283. data/lib/pubid/ieee/components/draft.rb +0 -54
  284. data/lib/pubid/ieee/components/relationship.rb +149 -5
  285. data/lib/pubid/ieee/identifier.rb +11 -3
  286. data/lib/pubid/ieee/identifiers/adopted_standard.rb +14 -62
  287. data/lib/pubid/ieee/identifiers/base.rb +547 -340
  288. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +12 -6
  289. data/lib/pubid/ieee/identifiers/corrigendum.rb +12 -15
  290. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +13 -24
  291. data/lib/pubid/ieee/identifiers/dual_identifier.rb +7 -3
  292. data/lib/pubid/ieee/identifiers/dual_published.rb +7 -58
  293. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +11 -99
  294. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +11 -25
  295. data/lib/pubid/ieee/identifiers/joint_development.rb +15 -66
  296. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +24 -58
  297. data/lib/pubid/ieee/identifiers/nesc/base.rb +19 -90
  298. data/lib/pubid/ieee/identifiers/nesc/draft.rb +5 -20
  299. data/lib/pubid/ieee/identifiers/nesc/handbook.rb +5 -16
  300. data/lib/pubid/ieee/identifiers/nesc/redline.rb +2 -11
  301. data/lib/pubid/ieee/identifiers/nesc/standard.rb +3 -18
  302. data/lib/pubid/ieee/identifiers/nesc.rb +0 -1
  303. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +9 -3
  304. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +6 -29
  305. data/lib/pubid/ieee/identifiers/redlined_standard.rb +11 -4
  306. data/lib/pubid/ieee/identifiers/si_standard.rb +39 -4
  307. data/lib/pubid/ieee/identifiers/standard.rb +2 -5
  308. data/lib/pubid/ieee/identifiers/supplement_identifier.rb +7 -26
  309. data/lib/pubid/ieee/identifiers.rb +1 -2
  310. data/lib/pubid/ieee/ire/builder.rb +6 -7
  311. data/lib/pubid/ieee/ire/identifier.rb +33 -48
  312. data/lib/pubid/ieee/ire/parser.rb +1 -1
  313. data/lib/pubid/ieee/nesc/builder.rb +20 -33
  314. data/lib/pubid/ieee/nesc/parser.rb +15 -16
  315. data/lib/pubid/ieee/parser.rb +44 -462
  316. data/lib/pubid/ieee/scheme.rb +90 -0
  317. data/lib/pubid/ieee/typed_stages.rb +1 -12
  318. data/lib/pubid/ieee/urn_generator.rb +8 -35
  319. data/lib/pubid/ieee.rb +2 -133
  320. data/lib/pubid/ieee_debug.rb +1 -0
  321. data/lib/pubid/iho/builder.rb +2 -2
  322. data/lib/pubid/iho/identifier.rb +17 -5
  323. data/lib/pubid/iho/identifiers/base.rb +30 -64
  324. data/lib/pubid/iho/identifiers/bibliographic.rb +5 -1
  325. data/lib/pubid/iho/identifiers/circular_letter.rb +5 -1
  326. data/lib/pubid/iho/identifiers/miscellaneous.rb +5 -1
  327. data/lib/pubid/iho/identifiers/publication.rb +5 -1
  328. data/lib/pubid/iho/identifiers/standard.rb +5 -1
  329. data/lib/pubid/iho/identifiers.rb +1 -0
  330. data/lib/pubid/iho/parser.rb +4 -4
  331. data/lib/pubid/iho/scheme.rb +29 -0
  332. data/lib/pubid/iho/urn_generator.rb +3 -3
  333. data/lib/pubid/iho.rb +3 -59
  334. data/lib/pubid/iso/builder.rb +57 -68
  335. data/lib/pubid/iso/bundled_identifier.rb +3 -56
  336. data/lib/pubid/iso/combined_identifier.rb +4 -6
  337. data/lib/pubid/iso/components/code.rb +19 -7
  338. data/lib/pubid/iso/components/publisher.rb +8 -10
  339. data/lib/pubid/iso/components.rb +4 -2
  340. data/lib/pubid/iso/identifier.rb +11 -260
  341. data/lib/pubid/iso/identifiers/addendum.rb +6 -9
  342. data/lib/pubid/iso/identifiers/amendment.rb +4 -8
  343. data/lib/pubid/iso/identifiers/base.rb +115 -0
  344. data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
  345. data/lib/pubid/iso/identifiers/data.rb +1 -0
  346. data/lib/pubid/iso/identifiers/directives.rb +2 -8
  347. data/lib/pubid/iso/identifiers/directives_supplement.rb +26 -55
  348. data/lib/pubid/iso/identifiers/extract.rb +2 -2
  349. data/lib/pubid/iso/identifiers/guide.rb +1 -0
  350. data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
  351. data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
  352. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +4 -10
  353. data/lib/pubid/iso/identifiers/pas.rb +2 -2
  354. data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
  355. data/lib/pubid/iso/identifiers/supplement.rb +3 -11
  356. data/lib/pubid/iso/identifiers/tc_document.rb +15 -44
  357. data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
  358. data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
  359. data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
  360. data/lib/pubid/iso/identifiers.rb +1 -0
  361. data/lib/pubid/iso/parser.rb +19 -43
  362. data/lib/pubid/iso/scheme.rb +187 -0
  363. data/lib/pubid/iso/single_identifier.rb +7 -6
  364. data/lib/pubid/iso/supplement_identifier.rb +3 -29
  365. data/lib/pubid/iso/urn_generator.rb +177 -78
  366. data/lib/pubid/iso/urn_parser.rb +10 -29
  367. data/lib/pubid/iso.rb +2 -188
  368. data/lib/pubid/itu/builder.rb +41 -230
  369. data/lib/pubid/itu/components/code.rb +12 -57
  370. data/lib/pubid/itu/components/sector.rb +4 -15
  371. data/lib/pubid/itu/components/series.rb +4 -0
  372. data/lib/pubid/itu/identifier.rb +51 -2
  373. data/lib/pubid/itu/identifiers/amendment.rb +31 -7
  374. data/lib/pubid/itu/identifiers/annex.rb +4 -13
  375. data/lib/pubid/itu/identifiers/base.rb +128 -456
  376. data/lib/pubid/itu/identifiers/combined_identifier.rb +25 -99
  377. data/lib/pubid/itu/identifiers/corrigendum.rb +25 -16
  378. data/lib/pubid/itu/identifiers/recommendation.rb +4 -3
  379. data/lib/pubid/itu/identifiers/special_publication.rb +3 -3
  380. data/lib/pubid/itu/identifiers/supplement.rb +16 -119
  381. data/lib/pubid/itu/identifiers.rb +1 -10
  382. data/lib/pubid/itu/model.rb +1 -1
  383. data/lib/pubid/itu/parser.rb +27 -481
  384. data/lib/pubid/itu/scheme.rb +174 -0
  385. data/lib/pubid/itu/urn_generator.rb +6 -36
  386. data/lib/pubid/itu.rb +2 -58
  387. data/lib/pubid/jcgm/builder.rb +19 -37
  388. data/lib/pubid/jcgm/identifier.rb +0 -10
  389. data/lib/pubid/jcgm/identifiers/amendment.rb +11 -0
  390. data/lib/pubid/jcgm/identifiers/gum_guide.rb +15 -3
  391. data/lib/pubid/jcgm/identifiers.rb +0 -2
  392. data/lib/pubid/jcgm/parser.rb +7 -74
  393. data/lib/pubid/jcgm/scheme.rb +60 -0
  394. data/lib/pubid/jcgm/single_identifier.rb +14 -84
  395. data/lib/pubid/jcgm/supplement_identifier.rb +4 -39
  396. data/lib/pubid/jcgm/urn_generator.rb +19 -25
  397. data/lib/pubid/jcgm.rb +2 -57
  398. data/lib/pubid/jis/builder.rb +52 -44
  399. data/lib/pubid/jis/components/code.rb +59 -0
  400. data/lib/pubid/{astm → jis}/components.rb +1 -1
  401. data/lib/pubid/jis/identifier.rb +5 -181
  402. data/lib/pubid/jis/identifiers/amendment.rb +1 -1
  403. data/lib/pubid/jis/identifiers/base.rb +72 -0
  404. data/lib/pubid/jis/identifiers/standard.rb +1 -2
  405. data/lib/pubid/jis/identifiers/technical_report.rb +1 -2
  406. data/lib/pubid/jis/identifiers/technical_specification.rb +1 -2
  407. data/lib/pubid/jis/identifiers.rb +1 -1
  408. data/lib/pubid/jis/parser.rb +6 -32
  409. data/lib/pubid/jis/scheme.rb +49 -0
  410. data/lib/pubid/jis/single_identifier.rb +12 -6
  411. data/lib/pubid/jis/supplement_identifier.rb +14 -17
  412. data/lib/pubid/jis.rb +2 -48
  413. data/lib/pubid/nist/builder.rb +1765 -146
  414. data/lib/pubid/nist/components/code.rb +20 -9
  415. data/lib/pubid/nist/components/edition.rb +0 -16
  416. data/lib/pubid/nist/components/publisher.rb +24 -0
  417. data/lib/pubid/nist/components/supplement.rb +21 -91
  418. data/lib/pubid/nist/components.rb +1 -0
  419. data/lib/pubid/nist/configuration.rb +2 -12
  420. data/lib/pubid/nist/identifiers/base.rb +417 -662
  421. data/lib/pubid/nist/identifiers/circular.rb +5 -17
  422. data/lib/pubid/nist/identifiers/circular_supplement.rb +6 -16
  423. data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -3
  424. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +5 -7
  425. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +5 -18
  426. data/lib/pubid/nist/identifiers/crpl_report.rb +13 -16
  427. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -18
  428. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -3
  429. data/lib/pubid/nist/identifiers/handbook.rb +4 -12
  430. data/lib/pubid/nist/identifiers/internal_report.rb +7 -15
  431. data/lib/pubid/nist/identifiers/letter_circular.rb +2 -3
  432. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +11 -20
  433. data/lib/pubid/nist/identifiers/monograph.rb +11 -22
  434. data/lib/pubid/nist/identifiers/ncstar.rb +2 -2
  435. data/lib/pubid/nist/identifiers/nsrds.rb +1 -1
  436. data/lib/pubid/nist/identifiers/owmwp.rb +1 -1
  437. data/lib/pubid/nist/identifiers/report.rb +10 -19
  438. data/lib/pubid/nist/identifiers/special_publication.rb +2 -12
  439. data/lib/pubid/nist/identifiers/technical_note.rb +3 -4
  440. data/lib/pubid/nist/identifiers.rb +1 -1
  441. data/lib/pubid/nist/parser.rb +429 -97
  442. data/lib/pubid/nist/scheme.rb +199 -0
  443. data/lib/pubid/nist/supplement_identifier.rb +34 -35
  444. data/lib/pubid/nist/urn_generator.rb +8 -14
  445. data/lib/pubid/nist.rb +5 -107
  446. data/lib/pubid/oiml/builder.rb +10 -91
  447. data/lib/pubid/oiml/components/code.rb +0 -17
  448. data/lib/pubid/oiml/identifier.rb +0 -53
  449. data/lib/pubid/oiml/identifiers/annex.rb +46 -13
  450. data/lib/pubid/oiml/identifiers/base.rb +36 -0
  451. data/lib/pubid/oiml/identifiers/basic_publication.rb +0 -2
  452. data/lib/pubid/oiml/identifiers/document.rb +0 -2
  453. data/lib/pubid/oiml/identifiers/expert_report.rb +0 -2
  454. data/lib/pubid/oiml/identifiers/guide.rb +0 -2
  455. data/lib/pubid/oiml/identifiers/recommendation.rb +0 -2
  456. data/lib/pubid/oiml/identifiers/seminar_report.rb +0 -2
  457. data/lib/pubid/oiml/identifiers/vocabulary.rb +0 -2
  458. data/lib/pubid/oiml/identifiers.rb +1 -3
  459. data/lib/pubid/oiml/parser.rb +17 -118
  460. data/lib/pubid/oiml/scheme.rb +46 -0
  461. data/lib/pubid/oiml/single_identifier.rb +43 -66
  462. data/lib/pubid/oiml/supplement_identifier.rb +17 -62
  463. data/lib/pubid/oiml/urn_generator.rb +8 -22
  464. data/lib/pubid/oiml.rb +1 -56
  465. data/lib/pubid/parser.rb +0 -1
  466. data/lib/pubid/parsers/mr_string.rb +7 -120
  467. data/lib/pubid/plateau/builder.rb +4 -8
  468. data/lib/pubid/plateau/identifiers/base.rb +36 -40
  469. data/lib/pubid/plateau/identifiers/handbook.rb +7 -1
  470. data/lib/pubid/plateau/identifiers/technical_report.rb +5 -1
  471. data/lib/pubid/plateau/identifiers.rb +1 -0
  472. data/lib/pubid/plateau/parser.rb +6 -16
  473. data/lib/pubid/plateau/scheme.rb +45 -0
  474. data/lib/pubid/plateau/supplement_identifier.rb +15 -11
  475. data/lib/pubid/plateau.rb +1 -58
  476. data/lib/pubid/renderers/base.rb +0 -47
  477. data/lib/pubid/renderers/directives_renderer.rb +14 -27
  478. data/lib/pubid/renderers/guide_renderer.rb +1 -7
  479. data/lib/pubid/renderers/human_readable.rb +9 -34
  480. data/lib/pubid/renderers/iwa_renderer.rb +1 -5
  481. data/lib/pubid/renderers/mr_string.rb +6 -54
  482. data/lib/pubid/renderers/supplement_renderer.rb +2 -5
  483. data/lib/pubid/renderers.rb +0 -1
  484. data/lib/pubid/rendering/base.rb +73 -0
  485. data/lib/pubid/rendering/common.rb +211 -0
  486. data/lib/pubid/rendering/context.rb +21 -33
  487. data/lib/pubid/rendering/format.rb +25 -0
  488. data/lib/pubid/rendering/numbering.rb +7 -25
  489. data/lib/pubid/rendering/supplement.rb +4 -4
  490. data/lib/pubid/rendering.rb +3 -0
  491. data/lib/pubid/sae/builder.rb +1 -1
  492. data/lib/pubid/sae/components/date.rb +0 -8
  493. data/lib/pubid/sae/components/type.rb +1 -5
  494. data/lib/pubid/sae/identifier.rb +12 -2
  495. data/lib/pubid/sae/identifiers/base.rb +28 -33
  496. data/lib/pubid/sae/identifiers.rb +1 -0
  497. data/lib/pubid/sae/parser.rb +1 -1
  498. data/lib/pubid/sae/scheme.rb +47 -0
  499. data/lib/pubid/sae/urn_generator.rb +10 -2
  500. data/lib/pubid/sae.rb +2 -49
  501. data/lib/pubid/scheme.rb +207 -0
  502. data/lib/pubid/urn_generator/base.rb +12 -12
  503. data/lib/pubid/version.rb +1 -1
  504. data/lib/pubid.rb +10 -424
  505. data/lib/tasks/export.rake +5 -6
  506. data/lib/tasks/website-data.json +1796 -1854
  507. metadata +45 -307
  508. data/data/bipm/update_codes.yaml +0 -9
  509. data/data/nist/series.yaml +0 -155
  510. data/lib/pubid/adobe/builder.rb +0 -52
  511. data/lib/pubid/adobe/identifier.rb +0 -47
  512. data/lib/pubid/adobe/identifiers/publication.rb +0 -31
  513. data/lib/pubid/adobe/identifiers/tech_note.rb +0 -32
  514. data/lib/pubid/adobe/identifiers.rb +0 -10
  515. data/lib/pubid/adobe/parser.rb +0 -136
  516. data/lib/pubid/adobe/renderer.rb +0 -39
  517. data/lib/pubid/adobe/urn_generator.rb +0 -42
  518. data/lib/pubid/adobe/urn_parser.rb +0 -69
  519. data/lib/pubid/adobe.rb +0 -60
  520. data/lib/pubid/amca/renderer.rb +0 -82
  521. data/lib/pubid/amca/urn_parser.rb +0 -28
  522. data/lib/pubid/ansi/renderer.rb +0 -53
  523. data/lib/pubid/ansi/urn_parser.rb +0 -23
  524. data/lib/pubid/api/identifiers.rb +0 -18
  525. data/lib/pubid/api/renderer.rb +0 -98
  526. data/lib/pubid/api/urn_parser.rb +0 -35
  527. data/lib/pubid/ashrae/renderer.rb +0 -117
  528. data/lib/pubid/ashrae/urn_parser.rb +0 -27
  529. data/lib/pubid/asme/renderer.rb +0 -66
  530. data/lib/pubid/asme/urn_parser.rb +0 -31
  531. data/lib/pubid/astm/identifiers/code_number.rb +0 -81
  532. data/lib/pubid/astm/identifiers.rb +0 -19
  533. data/lib/pubid/astm/renderer.rb +0 -172
  534. data/lib/pubid/astm/urn_parser.rb +0 -30
  535. data/lib/pubid/bipm/builder.rb +0 -163
  536. data/lib/pubid/bipm/identifier.rb +0 -285
  537. data/lib/pubid/bipm/identifiers/committee_document.rb +0 -36
  538. data/lib/pubid/bipm/identifiers/guide.rb +0 -35
  539. data/lib/pubid/bipm/identifiers/meeting.rb +0 -53
  540. data/lib/pubid/bipm/identifiers/mep.rb +0 -33
  541. data/lib/pubid/bipm/identifiers/metrologia_article.rb +0 -48
  542. data/lib/pubid/bipm/identifiers/si_brochure.rb +0 -33
  543. data/lib/pubid/bipm/identifiers.rb +0 -15
  544. data/lib/pubid/bipm/parser.rb +0 -237
  545. data/lib/pubid/bipm/renderer.rb +0 -118
  546. data/lib/pubid/bipm/urn_generator.rb +0 -58
  547. data/lib/pubid/bipm/urn_parser.rb +0 -60
  548. data/lib/pubid/bipm.rb +0 -91
  549. data/lib/pubid/bsi/renderer.rb +0 -1064
  550. data/lib/pubid/bsi/urn_parser.rb +0 -52
  551. data/lib/pubid/calconnect/builder.rb +0 -38
  552. data/lib/pubid/calconnect/identifier.rb +0 -121
  553. data/lib/pubid/calconnect/identifiers/standard.rb +0 -29
  554. data/lib/pubid/calconnect/identifiers.rb +0 -9
  555. data/lib/pubid/calconnect/parser.rb +0 -54
  556. data/lib/pubid/calconnect/renderer.rb +0 -36
  557. data/lib/pubid/calconnect/urn_generator.rb +0 -33
  558. data/lib/pubid/calconnect/urn_parser.rb +0 -34
  559. data/lib/pubid/calconnect.rb +0 -82
  560. data/lib/pubid/ccsds/urn_parser.rb +0 -20
  561. data/lib/pubid/cen_cenelec/renderer.rb +0 -261
  562. data/lib/pubid/cen_cenelec/urn_parser.rb +0 -28
  563. data/lib/pubid/cie/identifiers/code_attributes.rb +0 -52
  564. data/lib/pubid/cie/identifiers/proceedings.rb +0 -41
  565. data/lib/pubid/cie/urn_parser.rb +0 -28
  566. data/lib/pubid/components/adoption.rb +0 -104
  567. data/lib/pubid/components/iteration.rb +0 -32
  568. data/lib/pubid/components/relationship.rb +0 -151
  569. data/lib/pubid/components/supplement.rb +0 -184
  570. data/lib/pubid/csa/renderer.rb +0 -300
  571. data/lib/pubid/csa/urn_parser.rb +0 -33
  572. data/lib/pubid/doi/builder.rb +0 -18
  573. data/lib/pubid/doi/identifier.rb +0 -49
  574. data/lib/pubid/doi/identifiers/resource.rb +0 -30
  575. data/lib/pubid/doi/identifiers.rb +0 -9
  576. data/lib/pubid/doi/parser.rb +0 -52
  577. data/lib/pubid/doi/renderer.rb +0 -13
  578. data/lib/pubid/doi.rb +0 -55
  579. data/lib/pubid/easc/builder.rb +0 -55
  580. data/lib/pubid/easc/identifier.rb +0 -59
  581. data/lib/pubid/easc/identifiers/pmg.rb +0 -20
  582. data/lib/pubid/easc/identifiers/rmg.rb +0 -19
  583. data/lib/pubid/easc/identifiers.rb +0 -10
  584. data/lib/pubid/easc/parser.rb +0 -88
  585. data/lib/pubid/easc/renderer.rb +0 -48
  586. data/lib/pubid/easc/urn_generator.rb +0 -46
  587. data/lib/pubid/easc/urn_parser.rb +0 -57
  588. data/lib/pubid/easc.rb +0 -52
  589. data/lib/pubid/ecma/builder.rb +0 -45
  590. data/lib/pubid/ecma/identifier.rb +0 -147
  591. data/lib/pubid/ecma/identifiers/memento.rb +0 -30
  592. data/lib/pubid/ecma/identifiers/standard.rb +0 -31
  593. data/lib/pubid/ecma/identifiers/technical_report.rb +0 -31
  594. data/lib/pubid/ecma/identifiers.rb +0 -11
  595. data/lib/pubid/ecma/parser.rb +0 -76
  596. data/lib/pubid/ecma/renderer.rb +0 -67
  597. data/lib/pubid/ecma/urn_generator.rb +0 -46
  598. data/lib/pubid/ecma/urn_parser.rb +0 -51
  599. data/lib/pubid/ecma.rb +0 -67
  600. data/lib/pubid/errors.rb +0 -79
  601. data/lib/pubid/etsi/renderer.rb +0 -48
  602. data/lib/pubid/etsi/urn_parser.rb +0 -34
  603. data/lib/pubid/gb/builder.rb +0 -45
  604. data/lib/pubid/gb/identifier.rb +0 -67
  605. data/lib/pubid/gb/identifiers/standard.rb +0 -34
  606. data/lib/pubid/gb/identifiers.rb +0 -9
  607. data/lib/pubid/gb/parser.rb +0 -63
  608. data/lib/pubid/gb/renderer.rb +0 -35
  609. data/lib/pubid/gb.rb +0 -87
  610. data/lib/pubid/gost/builder.rb +0 -148
  611. data/lib/pubid/gost/identifier.rb +0 -47
  612. data/lib/pubid/gost/identifiers/foreign_reference.rb +0 -25
  613. data/lib/pubid/gost/identifiers/harmonized.rb +0 -39
  614. data/lib/pubid/gost/identifiers/identical_adoption.rb +0 -39
  615. data/lib/pubid/gost/identifiers/interstate_standard.rb +0 -20
  616. data/lib/pubid/gost/identifiers/national_standard.rb +0 -19
  617. data/lib/pubid/gost/identifiers.rb +0 -13
  618. data/lib/pubid/gost/parser.rb +0 -105
  619. data/lib/pubid/gost/renderer.rb +0 -48
  620. data/lib/pubid/gost/urn_generator.rb +0 -46
  621. data/lib/pubid/gost/urn_parser.rb +0 -52
  622. data/lib/pubid/gost.rb +0 -49
  623. data/lib/pubid/iala/builder.rb +0 -102
  624. data/lib/pubid/iala/identifier.rb +0 -90
  625. data/lib/pubid/iala/identifiers/advice.rb +0 -15
  626. data/lib/pubid/iala/identifiers/annex.rb +0 -57
  627. data/lib/pubid/iala/identifiers/general_assembly.rb +0 -19
  628. data/lib/pubid/iala/identifiers/guideline.rb +0 -17
  629. data/lib/pubid/iala/identifiers/letter.rb +0 -16
  630. data/lib/pubid/iala/identifiers/manual.rb +0 -18
  631. data/lib/pubid/iala/identifiers/model_course.rb +0 -17
  632. data/lib/pubid/iala/identifiers/recommendation.rb +0 -17
  633. data/lib/pubid/iala/identifiers/report.rb +0 -16
  634. data/lib/pubid/iala/identifiers/resolution.rb +0 -16
  635. data/lib/pubid/iala/identifiers/standard.rb +0 -17
  636. data/lib/pubid/iala/identifiers.rb +0 -19
  637. data/lib/pubid/iala/parser.rb +0 -138
  638. data/lib/pubid/iala/renderer.rb +0 -36
  639. data/lib/pubid/iala/urn_generator.rb +0 -49
  640. data/lib/pubid/iala/urn_parser.rb +0 -67
  641. data/lib/pubid/iala.rb +0 -71
  642. data/lib/pubid/iana/builder.rb +0 -22
  643. data/lib/pubid/iana/identifier.rb +0 -140
  644. data/lib/pubid/iana/identifiers/registry.rb +0 -69
  645. data/lib/pubid/iana/identifiers.rb +0 -9
  646. data/lib/pubid/iana/parser.rb +0 -38
  647. data/lib/pubid/iana/renderer.rb +0 -32
  648. data/lib/pubid/iana/urn_generator.rb +0 -19
  649. data/lib/pubid/iana/urn_parser.rb +0 -24
  650. data/lib/pubid/iana.rb +0 -69
  651. data/lib/pubid/idf/renderer.rb +0 -84
  652. data/lib/pubid/idf/urn_parser.rb +0 -25
  653. data/lib/pubid/iec/components.rb +0 -14
  654. data/lib/pubid/iec/identifiers/technical_group.rb +0 -30
  655. data/lib/pubid/iec/identifiers.rb +0 -31
  656. data/lib/pubid/iec/renderer.rb +0 -267
  657. data/lib/pubid/ieee/compaction.rb +0 -121
  658. data/lib/pubid/ieee/identifiers/amendment.rb +0 -40
  659. data/lib/pubid/ieee/identifiers/code_number.rb +0 -82
  660. data/lib/pubid/ieee/identifiers/nesc/edition.rb +0 -32
  661. data/lib/pubid/ieee/pre_parser.rb +0 -301
  662. data/lib/pubid/ieee/renderer.rb +0 -408
  663. data/lib/pubid/ieee/urn_parser.rb +0 -34
  664. data/lib/pubid/ietf/builder.rb +0 -78
  665. data/lib/pubid/ietf/identifier.rb +0 -5
  666. data/lib/pubid/ietf/identifiers/base.rb +0 -72
  667. data/lib/pubid/ietf/identifiers/bcp.rb +0 -36
  668. data/lib/pubid/ietf/identifiers/fyi.rb +0 -36
  669. data/lib/pubid/ietf/identifiers/internet_draft.rb +0 -45
  670. data/lib/pubid/ietf/identifiers/rfc.rb +0 -27
  671. data/lib/pubid/ietf/identifiers/serialization.rb +0 -51
  672. data/lib/pubid/ietf/identifiers/std.rb +0 -36
  673. data/lib/pubid/ietf/identifiers.rb +0 -14
  674. data/lib/pubid/ietf/parser.rb +0 -61
  675. data/lib/pubid/ietf/renderer.rb +0 -64
  676. data/lib/pubid/ietf/urn_generator.rb +0 -37
  677. data/lib/pubid/ietf/urn_parser.rb +0 -43
  678. data/lib/pubid/ietf.rb +0 -85
  679. data/lib/pubid/iho/renderer.rb +0 -30
  680. data/lib/pubid/iho/urn_parser.rb +0 -58
  681. data/lib/pubid/isbn/builder.rb +0 -44
  682. data/lib/pubid/isbn/check_digit.rb +0 -53
  683. data/lib/pubid/isbn/identifier.rb +0 -81
  684. data/lib/pubid/isbn/identifiers/book.rb +0 -30
  685. data/lib/pubid/isbn/identifiers.rb +0 -9
  686. data/lib/pubid/isbn/parser.rb +0 -45
  687. data/lib/pubid/isbn/renderer.rb +0 -16
  688. data/lib/pubid/isbn.rb +0 -52
  689. data/lib/pubid/iso/normalizer.rb +0 -89
  690. data/lib/pubid/itu/components/designation.rb +0 -35
  691. data/lib/pubid/itu/components.rb +0 -12
  692. data/lib/pubid/itu/identifiers/addendum.rb +0 -15
  693. data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +0 -87
  694. data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +0 -92
  695. data/lib/pubid/itu/identifiers/errata.rb +0 -15
  696. data/lib/pubid/itu/identifiers/handbook.rb +0 -38
  697. data/lib/pubid/itu/identifiers/question.rb +0 -63
  698. data/lib/pubid/itu/identifiers/report.rb +0 -39
  699. data/lib/pubid/itu/identifiers/standard_serialization.rb +0 -58
  700. data/lib/pubid/itu/urn_parser.rb +0 -31
  701. data/lib/pubid/jcgm/identifiers/corrigendum.rb +0 -34
  702. data/lib/pubid/jcgm/identifiers/meeting.rb +0 -47
  703. data/lib/pubid/jcgm/renderer.rb +0 -89
  704. data/lib/pubid/jcgm/urn_parser.rb +0 -177
  705. data/lib/pubid/jis/identifiers/corrigendum.rb +0 -16
  706. data/lib/pubid/jis/renderer.rb +0 -69
  707. data/lib/pubid/jis/urn_parser.rb +0 -23
  708. data/lib/pubid/nist/caster.rb +0 -1234
  709. data/lib/pubid/nist/circular_supplement_builder.rb +0 -293
  710. data/lib/pubid/nist/identifier.rb +0 -8
  711. data/lib/pubid/nist/identifiers/dated_document.rb +0 -49
  712. data/lib/pubid/nist/parser_output_normalizer.rb +0 -233
  713. data/lib/pubid/nist/preprocessor.rb +0 -443
  714. data/lib/pubid/nist/renderer.rb +0 -43
  715. data/lib/pubid/nist/router.rb +0 -149
  716. data/lib/pubid/nist/series/base.rb +0 -58
  717. data/lib/pubid/nist/series/crpl.rb +0 -13
  718. data/lib/pubid/nist/series/fips.rb +0 -14
  719. data/lib/pubid/nist/series/ir.rb +0 -57
  720. data/lib/pubid/nist/series/letter_preserving.rb +0 -15
  721. data/lib/pubid/nist/series/mono.rb +0 -19
  722. data/lib/pubid/nist/series/ncstar.rb +0 -20
  723. data/lib/pubid/nist/series.rb +0 -49
  724. data/lib/pubid/nist/urn_parser.rb +0 -67
  725. data/lib/pubid/oasis/builder.rb +0 -79
  726. data/lib/pubid/oasis/identifier.rb +0 -160
  727. data/lib/pubid/oasis/identifiers/standard.rb +0 -29
  728. data/lib/pubid/oasis/identifiers.rb +0 -9
  729. data/lib/pubid/oasis/parser.rb +0 -34
  730. data/lib/pubid/oasis/renderer.rb +0 -29
  731. data/lib/pubid/oasis/urn_generator.rb +0 -25
  732. data/lib/pubid/oasis/urn_parser.rb +0 -22
  733. data/lib/pubid/oasis.rb +0 -79
  734. data/lib/pubid/ogc/builder.rb +0 -33
  735. data/lib/pubid/ogc/identifier.rb +0 -81
  736. data/lib/pubid/ogc/identifiers/document.rb +0 -26
  737. data/lib/pubid/ogc/identifiers.rb +0 -10
  738. data/lib/pubid/ogc/parser.rb +0 -40
  739. data/lib/pubid/ogc/renderer.rb +0 -33
  740. data/lib/pubid/ogc/urn_generator.rb +0 -14
  741. data/lib/pubid/ogc/urn_parser.rb +0 -22
  742. data/lib/pubid/ogc.rb +0 -71
  743. data/lib/pubid/oiml/identifiers/bulletin.rb +0 -137
  744. data/lib/pubid/oiml/identifiers/code_number.rb +0 -90
  745. data/lib/pubid/oiml/identifiers/errata.rb +0 -15
  746. data/lib/pubid/oiml/renderer.rb +0 -232
  747. data/lib/pubid/oiml/urn_parser.rb +0 -39
  748. data/lib/pubid/omg/builder.rb +0 -19
  749. data/lib/pubid/omg/identifier.rb +0 -47
  750. data/lib/pubid/omg/identifiers/specification.rb +0 -32
  751. data/lib/pubid/omg/identifiers.rb +0 -9
  752. data/lib/pubid/omg/parser.rb +0 -40
  753. data/lib/pubid/omg/renderer.rb +0 -19
  754. data/lib/pubid/omg.rb +0 -51
  755. data/lib/pubid/parser/grammar.rb +0 -74
  756. data/lib/pubid/plateau/identifier.rb +0 -4
  757. data/lib/pubid/plateau/renderer.rb +0 -51
  758. data/lib/pubid/plateau/urn_parser.rb +0 -43
  759. data/lib/pubid/prefixes_support.rb +0 -51
  760. data/lib/pubid/renderers/annotator.rb +0 -233
  761. data/lib/pubid/sae/renderer.rb +0 -36
  762. data/lib/pubid/sae/urn_parser.rb +0 -36
  763. data/lib/pubid/tgpp/builder.rb +0 -41
  764. data/lib/pubid/tgpp/identifier.rb +0 -107
  765. data/lib/pubid/tgpp/identifiers/technical_report.rb +0 -32
  766. data/lib/pubid/tgpp/identifiers/technical_specification.rb +0 -33
  767. data/lib/pubid/tgpp/identifiers.rb +0 -11
  768. data/lib/pubid/tgpp/parser.rb +0 -78
  769. data/lib/pubid/tgpp/renderer.rb +0 -52
  770. data/lib/pubid/tgpp/urn_generator.rb +0 -39
  771. data/lib/pubid/tgpp/urn_parser.rb +0 -30
  772. data/lib/pubid/tgpp.rb +0 -83
  773. data/lib/pubid/type_resolver.rb +0 -59
  774. data/lib/pubid/un/builder.rb +0 -42
  775. data/lib/pubid/un/identifier.rb +0 -40
  776. data/lib/pubid/un/identifiers/document.rb +0 -24
  777. data/lib/pubid/un/identifiers.rb +0 -9
  778. data/lib/pubid/un/parser.rb +0 -25
  779. data/lib/pubid/un/renderer.rb +0 -11
  780. data/lib/pubid/un.rb +0 -46
  781. data/lib/pubid/urn_parser/base.rb +0 -81
  782. data/lib/pubid/urn_parser/errors.rb +0 -16
  783. data/lib/pubid/urn_parser.rb +0 -14
  784. data/lib/pubid/w3c/builder.rb +0 -55
  785. data/lib/pubid/w3c/identifier.rb +0 -130
  786. data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +0 -31
  787. data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +0 -31
  788. data/lib/pubid/w3c/identifiers/draft_note.rb +0 -31
  789. data/lib/pubid/w3c/identifiers/note.rb +0 -30
  790. data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +0 -31
  791. data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +0 -31
  792. data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +0 -31
  793. data/lib/pubid/w3c/identifiers/recommendation.rb +0 -31
  794. data/lib/pubid/w3c/identifiers/standard.rb +0 -12
  795. data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +0 -31
  796. data/lib/pubid/w3c/identifiers/working_draft.rb +0 -30
  797. data/lib/pubid/w3c/identifiers.rb +0 -25
  798. data/lib/pubid/w3c/parser.rb +0 -43
  799. data/lib/pubid/w3c/renderer.rb +0 -35
  800. data/lib/pubid/w3c/urn_generator.rb +0 -18
  801. data/lib/pubid/w3c/urn_parser.rb +0 -36
  802. data/lib/pubid/w3c.rb +0 -67
  803. data/lib/pubid/xsf/builder.rb +0 -17
  804. data/lib/pubid/xsf/identifier.rb +0 -66
  805. data/lib/pubid/xsf/identifiers/xep.rb +0 -31
  806. data/lib/pubid/xsf/identifiers.rb +0 -9
  807. data/lib/pubid/xsf/parser.rb +0 -25
  808. data/lib/pubid/xsf/renderer.rb +0 -23
  809. data/lib/pubid/xsf/urn_generator.rb +0 -13
  810. data/lib/pubid/xsf/urn_parser.rb +0 -18
  811. data/lib/pubid/xsf.rb +0 -81
@@ -7,12 +7,8 @@ module Pubid
7
7
  # Represents conformance test documents
8
8
  # Example: IEEE Std 802.16/Conformance01-2003
9
9
  class ConformanceIdentifier < SupplementIdentifier
10
- # Uniform `number` (the conformance ordinal) + inherited `year`, not
11
- # `conf_number`/`conf_year`. `number` is a plain string redefining the
12
- # inherited Components::Code (leaf-safe). `root.number` still returns the
13
- # base document number.
14
- attribute :number, :string
15
- # `year` inherited from the base.
10
+ attribute :conf_number, :string
11
+ attribute :conf_year, :string
16
12
 
17
13
  # TYPED_STAGES for conformance
18
14
  # Conformance uses "Conformance" abbreviation
@@ -23,6 +19,16 @@ module Pubid
23
19
  stage_code: "published",
24
20
  ),
25
21
  ].freeze
22
+
23
+ def to_s
24
+ return base_identifier.to_s unless base_identifier
25
+
26
+ # Format: BASE/ConformanceNN-YEAR
27
+ result = base_identifier.to_s
28
+ result += "/Conformance#{conf_number}" if conf_number
29
+ result += "-#{conf_year}" if conf_year
30
+ result
31
+ end
26
32
  end
27
33
  end
28
34
  end
@@ -7,13 +7,8 @@ module Pubid
7
7
  # Represents corrections to published standards
8
8
  # Example: IEEE Std 535-2013/Cor. 1-2017
9
9
  class Corrigendum < SupplementIdentifier
10
- # The corrigendum's own ordinal (`number`) and `year` — uniform names,
11
- # not `cor_number`/`cor_year`. `number` is a plain string redefining the
12
- # inherited Components::Code (leaf-safe, like the standards); `year` is
13
- # the inherited base :string. `root.number` still returns the *base*
14
- # document number, so the index key is unaffected.
15
- attribute :number, :string
16
- # `year` inherited from the base.
10
+ attribute :cor_number, :string
11
+ attribute :cor_year, :string
17
12
 
18
13
  # TYPED_STAGES for corrigendum
19
14
  # Corrigendum uses "Cor" abbreviation
@@ -25,14 +20,16 @@ module Pubid
25
20
  ),
26
21
  ].freeze
27
22
 
28
- # MR supplement suffix: `cor.{number}.{year}` (e.g. "/cor.1.2017").
29
- # The MrString renderer recurses into `base` and appends this so the
30
- # full IEEE corrigendum round-trips losslessly (issue #142).
31
- def mr_supplement_suffix
32
- segments = ["cor"]
33
- segments << number.to_s if number
34
- segments << year.to_s if year
35
- segments.join(".")
23
+ def to_s
24
+ return super unless base_identifier
25
+
26
+ # Format: BASE/Cor NUMBER-YEAR or BASE/Cor. NUMBER-YEAR
27
+ result = base_identifier.to_s
28
+ result += "/Cor"
29
+ result += ". " if cor_number # Add period and space for formal format
30
+ result += cor_number if cor_number
31
+ result += "-#{cor_year}" if cor_year
32
+ result
36
33
  end
37
34
  end
38
35
  end
@@ -6,32 +6,11 @@ module Pubid
6
6
  # CSA dual published identifier
7
7
  # Represents IEEE/CSA dual published standards
8
8
  # Example: IEEE Std 844.1-2017/CSA C22.2 No. 293.1-17
9
- class CsaDualPublished < Identifier
10
- attribute :ieee_identifier, Identifier
9
+ class CsaDualPublished < Base
10
+ attribute :ieee_identifier, Base
11
11
  # CSA identifier is stored as-is (not a Lutaml model type)
12
12
  attr_accessor :csa_identifier
13
13
 
14
- # `csa_identifier` is a real constructor parameter even though it is
15
- # not a lutaml attribute, so the unknown-key contract must let it
16
- # through — and the constructor must actually assign it.
17
- def self.extra_init_keys
18
- super + %i[csa_identifier]
19
- end
20
-
21
- # Walk to the IEEE designation for the relaton-index key: this wrapper
22
- # names one document by an IEEE and a CSA number and holds neither
23
- # itself, so `root.number` was "".
24
- def root
25
- ieee_identifier ? ieee_identifier.root : self
26
- end
27
-
28
- # Carry the number onto the URN and the MR slug as well as #root — see
29
- # AdoptedStandard#code_obj. `#code` below delegates already, but the
30
- # URN generator and the MR renderer both read `code_obj`.
31
- def code_obj
32
- ieee_identifier&.code_obj
33
- end
34
-
35
14
  # Delegate common attributes to ieee_identifier
36
15
  def publisher
37
16
  ieee_identifier.publisher
@@ -53,8 +32,18 @@ module Pubid
53
32
  ieee_identifier.typed_stage
54
33
  end
55
34
 
35
+ def to_s
36
+ # Format: IEEE_IDENTIFIER/CSA CSA_IDENTIFIER
37
+ # The CSA identifier should render with "CSA" prefix
38
+ csa_str = csa_identifier.to_s
39
+ # Ensure CSA prefix is present
40
+ csa_str = "CSA #{csa_str}" unless csa_str.start_with?("CSA", "CAN/")
41
+
42
+ "#{ieee_identifier}/#{csa_str}"
43
+ end
44
+
56
45
  def self.parse(string)
57
- Identifier.parse(string)
46
+ Base.parse(string)
58
47
  end
59
48
  end
60
49
  end
@@ -5,9 +5,13 @@ module Pubid
5
5
  module Identifiers
6
6
  # Dual Identifier - wraps two identifiers connected with "and"
7
7
  # Example: "ANSI C37.61-1973 and IEEE Std 321-1973"
8
- class DualIdentifier < Identifier
9
- attribute :first_identifier, Identifier, polymorphic: true
10
- attribute :second_identifier, Identifier, polymorphic: true
8
+ class DualIdentifier < Base
9
+ attribute :first_identifier, Base, polymorphic: true
10
+ attribute :second_identifier, Base, polymorphic: true
11
+
12
+ def to_s
13
+ "#{first_identifier} and #{second_identifier}"
14
+ end
11
15
  end
12
16
  end
13
17
  end
@@ -7,72 +7,21 @@ module Pubid
7
7
  # Document jointly published by two organizations
8
8
  # Example: "ANSI C37.61-1973 and IEEE Std 321-1973"
9
9
  # This means the document was published together by both organizations
10
- class DualPublished < Identifier
10
+ class DualPublished < Base
11
11
  # First organization's identifier
12
- attribute :first_identifier, Identifier, polymorphic: true
12
+ attribute :first_identifier, Base, polymorphic: true
13
13
 
14
14
  # Second organization's identifier
15
- attribute :second_identifier, Identifier, polymorphic: true
15
+ attribute :second_identifier, Base, polymorphic: true
16
+
17
+ def to_s
18
+ "#{first_identifier} and #{second_identifier}"
19
+ end
16
20
 
17
21
  def publisher
18
22
  # Return array of both publishers
19
23
  [first_identifier&.publisher, second_identifier&.publisher].compact
20
24
  end
21
-
22
- # `publisher` above is DERIVED from the two member identifiers (the
23
- # serialized source of truth), so it must not be serialized itself.
24
- # Emitting it breaks the canonical round-trip exactly as it did on
25
- # Identifiers::AdoptedStandard and Identifiers::JointDevelopment: the
26
- # derived value is default-omitted on the parse path (the attribute is
27
- # unset), but re-emitted once from_hash materializes the attribute
28
- # default, because the override then returns the members' publishers
29
- # rather than the "IEEE" default. Worse here, it is an ARRAY, so the
30
- # re-emitted value was the literal string `["IEEE", "IEEE"]`.
31
- #
32
- # This made all 25 DualPublished ids in the fixture corpus fail
33
- # `from_hash(to_hash) == to_hash` — the gate relaton's index build
34
- # uses, which SKIPS a document that fails it. Dropping the key is
35
- # lossless: first_identifier and second_identifier rebuild it.
36
- #
37
- # A top-level to_hash delete is sufficient because DualPublished is
38
- # only ever a top-level wrapper, never a nested `base` (where lutaml's
39
- # own transform would bypass this override).
40
- def to_hash(*args)
41
- hash = super
42
- hash.delete("publisher") if hash.is_a?(::Hash)
43
- hash
44
- end
45
-
46
- # A dual-published document is one document under two designations, and
47
- # this wrapper carries neither number itself — so `root.number`, the key
48
- # relaton-index sorts and bsearches on, was "". Walk to the first
49
- # designation, which is the one the printed reference leads with.
50
- def root
51
- first_identifier ? first_identifier.root : self
52
- end
53
-
54
- # Carry the number onto the URN and the MR slug as well as #root — see
55
- # AdoptedStandard#code_obj for why all three surfaces need it.
56
- def code_obj
57
- first_identifier&.code_obj
58
- end
59
-
60
- # See AdoptedStandard#mr_year — without it the 1989 and the 1993
61
- # printings of "IEEE Std 960 and IEEE Std 1177" shared one slug.
62
- def mr_year
63
- (year || first_identifier&.year)&.to_s
64
- end
65
-
66
- # `#publisher` above returns an ARRAY, and the inherited `mr_publisher`
67
- # is `publisher&.to_s&.downcase` — so the MR slug contained a literal
68
- # Ruby array (`["ieee", "asme"]`, brackets, quotes, comma and space
69
- # included) and `to_slug` is an output FILENAME. Join the two instead,
70
- # keeping both publishers in the slug: they are equally part of this
71
- # document's identity, so by the project rule both must reach it.
72
- def mr_publisher
73
- names = Array(publisher).map { |p| p.to_s.downcase }.reject(&:empty?)
74
- names.empty? ? nil : names.join("-")
75
- end
76
25
  end
77
26
  end
78
27
  end
@@ -3,110 +3,22 @@
3
3
  module Pubid
4
4
  module Ieee
5
5
  module Identifiers
6
- # IEC/IEEE Copublished Identifier - standards copublished by IEC and IEEE.
6
+ # IEC/IEEE Copublished Identifier - represents standards copublished by IEC and IEEE
7
7
  # Example: "IEC/IEEE 60079-30-2/D5 IEC:2013 (10/07)"
8
- #
9
- # The printed IEC/IEEE number is stored as split index columns rather than
10
- # a verbatim string: `number` (bare-digit narrowing key), `parts` (matched
11
- # within the bucket), `separators` (per-part `.`/`-`, since a single code
12
- # mixes them, e.g. `60076.57-1202`), and the trailing publication `year`
13
- # (inherited from the base; attached with `year_sep`, always `-` in
14
- # practice). The verbatim `copublished_number` is reconstructed from these
15
- # for rendering — see #copublished_number — so it is NOT serialized.
16
- class IecIeeeCopublished < Identifier
17
- attribute :number, :string
18
- attribute :parts, :string, collection: true, default: -> { [] }
19
- attribute :separators, :string, collection: true, default: -> { [] }
20
- attribute :year_sep, :string, default: -> { "-" }
21
- # `year` is inherited from the base (:string).
22
-
23
- attribute :iec_identifier, Identifier, polymorphic: true
24
- attribute :ieee_identifier, Identifier, polymorphic: true
8
+ class IecIeeeCopublished < Base
9
+ attribute :iec_identifier, Base, polymorphic: true
10
+ attribute :ieee_identifier, Base, polymorphic: true
11
+ attribute :copublished_number, :string # The shared number like "60079-30-2"
25
12
  attribute :draft_info, :string # Draft information like "/D5"
26
13
  attribute :iec_year, :string # IEC year like "2013"
27
14
  attribute :date_info, :string # Date information like "(10/07)"
28
15
 
29
- # The printed IEC/IEEE number, rebuilt losslessly from the split
30
- # columns (the renderer/urn read this). Not stored — number/parts/
31
- # separators/year fully describe it, so the verbatim string never
32
- # bloats an index row.
33
- # @param mark [String] IEEE trademark symbol, spliced in after the
34
- # number and its parts and before the publication year (IEEE prints
35
- # it there); "" for the ordinary, unmarked rendering.
36
- def copublished_number(mark = "")
37
- return nil if number.to_s.empty?
38
-
39
- code = marked_code(mark)
40
- code += "#{year_sep}#{year}" if year
41
- code
42
- end
43
-
44
- # The dotted/dashed parts portion, each part with its own separator.
45
- def parts_suffix
46
- separators.zip(parts).map { |sep, part| "#{sep}#{part}" }.join
47
- end
48
-
49
- # A stage word printed ahead of the number (`FDIS 60079-30-2`,
50
- # `CD2 P62704-5 ED1`, `TS P61869-105 ED1`). The lookahead — the next
51
- # token must start like a document number — is what stops this eating a
52
- # number that merely begins with a letter.
53
- STAGE_PREFIX = /\A[A-Z]+\d*\s+(?=P?\d)/
54
-
55
- # Inside the number token, the printed code stops early at:
56
- #
57
- # * a colon-attached publication year (`62582-2:2022`);
58
- # * a dash/dot-attached 19xx/20xx year (`62395.1-2024 Redline`) — only
59
- # one a descriptive tail stranded inside the code gets here, since
60
- # #peel_copublished_year moves a genuinely trailing year into the
61
- # `year` attribute. The 19/20 prefix keeps a part that merely looks
62
- # like a year (`60076.57-1202`) from matching;
63
- # * a glued parenthetical (`62704-1(E)`), which is a language marker
64
- # rather than part of the number.
65
- CODE_END = /:\d{4}|[-.](?:19|20)\d{2}\z|\(/
66
-
67
- # `number` + #parts_suffix with the mark spliced at the end of the code
68
- # proper.
69
- #
70
- # Some copublished references carry an edition, a colon year, a stage
71
- # word or a "- Redline" tail that the parser keeps inside
72
- # `number`/`parts` rather than in dedicated attributes; appending the
73
- # mark after all of it would print
74
- # `IEC/IEEE 60076-16 Edition 2.0 2018-09™` instead of
75
- # `IEC/IEEE 60076-16™ Edition 2.0 2018-09`. Scanning the whole printed
76
- # code (not just the suffix) matters because the split point varies —
77
- # `60802 Edition 1` lands in `number`, `-16 Edition 2` in `parts`.
78
- #
79
- # With the flag off `mark` is "" and this returns the code unchanged, so
80
- # the plain rendering is byte-identical by construction.
81
- def marked_code(mark)
82
- code = "#{number}#{parts_suffix}"
83
- return code if mark.to_s.empty?
84
-
85
- at = code_end_index(code)
86
- "#{code[0...at]}#{mark}#{code[at..]}"
87
- end
88
-
89
- # Index at which the printed code ends and descriptive text begins.
90
- #
91
- # The number is the first whitespace-delimited token after any stage
92
- # word, so the code can never run past that token's end — which is what
93
- # keeps the mark off a trailing edition/date phrase even when no
94
- # CODE_END boundary matches inside the token.
95
- def code_end_index(code)
96
- start = code[STAGE_PREFIX]&.length || 0
97
- token_end = code.index(" ", start) || code.length
98
- boundary = code[start...token_end].index(CODE_END)
99
- boundary ? start + boundary : token_end
100
- end
101
-
102
- # The base IEEE #exclude already nils year/month/day; also reset the
103
- # year separator (a format sibling of the scalar year, per the CSA
104
- # lesson) so a date-less reference matches a `:`-dated form too.
105
- def exclude(*args)
106
- result = super
107
- if args.intersect?(%i[year date]) && result.respond_to?(:year_sep=)
108
- result.year_sep = "-"
109
- end
16
+ def to_s
17
+ result = "IEC/IEEE"
18
+ result += " #{copublished_number}" if copublished_number
19
+ result += draft_info if draft_info
20
+ result += " IEC:#{iec_year}" if iec_year
21
+ result += " #{date_info}" if date_info
110
22
  result
111
23
  end
112
24
  end
@@ -7,31 +7,7 @@ module Pubid
7
7
  # Represents an interpretation sheet or clarification
8
8
  # Example: IEEE Std 1076/INT-1991, IEEE Std 1003.1-1988/INT
9
9
  class InterpretationIdentifier < SupplementIdentifier
10
- # Uniform `year` (the interpretation year), not `int_year` — inherited
11
- # from the base, so no attribute is declared here.
12
-
13
- # The interpreted standard's code must reach the URN. Before this
14
- # change the flat-parsed form kept its number in the wrapper's own
15
- # `code_obj` (the builder never built a base), so the URN carried it by
16
- # accident; now that the number lives on `base` where it belongs, the
17
- # URN generator has to be pointed at it or the URN silently loses the
18
- # document number. `code_obj` is a plain attr_accessor, not a lutaml
19
- # attribute, so overriding it as a method is safe.
20
- def code_obj
21
- super || base&.code_obj
22
- end
23
-
24
- # MR supplement suffix: `int.{year}` — mirrors Corrigendum/Amendment.
25
- # Without it the MrString renderer slugs an interpretation FLAT off
26
- # attributes a supplement does not have, instead of recursing into
27
- # `base`, so every interpretation of every standard collapsed onto
28
- # "ieee.std.{year}" with no document number at all — and `to_slug` is
29
- # an output FILENAME.
30
- def mr_supplement_suffix
31
- segments = ["int"]
32
- segments << year.to_s if year
33
- segments.join(".")
34
- end
10
+ attribute :int_year, :string
35
11
 
36
12
  # TYPED_STAGES for interpretation
37
13
  # Interpretation uses "INT" abbreviation
@@ -42,6 +18,16 @@ module Pubid
42
18
  stage_code: "published",
43
19
  ),
44
20
  ].freeze
21
+
22
+ def to_s
23
+ return base_identifier.to_s unless base_identifier
24
+
25
+ # Format: BASE/INT or BASE/INT-YEAR
26
+ result = base_identifier.to_s
27
+ result += "/INT"
28
+ result += "-#{int_year}" if int_year
29
+ result
30
+ end
45
31
  end
46
32
  end
47
33
  end
@@ -29,27 +29,18 @@ module Pubid
29
29
  # - "P" prefix means IEEE project (any stage)
30
30
  # - ISO stages and IEEE drafts can coexist but are not equivalent
31
31
  # - Format conversion preserves semantic meaning within each system
32
- class JointDevelopment < Identifier
33
- # Split index columns (number/prefix/parts/separator) instead of a
34
- # `code` string, like every IEEE leaf — see CodeNumber. Rendering reads
35
- # `code` (base #code → code_obj), which CodeNumber rebuilds from the
36
- # split fields, so to_ieee_format / to_iso_format are unaffected.
37
- include CodeNumber
38
-
32
+ class JointDevelopment < Base
39
33
  attribute :publishers, :string, collection: true
40
34
  attribute :lead_party, :string # "IEEE", "ISO", "IEC", etc.
35
+ attribute :code, :string
41
36
  attribute :typed_stage, Components::TypedStage
42
37
  attribute :year, :string
43
38
  attribute :iso_stage, :string # For ISO stage if present
44
39
  attribute :ieee_draft, :string # For IEEE P/D notation if present
45
40
 
46
- # Accepts keyword args or a single positional hash (the base
47
- # #exclude/matching rebuild passes the latter) — see
48
- # Identifier#initialize.
49
- def initialize(args = {}, **kwargs)
50
- args = args.merge(kwargs) unless kwargs.empty?
41
+ def initialize(**args)
51
42
  # Call super FIRST to initialize Lutaml::Model attributes
52
- super(args)
43
+ super
53
44
 
54
45
  # Then handle typed_stage
55
46
  if args[:typed_stage].is_a?(Components::TypedStage)
@@ -88,33 +79,17 @@ module Pubid
88
79
  end
89
80
 
90
81
  # Convert to string representation
91
- # JointDevelopment has its own dual-format logic (IEEE vs ISO)
92
- # that doesn't go through the format registry renderer.
93
82
  # @param format [Symbol] :ieee or :iso (defaults to canonical_format)
94
- # @param trademark [Boolean] append the IEEE trademark symbol (™/®)
95
83
  # @return [String] formatted identifier
96
- # `**_opts` absorbs render flags this list does not name (`annotated:`),
97
- # which the closed keyword list used to reject outright.
98
- def to_s(format: canonical_format, trademark: false, **opts)
99
- # The mark goes after the code number, before the draft and the year
100
- # ("ISO/IEC/IEEE P26511™/D8-2018"), so it is threaded into the
101
- # format builders rather than appended to the finished string.
102
- mark = if trademark
103
- Pubid::Ieee.trademark_symbol_for(code&.number,
104
- code&.prefix,
105
- publishers: publishers)
106
- else
107
- ""
108
- end
109
-
110
- result = case format
111
- when :iso
112
- to_iso_format(mark)
113
- else
114
- to_ieee_format(mark)
115
- end
116
-
117
- annotate_plain_render(result, **opts)
84
+ def to_s(format: canonical_format)
85
+ case format
86
+ when :iso
87
+ to_iso_format
88
+ when :ieee
89
+ to_ieee_format
90
+ else
91
+ to_ieee_format
92
+ end
118
93
  end
119
94
 
120
95
  private
@@ -122,7 +97,7 @@ module Pubid
122
97
  # Convert to ISO format representation
123
98
  # ISO/IEC/IEEE FDIS 26511:2018
124
99
  # @return [String] ISO format string
125
- def to_iso_format(mark = "")
100
+ def to_iso_format
126
101
  parts = []
127
102
 
128
103
  # Publishers (slash-separated)
@@ -140,7 +115,6 @@ module Pubid
140
115
 
141
116
  # Code (NO P prefix in ISO format, NO draft notation)
142
117
  code_str = code.to_s.gsub(/^P/, "")
143
- code_str += mark unless code_str.empty?
144
118
  parts << code_str if code_str && !code_str.empty?
145
119
 
146
120
  # Join with space and add year with colon
@@ -153,7 +127,7 @@ module Pubid
153
127
  # Convert to IEEE format representation
154
128
  # ISO/IEC/IEEE P26511/D8-2018
155
129
  # @return [String] IEEE format string
156
- def to_ieee_format(mark = "")
130
+ def to_ieee_format
157
131
  parts = []
158
132
 
159
133
  # Publishers (slash-separated)
@@ -167,9 +141,6 @@ module Pubid
167
141
  code_str = "P#{code_str}"
168
142
  end
169
143
 
170
- # Mark after the number, before the draft and the year
171
- code_str += mark unless code_str.empty?
172
-
173
144
  # Add IEEE draft notation if available (e.g., /D8)
174
145
  if ieee_draft
175
146
  code_str += "/#{ieee_draft}"
@@ -186,12 +157,6 @@ module Pubid
186
157
  result
187
158
  end
188
159
 
189
- # Public again: these override base accessors and MUST be public — lutaml
190
- # serialization calls `public_send(:publisher)`, so leaving them under the
191
- # `private` above made JointDevelopment#to_hash raise (it could not be
192
- # serialized or round-tripped / indexed at all).
193
- public
194
-
195
160
  # Override to ensure proper publisher handling
196
161
  def publisher
197
162
  publishers&.first || super
@@ -201,22 +166,6 @@ module Pubid
201
166
  def copublisher
202
167
  publishers&.drop(1) || super
203
168
  end
204
-
205
- # `publisher`/`copublisher` are *derived* from `publishers` (the source
206
- # of truth, which IS serialized). Emitting them too breaks the canonical
207
- # round-trip: the derived `publisher` is default-omitted on the parse
208
- # path but re-emitted after from_hash (the override returns
209
- # publishers.first, not the default). Drop both — publishers rebuilds
210
- # them. (JointDevelopment is a top-level root, never nested, so a
211
- # to_hash-level drop is sufficient.)
212
- def to_hash(*args)
213
- hash = super
214
- if hash.is_a?(::Hash)
215
- hash.delete("publisher")
216
- hash.delete("copublisher")
217
- end
218
- hash
219
- end
220
169
  end
221
170
  end
222
171
  end
@@ -8,41 +8,30 @@ module Pubid
8
8
  # Examples:
9
9
  # - "IEEE Std 1299/C62.22.1-1996" (same document, two numbers)
10
10
  # - "IEEE Std 960-1989, Std 1177-1989" (same document, two numbers)
11
- class MultiNumberedIdentifier < Identifier
12
- # Both designations are real lutaml attributes.
13
- #
14
- # They used to be `attr_accessor`s, which lutaml cannot see — so
15
- # `to_hash` emitted {"_type" => "pubid:ieee:multi-numbered-identifier"}
16
- # and NOTHING else, `from_hash` could not rebuild either member, and
17
- # `#exclude` (which iterates self.class.attributes) skipped them. The
18
- # whole identity was dropped. That is the CSA container defect recorded
19
- # in CLAUDE.md, and the fix is the same: make the members attributes.
20
- #
21
- # The type is the CROSS-FLAVOR ::Pubid::Identifier, not IEEE's own:
22
- # `polymorphic: true` widens only to subclasses, and the second
23
- # designation may belong to another body — the same reason
24
- # AdoptedStandard's members carry that type.
25
- attribute :primary_identifier, ::Pubid::Identifier, polymorphic: true
26
- attribute :secondary_identifier, ::Pubid::Identifier, polymorphic: true
27
-
28
- # One document under two numbers, neither of them held here, so
29
- # `root.number` was "". Walk to the primary designation.
30
- def root
31
- primary_identifier ? primary_identifier.root : self
32
- end
33
-
34
- # Carry the number onto the URN and the MR slug as well as #root — see
35
- # AdoptedStandard#code_obj.
36
- def code_obj
37
- primary_identifier&.code_obj
38
- end
39
-
40
- # See AdoptedStandard#mr_year. `year` below already delegates, so this
41
- # only stringifies — it is kept explicit so the hook survives if that
42
- # delegation is ever removed in favour of the URN generator's
43
- # `year_component` root fallback.
44
- def mr_year
45
- year&.to_s
11
+ class MultiNumberedIdentifier < Base
12
+ # Primary identifier (main IEEE standard number)
13
+ # Stored as-is (Lutaml model type checking doesn't work with polymorphic identifiers)
14
+ attr_accessor :primary_identifier
15
+
16
+ # Secondary identifier (additional number for same document)
17
+ attr_accessor :secondary_identifier
18
+
19
+ def to_s
20
+ # Format: PRIMARY/SECONDARY or PRIMARY, SECONDARY
21
+ # The format depends on the original input
22
+ return primary_identifier.to_s unless secondary_identifier
23
+
24
+ # Check if the secondary identifier starts with "C" (like C62.22.1)
25
+ # If so, use slash format (cross-reference style)
26
+ secondary_code = secondary_identifier.code.to_s
27
+ if secondary_code.start_with?("C") && secondary_code.match?(/^C\d+\./)
28
+ # Cross-reference format: IEEE Std 1299/C62.22.1-1996
29
+ "#{primary_identifier}/#{secondary_identifier}"
30
+ else
31
+ # Comma format: IEEE Std 960-1989, Std 1177-1989
32
+ # But we normalize to "and" format for consistency
33
+ "#{primary_identifier} and #{secondary_identifier}"
34
+ end
46
35
  end
47
36
 
48
37
  def publisher
@@ -56,29 +45,6 @@ module Pubid
56
45
  def year
57
46
  primary_identifier&.year
58
47
  end
59
-
60
- # `publisher` and `year` are DERIVED from primary_identifier — and,
61
- # since that member became a serialized attribute above, the derived
62
- # values are now re-emitted after from_hash materializes the attribute
63
- # defaults, while the parse path omits them as unset. That asymmetry
64
- # breaks `from_hash(to_hash) == to_hash`, the gate relaton's index
65
- # build uses to decide whether to keep a document.
66
- #
67
- # It is latent rather than live for the one corpus id (its primary is
68
- # IEEE-published with no year, so both derived values match their
69
- # defaults and are dropped anyway), but the class documents that its
70
- # members may belong to another body — and a synthetic AIEE primary
71
- # reproduces it immediately. Dropping the keys is lossless:
72
- # primary_identifier rebuilds both. Same treatment as
73
- # AdoptedStandard#to_hash and DualPublished#to_hash.
74
- def to_hash(*args)
75
- hash = super
76
- return hash unless hash.is_a?(::Hash)
77
-
78
- hash.delete("publisher")
79
- hash.delete("year")
80
- hash
81
- end
82
48
  end
83
49
  end
84
50
  end