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
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "typed_stages"
4
+
5
+ module Pubid
6
+ module Ieee
7
+ # Scheme provides registry access for IEEE identifiers
8
+ # Following the proven ISO/IEC/CEN/BSI pattern
9
+ #
10
+ # This class is the single source of truth for:
11
+ # - TypedStage lookup by abbreviation
12
+ # - TypedStage lookup by IEEE draft notation
13
+ # - TypedStage lookup by ISO stage code
14
+ # - Identifier class selection based on type code
15
+ class Scheme < Pubid::Scheme
16
+ class << self
17
+ # Locate typed stage by abbreviation
18
+ # @param abbr [String, nil] stage abbreviation (e.g., "D1", "FDIS", "Std")
19
+ # @return [Components::TypedStage] matching typed stage
20
+ def locate_typed_stage_by_abbr(abbr)
21
+ return TypedStages::DEFAULT_TYPED_STAGE if abbr.nil? || abbr.to_s.strip.empty?
22
+
23
+ # Normalize abbreviation
24
+ abbr_str = abbr.to_s.strip
25
+
26
+ # Find typed stage that includes this abbreviation
27
+ typed_stage = TypedStages::TYPED_STAGES.find { |ts| ts.abbr.include?(abbr_str) }
28
+
29
+ # Fall back to default if not found
30
+ typed_stage || TypedStages::DEFAULT_TYPED_STAGE
31
+ end
32
+
33
+ # Locate typed stage by IEEE draft notation
34
+ # @param draft [String] IEEE draft notation (e.g., "D1", "D5", "P")
35
+ # @return [Components::TypedStage, nil] matching typed stage
36
+ def locate_typed_stage_by_ieee_draft(draft)
37
+ return nil if draft.nil? || draft.to_s.strip.empty?
38
+
39
+ draft_str = draft.to_s.strip
40
+
41
+ # Try exact match on abbreviation first
42
+ ts = TypedStages::TYPED_STAGES.find { |t| t.abbr.include?(draft_str) }
43
+ return ts if ts
44
+
45
+ # Try match on ieee_draft_equivalent
46
+ TypedStages::TYPED_STAGES.find { |t| t.ieee_draft_equivalent == draft_str }
47
+ end
48
+
49
+ # Locate typed stage by ISO stage code
50
+ # @param stage [String] ISO stage code (e.g., "WD", "CD", "DIS", "FDIS")
51
+ # @return [Components::TypedStage, nil] matching typed stage
52
+ def locate_typed_stage_by_iso_stage(stage)
53
+ return nil if stage.nil? || stage.to_s.strip.empty?
54
+
55
+ TypedStages::TYPED_STAGES.find { |ts| ts.iso_stage_equivalent == stage.to_s.strip }
56
+ end
57
+
58
+ # Locate identifier class by type code
59
+ # @param type_code [String, Symbol] type code (:standard, :draft, :std, :P, etc.)
60
+ # @return [Class] identifier class
61
+ def locate_identifier_klass_by_type_code(type_code)
62
+ type_str = type_code.to_s
63
+
64
+ case type_str
65
+ when "draft", "Draft Std", "Draft", "P"
66
+ # "P" indicates project draft status - maps to ProjectDraftIdentifier
67
+ Identifiers::ProjectDraftIdentifier
68
+ when "standard", "Std", "std"
69
+ Identifiers::Standard
70
+ else
71
+ # Default to base identifier
72
+ Identifiers::Base
73
+ end
74
+ end
75
+
76
+ # Get all typed stages
77
+ # @return [Array<Components::TypedStage>] all registered typed stages
78
+ def typed_stages
79
+ TypedStages::TYPED_STAGES
80
+ end
81
+
82
+ # Get default typed stage (published standard)
83
+ # @return [Components::TypedStage] default typed stage
84
+ def default_typed_stage
85
+ TypedStages::DEFAULT_TYPED_STAGE
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -101,7 +101,7 @@ module Pubid
101
101
  ),
102
102
 
103
103
  Components::TypedStage.new(
104
- abbr: ["CD", "CD1", "CD2", "CD3", "CD4"],
104
+ abbr: ["CD", "CD2", "CD3"],
105
105
  stage_code: "committee_draft",
106
106
  type_code: "draft",
107
107
  ieee_draft_equivalent: "D2-D3",
@@ -110,17 +110,6 @@ module Pubid
110
110
  project_status: true,
111
111
  ),
112
112
 
113
- # Committee Draft for Vote (IEC/ISO-led historical stage)
114
- Components::TypedStage.new(
115
- abbr: ["CDV"],
116
- stage_code: "committee_draft_for_vote",
117
- type_code: "draft",
118
- ieee_draft_equivalent: "D2-D3",
119
- iso_stage_equivalent: "CDV",
120
- approval_status: "unapproved",
121
- project_status: true,
122
- ),
123
-
124
113
  Components::TypedStage.new(
125
114
  abbr: ["DIS"],
126
115
  stage_code: "draft_international_standard",
@@ -17,8 +17,7 @@ module Pubid
17
17
  cc = code_component
18
18
  parts << cc if cc
19
19
 
20
- yc = year_component
21
- parts << yc if yc
20
+ parts << identifier.year if identifier.year
22
21
 
23
22
  dc = draft_component
24
23
  parts << dc if dc
@@ -40,9 +39,11 @@ module Pubid
40
39
  parts << "int"
41
40
  end
42
41
 
43
- # Conformance is always a ConformanceIdentifier wrapper (special_type
44
- # "conformance"), never inline on a base standard — the base no longer
45
- # carries a conf_number attribute, so there is no inline conf part.
42
+ if special_type != "conformance" && identifier.conf_number
43
+ conf = "conf.#{identifier.conf_number}"
44
+ conf += "-#{identifier.conf_year}" if identifier.conf_year
45
+ parts << conf
46
+ end
46
47
 
47
48
  if identifier.ashrae_number
48
49
  ashrae = "ashrae.#{identifier.ashrae_number}"
@@ -127,7 +128,8 @@ module Pubid
127
128
  end
128
129
 
129
130
  def publisher_component
130
- pub = normalized_publisher
131
+ pub = identifier.publisher || "IEEE"
132
+ pub = pub.to_s.downcase
131
133
 
132
134
  if identifier.copublisher&.any?
133
135
  copubs = identifier.copublisher.map(&:to_s).map(&:downcase)
@@ -137,18 +139,6 @@ module Pubid
137
139
  pub
138
140
  end
139
141
 
140
- # A dual-published document has TWO publishers, and
141
- # DualPublished#publisher returns them as an Array — which `to_s`
142
- # rendered into the URN as a literal Ruby array literal, brackets and
143
- # quotes included: `urn:ieee:["ieee", "asme"]`. Join them the same way a
144
- # copublisher list is joined above.
145
- def normalized_publisher
146
- names = Array(identifier.publisher)
147
- .map { |p| p.to_s.downcase }.reject(&:empty?)
148
-
149
- names.empty? ? "ieee" : names.join("-")
150
- end
151
-
152
142
  def type_component
153
143
  return nil unless identifier.type
154
144
 
@@ -164,23 +154,6 @@ module Pubid
164
154
  identifier.code_obj.to_s
165
155
  end
166
156
 
167
- # A multi-designation wrapper (AdoptedStandard, DualPublished,
168
- # MultiNumberedIdentifier) carries no year of its own — the year sits on
169
- # the designation it wraps — so the URN dropped it and two editions of
170
- # one document produced the SAME urn: "AIEE No 15-1944" and
171
- # "AIEE No 15-1959" both gave urn:ieee:aiee:15.
172
- #
173
- # Fixed here, in the one place that reads the year, rather than by
174
- # defining a `#year` method on each wrapper: `year` is a lutaml attribute
175
- # on the base and a method of that name would shadow its generated
176
- # accessor. `#root` already walks to the wrapped designation.
177
- def year_component
178
- return identifier.year if identifier.year
179
-
180
- root = identifier.root
181
- root.equal?(identifier) ? nil : root.year
182
- end
183
-
184
157
  def draft_component
185
158
  return nil unless identifier.draft_obj
186
159
 
data/lib/pubid/ieee.rb CHANGED
@@ -2,27 +2,16 @@
2
2
 
3
3
  module Pubid
4
4
  module Ieee
5
- extend Pubid::PrefixesSupport
6
-
7
- # Publisher prefix. The private PreParser::PUBLISHERS list also holds adopted
8
- # co-org names (ANSI, AIEE, ASA, ...) that are not leading routing tokens for
9
- # an IEEE reference, so they are deliberately excluded. The joint ISO/IEC/IEEE
10
- # form comes from Pubid::JOINT_PREFIXES.
11
- PREFIXES = ["IEEE"].freeze
12
-
13
5
  autoload :Aiee, "#{__dir__}/ieee/aiee"
14
6
  autoload :Builder, "#{__dir__}/ieee/builder"
15
- autoload :Identifier, "#{__dir__}/ieee/identifiers/base"
7
+ autoload :Identifier, "#{__dir__}/ieee/identifier"
16
8
  autoload :Identifiers, "#{__dir__}/ieee/identifiers"
17
9
  autoload :Ire, "#{__dir__}/ieee/ire"
18
10
  autoload :Nesc, "#{__dir__}/ieee/nesc"
19
11
  autoload :Parser, "#{__dir__}/ieee/parser"
20
- autoload :PreParser, "#{__dir__}/ieee/pre_parser"
21
- autoload :Compaction, "#{__dir__}/ieee/compaction"
22
- autoload :Renderer, "#{__dir__}/ieee/renderer"
12
+ autoload :Scheme, "#{__dir__}/ieee/scheme"
23
13
  autoload :TypedStages, "#{__dir__}/ieee/typed_stages"
24
14
  autoload :UrnGenerator, "#{__dir__}/ieee/urn_generator"
25
- autoload :UrnParser, "#{__dir__}/ieee/urn_parser"
26
15
 
27
16
  # Components submodule
28
17
  module Components
@@ -32,132 +21,12 @@ module Pubid
32
21
  autoload :TypedStage, "#{__dir__}/ieee/components/typed_stage"
33
22
  end
34
23
 
35
- # Document-number series carrying an IEEE registered trademark ("®").
36
- # 8802 is the ISO/IEC co-published form of the 802 series.
37
- REGISTERED_SERIES = %w[802 8802 2030].freeze
38
-
39
- # The ISO/IEC adoption of IEEE 802: the number alone identifies the series,
40
- # whatever publishers are printed.
41
- ISO_ADOPTED_SERIES = "8802"
42
-
43
24
  class << self
44
25
  def parse(input)
45
- unless input.is_a?(String)
46
- raise Pubid::Errors::InvalidInputError,
47
- Pubid::INPUT_NOT_A_STRING_MESSAGE
48
- end
49
-
50
- if input.length > Pubid::MAX_INPUT_LENGTH
51
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
52
- end
53
-
54
26
  Identifier.parse(input)
55
27
  end
56
-
57
- # True when the document number belongs to a registered-trademark series.
58
- # A project number keeps its series identity, so a leading "P" is
59
- # stripped. `prefix` is the code's letter series, which must be absent
60
- # (or the bare project "P") — "C802.1" is a different series that merely
61
- # starts with the same digits. `publishers` guards against claiming an
62
- # IEEE registered mark for another body that happens to have numbered a
63
- # document 802 or 2030 — "AIEE Std No. 802" predates the IEEE 802 series
64
- # by two decades. It is optional: with no publishers given the number
65
- # decides, which keeps the plain number lookup usable on its own.
66
- # @param number [String, nil] bare document number ("802", "P802")
67
- # @param prefix [String, nil] letter series of the code ("C" for C37.09)
68
- # @param publishers [Array<String>, String, nil] printed publisher tokens
69
- def registered_series?(number, prefix = nil, publishers: nil)
70
- return false unless prefix.nil? || prefix.to_s.empty? ||
71
- prefix.to_s == "P"
72
-
73
- bare = number.to_s.delete_prefix("P")
74
- return false unless REGISTERED_SERIES.include?(bare)
75
- return true if bare == ISO_ADOPTED_SERIES || publishers.nil?
76
-
77
- Array(publishers).any? { |p| p.to_s.split("/").include?("IEEE") }
78
- end
79
-
80
- # IEEE trademark symbol for a document number: ® for the registered
81
- # series, ™ for everything else. This is the entry point render sites
82
- # use, because they hold the identifier and so know its number — the
83
- # symbol must not depend on where in the rendered string the mark lands.
84
- def trademark_symbol_for(number, prefix = nil, publishers: nil)
85
- if registered_series?(number, prefix, publishers: publishers)
86
- "®"
87
- else
88
- "™"
89
- end
90
- end
91
-
92
- # IEEE trademark symbol for a rendered identifier string. Kept for
93
- # external callers only — every render site inside pubid passes the
94
- # document number to #trademark_symbol_for instead, because the first
95
- # numeric token of a rendered string is not reliably the document number
96
- # (a NESC or IRE string starts with the publication year).
97
- def trademark_symbol(rendered)
98
- trademark_symbol_for(rendered.to_s[/(?<![0-9A-Za-z])P?(\d+)/, 1])
99
- end
100
-
101
- # Auto-discover all identifier types from the Identifiers namespace
102
- # @return [Array<Class>] identifier classes that define a self.type Hash
103
- def identifier_types
104
- @identifier_types ||= Identifiers.constants
105
- .filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
106
- .select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
107
- .select { |c| c.type.is_a?(Hash) }
108
- end
109
-
110
- # Build typed stage index from TypedStages module
111
- # @return [Array<Pubid::Components::TypedStage>] all typed stages
112
- def all_typed_stages
113
- @all_typed_stages ||= TypedStages::TYPED_STAGES
114
- end
115
-
116
- # Lookup: type code -> identifier class
117
- # @param code [String, Symbol] the type key to find
118
- # @return [Class, nil] the matching identifier class
119
- def locate_type(code)
120
- identifier_types.find { |t| t.type[:key].to_s == code.to_s }
121
- end
122
-
123
- # Lookup: abbreviation -> typed stage
124
- # @param abbr [String, Symbol] the abbreviation to find
125
- # @return [Pubid::Components::TypedStage, nil] the matching typed stage
126
- def locate_stage(abbr)
127
- abbr_str = abbr.to_s.upcase
128
- all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
129
- end
130
-
131
- # Lookup: IEEE draft notation -> typed stage
132
- # @param draft [String] IEEE draft notation (e.g., "D1", "D5", "P")
133
- # @return [Pubid::Components::TypedStage, nil] the matching typed stage
134
- def locate_stage_by_ieee_draft(draft)
135
- return nil if draft.nil? || draft.to_s.strip.empty?
136
-
137
- draft_str = draft.to_s.strip
138
-
139
- # Try exact match on abbreviation first
140
- ts = all_typed_stages.find { |t| t.abbr.include?(draft_str) }
141
- return ts if ts
142
-
143
- # Try match on ieee_draft_equivalent
144
- all_typed_stages.find { |t| t.ieee_draft_equivalent == draft_str }
145
- end
146
-
147
- # Lookup: ISO stage code -> typed stage
148
- # @param stage [String] ISO stage code (e.g., "WD", "CD", "DIS", "FDIS")
149
- # @return [Pubid::Components::TypedStage, nil] the matching typed stage
150
- def locate_stage_by_iso_stage(stage)
151
- return nil if stage.nil? || stage.to_s.strip.empty?
152
-
153
- all_typed_stages.find { |ts| ts.iso_stage_equivalent == stage.to_s.strip }
154
- end
155
28
  end
156
29
  end
157
30
  end
158
31
 
159
32
  Pubid::Registry.register(:ieee, Pubid::Ieee)
160
-
161
- # Per-flavor format registry: inherits global formats, overrides :human
162
- Pubid::Ieee::Identifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
163
- Pubid::Ieee::Identifier.format_registry.register(:human, renderer: Pubid::Ieee::Renderer)
@@ -10,6 +10,7 @@ module Pubid
10
10
  autoload :Ire, "#{__dir__}/ire"
11
11
  autoload :Nesc, "#{__dir__}/nesc"
12
12
  autoload :Parser, "#{__dir__}/parser"
13
+ autoload :Scheme, "#{__dir__}/scheme"
13
14
  autoload :TypedStages, "#{__dir__}/typed_stages"
14
15
  autoload :UrnGenerator, "#{__dir__}/urn_generator"
15
16
 
@@ -9,7 +9,7 @@ module Pubid
9
9
  type_letter = stringify(hash[:type])
10
10
 
11
11
  attrs = {
12
- number: stringify(hash[:number]),
12
+ code: stringify(hash[:code]),
13
13
  appendix: stringify(hash[:appendix]),
14
14
  part: stringify(hash[:part]),
15
15
  annex: stringify(hash[:annex]),
@@ -17,7 +17,7 @@ module Pubid
17
17
  version: stringify(hash[:version]),
18
18
  }.compact
19
19
 
20
- Pubid::Iho.identifier_klass_for_type_letter(type_letter).new(**attrs)
20
+ Scheme.identifier_klass_for_type_letter(type_letter).new(**attrs)
21
21
  end
22
22
 
23
23
  def self.build(parsed)
@@ -1,7 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # The IHO flavor base class is Pubid::Iho::Identifier — a real Pubid::Identifier
4
- # subclass that every concrete IHO identifier descends from, so `is_a?` identity
5
- # and the shared polymorphic `from_hash` work natively (no facade needed). Its
6
- # body and `.parse` live in identifiers/base.rb; this file just ensures it is loaded when a consumer
7
- # references Pubid::Iho::Identifier directly.
3
+ module Pubid
4
+ module Iho
5
+ # Entry point for parsing IHO identifiers.
6
+ module Identifier
7
+ # Parse an IHO identifier string into an identifier object
8
+ # @param identifier [String] The IHO identifier string to parse
9
+ # @return [Pubid::Iho::Identifiers::Base] The appropriate identifier object
10
+ # @raise [Parslet::ParseFailed] If parsing fails
11
+ def self.parse(identifier)
12
+ parsed = Parser.parse(identifier)
13
+ Builder.build(parsed)
14
+ rescue Parslet::ParseFailed => e
15
+ raise "Failed to parse IHO identifier '#{identifier}': #{e.message}"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -2,74 +2,40 @@
2
2
 
3
3
  module Pubid
4
4
  module Iho
5
- # Base class for all IHO identifiers. Canonical name Pubid::Iho::Identifier;
6
- # every concrete IHO identifier (Identifiers::*) descends from it.
7
- #
8
- # IHO identifiers have the form:
9
- # IHO {S|P|M|B|C}-{number}[ Ap. {appendix}][ Part {part}][ Annex {annex}][ Suppl {supplement}][ {version}]
10
- #
11
- # The leading IHO publisher prefix is optional on input but always
12
- # emitted on output.
13
- class Identifier < ::Pubid::Identifier
14
- # Parse an IHO identifier string into an identifier object
15
- # @param identifier [String] The IHO identifier string to parse
16
- # @return [Pubid::Iho::Identifier] The appropriate identifier object
17
- # @raise [Pubid::Errors::ParseError] If parsing fails
18
- def self.parse(identifier)
19
- unless identifier.is_a?(String)
20
- raise Pubid::Errors::InvalidInputError,
21
- Pubid::INPUT_NOT_A_STRING_MESSAGE
5
+ module Identifiers
6
+ # Base class for all IHO identifiers.
7
+ #
8
+ # IHO identifiers have the form:
9
+ # IHO {S|P|M|B|C}-{code}[ Ap. {appendix}][ Part {part}][ Annex {annex}][ Suppl {supplement}][ {version}]
10
+ #
11
+ # The leading IHO publisher prefix is optional on input but always
12
+ # emitted on output.
13
+ class Base < Pubid::Identifier
14
+ attribute :publisher, :string, default: "IHO"
15
+ attribute :code, :string
16
+ attribute :appendix, :string
17
+ attribute :part, :string
18
+ attribute :annex, :string
19
+ attribute :supplement, :string
20
+ attribute :version, :string
21
+
22
+ def self.parse(string)
23
+ Iho::Identifier.parse(string)
22
24
  end
23
25
 
24
- if identifier.length > Pubid::MAX_INPUT_LENGTH
25
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
26
+ # Render the identifier as a string in canonical IHO form.
27
+ # @return [String]
28
+ def to_s
29
+ letter = type.is_a?(Hash) ? type[:short].to_s : type.to_s
30
+ rendered = "#{publisher} #{letter}-#{code}"
31
+ rendered << " Ap. #{appendix}" if appendix
32
+ rendered << " Part #{part}" if part
33
+ rendered << " Annex #{annex}" if annex
34
+ rendered << " Suppl #{supplement}" if supplement
35
+ rendered << " #{version}" if version
36
+ rendered
26
37
  end
27
-
28
- parsed = Parser.parse(identifier)
29
- Builder.build(parsed)
30
38
  end
31
-
32
- # `number` overrides the generic Components::Code attribute with a plain
33
- # string (same pattern as `part` below); it holds the IHO document
34
- # number (e.g. "100", "1/21"). Kept as the generic `number` so the
35
- # relaton index sorts/binary-searches on it natively via `id.number`.
36
- attribute :number, :string
37
- attribute :publisher, :string, default: "IHO"
38
- attribute :appendix, :string
39
- attribute :part, :string
40
- attribute :annex, :string
41
- attribute :supplement, :string
42
- attribute :version, :string
43
-
44
- # Polymorphic type map for lutaml::Model key_value serialization: maps
45
- # each subclass's polymorphic_name to its class name so `from_hash` can
46
- # re-instantiate the concrete type from `_type`.
47
- IHO_TYPE_MAP = {
48
- "pubid:iho:standard" => "Pubid::Iho::Identifiers::Standard",
49
- "pubid:iho:publication" => "Pubid::Iho::Identifiers::Publication",
50
- "pubid:iho:miscellaneous" => "Pubid::Iho::Identifiers::Miscellaneous",
51
- "pubid:iho:bibliographic" => "Pubid::Iho::Identifiers::Bibliographic",
52
- "pubid:iho:circular-letter" => "Pubid::Iho::Identifiers::CircularLetter",
53
- }.freeze
54
-
55
- # The base Pubid::Identifier no longer auto-maps attributes, so each
56
- # flavor's top class must declare its own key_value mapping. IHO
57
- # attributes are plain strings, so they map directly. `publisher` is
58
- # intentionally omitted: it is always the "IHO" default and is restored
59
- # on load.
60
- key_value do
61
- map "_type", to: :_type, polymorphic_map: IHO_TYPE_MAP
62
- map "number", to: :number
63
- map "appendix", to: :appendix
64
- map "part", to: :part
65
- map "annex", to: :annex
66
- map "supplement", to: :supplement
67
- map "version", to: :version
68
- end
69
-
70
- # from_hash is the shared polymorphic dispatch on Pubid::Identifier.
71
- # IHO_TYPE_MAP remains as the key_value polymorphic_map.
72
39
  end
73
-
74
40
  end
75
41
  end
@@ -5,11 +5,15 @@ module Pubid
5
5
  module Identifiers
6
6
  # IHO Bibliographic Publication (B series).
7
7
  # Example: IHO B-4 2.19.0.
8
- class Bibliographic < Identifier
8
+ class Bibliographic < Base
9
9
  def self.type
10
10
  { key: :bibliographic, title: "Bibliographic Publication",
11
11
  short: "B" }
12
12
  end
13
+
14
+ def type
15
+ self.class.type
16
+ end
13
17
  end
14
18
  end
15
19
  end
@@ -5,10 +5,14 @@ module Pubid
5
5
  module Identifiers
6
6
  # IHO Circular Letter (C series).
7
7
  # Example: IHO C-13 1.0.0.
8
- class CircularLetter < Identifier
8
+ class CircularLetter < Base
9
9
  def self.type
10
10
  { key: :circular_letter, title: "Circular Letter", short: "C" }
11
11
  end
12
+
13
+ def type
14
+ self.class.type
15
+ end
12
16
  end
13
17
  end
14
18
  end
@@ -5,11 +5,15 @@ module Pubid
5
5
  module Identifiers
6
6
  # IHO Miscellaneous Publication (M series).
7
7
  # Example: IHO M-3 2.0.0.
8
- class Miscellaneous < Identifier
8
+ class Miscellaneous < Base
9
9
  def self.type
10
10
  { key: :miscellaneous, title: "Miscellaneous Publication",
11
11
  short: "M" }
12
12
  end
13
+
14
+ def type
15
+ self.class.type
16
+ end
13
17
  end
14
18
  end
15
19
  end
@@ -5,10 +5,14 @@ module Pubid
5
5
  module Identifiers
6
6
  # IHO Publication (P series).
7
7
  # Examples: IHO P-1 1.0.0, IHO P-1/21 1.0.0, IHO P-6-3 1.0.0.
8
- class Publication < Identifier
8
+ class Publication < Base
9
9
  def self.type
10
10
  { key: :publication, title: "Publication", short: "P" }
11
11
  end
12
+
13
+ def type
14
+ self.class.type
15
+ end
12
16
  end
13
17
  end
14
18
  end
@@ -5,10 +5,14 @@ module Pubid
5
5
  module Identifiers
6
6
  # IHO Standards and Specifications (S series).
7
7
  # Examples: IHO S-44 5.0.0, IHO S-100 Part 4a 1.0.0, IHO S-65 Ap. A 1.0.0.
8
- class Standard < Identifier
8
+ class Standard < Base
9
9
  def self.type
10
10
  { key: :standard, title: "Standards and Specifications", short: "S" }
11
11
  end
12
+
13
+ def type
14
+ self.class.type
15
+ end
12
16
  end
13
17
  end
14
18
  end
@@ -3,6 +3,7 @@
3
3
  module Pubid
4
4
  module Iho
5
5
  module Identifiers
6
+ autoload :Base, "#{__dir__}/identifiers/base"
6
7
  autoload :Bibliographic, "#{__dir__}/identifiers/bibliographic"
7
8
  autoload :CircularLetter, "#{__dir__}/identifiers/circular_letter"
8
9
  autoload :Miscellaneous, "#{__dir__}/identifiers/miscellaneous"
@@ -5,7 +5,7 @@ require "parslet"
5
5
  module Pubid
6
6
  module Iho
7
7
  # Parser class for IHO identifiers
8
- class Parser < ::Pubid::Parser::Grammar
8
+ class Parser < Parslet::Parser
9
9
  rule(:space) { str(" ") }
10
10
  rule(:dash) { str("-") }
11
11
  rule(:dot) { str(".") }
@@ -19,8 +19,8 @@ module Pubid
19
19
  (str(":") >> digits) | (str("/") >> digits) | (dash >> digits) | match("[A-Z]")
20
20
  end
21
21
 
22
- rule(:number) do
23
- (digits >> number_suffix.maybe).as(:number)
22
+ rule(:code) do
23
+ (digits >> number_suffix.maybe).as(:code)
24
24
  end
25
25
 
26
26
  rule(:appendix) do
@@ -54,7 +54,7 @@ module Pubid
54
54
 
55
55
  rule(:identifier) do
56
56
  (str("IHO") >> space).maybe >>
57
- series >> dash >> number >>
57
+ series >> dash >> code >>
58
58
  appendix.maybe >> part.maybe >> annex.maybe >> supplement.maybe >> version.maybe
59
59
  end
60
60
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Iho
5
+ # Scheme registry for IHO identifier types.
6
+ class Scheme < Pubid::Scheme
7
+ IDENTIFIERS = [
8
+ Identifiers::Standard,
9
+ Identifiers::Publication,
10
+ Identifiers::Miscellaneous,
11
+ Identifiers::Bibliographic,
12
+ Identifiers::CircularLetter,
13
+ ].freeze
14
+
15
+ def initialize
16
+ @identifiers = IDENTIFIERS
17
+ end
18
+
19
+ # Look up an identifier class by its IHO series letter (S/P/M/B/C).
20
+ # @param letter [String]
21
+ # @return [Class<Identifiers::Base>]
22
+ # @raise [KeyError] if the letter is not a known IHO series
23
+ def self.identifier_klass_for_type_letter(letter)
24
+ @by_letter ||= IDENTIFIERS.to_h { |klass| [klass.type[:short], klass] }
25
+ @by_letter.fetch(letter.to_s)
26
+ end
27
+ end
28
+ end
29
+ end