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
data/lib/pubid/iso.rb CHANGED
@@ -4,12 +4,6 @@ require "lutaml/model"
4
4
 
5
5
  module Pubid
6
6
  module Iso
7
- extend Pubid::PrefixesSupport
8
-
9
- # Sole ISO publisher token. Joint / co-publication forms (ISO/IEC, IEC/ISO,
10
- # ISO/IEC/IEEE) are contributed symmetrically via Pubid::JOINT_PREFIXES.
11
- PREFIXES = ["ISO"].freeze
12
-
13
7
  autoload :Builder, "#{__dir__}/iso/builder"
14
8
  autoload :BundledIdentifier, "#{__dir__}/iso/bundled_identifier"
15
9
  autoload :CombinedIdentifier, "#{__dir__}/iso/combined_identifier"
@@ -17,9 +11,9 @@ module Pubid
17
11
  autoload :FormatResolver, "#{__dir__}/iso/format_resolver"
18
12
  autoload :Identifier, "#{__dir__}/iso/identifier"
19
13
  autoload :Identifiers, "#{__dir__}/iso/identifiers"
20
- autoload :Normalizer, "#{__dir__}/iso/normalizer"
21
14
  autoload :Parser, "#{__dir__}/iso/parser"
22
15
  autoload :RenderingStyle, "#{__dir__}/iso/rendering_style"
16
+ autoload :Scheme, "#{__dir__}/iso/scheme"
23
17
  autoload :SingleIdentifier, "#{__dir__}/iso/single_identifier"
24
18
  autoload :SupplementIdentifier, "#{__dir__}/iso/supplement_identifier"
25
19
  autoload :UrnGenerator, "#{__dir__}/iso/urn_generator"
@@ -31,15 +25,6 @@ module Pubid
31
25
  # @param format [Symbol] :auto, :human, :mr_string, or :urn
32
26
  # @return [Identifier] the parsed identifier
33
27
  def self.parse(identifier, format: :auto)
34
- unless identifier.is_a?(String)
35
- raise Pubid::Errors::InvalidInputError,
36
- Pubid::INPUT_NOT_A_STRING_MESSAGE
37
- end
38
-
39
- if identifier.length > Pubid::MAX_INPUT_LENGTH
40
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
41
- end
42
-
43
28
  format = Pubid::FormatDetector.detect(identifier) if format == :auto
44
29
 
45
30
  case format
@@ -48,77 +33,9 @@ module Pubid
48
33
  when :mr_string
49
34
  Pubid::Parsers::MrString.parse(identifier)
50
35
  else
51
- Normalizer.apply(identifier)
52
- end
53
- end
54
-
55
- # Build an ISO identifier from attributes.
56
- #
57
- # This is the public seam: callers in other flavors should never reach
58
- # into `Pubid::Iso::Identifiers::*` or `Pubid::Iso::Components::*`
59
- # directly — go through this method so the internal class registry can
60
- # change without breaking callers.
61
- #
62
- # Accepts either raw values (Strings/Integers) or pre-built components.
63
- # Raw values are wrapped in the appropriate ISO component internally.
64
- #
65
- # @param type [Symbol] the type key (e.g. :is, :tr, :ts, :guide)
66
- # @param publisher [String, Pubid::Iso::Components::Publisher] primary publisher
67
- # @param copublishers [Array<String>, Array<Pubid::Components::Publisher>]
68
- # @param number [String, Integer, Pubid::Iso::Components::Code]
69
- # @param year [String, Integer, Pubid::Components::Date, nil]
70
- # @param attrs [Hash] additional identifier attributes
71
- # @return [Pubid::Iso::Identifier]
72
- def self.build(type:, publisher: nil, copublishers: nil, number: nil,
73
- year: nil, **attrs)
74
- klass = locate_type(type) || raise(ArgumentError, "unknown ISO type: #{type.inspect}")
75
-
76
- copub_list = Array(copublishers)
77
- attrs[:publisher] = build_publisher(publisher, copub_list) if publisher || copub_list.any?
78
- attrs[:copublishers] = build_copublishers(copub_list) if copub_list.any?
79
- attrs[:number] = build_code(number) if number
80
- attrs[:date] = build_date(year) if year
81
-
82
- klass.new(attrs)
83
- end
84
-
85
- # @!visibility private
86
- def self.build_publisher(value, copublishers = [])
87
- return value if value.is_a?(Components::Publisher) && copublishers.empty?
88
-
89
- copub_strings = copublishers.map { |cp| cp.is_a?(Components::Publisher) ? cp.publisher : cp.to_s }
90
- Components::Publisher.new(
91
- publisher: value.is_a?(Components::Publisher) ? value.publisher : value.to_s,
92
- copublisher: copub_strings,
93
- )
94
- end
95
- private_class_method :build_publisher
96
-
97
- # @!visibility private
98
- def self.build_copublishers(list)
99
- Array(list).map do |cp|
100
- next cp if cp.is_a?(Components::Publisher)
101
-
102
- Components::Publisher.new(publisher: cp.to_s)
36
+ Scheme.parse(identifier)
103
37
  end
104
38
  end
105
- private_class_method :build_copublishers
106
-
107
- # @!visibility private
108
- def self.build_code(value)
109
- return value if value.is_a?(Components::Code)
110
-
111
- Components::Code.new(value: value.to_s)
112
- end
113
- private_class_method :build_code
114
-
115
- # @!visibility private
116
- def self.build_date(value)
117
- return value if value.is_a?(::Pubid::Components::Date)
118
-
119
- ::Pubid::Components::Date.new(year: value.to_s)
120
- end
121
- private_class_method :build_date
122
39
 
123
40
  # Parse an ISO URN string
124
41
  # @param urn [String] the URN string to parse
@@ -127,109 +44,6 @@ module Pubid
127
44
  def self.parse_urn(urn)
128
45
  UrnParser.parse(urn)
129
46
  end
130
-
131
- # Build an ISO identifier from a Parslet parse-tree hash (used by other
132
- # flavors when parsing joint identifiers, e.g. IEC's `IEC … | ISO …` form).
133
- #
134
- # This is the public seam: callers should never reach into
135
- # `Pubid::Iso::Builder` directly.
136
- #
137
- # @param hash [Hash] parse tree for an ISO identifier
138
- # @return [Pubid::Iso::Identifier]
139
- def self.build_from_parse(hash)
140
- builder.build(hash)
141
- end
142
-
143
- # Return the named Parslet rule atom from the ISO parser, for embedding in
144
- # another flavor's grammar (e.g. IEC joint identifiers).
145
- #
146
- # This is the public seam: callers should never instantiate
147
- # `Pubid::Iso::Parser` directly.
148
- #
149
- # @param rule_name [Symbol] the parser rule to expose
150
- # @return [Parslet::Atoms::Base]
151
- def self.joint_grammar_atom(rule_name)
152
- parser.public_send(rule_name)
153
- end
154
-
155
- # Auto-discover all identifier types from the Identifiers namespace
156
- # @return [Array<Class>] identifier classes that define a self.type Hash
157
- def self.identifier_types
158
- @identifier_types ||= Identifiers.constants
159
- .filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
160
- .select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
161
- .select { |c| c.type.is_a?(Hash) }
162
- end
163
-
164
- # Build typed stage index from identifier types
165
- # @return [Array<Pubid::Components::TypedStage>] all typed stages
166
- def self.all_typed_stages
167
- @all_typed_stages ||= identifier_types.flat_map do |klass|
168
- if klass.const_defined?(:TYPED_STAGES)
169
- klass.const_get(:TYPED_STAGES)
170
- else
171
- []
172
- end
173
- end
174
- end
175
-
176
- # Memoized builder instance used by Normalizer / URN parser
177
- # @return [Pubid::Iso::Builder]
178
- def self.builder
179
- @builder ||= Builder.new
180
- end
181
-
182
- # Memoized parser instance used by Normalizer
183
- # @return [Pubid::Iso::Parser]
184
- def self.parser
185
- @parser ||= Parser.new
186
- end
187
-
188
- # Lookup: type code -> identifier class
189
- # @param code [String, Symbol] the type key to find
190
- # @return [Class, nil] the matching identifier class
191
- def self.locate_type(code)
192
- identifier_types.find { |t| t.type[:key].to_s == code.to_s }
193
- end
194
-
195
- # Lookup: abbreviation -> typed stage
196
- # @param abbr [String, Symbol] the abbreviation to find
197
- # @return [Pubid::Components::TypedStage, nil] the matching typed stage
198
- def self.locate_stage(abbr)
199
- abbr_str = abbr.to_s.upcase
200
- all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
201
- end
202
-
203
- # Lookup: stage code -> typed stage
204
- # @param stage_code [String, Symbol]
205
- # @return [Pubid::Components::TypedStage, nil]
206
- def self.locate_stage_by_stage_code(stage_code)
207
- stage_code_sym = stage_code.to_sym
208
- all_typed_stages.find { |s| s.stage_code.to_sym == stage_code_sym }
209
- end
210
-
211
- # Lookup: per-typed-stage code -> typed stage
212
- # @param code [String, Symbol]
213
- # @return [Pubid::Components::TypedStage, nil]
214
- def self.locate_stage_by_code(code)
215
- code_sym = code.to_sym
216
- all_typed_stages.find { |s| s.code&.to_sym == code_sym }
217
- end
218
-
219
- # Lookup: harmonized stage code -> typed stage
220
- # @param harmonized_code [String]
221
- # @return [Pubid::Components::TypedStage, nil]
222
- def self.locate_stage_by_harmonized_code(harmonized_code)
223
- harmonized_str = harmonized_code.to_s
224
- all_typed_stages.find { |s| s.harmonized_stages&.include?(harmonized_str) }
225
- end
226
-
227
- # Default typed stage used when no type_with_stage is present
228
- # (e.g., the bare International Standard published stage)
229
- # @return [Pubid::Components::TypedStage]
230
- def self.default_typed_stage
231
- locate_stage("") || all_typed_stages.first
232
- end
233
47
  end
234
48
  end
235
49
 
@@ -1,5 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "../components/date"
4
+ require_relative "components/sector"
5
+ require_relative "components/series"
6
+ require_relative "components/code"
7
+ require_relative "identifiers/recommendation"
8
+ require_relative "identifiers/combined_identifier"
9
+ require_relative "identifiers/supplement"
10
+ require_relative "identifiers/amendment"
11
+ require_relative "identifiers/corrigendum"
12
+ require_relative "identifiers/special_publication"
13
+ require_relative "identifiers/annex"
14
+
3
15
  module Pubid
4
16
  module Itu
5
17
  class Builder
@@ -13,59 +25,15 @@ module Pubid
13
25
  return build_annex(data[:annex_to])
14
26
  end
15
27
 
16
- # Common-text twin ("| ISO/IEC ..." suffix) — extract before building
17
- # the base ITU identifier, then attach to whichever class the base
18
- # resolves to.
19
- twin = parse_common_text_twin(data.delete(:common_text_twin))
20
-
21
- # Labelled annex of a Recommendation — "ITU-T A.23 Annex A (06/2014)".
22
- # The annexed document is the :base subtree; :year/:month at this level
23
- # are the annex's own date, not the base's.
24
- if data[:annex_number]
25
- annex = build_annex_of_recommendation(data)
26
- annex.common_text_twin = twin if twin
27
- return annex
28
- end
29
-
30
- # Labelled appendix of a Recommendation — "ITU-T G.101 App. I
31
- # (05/2000)". Same shape as the annex above.
32
- if data[:appendix_number]
33
- appendix = build_appendix_of_recommendation(data)
34
- appendix.common_text_twin = twin if twin
35
- return appendix
36
- end
37
-
38
28
  # Operational Bulletin (Special Publication) — series == "OB" or
39
29
  # legacy long form ("Operational Bulletin No. ...").
40
- # The series_dash guard keeps a series-code "ITU-T OB-1" out of this
41
- # branch, which would drop the dash and render it "ITU OB No. 1".
42
- # Belt-and-braces: `series_code_body` already refuses "OB" + dash, so
43
- # nothing reaches here with both set — the guard documents that coupling
44
- # so removing the parser's `absent?` fails loudly rather than silently
45
- # rerouting.
46
- if (data[:series].to_s == "OB" && data[:series_dash].nil?) ||
47
- data[:_op_bull]
48
- sp = build_special_publication(data)
49
- sp.common_text_twin = twin if twin && sp
50
- return sp
30
+ if data[:series].to_s == "OB" || data[:_op_bull]
31
+ return build_special_publication(data)
51
32
  end
52
33
 
53
34
  # Check if this is a supplement identifier
54
35
  if data[:supplement_type]
55
- supp = build_supplement(data)
56
- supp.common_text_twin = twin if twin && supp
57
- return supp
58
- end
59
-
60
- # Handbook — "ITU-R 42.HDB"
61
- if data[:handbook_marker]
62
- return build_handbook(data)
63
- end
64
-
65
- # Question — numeric ("ITU-R 234-1/7:") or letter-series
66
- # ("ITU-R P.3/BL/7"). Both carry a :study_group marker.
67
- if data[:study_group]
68
- return build_question(data)
36
+ return build_supplement(data)
69
37
  end
70
38
 
71
39
  # Build basic recommendation or combined identifier
@@ -74,77 +42,44 @@ module Pubid
74
42
  code = build_code(data) if data[:number]
75
43
  date = build_date(data) if data[:year]
76
44
 
77
- # Combined (joint) recommendation — one or more additional
78
- # "/SERIES.CODE" designations after the primary (e.g. "G.780/Y.1351",
79
- # "G.780/Y.1351/Z.1362"). The primary stays on the base series/code.
80
- if data[:combined]
45
+ # Check if this is a combined identifier (has combined_series and combined_number)
46
+ if data[:combined_series] || data[:combined_number]
47
+ if data[:combined_series]
48
+ combined_series = Components::Series.new(
49
+ series: data[:combined_series][:series].to_s,
50
+ )
51
+ end
52
+
53
+ if data[:combined_number]
54
+ combined_code = Components::Code.new(
55
+ number: data[:combined_number].to_s,
56
+ subseries: data[:combined_subseries]&.to_s,
57
+ parts: extract_parts(data[:combined_parts]),
58
+ )
59
+ end
60
+
81
61
  return Identifiers::CombinedIdentifier.new(
82
62
  sector: sector,
83
63
  series: series,
84
64
  code: code,
85
- combined: build_designations(data[:combined]),
65
+ combined_series: combined_series,
66
+ combined_code: combined_code,
86
67
  date: date,
87
- version: data[:version]&.to_s,
88
- # with_series offers these slots on either side of
89
- # combined_suffixes, so a joint id can carry them too; not
90
- # forwarding them let "ITU-T H.350/X.1 attachment" compare equal to
91
- # the un-attached document.
92
- series_word: !data[:series_word].nil?,
93
- series_dash: !data[:series_dash].nil?,
94
- attachment: !data[:attachment].nil?,
95
- range_end: data[:range_end]&.to_s,
96
68
  language: data[:language]&.to_s,
97
- common_text_twin: twin,
98
69
  )
99
70
  end
100
71
 
101
- # A Report ("Report ITU-R BT.2020-1") is shaped exactly like a
102
- # Recommendation — only the leading word, captured as :report_marker,
103
- # tells the two apart, and it has to, because the two series number
104
- # independently and the same series/number is two real documents.
105
- klass = data[:report_marker] ? Identifiers::Report : Identifiers::Recommendation
106
-
107
- klass.new(
72
+ Identifiers::Recommendation.new(
108
73
  sector: sector,
109
74
  series: series,
110
75
  code: code,
111
76
  date: date,
112
- version: data[:version]&.to_s,
113
- series_word: !data[:series_word].nil?,
114
- series_dash: !data[:series_dash].nil?,
115
- attachment: !data[:attachment].nil?,
116
- range_end: data[:range_end]&.to_s,
117
77
  language: data[:language]&.to_s,
118
- common_text_twin: twin,
119
78
  )
120
79
  end
121
80
 
122
- # Parse the common-text twin string ("| ISO/IEC 13818-1:2022") into
123
- # the appropriate flavor's identifier object. Returns nil if the twin
124
- # is empty or unparseable.
125
- def parse_common_text_twin(twin_raw)
126
- return nil if twin_raw.nil?
127
-
128
- twin_str = twin_raw.to_s.strip
129
- # Strip a leading pipe if the parser captured it
130
- twin_str = twin_str.sub(/\A\s*\|\s*/, "")
131
- return nil if twin_str.empty?
132
-
133
- case twin_str
134
- when /\AISO\/IEC\b/, /\AISO\b/
135
- Pubid::Iso.parse(twin_str)
136
- when /\AIEC\b/
137
- Pubid::Iec.parse(twin_str)
138
- end
139
- rescue StandardError
140
- # If the twin doesn't parse as a known flavor, leave it as nil
141
- # rather than blowing up the whole parse — the ITU half is still
142
- # usable on its own.
143
- nil
144
- end
145
-
146
81
  # Build Special Publication (OB). Sector is silently dropped — OB is a
147
- # cross-bureau publication and `Identifier` rejects sector+OB
82
+ # cross-bureau publication and `Identifiers::Base` rejects sector+OB
148
83
  # in its constructor.
149
84
  def build_special_publication(data)
150
85
  Identifiers::SpecialPublication.new(
@@ -165,59 +100,6 @@ module Pubid
165
100
  )
166
101
  end
167
102
 
168
- # Build a labelled annex of a Recommendation. sector/series/code are
169
- # deliberately NOT copied from the base: they are not serialized on the
170
- # wrapper, so copies would make a from_hash-rebuilt annex differ from the
171
- # parsed one.
172
- def build_annex_of_recommendation(data)
173
- Identifiers::AnnexOfRecommendation.new(
174
- base: build(data[:base]),
175
- number: data[:annex_number].to_s,
176
- date: data[:year] ? build_date(data) : nil,
177
- language: data[:language]&.to_s,
178
- )
179
- end
180
-
181
- # Build a labelled appendix of a Recommendation. Like the annex above,
182
- # sector/series/code are deliberately NOT copied from the base — they are
183
- # not serialized on the wrapper, so copies would make a from_hash-rebuilt
184
- # appendix differ from the parsed one.
185
- def build_appendix_of_recommendation(data)
186
- Identifiers::AppendixOfRecommendation.new(
187
- base: build(data[:base]),
188
- number: data[:appendix_number].to_s,
189
- material: data[:appendix_material]&.to_s,
190
- date: data[:year] ? build_date(data) : nil,
191
- language: data[:language]&.to_s,
192
- )
193
- end
194
-
195
- # Build Handbook ("ITU-R 42.HDB").
196
- def build_handbook(data)
197
- Identifiers::Handbook.new(
198
- sector: Components::Sector.new(sector: data[:sector].to_s),
199
- code: build_code(data),
200
- date: data[:year] ? build_date(data) : nil,
201
- )
202
- end
203
-
204
- # Build Question (numeric or letter-series).
205
- def build_question(data)
206
- series = if data[:series]
207
- Components::Series.new(series: data[:series].to_s)
208
- end
209
-
210
- Identifiers::Question.new(
211
- sector: Components::Sector.new(sector: data[:sector].to_s),
212
- series: series,
213
- code: build_code(data),
214
- study_group: data[:study_group].to_s,
215
- has_bl: !data[:has_bl].nil?,
216
- bracketed: !data[:bracketed].nil?,
217
- has_colon: !data[:question_colon].nil?,
218
- )
219
- end
220
-
221
103
  def build_supplement(data)
222
104
  # Build the base identifier first
223
105
  base = build(data[:base]) if data[:base]
@@ -227,22 +109,10 @@ module Pubid
227
109
  klass = case supplement_type
228
110
  when "Amd"
229
111
  Identifiers::Amendment
230
- when "Add"
231
- Identifiers::Addendum
232
112
  when "Cor"
233
113
  Identifiers::Corrigendum
234
- when "Err"
235
- Identifiers::Errata
236
114
  when "Suppl"
237
115
  Identifiers::Supplement
238
- else
239
- # Previously fell through to a nil class and died with
240
- # "undefined method 'new' for nil" one frame later. Any token
241
- # added to Parser#supplement_type without a class here should
242
- # say so.
243
- raise ArgumentError,
244
- "Unknown ITU supplement type: " \
245
- "#{data[:supplement_type].inspect}"
246
116
  end
247
117
 
248
118
  # Build supplement date (separate from base date)
@@ -253,84 +123,25 @@ module Pubid
253
123
  )
254
124
  end
255
125
 
256
- # Sector/series are copied from the base when it has them; the fallback
257
- # to this level's own tokens is guarded because an annex base keeps
258
- # sector/series/code on *its* base, leaving all three nil here while the
259
- # supplement level carries no sector token of its own.
260
- # An annex base keeps sector/series/code on *its* base, so reach through
261
- # it via #root; otherwise a supplement of an annex would carry none of
262
- # them and its MR string would collapse to a bare "itu.<date>".
263
- base_identity = base&.sector ? base : base&.root
264
- sector = base_identity&.sector ||
265
- (Components::Sector.new(sector: data[:sector].to_s) if data[:sector])
266
- series = base_identity&.series ||
267
- (Components::Series.new(series: data[:series].to_s) if data[:series])
268
-
269
- attrs = {
270
- sector: sector,
271
- series: series,
272
- code: base_identity&.code,
126
+ # Build supplement with extracted components
127
+ klass.new(
128
+ sector: base&.sector || Components::Sector.new(sector: data[:sector].to_s),
129
+ series: base&.series || (data[:series] ? Components::Series.new(series: data[:series].to_s) : nil),
130
+ code: base&.code,
273
131
  base: base,
274
132
  number: data[:supplement_number].to_s,
275
- # The marker is the captured space, so its ABSENCE is the flag.
276
- number_glued: data[:supplement_space].nil?,
277
- slash_joined: !data[:supplement_slash].nil?,
278
133
  date: supplement_date,
279
134
  language: data[:language]&.to_s,
280
- }
281
- # The "series" word rides on the supplement for the base-less,
282
- # series-only form; with a base it is the base's, and renders from
283
- # there. It is copied up anyway (like sector/series/code above) so the
284
- # supplement's own MR slug stays distinct — `render_supplement` and the
285
- # base-nil-guarded key_value/== only consult it when base is nil, so
286
- # the copy is render- and serialization-neutral.
287
- attrs[:series_word] = if base
288
- !!base_identity&.series_word
289
- else
290
- !data[:series_word].nil?
291
- end
292
- attrs[:technical] = true if data[:technical] &&
293
- klass == Identifiers::Corrigendum
294
-
295
- klass.new(**attrs)
135
+ )
296
136
  end
297
137
 
298
138
  private
299
139
 
300
- # Build the additional designations of a combined recommendation from the
301
- # repeated parse subtrees (each `{ designation: { series:, number:, … } }`).
302
- def build_designations(combined_data)
303
- Array(combined_data).map do |element|
304
- d = element[:designation] || element
305
- Components::Designation.new(
306
- series: Components::Series.new(series: d[:series].to_s),
307
- code: Components::Code.new(
308
- number: d[:number].to_s,
309
- series_suffix: d[:series_suffix]&.to_s,
310
- series_suffix_spaced: !d[:series_suffix_spaced].nil?,
311
- subseries: d[:subseries]&.to_s,
312
- parts: extract_parts(d[:parts]),
313
- qualifier: d[:qualifier]&.to_s,
314
- qualifier_glued: !d[:qualifier].nil? && d[:qualifier_spaced].nil?,
315
- ),
316
- )
317
- end
318
- end
319
-
320
140
  def build_code(data)
321
141
  Components::Code.new(
322
- imp_marker: data[:imp_marker]&.to_s,
323
142
  number: data[:number].to_s,
324
- series_suffix: data[:series_suffix]&.to_s,
325
- # The marker is the captured separating space, so its presence is
326
- # the flag for the edition word and its ABSENCE is the flag for the
327
- # qualifier letter (whose majority spelling is spaced).
328
- series_suffix_spaced: !data[:series_suffix_spaced].nil?,
329
143
  subseries: data[:subseries]&.to_s,
330
144
  parts: extract_parts(data[:parts]),
331
- qualifier: data[:qualifier]&.to_s,
332
- qualifier_glued: !data[:qualifier].nil? &&
333
- data[:qualifier_spaced].nil?,
334
145
  )
335
146
  end
336
147
 
@@ -6,77 +6,32 @@ module Pubid
6
6
  module Itu
7
7
  module Components
8
8
  # ITU Code component
9
- # Format: [Imp]NUMBER[SUFFIX][.SUBSERIES][-PART]
10
- # Examples: 1234, 1234.5, 1234-1, 1234.5-2, 50bis, 8bis, Imp712, ImpOSI
11
- #
12
- # The optional "Imp" marker identifies an Implementers' Guide for the
13
- # series (e.g. G.Imp712, X.ImpOSI); the NUMBER that follows may be
14
- # digits or a short letter string.
15
- #
16
- # SUFFIX is the edition marker "bis" / "ter" / "quater" attached
17
- # directly to the number (e.g. X.50bis, V.8bis).
18
- #
19
- # Stays independent of Pubid::Components::Code because ITU uses
20
- # +subseries+ (dot-separated, flavor-specific) and +parts+
21
- # (dash-separated).
9
+ # Format: NUMBER[.SUBSERIES][-PART]
10
+ # Examples: 1234, 1234.5, 1234-1, 1234.5-2
22
11
  class Code < Lutaml::Model::Serializable
23
- attribute :imp_marker, :string
24
12
  attribute :number, :string
25
- attribute :series_suffix, :string
26
- # ITU prints the edition word both glued ("X.50bis") and space-
27
- # separated ("E.250 bis"). The word itself is stored without the space,
28
- # so `series_suffix` stays a clean, whitespace-free value to compare and
29
- # index on; the spacing is this rendering-only flag. Named for the
30
- # rarer-in-code form so the `false` default stays out of `to_hash`.
31
- attribute :series_suffix_spaced, :boolean, default: -> { false }
32
13
  attribute :subseries, :string
33
- attribute :parts, :string, collection: true, default: []
34
- # A single trailing letter distinguishing variants of one
35
- # Recommendation: "D.200 R" (old D-series tariff recommendations),
36
- # "Q.2931 B", "R.38 A", the glued "D.502R" and the lowercase
37
- # "I.256.2a". Spaced is the majority spelling, so the glued one is the
38
- # flag.
39
- attribute :qualifier, :string
40
- attribute :qualifier_glued, :boolean, default: -> { false }
14
+ attribute :parts, :string, collection: true
15
+
16
+ def initialize(number:, subseries: nil, parts: nil)
17
+ @number = number
18
+ @subseries = subseries
19
+ @parts = parts || []
20
+ end
41
21
 
42
- # Segment order mirrors the grammar exactly — a GLUED suffix is
43
- # captured inside `standard_code` (the edition word before the
44
- # subseries, the qualifier after the parts), while a SPACED one is
45
- # captured afterwards by `code_suffixes`. Rendering the edition word
46
- # unconditionally first would print "Q.11a bis" back as "Q.11 bisa".
47
22
  def to_s
48
- result = "#{imp_marker}#{number}"
49
- result += series_suffix.to_s if series_suffix && !series_suffix_spaced
23
+ result = number.to_s
50
24
  result += ".#{subseries}" if subseries
51
25
  result += parts.map { |p| "-#{p}" }.join if parts&.any?
52
- result += qualifier.to_s if qualifier && qualifier_glued
53
- result += " #{series_suffix}" if series_suffix && series_suffix_spaced
54
- result += " #{qualifier}" if qualifier && !qualifier_glued
55
26
  result
56
27
  end
57
28
 
58
- # Space-free rendering for URN and MR use: the print form may separate
59
- # the edition word or the qualifier letter with a space ("E.250 bis",
60
- # "D.200 R"), which is not admissible inside a URN segment. Removing
61
- # the space keeps "D.200" and "D.200 R" on distinct URNs, which
62
- # dropping the suffix would not.
63
- def compact_s
64
- to_s.delete(" ")
65
- end
66
-
67
- def render(context: nil)
68
- to_s
69
- end
70
-
71
29
  def ==(other)
72
30
  return false unless other.is_a?(Code)
73
31
 
74
- imp_marker == other.imp_marker &&
75
- number == other.number &&
76
- series_suffix == other.series_suffix &&
32
+ number == other.number &&
77
33
  subseries == other.subseries &&
78
- parts == other.parts &&
79
- qualifier == other.qualifier
34
+ parts == other.parts
80
35
  end
81
36
  end
82
37
  end