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
@@ -1,408 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Ieee
5
- # Human-readable renderer for IEEE identifiers.
6
- #
7
- # Produces strings like:
8
- # "IEEE Std 802.11-2020"
9
- # "IEEE Std 535-2013/Cor. 1-2017"
10
- # "ANSI C37.61-1973 and IEEE Std 321-1973"
11
- #
12
- # The renderer is registered as the +:human+ format in the IEEE format
13
- # registry and invoked via +render(format: :human)+.
14
- #
15
- # For wrapper types (DualPublished, AdoptedStandard, etc.) the renderer
16
- # composes child identifiers. For simple identifiers it delegates to the
17
- # identifier's own publisher/code/relationship helpers.
18
- class Renderer < ::Pubid::Renderers::Base
19
- def render(context: nil, **opts)
20
- # IEEE attaches the trademark mark to the document number, before the
21
- # year and every suffix ("IEEE Std 802.3®-2018"), so the mark is
22
- # emitted by whichever method renders the number rather than appended
23
- # to the finished string. A renderer instance is built per render call
24
- # (Pubid::Identifier#render), so the flag is safe as instance state.
25
- @trademark = opts[:trademark]
26
-
27
- render_id(@id)
28
- end
29
-
30
- private
31
-
32
- # Trademark mark for a document number, or "" when the flag is off.
33
- # @param number [String, nil] bare document number
34
- # @param prefix [String, nil] letter series of the code
35
- # @param publishers [Array<String>] printed publisher tokens — the ®
36
- # series belongs to IEEE, not to another body numbering a document 802
37
- def mark(number, prefix = nil, publishers: nil)
38
- return "" unless @trademark
39
-
40
- Pubid::Ieee.trademark_symbol_for(number, prefix, publishers: publishers)
41
- end
42
-
43
- # The publisher tokens an identifier prints, for the ® decision.
44
- def publishers_of(id)
45
- return id.publishers if id.respond_to?(:publishers) && id.publishers
46
-
47
- copublishers = id.copublisher if id.respond_to?(:copublisher)
48
- [id.publisher, *copublishers].compact
49
- end
50
-
51
- # Compose a child identifier, propagating the trademark flag only when it
52
- # is safe. A foreign (non-IEEE) leaf may not accept the `trademark:`
53
- # keyword at all — Pubid::Nist's `to_s(format = :short)` would silently
54
- # swallow it as a positional Hash, and Pubid::Iso's would raise — and an
55
- # adopted or parenthetical child is not the IEEE document being marked.
56
- def child_to_s(child, **opts)
57
- return child.to_s(**opts) unless @trademark &&
58
- child.is_a?(Pubid::Ieee::Identifier)
59
-
60
- child.to_s(**opts, trademark: true)
61
- end
62
-
63
- # Dispatch to the type-specific renderer, returning the composed string
64
- # (each branch inserts the trademark mark at its own number boundary).
65
- def render_id(id)
66
- case id
67
- when Identifiers::DualPublished
68
- render_dual_published(id)
69
- when Identifiers::DualIdentifier
70
- render_dual_identifier(id)
71
- when Identifiers::AdoptedStandard
72
- render_adopted_standard(id)
73
- when Identifiers::RedlinedStandard
74
- render_redlined_standard(id)
75
- when Identifiers::Amendment
76
- render_amendment(id)
77
- when Identifiers::Corrigendum
78
- render_corrigendum(id)
79
- when Identifiers::InterpretationIdentifier
80
- render_interpretation(id)
81
- when Identifiers::ConformanceIdentifier
82
- render_conformance(id)
83
- when Identifiers::MultiNumberedIdentifier
84
- render_multi_numbered(id)
85
- when Identifiers::ParentheticalIdentifier
86
- render_parenthetical(id)
87
- when Identifiers::CsaDualPublished
88
- render_csa_dual_published(id)
89
- when Identifiers::IecIeeeCopublished
90
- render_iec_ieee_copublished(id)
91
- when Identifiers::SiStandard
92
- render_si_standard(id)
93
- when Identifiers::JointDevelopment
94
- child_to_s(id)
95
- else
96
- render_base(id)
97
- end
98
- end
99
-
100
- # ------------------------------------------------------------------
101
- # Base IEEE identifier rendering
102
- # ------------------------------------------------------------------
103
-
104
- def render_base(id)
105
- parts = []
106
-
107
- # Publisher(s) - handle copublisher array properly
108
- if id.copublisher && !id.copublisher.empty?
109
- parts << [id.publisher, *id.copublisher].join("/")
110
- else
111
- parts << id.publisher
112
- end
113
-
114
- # Draft status
115
- parts << id.draft_status if id.draft_status
116
-
117
- # Type - only render for IEEE/AIEE publishers, and only for non-projects.
118
- # An unapproved draft is not yet a standard, so per IEEE guidance the
119
- # "Std" token is dropped from the type when draft_status is "Unapproved"
120
- # (e.g. "Draft Std" -> "Draft", "Std" -> "").
121
- should_render_type = id.publisher&.match?(/^(IEEE|AIEE)/)
122
-
123
- if should_render_type && !id.typed_stage&.project_status && id.type && !id.type.to_s.strip.empty? && id.type != "P"
124
- type_str = id.type.dup
125
- type_str = type_str.sub(/^P/, "") if type_str.start_with?("P")
126
- if id.draft_status.to_s.match?(/unapproved/i)
127
- type_str = type_str.gsub(/\bStd\b/i, "").squeeze(" ").strip
128
- end
129
- parts << type_str unless type_str.strip.empty?
130
- end
131
-
132
- # Code - with P prefix for projects (concatenated, not separated)
133
- if id.code_obj
134
- result = id.code_obj.to_s
135
-
136
- # Prepend P if this is a project AND code doesn't already have P
137
- if id.typed_stage&.project_status && should_render_type && !result.start_with?("P")
138
- result = "P#{result}"
139
- end
140
-
141
- # Trademark mark — right after the number and its parts, before the
142
- # year, the revision, the draft and every other suffix.
143
- result += mark(id.code_obj.number, id.code_obj.prefix,
144
- publishers: publishers_of(id))
145
-
146
- # Only attach year to code if there's no edition, no month, and no draft
147
- result += "-#{id.year}" if id.year && !id.draft_obj && !id.edition && !id.month
148
-
149
- # Append the numbered/lettered revision inline, in IEEE's native
150
- # position — right after the code number and before the draft
151
- # ("P802.16Rev2/D3"). Keeps a revision distinct from its base standard.
152
- result += "Rev#{id.revision}" if id.revision
153
-
154
- # Append draft to code - with or without space based on original format
155
- if id.draft_obj
156
- result += id.space_before_draft ? " #{id.draft_obj}" : id.draft_obj.to_s
157
- end
158
-
159
- # Append interpretation notation (/INT)
160
- result += "/INT" if id.interpretation
161
-
162
- # Conformance is always built as a ConformanceIdentifier wrapper
163
- # (render_conformance), never inline on a base standard — the base no
164
- # longer carries a conf_number attribute.
165
-
166
- # Append ASHRAE joint publication (/ASHRAE Guideline NN-YYYY)
167
- if id.ashrae_number
168
- result += "/ASHRAE Guideline #{id.ashrae_number}"
169
- result += "-#{id.ashrae_year}" if id.ashrae_year
170
- end
171
-
172
- # Append IEEE cross-reference (/C62.22.1-1996)
173
- result += id.crossref if id.crossref
174
-
175
- parts << result
176
- elsif should_render_type && id.typed_stage&.project_status
177
- # No code but is a project - add standalone P
178
- parts << "P"
179
- end
180
-
181
- # Edition - with year if present (IEC style)
182
- if id.edition
183
- edition_str = "Edition #{id.edition}"
184
- if id.year
185
- edition_str += " #{id.year}"
186
- edition_str += "-#{id.edition_month}" if id.edition_month
187
- end
188
- parts << edition_str
189
- end
190
-
191
- # Build the main identifier (without month yet)
192
- result = parts.join(" ")
193
-
194
- # Month/Day - append directly to avoid extra space before comma
195
- if id.month
196
- result += ", #{id.month}"
197
- result += " #{id.day}" if id.day
198
- if id.year && !id.edition
199
- result += " #{id.year}"
200
- end
201
- end
202
-
203
- # Bounded parenthetical markers only. The unbounded relationship/
204
- # amendment narrative (relationships, revision_of, amendment_to,
205
- # adoption, note) is deliberately NOT rendered here: an
206
- # "as amended by …" list can run 300+ chars, and an identifier's to_s
207
- # is used by consumers (relaton) as a document number and filename. The
208
- # narrative is preserved on the runtime accessors (id.relationships
209
- # etc.), just not embedded in the identifier string.
210
- parentheticals = []
211
-
212
- # Reaffirmation year — a bounded status marker.
213
- reaff = id.reaffirmed
214
- parentheticals << "(R#{reaff})" if reaff && !reaff.to_s.strip.empty?
215
-
216
- # The catch-all parenthetical is a bounded, printed identity token, not
217
- # relationship prose (e.g. the "S-135 (IPCEA P46-426)" co-designation).
218
- # Long amendment narratives match the structural relationship grammar
219
- # and land in `relationships`, never in this catch-all, so it stays
220
- # bounded.
221
- if id.parenthetical_content
222
- parentheticals << "(#{id.parenthetical_content})"
223
- end
224
-
225
- result += " #{parentheticals.join(' ')}" unless parentheticals.empty?
226
-
227
- # Book nickname - outside parentheses in square brackets
228
- result += " [#{id.nickname}]" if id.nickname && !id.nickname.to_s.strip.empty?
229
-
230
- # Redline suffix
231
- result += " - Redline" if id.redline
232
-
233
- result
234
- end
235
-
236
- # ------------------------------------------------------------------
237
- # Wrapper types
238
- # ------------------------------------------------------------------
239
-
240
- def render_dual_published(id)
241
- "#{child_to_s(id.first_identifier)} and " \
242
- "#{child_to_s(id.second_identifier)}"
243
- end
244
-
245
- def render_dual_identifier(id)
246
- "#{child_to_s(id.first_identifier)} and " \
247
- "#{child_to_s(id.second_identifier)}"
248
- end
249
-
250
- def render_adopted_standard(id)
251
- # Only the IEEE designation is marked; the adopted identifiers are
252
- # other bodies' documents (and may be foreign pubid objects).
253
- result = child_to_s(id.ieee_identifier)
254
- if id.adopted_identifiers && !id.adopted_identifiers.empty?
255
- adopted_strs = id.adopted_identifiers.map(&:to_s)
256
- result += " (#{adopted_strs.join(' and ')})"
257
- end
258
- result
259
- end
260
-
261
- def render_redlined_standard(id)
262
- result = child_to_s(id.base)
263
- # NOTE: currently unreachable — a redline is built as a flat
264
- # `redline: true` on a plain Standard (see the redline invariant in
265
- # CLAUDE.md), so determine_identifier_class never routes here. Kept for
266
- # completeness; if this path is ever revived, note `revision_of` is a
267
- # bounded single-id reference, unlike the unbounded relationship
268
- # narrative that render_base deliberately drops.
269
- result += " (Revision of #{id.revision_of})" if id.revision_of
270
- result += " - Redline" if id.redline
271
- result
272
- end
273
-
274
- def render_corrigendum(id)
275
- return render_base(id) unless id.base
276
-
277
- result = child_to_s(id.base)
278
- result += "/Cor"
279
- result += ". " if id.number # Add period and space for formal format
280
- result += id.number if id.number
281
- result += "-#{id.year}" if id.year
282
- result
283
- end
284
-
285
- def render_amendment(id)
286
- return render_base(id) unless id.base
287
-
288
- result = child_to_s(id.base)
289
- result += "/Amd"
290
- result += " #{id.number}" if id.number # canonical "/Amd 4-2020"
291
- result += "-#{id.year}" if id.year
292
- result
293
- end
294
-
295
- def render_interpretation(id)
296
- return render_base(id) unless id.base
297
-
298
- result = child_to_s(id.base)
299
- result += "/INT"
300
- result += "-#{id.year}" if id.year
301
- result
302
- end
303
-
304
- def render_conformance(id)
305
- return render_base(id) unless id.base
306
-
307
- result = child_to_s(id.base)
308
- result += "/Conformance#{id.number}" if id.number
309
- result += "-#{id.year}" if id.year
310
- result
311
- end
312
-
313
- def render_multi_numbered(id)
314
- return child_to_s(id.primary_identifier) unless id.secondary_identifier
315
-
316
- # Co-equal designations: each carries its own mark, before its own
317
- # suffixes, as IEEE prints them.
318
- primary = child_to_s(id.primary_identifier)
319
- secondary = child_to_s(id.secondary_identifier)
320
-
321
- secondary_code = id.secondary_identifier.code.to_s
322
- if secondary_code.start_with?("C") && secondary_code.match?(/^C\d+\./)
323
- # A cross-reference prints the bare second designation after the
324
- # slash — "IEEE Std 1299/C62.22.1-1996" — not a second full
325
- # reference, so this branch must not reuse `secondary`, which
326
- # carries its own "IEEE Std " prefix.
327
- "#{primary}/#{secondary_code}"
328
- else
329
- "#{primary} and #{secondary}"
330
- end
331
- end
332
-
333
- def render_parenthetical(id)
334
- # The mark belongs on the base; the parenthetical is a separate token.
335
- result = child_to_s(id.base)
336
- result += " (#{id.parenthetical_identifier})" if id.parenthetical_identifier
337
- result
338
- end
339
-
340
- def render_csa_dual_published(id)
341
- # csa_identifier is a Pubid::Csa object — never marked.
342
- csa_str = id.csa_identifier.to_s
343
- csa_str = "CSA #{csa_str}" unless csa_str.start_with?("CSA", "CAN/")
344
-
345
- "#{child_to_s(id.ieee_identifier)}/#{csa_str}"
346
- end
347
-
348
- def render_iec_ieee_copublished(id)
349
- result = "IEC/IEEE"
350
- # copublished_number glues the parts and the publication year onto the
351
- # number, so the mark is spliced in by that single implementation
352
- # rather than rebuilt here; with the flag off it is passed "".
353
- if id.copublished_number
354
- result += " #{id.copublished_number(mark(id.number,
355
- publishers: %w[IEC IEEE]))}"
356
- end
357
- result += id.draft_info if id.draft_info
358
- result += " IEC:#{id.iec_year}" if id.iec_year
359
- result += " #{id.date_info}" if id.date_info
360
- result
361
- end
362
-
363
- def render_si_standard(id)
364
- parts = []
365
-
366
- # Publisher (IEEE/ASTM)
367
- parts << "IEEE/ASTM"
368
-
369
- # Type (SI or PSI based on typed_stage)
370
- parts << if id.typed_stage&.abbr&.include?("PSI")
371
- "PSI"
372
- else
373
- "SI"
374
- end
375
-
376
- # Code (number) with draft version for PSI — the mark goes after the
377
- # code, before the draft and the date.
378
- code_part = id.code.to_s
379
- code_part += mark(id.code_obj&.number, id.code_obj&.prefix,
380
- publishers: publishers_of(id))
381
- if id.draft_obj
382
- code_part += "/D#{id.draft_obj.version}"
383
- end
384
- parts << code_part if id.code
385
-
386
- # Date
387
- if id.month && id.year
388
- parts << ", #{id.month} #{id.year}"
389
- elsif id.year
390
- parts << "-#{id.year}"
391
- end
392
-
393
- # Join parts with spaces, but don't insert a space before parts
394
- # that start with "-" or "," (e.g., "-2010", ", July 2014") so the
395
- # SI form renders as "SI 10-2010" not "SI 10 -2010". The descriptive
396
- # relationships narrative is deliberately kept out of to_s (see
397
- # render_base); it stays reachable on id.relationships.
398
- parts.each_with_object([]) do |part, acc|
399
- if acc.empty? || part.to_s.start_with?("-", ",")
400
- acc << part.to_s
401
- else
402
- acc << " " << part.to_s
403
- end
404
- end.join
405
- end
406
- end
407
- end
408
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Ieee
5
- # Parses IEEE URNs back into identifiers.
6
- #
7
- # UrnGenerator emits many fields; this parser handles the common
8
- # published-standard shape:
9
- # urn:ieee:{publisher}:{code}:{year}
10
- #
11
- # publisher is the lowercase publisher (with optional copublishers
12
- # joined by `-`). code is the alphanumeric designation (period is the
13
- # part separator within the code). The year separator in human-readable
14
- # form is `-`.
15
- #
16
- # Examples:
17
- # - urn:ieee:ieee:802.3:2018 → IEEE Std 802.3-2018
18
- # - urn:ieee:ieee:1018:2019 → IEEE Std 1018-2019
19
- class UrnParser < Pubid::UrnParser::Base
20
- PUBLISHER_LABEL = "IEEE"
21
-
22
- def parse_urn(urn)
23
- body = strip_namespace(urn)
24
- parts = split_parts(body)
25
-
26
- _publisher, code, year = parts
27
-
28
- text = "#{PUBLISHER_LABEL} Std #{code}"
29
- text += "-#{year}" if year
30
- flavor_parse(text)
31
- end
32
- end
33
- end
34
- end
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Ietf
5
- # Turns the Parser's parse tree into a concrete identifier object, choosing
6
- # the class from which fields are present.
7
- class Builder
8
- SUBSERIES_CLASSES = {
9
- "BCP" => "Bcp",
10
- "STD" => "Std",
11
- "FYI" => "Fyi",
12
- }.freeze
13
-
14
- def self.build(parsed_data)
15
- new.build(parsed_data)
16
- end
17
-
18
- def build(data)
19
- if data.key?(:draft_rest)
20
- build_draft(data)
21
- elsif data[:series]
22
- build_subseries(data)
23
- else
24
- build_rfc(data)
25
- end
26
- end
27
-
28
- private
29
-
30
- def build_rfc(data)
31
- Identifiers::Rfc.new(number: unpad(data[:number]))
32
- end
33
-
34
- # The series token only selects the class: it is derived back from the
35
- # class (Identifiers::Std::SERIES) rather than stored, since `_type`
36
- # already carries it.
37
- def build_subseries(data)
38
- klass = Identifiers.const_get(
39
- SUBSERIES_CLASSES.fetch(data[:series].to_s),
40
- )
41
- klass.new(number: unpad(data[:number]))
42
- end
43
-
44
- # Strip the zero-padding the RFC editor's rfc-index.xml writes ("STD0066",
45
- # "RFC0001") so the canonical printed form is the unpadded one. The
46
- # look-ahead keeps the last digit, so an all-zero number stays "0" rather
47
- # than becoming empty.
48
- def unpad(number)
49
- number.to_s.sub(/\A0+(?=\d)/, "")
50
- end
51
-
52
- def build_draft(data)
53
- full = "draft-#{data[:draft_rest]}"
54
- slug, version = split_draft_version(full)
55
- Identifiers::InternetDraft.new(number: slug, version: version)
56
- end
57
-
58
- # An Internet-Draft version is a trailing "-NN" of *exactly* two digits at
59
- # the very end of the slug. A three-digit topic tail (e.g. "...-256") is
60
- # NOT a version: there the char before the last two digits is itself a
61
- # digit, not "-", so the guard below leaves it in the slug. This also
62
- # means a (non-existent in practice) revision >= 100 would be read as part
63
- # of the slug — IETF drafts are always two-digit-versioned, so that case
64
- # never arises. Either way the printed string round-trips exactly.
65
- #
66
- # Dotted slugs need no special handling here: only the final three
67
- # characters are inspected, so "draft-ietf-pilc-2.5g3g-12" splits into
68
- # ("draft-ietf-pilc-2.5g3g", "12").
69
- def split_draft_version(full)
70
- if full.length > 3 && full[-3] == "-" && full[-2..].match?(/\A\d\d\z/)
71
- [full[0...-3], full[-2..]]
72
- else
73
- [full, nil]
74
- end
75
- end
76
- end
77
- end
78
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Pubid::Ietf::Identifier is the IETF base class and the flavor's parse entry
4
- # point; its body lives in
5
- # identifiers/base.rb (mirrors the AMCA layout).
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Ietf
5
- # Base class for every IETF identifier AND the flavor's parse/create entry
6
- # point (mirrors Pubid::Jis::Identifier). Concrete identifiers under
7
- # Pubid::Ietf::Identifiers descend from this class, so a parsed IETF id is
8
- # an instance of Pubid::Ietf::Identifier.
9
- #
10
- # All families are flat, supplement-free, and use plain string attributes.
11
- # Those attributes are declared on the LEAVES by Identifiers::Serialization
12
- # (see the determinism note there — never re-add `attribute :number` here):
13
- # * Rfc -> number ("2119")
14
- # * Bcp/Std/Fyi -> number ("3") + a derived `series` reader
15
- # * InternetDraft -> number ("draft-giuliano-treedn") + optional version
16
- class Identifier < ::Pubid::Identifier
17
- # Polymorphic type map for lutaml::Model key_value (de)serialization: maps
18
- # each subclass's polymorphic_name to its class name so a stored hash
19
- # rebuilds the correct identifier type via the shared from_hash dispatch.
20
- IETF_TYPE_MAP = {
21
- "pubid:ietf:rfc" => "Pubid::Ietf::Identifiers::Rfc",
22
- "pubid:ietf:bcp" => "Pubid::Ietf::Identifiers::Bcp",
23
- "pubid:ietf:std" => "Pubid::Ietf::Identifiers::Std",
24
- "pubid:ietf:fyi" => "Pubid::Ietf::Identifiers::Fyi",
25
- "pubid:ietf:internet-draft" =>
26
- "Pubid::Ietf::Identifiers::InternetDraft",
27
- }.freeze
28
-
29
- # NOTE: no `key_value` block here on purpose. The mapping lives on the
30
- # leaves (Identifiers::Serialization); a block on this shared parent would
31
- # be inherited-and-merged by every leaf and re-emit keys the leaf did not
32
- # declare.
33
-
34
- # Publisher is always "IETF". A plain constant (not a `publisher` method)
35
- # so it doesn't shadow the inherited lutaml `publisher` attribute, which
36
- # would otherwise fail serialization type validation.
37
- PUBLISHER = "IETF"
38
-
39
- # Basic string representation. Delegates to the flavor renderer.
40
- def to_s(**opts)
41
- render(format: :human, **opts)
42
- end
43
-
44
- # from_hash is the shared polymorphic dispatch on Pubid::Identifier; the
45
- # IETF_TYPE_MAP above serves as its key_value polymorphic_map.
46
-
47
- # Parse an IETF identifier string into the appropriate identifier object.
48
- # @param identifier [String] the IETF identifier string to parse
49
- # @return [Identifier] the concrete identifier object
50
- # @raise [Pubid::Errors::InvalidInputError] if the input exceeds
51
- # Pubid::MAX_INPUT_LENGTH
52
- # @raise [Pubid::Errors::ParseError] if parsing fails
53
- def self.parse(identifier)
54
- # Inline length guard (CodeQL rb/polynomial-redos barrier) — must be
55
- # the first statement. This class-level funnel is what relaton reaches
56
- # directly through `pubid_class: ::Pubid::Ietf::Identifier`, so it
57
- # cannot rely on the guard in Pubid::Ietf.parse.
58
- unless identifier.is_a?(String)
59
- raise Pubid::Errors::InvalidInputError,
60
- Pubid::INPUT_NOT_A_STRING_MESSAGE
61
- end
62
-
63
- if identifier.length > Pubid::MAX_INPUT_LENGTH
64
- raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
65
- end
66
-
67
- parsed = Parser.parse(identifier)
68
- Builder.build(parsed)
69
- end
70
- end
71
- end
72
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Ietf
5
- module Identifiers
6
- # A BCP (Best Current Practice) sub-series id, e.g. "BCP 3".
7
- class Bcp < Identifier
8
- include Serialization
9
-
10
- # The series token is derived from the class, not stored:
11
- # `_type` already encodes it, so serializing `series` would
12
- # duplicate the type in every index row.
13
- SERIES = "BCP"
14
-
15
- def series
16
- SERIES
17
- end
18
-
19
- TYPED_STAGES = [
20
- Pubid::Components::TypedStage.new(
21
- code: :bcp,
22
- stage_code: :published,
23
- type_code: :bcp,
24
- abbr: ["BCP"],
25
- name: "Best Current Practice",
26
- harmonized_stages: [],
27
- ),
28
- ].freeze
29
-
30
- def self.type
31
- { key: :bcp, web: :bcp, title: "Best Current Practice", short: "BCP" }
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Pubid
4
- module Ietf
5
- module Identifiers
6
- # An FYI (For Your Information) sub-series id, e.g. "FYI 1".
7
- class Fyi < Identifier
8
- include Serialization
9
-
10
- # The series token is derived from the class, not stored:
11
- # `_type` already encodes it, so serializing `series` would
12
- # duplicate the type in every index row.
13
- SERIES = "FYI"
14
-
15
- def series
16
- SERIES
17
- end
18
-
19
- TYPED_STAGES = [
20
- Pubid::Components::TypedStage.new(
21
- code: :fyi,
22
- stage_code: :published,
23
- type_code: :fyi,
24
- abbr: ["FYI"],
25
- name: "For Your Information",
26
- harmonized_stages: [],
27
- ),
28
- ].freeze
29
-
30
- def self.type
31
- { key: :fyi, web: :fyi, title: "For Your Information", short: "FYI" }
32
- end
33
- end
34
- end
35
- end
36
- end