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
@@ -2,207 +2,20 @@
2
2
 
3
3
  module Pubid
4
4
  module CenCenelec
5
- extend Pubid::PrefixesSupport
6
-
7
- # CEN/CENELEC publisher tokens, mirroring the parser's publisher rules
8
- # (lib/pubid/cen_cenelec/parser.rb). Adopted-org prefixes (ISO/IEC/CISPR)
9
- # are excluded — they route to their own SDOs, not to CEN.
10
- PREFIXES = %w[EN CEN CLC CWA HD ES CR ENV].freeze
11
-
12
5
  autoload :Builder, "#{__dir__}/cen_cenelec/builder"
13
6
  autoload :Identifier, "#{__dir__}/cen_cenelec/identifier"
14
7
  autoload :Identifiers, "#{__dir__}/cen_cenelec/identifiers"
15
8
  autoload :Parser, "#{__dir__}/cen_cenelec/parser"
16
- autoload :Renderer, "#{__dir__}/cen_cenelec/renderer"
9
+ autoload :Scheme, "#{__dir__}/cen_cenelec/scheme"
17
10
  autoload :SingleIdentifier, "#{__dir__}/cen_cenelec/single_identifier"
18
11
  autoload :SupplementIdentifier,
19
12
  "#{__dir__}/cen_cenelec/supplement_identifier"
20
13
  autoload :UrnGenerator, "#{__dir__}/cen_cenelec/urn_generator"
21
- autoload :UrnParser, "#{__dir__}/cen_cenelec/urn_parser"
22
-
23
- # TYPED_STAGES_REGISTRY for native CEN types
24
- # Covers the CEN PROJEX stage-code table per issue #251.
25
- TYPED_STAGES_REGISTRY = [
26
- # === European Norm (EN) lifecycle ===
27
- # Preliminary (pWI EN): proposal/WI stages
28
- Pubid::Components::TypedStage.new(
29
- code: :pwien, stage_code: :preliminary, type_code: :en,
30
- abbr: ["pWI EN"], name: "Preliminary Work Item EN",
31
- harmonized_stages: %w[00.60 10.98 10.99 20.60],
32
- ),
33
- # Proposal (prEN): working draft stages
34
- Pubid::Components::TypedStage.new(
35
- code: :pren, stage_code: :proposal, type_code: :en,
36
- abbr: ["prEN"], name: "Proposal European Norm",
37
- harmonized_stages: %w[30.00 30.20 30.60 30.92 30.97 30.98 30.99],
38
- ),
39
- # Final Proposal (FprEN): enquiry stages
40
- Pubid::Components::TypedStage.new(
41
- code: :fpren, stage_code: :final_proposal, type_code: :en,
42
- abbr: ["FprEN"], name: "Final Proposal European Norm",
43
- harmonized_stages: %w[40.00 40.20 40.60 40.92 40.97 40.98 40.99],
44
- ),
45
- # Formal Vote (FV prEN): COCOR + FV dispatch
46
- Pubid::Components::TypedStage.new(
47
- code: :fven, stage_code: :formal_vote, type_code: :en,
48
- abbr: ["FV prEN"], name: "Formal Vote EN",
49
- harmonized_stages: %w[43.20 43.60 43.97 43.98 45.97 45.98 45.99],
50
- ),
51
- # Vote (vEN): enquiry/vote
52
- Pubid::Components::TypedStage.new(
53
- code: :ven, stage_code: :vote, type_code: :en,
54
- abbr: ["vEN"], name: "Vote EN",
55
- harmonized_stages: %w[50.20 50.60 50.97 50.98],
56
- ),
57
- # Published (EN): ratification + publication milestones
58
- Pubid::Components::TypedStage.new(
59
- code: :puben, stage_code: :published, type_code: :en,
60
- abbr: ["EN"], name: "European Norm",
61
- harmonized_stages: %w[60.00 60.55 60.60 65.31 65.51 65.62],
62
- ),
63
- # Review (rvEN): 2-year review
64
- Pubid::Components::TypedStage.new(
65
- code: :rven, stage_code: :review, type_code: :en,
66
- abbr: ["rvEN"], name: "Review EN",
67
- harmonized_stages: %w[90.00 90.20 90.60 90.92 90.93 90.98],
68
- ),
69
- # Reactivation (racEN)
70
- Pubid::Components::TypedStage.new(
71
- code: :racen, stage_code: :reactivation, type_code: :en,
72
- abbr: ["racEN"], name: "Re-activated EN",
73
- harmonized_stages: %w[96.60],
74
- ),
75
- # Withdrawn (wdEN)
76
- Pubid::Components::TypedStage.new(
77
- code: :wden, stage_code: :withdrawn, type_code: :en,
78
- abbr: ["wdEN"], name: "Withdrawn EN",
79
- harmonized_stages: %w[99.60],
80
- ),
81
-
82
- # === Technical Specification (TS) ===
83
- Pubid::Components::TypedStage.new(
84
- code: :pubts, stage_code: :published, type_code: :ts,
85
- abbr: ["TS"], name: "Technical Specification",
86
- harmonized_stages: %w[60.00 60.60],
87
- ),
88
- Pubid::Components::TypedStage.new(
89
- code: :prts, stage_code: :proposal, type_code: :ts,
90
- abbr: ["prTS"], name: "Proposal Technical Specification",
91
- harmonized_stages: %w[30.00 30.20 30.60 30.92 30.98 30.99],
92
- ),
93
-
94
- # === Technical Report (TR) ===
95
- Pubid::Components::TypedStage.new(
96
- code: :pubtr, stage_code: :published, type_code: :tr,
97
- abbr: ["TR"], name: "Technical Report",
98
- harmonized_stages: %w[60.00 60.60],
99
- ),
100
-
101
- # === CEN Workshop Agreement (CWA) ===
102
- Pubid::Components::TypedStage.new(
103
- code: :pubcwa, stage_code: :published, type_code: :cwa,
104
- abbr: ["CWA"], name: "CEN Workshop Agreement",
105
- harmonized_stages: %w[60.00 60.60],
106
- ),
107
-
108
- # === Guide ===
109
- Pubid::Components::TypedStage.new(
110
- code: :pubguide, stage_code: :published, type_code: :guide,
111
- abbr: ["Guide"], name: "Guide",
112
- harmonized_stages: %w[60.00 60.60],
113
- ),
114
-
115
- # === Harmonization Document (HD) ===
116
- Pubid::Components::TypedStage.new(
117
- code: :pubhd, stage_code: :published, type_code: :hd,
118
- abbr: ["HD"], name: "Harmonization Document",
119
- harmonized_stages: %w[60.00 60.60],
120
- ),
121
-
122
- # === European Specification (ES) ===
123
- Pubid::Components::TypedStage.new(
124
- code: :pubes, stage_code: :published, type_code: :es,
125
- abbr: ["ES"], name: "European Specification",
126
- harmonized_stages: %w[60.00 60.60],
127
- ),
128
-
129
- # === CEN Report (CR) ===
130
- Pubid::Components::TypedStage.new(
131
- code: :pubcr, stage_code: :published, type_code: :cr,
132
- abbr: ["CR"], name: "CEN Report",
133
- harmonized_stages: %w[60.00 60.60],
134
- ),
135
-
136
- # === European Prestandard (ENV) ===
137
- Pubid::Components::TypedStage.new(
138
- code: :pubenv, stage_code: :published, type_code: :env,
139
- abbr: ["ENV"], name: "European Prestandard",
140
- harmonized_stages: %w[60.00 60.60],
141
- ),
142
- ].freeze
143
-
144
- # Default typed stage for when no match is found
145
- DEFAULT_TYPED_STAGE = Pubid::Components::TypedStage.new(
146
- code: :puben,
147
- stage_code: :published,
148
- type_code: :en,
149
- abbr: ["EN"],
150
- name: "European Norm",
151
- harmonized_stages: %w[60.00 60.60],
152
- ).freeze
153
14
 
154
15
  def self.parse(identifier)
155
- unless identifier.is_a?(String)
156
- raise Pubid::Errors::InvalidInputError,
157
- Pubid::INPUT_NOT_A_STRING_MESSAGE
158
- end
159
-
160
- if identifier.length > Pubid::MAX_INPUT_LENGTH
161
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
162
- end
163
-
164
16
  CenCenelec::Identifier.parse(identifier)
165
17
  end
166
-
167
- # Auto-discover all identifier types from the Identifiers namespace
168
- # @return [Array<Class>] identifier classes that define a self.type Hash
169
- def self.identifier_types
170
- @identifier_types ||= Identifiers.constants
171
- .filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
172
- .select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
173
- .select { |c| c.type.is_a?(Hash) }
174
- end
175
-
176
- # Build typed stage index from the module's TYPED_STAGES_REGISTRY
177
- # @return [Array<Pubid::Components::TypedStage>] all typed stages
178
- def self.all_typed_stages
179
- TYPED_STAGES_REGISTRY
180
- end
181
-
182
- # Lookup: type code -> identifier class
183
- # @param code [String, Symbol] the type key to find
184
- # @return [Class, nil] the matching identifier class
185
- def self.locate_type(code)
186
- identifier_types.find { |t| t.type[:key].to_s == code.to_s }
187
- end
188
-
189
- # Lookup: abbreviation -> typed stage
190
- # @param abbr [String, Symbol] the abbreviation to find
191
- # @return [Pubid::Components::TypedStage, nil] the matching typed stage
192
- def self.locate_stage(abbr)
193
- abbr_str = abbr.to_s.upcase
194
- all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
195
- end
196
18
  end
197
19
  end
198
20
 
199
21
  Pubid::Registry.register(:cen_cenelec, Pubid::CenCenelec)
200
- Pubid::Registry.register(:cen, Pubid::CenCenelec)
201
-
202
- # Per-flavor format registry: inherits global formats, overrides :human
203
- # Register on both root hierarchies: SingleIdentifier and Identifiers::Base
204
- cen_renderer = Pubid::CenCenelec::Renderer
205
- Pubid::CenCenelec::SingleIdentifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
206
- Pubid::CenCenelec::SingleIdentifier.format_registry.register(:human, renderer: cen_renderer)
207
- Pubid::CenCenelec::Identifiers::Base.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
208
- Pubid::CenCenelec::Identifiers::Base.format_registry.register(:human, renderer: cen_renderer)
@@ -14,30 +14,12 @@ module Pubid
14
14
  # Determine identifier class based on parsed content
15
15
  identifier_class = determine_class(parsed_hash)
16
16
 
17
- # Supplement / Corrigendum wrap a nested base.
18
- if identifier_class == Cie::Identifiers::Corrigendum
19
- return build_corrigendum(parsed_hash)
20
- end
21
- if identifier_class == Cie::Identifiers::Supplement
22
- return build_supplement(parsed_hash)
23
- end
24
-
25
17
  # Extract attributes with style detection
26
18
  attributes = extract_attributes(parsed_hash)
27
19
 
28
- # For Bundle, parse each comma-separated member and hoist a shared base.
20
+ # For Bundle identifier, store original string
29
21
  if parsed_hash[:bundle_items] && original_string
30
- attributes.merge!(build_bundle(original_string))
31
- end
32
-
33
- # `extract_attributes` builds one attribute hash for every CIE type,
34
- # but the types do not share one attribute set — only Standard,
35
- # DualPublished and Identical declare `s_prefix`, while Conference,
36
- # Bundle, Proceedings and TutorialBundle do not. lutaml used to drop
37
- # the surplus key without a word; the constructor now refuses it, so
38
- # the builder has to stop offering it.
39
- attributes = attributes.select do |key, _|
40
- identifier_class.attributes.key?(key)
22
+ attributes[:identifiers_string] = original_string
41
23
  end
42
24
 
43
25
  # Construct identifier
@@ -46,85 +28,6 @@ module Pubid
46
28
 
47
29
  private
48
30
 
49
- # Build a Bundle's attributes from its printed form. Parse each member,
50
- # then — since a CIE bundle is the parts of one supplement of one standard
51
- # — hoist the shared base and keep only the differing supplement
52
- # number/part in each doc. If the members don't share a base (not seen in
53
- # practice, but the grammar allows it), keep each doc's own base instead.
54
- def build_bundle(original_string)
55
- members = split_bundle_members(original_string)
56
- shared = common_base(members)
57
- return { ids: members } unless shared
58
-
59
- ids = members.map do |m|
60
- Cie::Identifiers::Supplement.new(number: m.number, part: m.part)
61
- end
62
- { base: shared, ids: ids }
63
- end
64
-
65
- # The publisher prefix is written once, so only the first item carries
66
- # "CIE "; prepend it to the rest before parsing each member.
67
- def split_bundle_members(original_string)
68
- original_string.split(",").each_with_index.map do |item, i|
69
- ref = i.zero? ? item.strip : "CIE #{item.strip}"
70
- Cie::Identifier.parse(ref)
71
- end
72
- end
73
-
74
- # The base shared by every member, or nil if they differ (or any is
75
- # base-less). Compared by canonical hash so structural equality holds.
76
- def common_base(members)
77
- bases = members.map(&:base)
78
- return nil if bases.any?(&:nil?)
79
-
80
- first = bases.first.to_hash
81
- bases.all? { |b| b.to_hash == first } ? bases.first : nil
82
- end
83
-
84
- # Supplement: nest the base Standard (the stage/year/language belong to
85
- # the base), keep only the -SPN number/part on the wrapper.
86
- def build_supplement(parsed_hash)
87
- a = extract_attributes(parsed_hash)
88
- base = Cie::Identifiers::Standard.new(
89
- number: a[:base_number],
90
- stage: a[:stage],
91
- s_prefix: a.fetch(:s_prefix, false),
92
- language: a[:language],
93
- year: a[:year],
94
- style: "current", # supplements always use the colon style
95
- )
96
- Cie::Identifiers::Supplement.new(
97
- base: base,
98
- number: a[:supplement_number],
99
- part: a[:supplement_part],
100
- )
101
- end
102
-
103
- # Corrigendum: nest the base (a Standard, or a Supplement when the base
104
- # itself carries -SPN), keep only the /CorN number/year on the wrapper.
105
- def build_corrigendum(parsed_hash)
106
- a = extract_attributes(parsed_hash)
107
- base_std = Cie::Identifiers::Standard.new(
108
- number: a[:base_number],
109
- year: a[:base_year],
110
- style: "current",
111
- )
112
- base = if a[:base_supplement]
113
- Cie::Identifiers::Supplement.new(
114
- base: base_std,
115
- number: a[:base_supplement],
116
- part: a[:base_supplement_part],
117
- )
118
- else
119
- base_std
120
- end
121
- Cie::Identifiers::Corrigendum.new(
122
- base: base,
123
- number: a[:cor_number],
124
- year: a[:cor_year],
125
- )
126
- end
127
-
128
31
  # Determine which identifier class to use
129
32
  def determine_class(parsed_hash)
130
33
  # Tutorial Bundle (special text format)
@@ -147,11 +50,6 @@ module Pubid
147
50
  return Cie::Identifiers::Supplement
148
51
  end
149
52
 
150
- # Proceedings paper (x-prefixed or standalone)
151
- if parsed_hash[:paper_code]
152
- return Cie::Identifiers::Proceedings
153
- end
154
-
155
53
  # Conference (x-prefix)
156
54
  if parsed_hash[:conference]
157
55
  return Cie::Identifiers::Conference
@@ -281,69 +179,47 @@ module Pubid
281
179
  date_sep = "slash" # Special format for identical identifiers
282
180
  end
283
181
 
284
- # Style is the sole separator field (no date_separator):
285
- # colon -> current (":") dash -> legacy ("-") slash -> slash ("/")
286
- style = case date_sep
287
- when "colon" then "current"
288
- when "dash" then "legacy"
289
- when "slash" then "slash"
290
- else detect_style_fallback(parsed_hash)
182
+ # Detect style from date separator
183
+ style = if date_sep == "colon"
184
+ "current"
185
+ else
186
+ (date_sep == "dash" ? "legacy" : detect_style_fallback(parsed_hash))
291
187
  end
292
188
  attributes[:style] = style
293
189
 
294
- # Set year if present
190
+ # Set year and separator if present
295
191
  attributes[:year] = year_value if year_value
192
+ attributes[:date_separator] = date_sep if date_sep
296
193
 
297
- # Extract code (flat number/part/iteration/part_separator on the
298
- # identifier; the code's style is the identifier's own `style`).
194
+ # Extract code
299
195
  if parsed_hash[:number]
300
- attributes[:number] = extract_value(parsed_hash[:number])
196
+ code_attrs = { number: extract_value(parsed_hash[:number]),
197
+ style: style }
301
198
  if parsed_hash[:part]
302
- attributes[:part] = extract_value(parsed_hash[:part])
199
+ code_attrs[:part] =
200
+ extract_value(parsed_hash[:part])
303
201
  end
304
202
  if parsed_hash[:iteration]
305
- attributes[:iteration] = extract_value(parsed_hash[:iteration])
203
+ code_attrs[:iteration] =
204
+ extract_value(parsed_hash[:iteration])
306
205
  end
307
206
 
308
207
  # Detect part separator from parser markers
309
208
  if parsed_hash[:slash_sep]
310
- attributes[:part_separator] = "slash"
209
+ code_attrs[:part_separator] = "slash"
311
210
  elsif parsed_hash[:dash_sep]
312
- attributes[:part_separator] = "dash"
211
+ code_attrs[:part_separator] = "dash"
313
212
  end
213
+
214
+ attributes[:code] = Components::Code.new(**code_attrs)
314
215
  end
315
216
 
316
217
  # Conference number (separate from regular code)
317
218
  if parsed_hash[:conf_number]
318
- attributes[:number] =
219
+ attributes[:conference_number] =
319
220
  extract_value(parsed_hash[:conf_number])
320
221
  end
321
222
 
322
- # Proceedings paper: the paper itself is the document, so its identity
323
- # (code + running number, e.g. "OP01") is the flat +number+ for both
324
- # surface forms. The x-form's parent conference goes to
325
- # +conference+; the standalone form keeps its +page+ range.
326
- if parsed_hash[:paper_code]
327
- attributes[:number] =
328
- "#{extract_value(parsed_hash[:paper_code])}" \
329
- "#{extract_value(parsed_hash[:paper_number])}"
330
- if parsed_hash[:conf_number]
331
- attributes[:conference] =
332
- extract_value(parsed_hash[:conf_number])
333
- end
334
- end
335
- if parsed_hash[:page_range]
336
- attributes[:page] = extract_value(parsed_hash[:page_range])
337
- end
338
-
339
- # Conference /slug variant (opaque, verbatim)
340
- if parsed_hash[:variant]
341
- attributes[:variant] = extract_value(parsed_hash[:variant])
342
- end
343
-
344
- # D-series marker
345
- attributes[:d_prefix] = true if parsed_hash[:d_prefix]
346
-
347
223
  # Extract language (direct lang_code for slash_colon format)
348
224
  lang_code = nil
349
225
  lang_format = nil
@@ -449,11 +325,10 @@ module Pubid
449
325
  extract_value(parsed_hash[:amd_number])
450
326
  end
451
327
 
452
- # Tutorial bundle: the ordinal is the bundle's own `number` (also its
453
- # relaton-index key). A comma-list bundle instead keys via its `ids`
454
- # members through #root, so it needs no stored number.
328
+ # Extract bundle data
455
329
  if parsed_hash[:bundle_number]
456
- attributes[:number] = extract_value(parsed_hash[:bundle_number])
330
+ attributes[:bundle_number] =
331
+ extract_value(parsed_hash[:bundle_number])
457
332
  end
458
333
 
459
334
  # Extract trailing language from legacy_code_with_year
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "lutaml/model"
4
+
5
+ module Pubid
6
+ module Cie
7
+ module Components
8
+ # Code component for CIE identifiers
9
+ # Handles number-part-iteration with style awareness
10
+ class Code < Lutaml::Model::Serializable
11
+ attribute :number, :string # "013", "170", "198"
12
+ attribute :part, :string # "1", "2", "3"
13
+ attribute :iteration, :string # "1" in "006.1"
14
+ attribute :style, :string # "legacy" or "current"
15
+ attribute :part_separator, :string # "slash" or "dash" (preserves original)
16
+
17
+ def to_s
18
+ result = number
19
+
20
+ # Handle part AND iteration together (e.g., "19/2.1")
21
+ if part && iteration
22
+ # Use slash for part, then dot for iteration
23
+ result += "/#{part}.#{iteration}"
24
+ # Handle iteration only (e.g., "006.1", "13.3")
25
+ elsif iteration
26
+ result += ".#{iteration}"
27
+ # Handle part only (separator depends on part_separator or style)
28
+ elsif part
29
+ # Use part_separator if explicitly set (preserves original)
30
+ # Otherwise fall back to style-based separator
31
+ separator = case part_separator
32
+ when "slash"
33
+ "/"
34
+ when "dash"
35
+ "-"
36
+ else
37
+ # Legacy: slash "/" (e.g., "170/1")
38
+ # Current: dash "-" (e.g., "170-1")
39
+ style == "legacy" ? "/" : "-"
40
+ end
41
+ result += "#{separator}#{part}"
42
+ end
43
+
44
+ result
45
+ end
46
+
47
+ # Parse code string with style detection
48
+ def self.parse(code_str, style: :current)
49
+ return nil if code_str.nil? || code_str.strip.empty?
50
+
51
+ # Detect iteration format (dot separator)
52
+ if code_str.include?(".")
53
+ parts = code_str.split(".")
54
+ new(number: parts[0], iteration: parts[1], style: style)
55
+ # Detect part with separator
56
+ elsif code_str.include?("/")
57
+ parts = code_str.split("/")
58
+ new(number: parts[0], part: parts[1], style: "legacy",
59
+ part_separator: "slash")
60
+ elsif code_str.include?("-")
61
+ parts = code_str.split("-", 2) # Limit to 2 parts
62
+ new(number: parts[0], part: parts[1], style: "current",
63
+ part_separator: "dash")
64
+ # Simple number
65
+ else
66
+ new(number: code_str, style: style)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -2,28 +2,13 @@
2
2
 
3
3
  module Pubid
4
4
  module Cie
5
- # Base Identifier class for CIE.
6
- #
7
- # Inherits the shared Pubid::Identifier contract (format_registry, render,
8
- # to_urn, exclude, hash, eql?) while allowing CIE-specific attributes.
9
- #
10
- # +style+ is the sole number<->year separator field (there is no separate
11
- # date_separator): "current" -> ":", "legacy" -> "-", "slash" -> "/".
12
- # It defaults to "current" (the dominant value), so canonicalize_hash drops
13
- # it from the majority of rows and from_hash restores it.
14
- class Identifier < ::Pubid::Identifier
15
- attribute :style, :string, default: -> { "current" }
5
+ # Base Identifier class for CIE
6
+ # Provides parse() entry point
7
+ class Identifier < Lutaml::Model::Serializable
8
+ attribute :style, :string # "legacy" or "current"
16
9
 
10
+ # Parse CIE identifier string
17
11
  def self.parse(input)
18
- unless input.is_a?(String)
19
- raise Pubid::Errors::InvalidInputError,
20
- Pubid::INPUT_NOT_A_STRING_MESSAGE
21
- end
22
-
23
- if input.length > Pubid::MAX_INPUT_LENGTH
24
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
25
- end
26
-
27
12
  parsed = Parser.parse(input)
28
13
  builder = Builder.new
29
14
  builder.build(parsed, original_string: input)
@@ -5,44 +5,14 @@ require "lutaml/model"
5
5
  module Pubid
6
6
  module Cie
7
7
  module Identifiers
8
- # Bundle identifier for CIE: a comma-separated list of sibling documents,
9
- # each a full CIE identifier (typically a Supplement).
8
+ # Bundle identifier for CIE
9
+ # Handles comma-separated supplement lists
10
10
  # Example: CIE 198-SP1.1:2011,198-SP1.2:2011,198-SP1.3:2011,198-SP1.4:2011
11
- #
12
- # A CIE bundle is the parts of one supplement of one standard, so its
13
- # members share a base document. That shared +base+ is hoisted to the
14
- # bundle and the +ids+ carry only what differs (supplement number/part);
15
- # #root walks +base+ to the origin standard for the relaton-index key.
16
- # (Defensive: if members ever don't share a base, each id keeps its own
17
- # and +base+ is nil — see Builder#build_bundle.)
18
11
  class Bundle < SingleIdentifier
19
- attribute :base, Identifier, polymorphic: true
20
- attribute :ids, Identifier, polymorphic: true, collection: true
12
+ attribute :identifiers_string, :string # Store as string for now
21
13
 
22
- # The origin document: the shared base's root, else the first member's.
23
- def root
24
- (base || ids&.first)&.root || self
25
- end
26
-
27
- # The printed form writes the publisher once: the first member keeps its
28
- # "CIE " prefix, the rest are bare. A base-less member is re-based onto
29
- # the bundle's shared base for rendering.
30
- def to_s(**opts)
31
- return "" unless ids&.any?
32
-
33
- result = ids.each_with_index.map do |id, i|
34
- member = id.base ? id : rebased(id)
35
- i.zero? ? member.to_s : member.to_s.delete_prefix("CIE ")
36
- end.join(",")
37
-
38
- annotate_plain_render(result, **opts)
39
- end
40
-
41
- private
42
-
43
- # Attach the bundle's shared base to a base-less member for rendering.
44
- def rebased(id)
45
- Supplement.new(base: base, number: id.number, part: id.part)
14
+ def to_s
15
+ identifiers_string || ""
46
16
  end
47
17
  end
48
18
  end
@@ -9,27 +9,22 @@ module Pubid
9
9
  # Handles x-prefix conference proceedings
10
10
  # Example: CIE x038:2013, CIE x038:2013 Amendment 1
11
11
  class Conference < SingleIdentifier
12
- # :string overrides the base ::Pubid::Identifier Components::Code type.
13
- attribute :number, :string
12
+ attribute :conference_number, :string
14
13
  attribute :amendment_number, :string
15
- # Techstreet opaque /slug variant (no default -> round-trips cleanly)
16
- attribute :variant, :string
17
14
 
18
- def to_s(**opts)
19
- result = "CIE x#{number}"
15
+ def to_s
16
+ result = "CIE x#{conference_number}"
20
17
 
21
18
  # Date with separator
22
19
  if year
23
- result += "#{date_sep_char}#{year}"
20
+ separator = date_separator == "colon" ? ":" : "-"
21
+ result += "#{separator}#{year}"
24
22
  end
25
23
 
26
24
  # Amendment if present
27
25
  result += " Amendment #{amendment_number}" if amendment_number
28
26
 
29
- # Opaque /slug variant if present
30
- result += "/#{variant}" if variant
31
-
32
- annotate_plain_render(result, **opts)
27
+ result
33
28
  end
34
29
  end
35
30
  end