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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: facbee8180c6ede119bb1b64a7b093042c2796a2284fe8ad5f94f7e3a2ac2883
4
- data.tar.gz: 4f6c85a812219cab5f8f0e8b1d476551f062ff1dfa4c3b2edf9495964ddfddbb
3
+ metadata.gz: e650437c35c0d8e6ba019b07ae835ca224bd620415bd9c9d27c20a36a1b82589
4
+ data.tar.gz: 3d8d15f420d6cff7dbba69007218d670cde06511fc00df7b7dcfd957493600cb
5
5
  SHA512:
6
- metadata.gz: 26536df235c241698783ecd1cba744adaa486f9c71ed8fd6e15fa45aaad0d8fea8eb4a5d84e5fed7a934287aa70cfba6f2f14a1a207d53801a8d9227925f6a8e
7
- data.tar.gz: 19bf310a9550e104bbe6c29dc563aa5e2ace16d7141aec2357e4976e8ac0d4e129fcbfcda9b47ab32961b2a03b44798506b44be97da432d4ed04ad68b31f0ef8
6
+ metadata.gz: f231838d92fd52c9d8fb298899a6f62018c29872d0d67104ea064ea70ea5cd4e115490876e2e83ba9601da87aeb9060d9f28e34535d0495ca680bc93ad6801ec
7
+ data.tar.gz: de691a34d6783e9df75f4304315d6791eb30e68b7788177f8e04285aa8f88372e38ce9754527eb8479db0926ef9276ddef7c6fae1ede170380541459c150a823
data/README.adoc CHANGED
@@ -1,15 +1,54 @@
1
1
  = PubID: Interoperable identifiers for information resources
2
2
 
3
- image:https://img.shields.io/gem/v/pubid.svg["pubid Gem Version", link="https://rubygems.org/gems/pubid"]
3
+ image:https://img.shields.io/gem/v/pubid-core.svg["pubid-core Gem Version", link="https://rubygems.org/gems/pubid-core"]
4
4
  image:https://github.com/metanorma/pubid/actions/workflows/rake.yml/badge.svg["Build Status", link="https://github.com/metanorma/pubid/actions/workflows/rake.yml"]
5
5
  image:https://img.shields.io/github/issues-pr-raw/metanorma/pubid.svg["Pull Requests", link="https://github.com/metanorma/pubid/pulls"]
6
6
  image:https://img.shields.io/github/commits-since/metanorma/pubid/latest.svg["Commits since latest",link="https://github.com/metanorma/pubid/releases"]
7
7
 
8
+ == Badges
9
+
10
+ [cols="3*", options="header"]
11
+ |===
12
+ | Core & Meta | Standards Organizations | Regional Standards
13
+
14
+ | pubid image:https://img.shields.io/gem/v/pubid.svg["pubid", link="https://rubygems.org/gems/pubid"]
15
+ | pubid-iso image:https://img.shields.io/gem/v/pubid-iso.svg["pubid-iso", link="https://rubygems.org/gems/pubid-iso"]
16
+ | pubid-cen image:https://img.shields.io/gem/v/pubid-cen.svg["pubid-cen", link="https://rubygems.org/gems/pubid-cen"]
17
+
18
+ | pubid-core image:https://img.shields.io/gem/v/pubid-core.svg["pubid-core", link="https://rubygems.org/gems/pubid-core"]
19
+ | pubid-iec image:https://img.shields.io/gem/v/pubid-iec.svg["pubid-iec", link="https://rubygems.org/gems/pubid-iec"]
20
+ | pubid-bsi image:https://img.shields.io/gem/v/pubid-bsi.svg["pubid-bsi", link="https://rubygems.org/gems/pubid-bsi"]
21
+
22
+ |
23
+ | pubid-ieee image:https://img.shields.io/gem/v/pubid-ieee.svg["pubid-ieee", link="https://rubygems.org/gems/pubid-ieee"]
24
+ | pubid-jis image:https://img.shields.io/gem/v/pubid-jis.svg["pubid-jis", link="https://rubygems.org/gems/pubid-jis"]
25
+
26
+ |
27
+ | pubid-nist image:https://img.shields.io/gem/v/pubid-nist.svg["pubid-nist", link="https://rubygems.org/gems/pubid-nist"]
28
+ |
29
+
30
+ |
31
+ | pubid-etsi image:https://img.shields.io/gem/v/pubid-etsi.svg["pubid-etsi", link="https://rubygems.org/gems/pubid-etsi"]
32
+ |
33
+
34
+ |
35
+ | pubid-itu image:https://img.shields.io/gem/v/pubid-itu.svg["pubid-itu", link="https://rubygems.org/gems/pubid-itu"]
36
+ |
37
+
38
+ |
39
+ | pubid-ccsds image:https://img.shields.io/gem/v/pubid-ccsds.svg["pubid-ccsds", link="https://rubygems.org/gems/pubid-ccsds"]
40
+ |
41
+
42
+ |
43
+ | pubid-plateau image:https://img.shields.io/gem/v/pubid-plateau.svg["pubid-plateau", link="https://rubygems.org/gems/pubid-plateau"]
44
+ |
45
+ |===
46
+
8
47
  == Quick Start
9
48
 
10
49
  [source,ruby]
11
50
  ----
12
- gem install pubid
51
+ gem install pubid-core
13
52
 
14
53
  require 'pubid/iso'
15
54
 
@@ -253,46 +292,6 @@ base.root.equal?(base) # => true
253
292
  * ✅ **Works with supplements** - Traverses supplement chains correctly
254
293
 
255
294
 
256
- == Flavor Prefix Routing
257
-
258
- Every flavor exposes a static `prefixes` method returning the *leading
259
- identifier prefix tokens* it recognizes — the tokens a printed identifier can
260
- start with such that the string belongs to that SDO. This is the routing key a
261
- consumer (such as relaton) uses to dispatch a reference string to the right
262
- backend, without parsing.
263
-
264
- [source,ruby]
265
- ----
266
- require 'pubid'
267
-
268
- Pubid::Iso.prefixes
269
- # => ["ISO", "ISO/IEC", "IEC/ISO", "ISO/IEC/IEEE"]
270
-
271
- Pubid::Bsi.prefixes
272
- # => ["BS", "BSI", "DD", "PD", "PAS", "NA", "TS", "HB", ... , "BS EN ISO"]
273
-
274
- # Look up a single flavor by name
275
- Pubid.prefixes(:iec)
276
- # => ["IEC", "CISPR", "IECEE", "IECEx", "IECQ", "ISO/IEC", "IEC/ISO", "ISO/IEC/IEEE"]
277
-
278
- # Reverse index: prefix token => owning flavor(s)
279
- Pubid.prefix_flavors["ISO/IEC"] # => [:iec, :iso]
280
- Pubid.prefix_flavors["ISO/IEC/IEEE"] # => [:iec, :ieee, :iso]
281
- Pubid.prefix_flavors["DD"] # => [:bsi]
282
- ----
283
-
284
- **Semantics** (see `Pubid::PrefixesSupport` for the full contract):
285
-
286
- * **Static** — no identifier string is parsed; callable at startup.
287
- * **Uniform** — every registered flavor returns a plain `Array<String>`.
288
- * **Symmetric joints** — a co-published prefix is listed by every co-publisher
289
- (`"ISO/IEC"` is in both `Pubid::Iso.prefixes` and `Pubid::Iec.prefixes`).
290
- * **Inclusion** — publisher prefixes (`ISO`, `NIST`, `BS`…) and leading
291
- series/type tokens that can *begin* a reference (BSI `DD`/`PD`, NIST `FIPS`).
292
- * **Exclusion** — pure sub-series that never lead a reference and
293
- dangerously-ambiguous single letters (e.g. BSI aerospace `A`/`B`/`C`).
294
-
295
-
296
295
  == Advanced Rendering Styles
297
296
 
298
297
  ISO and IEC identifiers support multiple abbreviation forms for supplements to maintain round-trip fidelity with different official formats.
@@ -639,13 +638,15 @@ lib/tasks/export.rake # Rake tasks: export:website_data, export:a
639
638
 
640
639
  == Repository
641
640
 
642
- This repository provides the single `pubid` Ruby gem, which implements the PubID
641
+ This repository is a monorepo for the PubID Ruby gems, which implement the PubID
643
642
  identifier data model and its various components.
644
643
 
645
- The `pubid` gem implements identifiers from multiple standards organizations,
646
- making it easier for developers to work with them in their applications. All 22+
647
- supported flavors (ISO, IEC, NIST, IEEE, …) live under `lib/pubid/{flavor}/` and
648
- ship together in the one gem.
644
+ The PubID Ruby gems implement identifiers from multiple standards organizations,
645
+ making it easier for developers to work with them in their applications.
646
+
647
+ This repository contains all the `pubid-*` gems consolidated into a single
648
+ monorepo for easier development and maintenance while preserving individual gem
649
+ releases.
649
650
 
650
651
  == Structure
651
652
 
@@ -670,11 +671,11 @@ The repository is organized as follows:
670
671
  ├── spec/ # Tests
671
672
  │ ├── pubid/ # Per-flavor tests
672
673
  │ ├── fixtures/ # Bulk test fixtures
673
- │ └── integration/ # Cross-flavor integration tests
674
+ │ └── integration/ # Cross-gem tests
674
675
  ├── docs/ # Documentation
675
676
  ├── .github/workflows/ # CI/CD workflows
676
677
  ├── Gemfile # Root Gemfile for development
677
- ├── Rakefile # Test, lint, build, and release tasks
678
+ ├── Rakefile # Monorepo management tasks
678
679
  ├── .rubocop.yml # Shared RuboCop configuration
679
680
  └── LICENSE.txt # Shared license
680
681
  ----
@@ -1728,13 +1729,9 @@ The V2 implementation strictly follows these design principles:
1728
1729
 
1729
1730
  Object-Oriented Design:: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
1730
1731
  MECE Organization:: Mutually Exclusive (no overlap), Collectively Exhaustive (full coverage), clear boundaries
1731
- Separation of Concerns:: Parser handles syntax only, Builder handles transformation only, Renderer handles formatting only
1732
- Self-Describing Types:: Each identifier class IS the type definition — no central registry required for type metadata
1733
- Renderer Pattern:: Dedicated per-flavor Renderer classes handle human-readable output; identifier `to_s` delegates to `render(format: :human)` via `FormatRegistry`
1734
- Single Source of Truth:: Series matching, type metadata, and rendering logic live in exactly one place per concern
1732
+ Separation of Concerns:: Parser handles syntax only, Builder handles transformation only, Identifier handles rendering only
1735
1733
  Extensibility:: Use inheritance and polymorphism, plugin/registry architecture, avoid hardcoding
1736
1734
  Test Quality:: Each class has dedicated spec file, no lowering pass thresholds, test actual behavior
1737
- Autoload Everywhere:: Ruby autoload replaces `require_relative` for internal library code — lazy loading, no circular dependency risk
1738
1735
 
1739
1736
  === Pre-parser Normalization (update_codes.yaml)
1740
1737
 
@@ -1,7 +1,4 @@
1
1
  IECEx TRF 60079-11v3-4:2002: IECEx TRF 60079-11v4C:2002
2
- # IECEE TRF data-source anomaly: the OD-010-1 ampersand separator (&) was
3
- # mistyped as a semicolon (;) in IEC's source data. See pubid/pubid#239.
4
- IECEE TRF 60335-2-4;7F:2012: IECEE TRF 60335-2-4&7F:2012
5
2
  IECEE TRF cispr 15N:2022: IECEE TRF CISPR 15N:2022
6
3
  IECEE TRF cispr 15M:2021: IECEE TRF CISPR 15M:2021
7
4
  IECEE TRF cispr 15L:2020: IECEE TRF CISPR 15L:2020
@@ -1,9 +1,4 @@
1
1
  IEEE Unapproved Draft Std PC37.110/D911Oct 07: IEEE Unapproved Draft Std PC37.110/D711, Oct 07
2
- # Issue #206: "IEEE Unapproved Draft Std P15289, 06" — the ", 06" suffix
3
- # has no clear meaning in IEEE's own grammar. Treating it as a draft
4
- # iteration number (D6) gives a parseable form. Conservative targeted
5
- # normalization rather than a general rule; revisit if more cases surface.
6
- IEEE Unapproved Draft Std P15289, 06: IEEE Unapproved Draft Std P15289/D6
7
2
  IEEE C57.139/D14June 2010: IEEE C57.139/D14, June 2010
8
3
  IEEE P1653.5/D7d1 November, 2019: IEEE P1653.5/D7.1 November, 2019
9
4
  IEEE P1017/D062012: P1017/D062012, Jun 2012
@@ -37,13 +32,7 @@ ISO/IEC/IEEE P26515 FDIS, May 2018: ISO/IEC/IEEE FDIS P26515, May 2018
37
32
  IEEE Std Std 1139-2008: IEEE Std 1139-2008
38
33
  IEC/IEEE P60214-2, FDIS 2018: IEC/IEEE FDIS P60214-2-2018(E)
39
34
  IEC/IEEE P62582-6, FDIS 2018: IEC/IEEE FDIS P62582-6-2018(E)
40
- # ISO/IEC DIS P26511.2 (May 2017) is an IEEE-style citation of an ISO/IEC
41
- # DIS draft — ".2" is a draft version, not a part, so the prior mapping
42
- # to "ISO/IEC DIS P26511-2" produced a phantom document that doesn't exist
43
- # (ISO/IEC 26511 has no part 2). The ISO parser doesn't yet support the
44
- # IEEE-style "P" prefix or the ", Month Year" date suffix on ISO/IEC DIS
45
- # citations, so normalize to the bare DIS base + year. See pubid/pubid#212.
46
- ISO/IEC DIS P26511.2, May 2017: ISO/IEC DIS 26511.2:2017
35
+ ISO/IEC DIS P26511.2, May 2017: ISO/IEC DIS P26511-2, May 2017
47
36
  ISO/IEC/IEEE P90003_FDIS, August 2018: ISO/IEC/IEEE FDIS P90003, August 2018
48
37
  ISO/IEC/IEEE&#xA0;P29119-1/FDIS, September 2021: ISO/IEC/IEEE FDIS P29119-1, September 2021
49
38
  ISO/IEC/IEEE/ P12207-2/D3_FDIS, July 2020: ISO/IEC/IEEE FDIS P12207-2/D3, July 2020
@@ -113,98 +102,3 @@ IEEE Unapproved Draft Std P1635/ASHRAE 21_D4, Jan 2010: IEEE Unapproved Draft St
113
102
  IEC/IEEE 62582-1:2011 Edition 1.0 2011-08: IEC/IEEE 62582-1-2011 Edition 1.0 2011-08
114
103
  ISO/IEC/IEEE CD P26513/D1, August 2015: ISO/IEC/IEEE P26513/D1, August 2015
115
104
  /C37.0I0d-1984/: C37.010d-1984
116
-
117
- # --- month spellings pubid rejects -> canonical (relaton-ieee normtitles) ---
118
- # Surgical, case-sensitive: only forms the grammar genuinely REJECTS. Do NOT
119
- # add full-name->abbr rules (pubid accepts "June"/"September") or a blanket
120
- # underscore rule — a broader ruleset regressed 12 already-parsing normtitles.
121
- # Validated over relaton's 8,767 normtitles: +33 gained, 0 regressions.
122
- # 4-letter abbreviation
123
- /\bSept\b/: Sep
124
- # OCR typos seen in the IEEE rawbib feed
125
- /\bFeburary\b/: Feb
126
- /\bNovemer\b/: Nov
127
- /\bOctobor\b/: Oct
128
- /\bJanurary\b/: Jan
129
- # lowercase-only month words -> proper case (case-sensitive: leaves correct case alone)
130
- /\bjanuary\b/: January
131
- /\bfebruary\b/: February
132
- /\bmarch\b/: March
133
- /\bapril\b/: April
134
- /\bjune\b/: June
135
- /\bjuly\b/: July
136
- /\baugust\b/: August
137
- /\bseptember\b/: September
138
- /\boctober\b/: October
139
- /\bnovember\b/: November
140
- /\bdecember\b/: December
141
-
142
- # --- one-off IEEE normtitles migrated from relaton-ieee RawbibIdParser ---
143
- # Exact-match, anchored (plain keys compile to /^…$/), zero-regression: each
144
- # maps a specific malformed catalog string to relaton's canonical id, which
145
- # pubid parses losslessly. (hand-off: ieee-update-codes-oneoffs.) Group 1
146
- # parses on its own; the "dotted-draft" group relies on the verbatim-draft fix.
147
- "IEEE Std P1073.1.3.4/D3.0": "IEEE Std P11073.00101"
148
- "IEEE P802.1Qbu/03.0, July 2015": "IEEE P802.1Qbu/D-3.0-2015"
149
- "IEEE P802.11aqTM/013.0 October 2017": "IEEE P802.11aqTM/D-13.0-2017"
150
- "IEC/IEEE P62271-37-013:2015 D13.4": "IEC/IEEE P62271.37-013/D-13.4-2015"
151
- "ISO/IEC/IEEE DIS P42020:201x(E), June 2017": "ISO/IEC/IEEE DIS P42020-2017-06"
152
- "ISO/IEC/IEEE DIS P16326/201x, December 2018": "ISO/IEC/IEEE DIS P16326-2018-12"
153
- "ISO/IEC/IEEE/P21839, 2019(E)": "ISO/IEC/IEEE P21839-2019"
154
- "ISO/IEC/IEEE CD2 P12207-2: 201x(E), February 2019": "ISO/IEC/IEEE CD2 P12207.2-2019-02"
155
- "ISO/IEC/IEEE P42010.WD4:2019(E)": "ISO/IEC/IEEE P42010/D-4-2019"
156
- "IEC/IEEE P63195_CDV/V3, February 2020": "IEC/IEEE CDV P63195-2020-02"
157
- "ISO/IEC/IEEE/P16085_DIS, March 2020": "ISO/IEC/IEEE DIS P16085-2020-03"
158
- "ANSI/IEEE Std: Outdoor Apparatus Bushings": "ANSI/IEEE Std 21-1976-11"
159
- "Draft National Electrical Safety Code, January 2016": "IEEE PC2-2016-01"
160
- "International Standard ISO/IEC 8802-9: 1996(E) ANSI/IEEE Std 802.9, 1996 Edition": "ISO/IEC/IEEE Std 802.9-1996"
161
- "ISO/IEC13210: 1994 (E) ANSI/IEEE Std 1003.3-1991": "ISO/IEC/IEEE 13210-1994"
162
- "J-STD-016-1995": "IEEE 016-1995"
163
- "Nuclear EQ Sourcebook and Supplement": "IEEE 7438946"
164
- "PC37.30.2/D043 Rev 18, May 2015": "IEEE PC37.30-2/D-043/R-18-2015"
165
- "IEEE/IEC P62582 CD2 proposal, May 2017": "IEEE/IEC CD2 P62582-2017-05"
166
- "ISO/IEC/IEEE P16326:201x WD.4a, July 2017": "ISO/IEC/IEEE P16326/D-4a-2017-07"
167
- "ISO/IEC/IEEE CD.1 P21839, October 2017": "ISO/IEC/IEEE CD1 P21839-2017-10"
168
- "ISO/IEC/IEEE P16326:201x WD5, December 2017": "ISO/IEC/IEEE P16326/D-5-2017-12"
169
- "IEEE/ISO/IEC P42010.CD1-V1.0, April 2020": "IEEE/ISO/IEC CD1 P42010-2020-04"
170
- "Unapproved Draft Std ISO/IEC FDIS 15288:2007(E) IEEE P15288/D3,": "ISO/IEC/IEEE FDIS Std P15288/D-3-2007"
171
- "IS0/IEC/IEEE 8802-11:2012/Amd.5:2015(E) (Adoption of IEEE Std 802.11af-2014)": "ISO/IEC/IEEE 802.11/Amd5-2012"
172
- # `/D-` corrupted IEEE draft docids — malformed draft designations emitted by
173
- # relaton-ieee's RawbibIdParser fallback rendering (the `/D-`, `_CDV_`, `.pdf`,
174
- # `201x`, stray dots/spaces). Each maps to a canonical parseable form that
175
- # retains number/part/draft/stage/date in the hash (the relaton index-v2 gate
176
- # is the hash round-trip + non-empty root.number, not `to_s == input`).
177
- # Interim measure; the durable fix is upstream in RawbibIdParser. See
178
- # HANDOFFS/metanorma__pubid__ieee-update-codes-dashD-drafts.md.
179
- # --- 8 pre-verified ---
180
- "IEEE Approved Std P1609.3/D-23.pdf-2007-02": "IEEE Approved Std P1609.3/D23, 02 2007"
181
- "IEEE P3004.5/D-6.2.": "IEEE P3004.5/D6.2"
182
- "IEEE P730/D-0.16.-2025": "IEEE P730/D0.16-2025"
183
- "IEEE PC37.107/D-4.-2023-11": "IEEE PC37.107/D4, 11 2023"
184
- "IEEE PC37.113/D-8.0.-2015-08": "IEEE PC37.113/D8.0, 08 2015"
185
- "IEEE PC37.98/D-5.1D-2013": "IEEE PC37.98/D5.1D-2013"
186
- "IEEE PC57.637/D-6.2.-2014-03": "IEEE PC57.637/D6.2, 03 2014"
187
- "IEEE Std P650/D-9.-2006": "IEEE Std P650/D9-2006"
188
- # --- 21 derived (revision markers dropped, corrigendum reordered, joint
189
- # stage+draft repositions year onto number with stage moved front) ---
190
- "IEC/IEEE P63198.2775/D-6.1_CDV_March-2022": "IEC/IEEE CDV P63198.2775/D6.1, March 2022"
191
- "IEEE 3.Rev.B/D-4.0-2023-01": "IEEE P3/D4.0, 01 2023"
192
- "IEEE 3.Rev.B/D-5.0-2023-03": "IEEE P3/D5.0, 03 2023"
193
- "IEEE P1003.1/D-5/Cor1-201x-2012-04": "IEEE P1003.1/Cor 1/D5, 04 2012"
194
- "IEEE P1003.1/D-5/Cor1-201x-2012-08": "IEEE P1003.1/Cor 1/D5, 08 2012"
195
- "IEEE P1127/D-4.1_July-2023": "IEEE P1127/D4.1, July 2023"
196
- "IEEE P2660_1/D-2-2020-06": "IEEE P2660.1/D2, 06 2020"
197
- "IEEE P802.1AE/D-1.0/R-/Cor1": "IEEE P802.1AE/Cor 1/D1.0"
198
- "IEEE P802.1AE_Rev/D-1.2-2018": "IEEE P802.1AE/D1.2-2018"
199
- "IEEE P802.1AE_Rev/D-1.3-2018": "IEEE P802.1AE/D1.3-2018"
200
- "IEEE Unapproved Std P802.16Rev2/D-9-2009-01": "IEEE Unapproved Std P802.16Rev2/D9-2009"
201
- "IEEE Unapproved Std P802.1X_REV/D-4.5-2009": "IEEE Unapproved Std P802.1X/D4.5-2009"
202
- "IEEE Unapproved Std PC37.91/D-8-2007-20": "IEEE Unapproved Std PC37.91/D8-2007"
203
- "IEEEE P1243/D-3-2023-02": "IEEE P1243/D3, 02 2023"
204
- "ISO/IEC/IEEE FDIS P15289./E-3/D-2-2016": "ISO/IEC/IEEE FDIS P15289-2016/D2"
205
- "ISO/IEC/IEEE P24641/D-2_CD-2020": "ISO/IEC/IEEE CD P24641-2020/D2"
206
- "ISO/IEC/IEEE P24641/D-3_CD2": "ISO/IEC/IEEE CD2 P24641/D3"
207
- "ISO/IEC/IEEE P24748.3/D-3_FDIS-2020": "ISO/IEC/IEEE FDIS P24748.3-2020/D3"
208
- "ISO/IEC/IEEE/ P12207.2/D-3_FDIS-2020": "ISO/IEC/IEEE FDIS P12207.2-2020/D3"
209
- "ISO/IEC/IEEE/ P24748.3/D-IS-2019": "ISO/IEC/IEEE DIS P24748.3-2019"
210
- "P1635/D10/ASHARE 21/D-10-2016": "IEEE P1635/D10-2016"
@@ -1,40 +1,7 @@
1
- # NIST pre-parser normalization rules.
2
- #
3
- # This file is applied to every NIST identifier string BEFORE any Ruby
4
- # preprocessing (see lib/pubid/nist/preprocessor.rb). Each entry is one
5
- # of:
6
- #
7
- # "plain string": "replacement"
8
- # Full-line match (^...$), literal. Use for specific malformed IDs
9
- # that have a single canonical form.
10
- #
11
- # "/regex/": "replacement" (no flags)
12
- # "/regex/imx": "replacement" (i = IGNORECASE, m = MULTILINE,
13
- # x = EXTENDED)
14
- # Applied via gsub. Use for general patterns that are pure
15
- # string→string substitutions.
16
- #
17
- # Design split (MECE):
18
- # - This file: data-driven lookups and pure subs that any maintainer
19
- # (including non-Rubyists) can extend safely.
20
- # - Preprocessor (Ruby): stateful or interdependent transformations
21
- # where stage order, conditional logic, or external state (e.g.,
22
- # Roman numeral conversion, year-range reverts) make YAML unsuitable.
23
- #
24
- # Reorder entries with care — later entries often match patterns produced
25
- # by earlier ones. Run `bundle exec rspec spec/pubid/nist/` after edits.
26
1
  NBS MN: NBS MONO
27
2
  NIST MN: NIST MONO
28
- # Long-form series names — normalize to the abbreviated form the parser expects.
29
- /\bMonograph\b/: MONO
30
- # Citation-form comma before long parameter prefixes — strip so the parser's
31
- # " Rev. " / " Part. " / " Vol. " prefix rules match (issue #197).
32
- '/,\s+(Rev\.|Part\.|Vol\.|Revision|Volume|Part)(?=\s|\d)/': ' \1'
33
3
  NIST MP: NBS MP
34
4
  NIST SP 260-162 2006ed.: NIST SP 260-162e2006
35
- # Doubled publisher+series prefix — an error in the NIST Tech Pubs source data
36
- # (pubid/pubid#152). Collapse the repeated "NIST AI" so the remainder parses.
37
- NIST AI NIST AI 100-2e2023 ipd: NIST AI 100-2e2023 ipd
38
5
  NBS CIRC 154suprev: NBS CIRC 154r1sup
39
6
  NBS CIRC supJun1925-Jun1926: NBS CIRC 24e7sup2
40
7
  NBS CIRC supJun1925-Jun1927: NBS CIRC 24e7sup3
@@ -59,9 +26,7 @@ NIST.CSWP.01162020pt: NIST.CSWP.01162020(por)
59
26
  FIPS PUB: FIPS
60
27
  NBS CRPL c4-4: NBS CRPL 4-4
61
28
  NIST AMS 300-8r1 (February 2021 update): NIST AMS 300-8r1/Upd1-202102
62
- NIST AMS 300-8r1/upd: NIST AMS 300-8r1/Upd1-202102
63
29
  NIST IR 8115r1-upd: NIST IR 8115r1/Upd1-202103
64
- NIST IR 8170-upd: NIST IR 8170/Upd1-202003
65
30
  NIST TN 2150-upd: NIST TN 2150/Upd1-202102
66
31
  NBS IR 73-197r: NBS IR 73-197r1
67
32
  NBS.HB.105-1r1990: NIST.HB.105-1r1990
@@ -3,17 +3,17 @@
3
3
  module Pubid
4
4
  module Amca
5
5
  # Builder class for constructing ACMA identifier scheme from parsed data
6
- # Single Responsibility: Transform parsed data into identifier objects
6
+ # Single Responsibility: Transform parsed data into Scheme objects
7
7
  class Builder
8
8
  attr_reader :identifier_class
9
9
 
10
- def initialize(identifier_class = Identifier)
10
+ def initialize(identifier_class = Identifiers::Base)
11
11
  @identifier_class = identifier_class
12
12
  end
13
13
 
14
14
  # Build a scheme object from parsed data
15
15
  # @param parsed [Hash, Array] the parsed identifier data
16
- # @return [identifier] the constructed scheme object
16
+ # @return [Scheme] the constructed scheme object
17
17
  def build(parsed)
18
18
  # Parslet can return array of hashes - merge them
19
19
  parsed_hash = parsed.is_a?(Array) ? merge_parsed_array(parsed) : parsed
@@ -46,7 +46,7 @@ module Pubid
46
46
 
47
47
  # Class method to build an identifier from parsed data
48
48
  # @param parsed [Hash, Array] the parsed identifier data
49
- # @return [Identifier] the constructed identifier object
49
+ # @return [Identifiers::Base] the constructed identifier object
50
50
  def self.build(parsed)
51
51
  new.build(parsed)
52
52
  end
@@ -78,7 +78,7 @@ module Pubid
78
78
  if parsed[:code_with_year]
79
79
  code_year_data = parsed[:code_with_year]
80
80
  if code_year_data && code_year_data[:code]
81
- attributes[:number] =
81
+ attributes[:code] =
82
82
  extract_value(code_year_data[:code])
83
83
  end
84
84
  if code_year_data && code_year_data[:year]
@@ -86,7 +86,7 @@ module Pubid
86
86
  extract_value(code_year_data[:year])
87
87
  end
88
88
  elsif parsed[:code]
89
- attributes[:number] = extract_value(parsed[:code])
89
+ attributes[:code] = extract_value(parsed[:code])
90
90
  end
91
91
 
92
92
  # Extract year if not already extracted from code_with_year
@@ -1,4 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Pubid::Amca::Identifier is the AMCA base class (a real Pubid::Identifier
4
- # subclass); its body and `.parse` live in identifiers/base.rb. This file just ensures it is loaded.
3
+ module Pubid
4
+ module Amca
5
+ module Identifier
6
+ # Parse an ACMA identifier string into an identifier object
7
+ # @param identifier [String] The ACMA identifier string to parse
8
+ # @return [Pubid::Amca::Identifier] The appropriate identifier object
9
+ # @raise [Parslet::ParseFailed] If parsing fails
10
+ def self.parse(identifier)
11
+ parsed = Parser.parse(identifier)
12
+ Builder.build(parsed)
13
+ rescue Parslet::ParseFailed => e
14
+ raise "Failed to parse ACMA identifier '#{identifier}': #{e.message}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -2,90 +2,62 @@
2
2
 
3
3
  module Pubid
4
4
  module Amca
5
- # Base identifier class for AMCA identifiers. Canonical name
6
- # Pubid::Amca::Identifier; common
7
- # functionality for all AMCA identifier types.
8
- class Identifier < ::Pubid::Identifier
9
- # @raise [Pubid::Errors::ParseError] If parsing fails
10
- def self.parse(identifier)
11
- unless identifier.is_a?(String)
12
- raise Pubid::Errors::InvalidInputError,
13
- Pubid::INPUT_NOT_A_STRING_MESSAGE
5
+ module Identifiers
6
+ # Base identifier class for ACMA identifiers
7
+ # Single Responsibility: Common functionality for all ACMA identifier types
8
+ class Base < Pubid::Identifier
9
+ # Override base_hash to handle AMCA-specific copublisher format (string, not array)
10
+ def base_hash
11
+ hash = super
12
+ # AMCA's copublisher is a string, not an array, so remove it from copublishers
13
+ hash.delete(:copublishers) if hash[:copublishers]
14
+ hash
14
15
  end
15
16
 
16
- if identifier.length > Pubid::MAX_INPUT_LENGTH
17
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
17
+ attribute :copublisher, :string
18
+ attribute :code, Components::Code
19
+ attribute :year, Components::Date
20
+ attribute :suffix, :string
21
+ attribute :reaffirmed, :string
22
+
23
+ # AMCA uses a fixed publisher string
24
+ def publisher
25
+ "AMCA"
18
26
  end
19
27
 
20
- parsed = Parser.parse(identifier)
21
- Builder.build(parsed)
22
- end
28
+ # Render the identifier as a string
29
+ def to_s
30
+ parts = []
31
+ parts << copublisher if copublisher
32
+ # type is a hash, get the title
33
+ t = self.class.attributes.key?(:type) ? type : nil
34
+ if t.is_a?(Hash) && t[:title]
35
+ parts << t[:title].to_s
36
+ end
37
+ parts << code.to_s
38
+ parts << "-#{year}" if year
23
39
 
24
- # Stored as a plain string (always "AMCA") so it round-trips through
25
- # to_hash/from_hash. Was a `def publisher` method, which made lutaml
26
- # serialize a String against the Components::Publisher attribute and raise.
27
- attribute :publisher, :string, default: -> { "AMCA" }
28
- attribute :copublisher, :string
29
- # The document number used to live in AMCA's own `code` attribute, leaving
30
- # the `number` inherited from ::Pubid::Identifier nil — so relaton-index,
31
- # which sorts and bsearches on `id.root.number.to_s`, keyed every AMCA row
32
- # on "". `code` is gone; each LEAF now declares `attribute :number,
33
- # :string` (see standard.rb / publication.rb / interpretation.rb).
34
- #
35
- # It is declared on the leaves, never here: this class is inherited by all
36
- # three of them, and redefining the parent's Components::Code-typed
37
- # `number` on an inherited-from class resolves nondeterministically under
38
- # multi-flavor load. Do not reintroduce `code`, and do not move `number`
39
- # up here.
40
- #
41
- # A bare 2-digit edition year ("21", "02"). Declared :string, not
42
- # Components::Date: the builder assigns a String and lutaml does not cast
43
- # it, so a Date declaration left the PARSE path holding a String while
44
- # from_hash produced a Components::Date — making
45
- # `parse(x) == from_hash(parse(x).to_hash)` false for every AMCA id and
46
- # breaking #matches?, which is built on ==. to_hash and to_s agreed, so
47
- # the relaton index gate never caught it.
48
- attribute :year, :string
49
- attribute :suffix, :string
50
- attribute :reaffirmed, :string
40
+ result = parts.compact.join(" ")
51
41
 
52
- # Explicit key_value mapping: only these keys serialize (the inherited
53
- # Pubid::Identifier attributes — including :type, which subclasses expose
54
- # as a class-metadata Hash via `self.type` are intentionally dropped).
55
- # Every mapped attribute is a plain scalar, so no custom converters are
56
- # needed; the canonical to_hash already drops empty and default values.
57
- key_value do
58
- map "_type", to: :_type
59
- map "publisher", to: :publisher
60
- map "copublisher", to: :copublisher
61
- map "number", to: :number
62
- map "year", to: :year
63
- map "suffix", to: :suffix
64
- map "reaffirmed", to: :reaffirmed
65
- end
42
+ # Handle additional copublisher after year (e.g., /ASHRAE 51-16)
43
+ if copublisher&.include?("/") && year
44
+ type_title = t.is_a?(Hash) ? t[:title].to_s : ""
45
+ result = "#{copublisher} #{type_title} #{code}-#{year}"
46
+ end
66
47
 
67
- def to_urn
68
- UrnGenerator.new(self).generate
69
- end
48
+ result += " (#{reaffirmed})" if reaffirmed
70
49
 
71
- # AMCA models its document type as class metadata (`self.type`), not as a
72
- # `typed_stage`, so the base `mr_type` hook found nothing. Without it an
73
- # interpretation and the standard it interprets share a slug — and
74
- # `to_slug` is an output FILENAME. Before the index columns landed the
75
- # whole flavor collapsed onto two slugs ("amca" and "").
76
- def mr_type
77
- return nil unless self.class.respond_to?(:type)
50
+ result
51
+ end
78
52
 
79
- self.class.type[:key]&.to_s
80
- end
53
+ def self.parse(string)
54
+ Amca::Identifier.parse(string)
55
+ end
81
56
 
82
- # AMCA keeps the edition in its own `year` string, not in the inherited
83
- # `date`, so the base `mr_year` hook read nil and two editions of one
84
- # standard — "ANSI/AMCA 300-14" and "ANSI/AMCA Standard 300-24" —
85
- # produced the same slug. Same shape as the BIPM year recorded in
86
- # CLAUDE.md.
87
- def mr_year
88
- year&.to_s
57
+ def to_urn
58
+ require_relative "../urn_generator"
59
+ UrnGenerator.new(self).generate
60
+ end
89
61
  end
90
62
  end
91
63
  end
@@ -8,29 +8,42 @@ module Pubid
8
8
  # - AMCA 99 JW Interp
9
9
  # - AMCA 204 – 1
10
10
  # - ANSI/AMCA 204 Interp
11
- class Interpretation < Identifier
12
- attribute :number, :string
11
+ class Interpretation < Base
12
+ attr_reader :interpretation_code
13
13
 
14
- # See Publication: the hand-written keyword initializer bypassed lutaml,
15
- # costing this class its `_type`, its `publisher` default and the
16
- # serialization of `interpretation_code`.
17
- attribute :interpretation_code, :string
14
+ def initialize(code:, year: nil, copublisher: nil, suffix: nil,
15
+ reaffirmed: nil, interpretation_code: nil)
16
+ @code = Components::Code.new(value: code.to_s)
17
+ @year = Components::Date.new(year: year.to_s) if year
18
+ @copublisher = copublisher
19
+ @suffix = suffix
20
+ @reaffirmed = reaffirmed
21
+ @interpretation_code = interpretation_code
22
+ end
18
23
 
19
- key_value do
20
- map "interpretation_code", to: :interpretation_code
24
+ def self.type
25
+ { key: :interpretation, title: "Interpretation", short: "Interp" }
21
26
  end
22
27
 
23
- # The interpretation letter is what distinguishes one interpretation of
24
- # a standard from another ("AMCA 99 JW Interp" vs "AMCA 99 KB Interp" —
25
- # different documents, and #== agrees). It is in `==` and in `to_s`, so
26
- # it must reach the slug too, or three interpretations of standard 99
27
- # share one filename.
28
- def mr_number_with_part
29
- mr_join(super, interpretation_code&.to_s&.downcase)
28
+ def type
29
+ Interpretation.type
30
30
  end
31
31
 
32
- def self.type
33
- { key: :interpretation, title: "Interpretation", short: "Interp" }
32
+ # @return [String] the rendered interpretation identifier
33
+ def to_s
34
+ parts = []
35
+ parts << @copublisher if @copublisher
36
+ parts << @code.to_s
37
+
38
+ if @interpretation_code
39
+ parts << "– #{@interpretation_code}"
40
+ elsif @year
41
+ parts << "-#{@year}"
42
+ end
43
+
44
+ parts << " #{@suffix}" if @suffix
45
+
46
+ parts.join(" ").squeeze(" ")
34
47
  end
35
48
  end
36
49
  end