pubid 2.0.0.pre.alpha.8 → 2.0.0.pre.alpha.11

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 (672) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +33 -11
  3. data/conformance/pending.yaml +4 -0
  4. data/data/bipm/update_codes.yaml +9 -0
  5. data/data/iec/update_codes.yaml +3 -0
  6. data/data/ieee/update_codes.yaml +107 -1
  7. data/{archived-gems/pubid-nist → data/nist}/series.yaml +34 -0
  8. data/data/nist/update_codes.yaml +8 -0
  9. data/lib/pubid/adobe/builder.rb +52 -0
  10. data/lib/pubid/adobe/identifier.rb +47 -0
  11. data/lib/pubid/adobe/identifiers/publication.rb +31 -0
  12. data/lib/pubid/adobe/identifiers/tech_note.rb +32 -0
  13. data/lib/pubid/adobe/identifiers.rb +10 -0
  14. data/lib/pubid/adobe/parser.rb +136 -0
  15. data/lib/pubid/adobe/renderer.rb +39 -0
  16. data/lib/pubid/adobe/urn_generator.rb +42 -0
  17. data/lib/pubid/adobe/urn_parser.rb +69 -0
  18. data/lib/pubid/adobe.rb +61 -0
  19. data/lib/pubid/amca/builder.rb +4 -4
  20. data/lib/pubid/amca/identifier.rb +1 -3
  21. data/lib/pubid/amca/identifiers/base.rb +50 -33
  22. data/lib/pubid/amca/identifiers/interpretation.rb +18 -10
  23. data/lib/pubid/amca/identifiers/publication.rb +14 -10
  24. data/lib/pubid/amca/identifiers/standard.rb +3 -1
  25. data/lib/pubid/amca/identifiers.rb +0 -1
  26. data/lib/pubid/amca/parser.rb +1 -1
  27. data/lib/pubid/amca/renderer.rb +4 -4
  28. data/lib/pubid/amca/single_identifier.rb +1 -1
  29. data/lib/pubid/amca/urn_generator.rb +2 -2
  30. data/lib/pubid/amca.rb +5 -4
  31. data/lib/pubid/ansi/builder.rb +2 -2
  32. data/lib/pubid/ansi/identifier.rb +18 -0
  33. data/lib/pubid/ansi/parser.rb +1 -1
  34. data/lib/pubid/ansi/renderer.rb +2 -2
  35. data/lib/pubid/ansi.rb +5 -5
  36. data/lib/pubid/api/builder.rb +16 -2
  37. data/lib/pubid/api/identifier.rb +25 -4
  38. data/lib/pubid/api/identifiers/mpms.rb +10 -8
  39. data/lib/pubid/api/parser.rb +1 -1
  40. data/lib/pubid/api/renderer.rb +16 -7
  41. data/lib/pubid/api/single_identifier.rb +5 -12
  42. data/lib/pubid/api.rb +1 -0
  43. data/lib/pubid/ashrae/builder.rb +53 -32
  44. data/lib/pubid/ashrae/identifier.rb +3 -4
  45. data/lib/pubid/ashrae/identifiers/addenda_package.rb +7 -1
  46. data/lib/pubid/ashrae/identifiers/addendum.rb +9 -1
  47. data/lib/pubid/ashrae/identifiers/base.rb +94 -12
  48. data/lib/pubid/ashrae/identifiers/combined_addenda.rb +8 -1
  49. data/lib/pubid/ashrae/identifiers/errata.rb +9 -0
  50. data/lib/pubid/ashrae/identifiers/guideline.rb +3 -0
  51. data/lib/pubid/ashrae/identifiers/interpretation.rb +16 -0
  52. data/lib/pubid/ashrae/identifiers/standard.rb +3 -0
  53. data/lib/pubid/ashrae/identifiers.rb +0 -1
  54. data/lib/pubid/ashrae/parser.rb +37 -17
  55. data/lib/pubid/ashrae/renderer.rb +20 -20
  56. data/lib/pubid/ashrae/single_identifier.rb +1 -1
  57. data/lib/pubid/ashrae/supplement_identifier.rb +21 -6
  58. data/lib/pubid/ashrae/urn_generator.rb +8 -2
  59. data/lib/pubid/ashrae.rb +10 -4
  60. data/lib/pubid/asme/builder.rb +11 -2
  61. data/lib/pubid/asme/identifier.rb +9 -0
  62. data/lib/pubid/asme/identifiers/standard.rb +86 -2
  63. data/lib/pubid/asme/parser.rb +1 -1
  64. data/lib/pubid/asme/renderer.rb +3 -3
  65. data/lib/pubid/asme/single_identifier.rb +8 -1
  66. data/lib/pubid/asme/urn_generator.rb +2 -2
  67. data/lib/pubid/asme.rb +1 -0
  68. data/lib/pubid/astm/builder.rb +10 -3
  69. data/lib/pubid/astm/identifier.rb +9 -0
  70. data/lib/pubid/astm/identifiers/adjunct.rb +16 -1
  71. data/lib/pubid/astm/identifiers/code_number.rb +81 -0
  72. data/lib/pubid/astm/identifiers/data_series.rb +2 -0
  73. data/lib/pubid/astm/identifiers/iso_dual_published.rb +16 -0
  74. data/lib/pubid/astm/identifiers/manual.rb +10 -0
  75. data/lib/pubid/astm/identifiers/monograph.rb +2 -0
  76. data/lib/pubid/astm/identifiers/research_report.rb +10 -0
  77. data/lib/pubid/astm/identifiers/standard.rb +10 -0
  78. data/lib/pubid/astm/identifiers/technical_report.rb +2 -0
  79. data/lib/pubid/astm/identifiers/work_in_progress.rb +2 -0
  80. data/lib/pubid/astm/identifiers.rb +1 -0
  81. data/lib/pubid/astm/parser.rb +1 -1
  82. data/lib/pubid/astm/renderer.rb +1 -1
  83. data/lib/pubid/astm/single_identifier.rb +31 -1
  84. data/lib/pubid/astm/urn_generator.rb +7 -5
  85. data/lib/pubid/astm.rb +1 -0
  86. data/lib/pubid/bipm/builder.rb +163 -0
  87. data/lib/pubid/bipm/identifier.rb +285 -0
  88. data/lib/pubid/bipm/identifiers/committee_document.rb +36 -0
  89. data/lib/pubid/bipm/identifiers/guide.rb +35 -0
  90. data/lib/pubid/bipm/identifiers/meeting.rb +53 -0
  91. data/lib/pubid/bipm/identifiers/mep.rb +33 -0
  92. data/lib/pubid/bipm/identifiers/metrologia_article.rb +48 -0
  93. data/lib/pubid/bipm/identifiers/si_brochure.rb +33 -0
  94. data/lib/pubid/bipm/identifiers.rb +15 -0
  95. data/lib/pubid/bipm/parser.rb +237 -0
  96. data/lib/pubid/bipm/renderer.rb +118 -0
  97. data/lib/pubid/bipm/urn_generator.rb +58 -0
  98. data/lib/pubid/bipm/urn_parser.rb +60 -0
  99. data/lib/pubid/bipm.rb +92 -0
  100. data/lib/pubid/bsi/builder.rb +62 -52
  101. data/lib/pubid/bsi/identifier.rb +0 -1
  102. data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -2
  103. data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +36 -7
  104. data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +7 -6
  105. data/lib/pubid/bsi/identifiers/amendment.rb +4 -4
  106. data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +0 -1
  107. data/lib/pubid/bsi/identifiers/bundled_identifier.rb +10 -0
  108. data/lib/pubid/bsi/identifiers/committee_document.rb +10 -1
  109. data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +6 -0
  110. data/lib/pubid/bsi/identifiers/corrigendum.rb +4 -4
  111. data/lib/pubid/bsi/identifiers/expert_commentary.rb +5 -5
  112. data/lib/pubid/bsi/identifiers/handbook.rb +0 -2
  113. data/lib/pubid/bsi/identifiers/practice_guide.rb +0 -1
  114. data/lib/pubid/bsi/identifiers/set.rb +11 -0
  115. data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -1
  116. data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -2
  117. data/lib/pubid/bsi/identifiers/value_added_publication.rb +6 -6
  118. data/lib/pubid/bsi/parser.rb +1 -1
  119. data/lib/pubid/bsi/renderer.rb +71 -59
  120. data/lib/pubid/bsi/single_identifier.rb +64 -7
  121. data/lib/pubid/bsi/urn_generator.rb +11 -2
  122. data/lib/pubid/bsi.rb +7 -1
  123. data/lib/pubid/builder/base.rb +23 -11
  124. data/lib/pubid/bundled_identifier.rb +19 -9
  125. data/lib/pubid/calconnect/builder.rb +38 -0
  126. data/lib/pubid/calconnect/identifier.rb +121 -0
  127. data/lib/pubid/calconnect/identifiers/standard.rb +29 -0
  128. data/lib/pubid/calconnect/identifiers.rb +9 -0
  129. data/lib/pubid/calconnect/parser.rb +54 -0
  130. data/lib/pubid/calconnect/renderer.rb +36 -0
  131. data/lib/pubid/calconnect/urn_generator.rb +33 -0
  132. data/lib/pubid/calconnect/urn_parser.rb +34 -0
  133. data/lib/pubid/calconnect.rb +83 -0
  134. data/lib/pubid/ccsds/builder.rb +1 -1
  135. data/lib/pubid/ccsds/identifier.rb +10 -3
  136. data/lib/pubid/ccsds/identifiers/base.rb +4 -2
  137. data/lib/pubid/ccsds/identifiers/corrigendum.rb +4 -4
  138. data/lib/pubid/ccsds/parser.rb +1 -1
  139. data/lib/pubid/ccsds/single_identifier.rb +2 -2
  140. data/lib/pubid/ccsds/supplement_identifier.rb +6 -6
  141. data/lib/pubid/ccsds/urn_generator.rb +3 -3
  142. data/lib/pubid/ccsds.rb +1 -0
  143. data/lib/pubid/cen_cenelec/builder.rb +131 -72
  144. data/lib/pubid/cen_cenelec/identifier.rb +115 -3
  145. data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +27 -16
  146. data/lib/pubid/cen_cenelec/identifiers/amendment.rb +46 -6
  147. data/lib/pubid/cen_cenelec/identifiers/base.rb +8 -9
  148. data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -1
  149. data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -1
  150. data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +1 -1
  151. data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +29 -14
  152. data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +47 -8
  153. data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +60 -3
  154. data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +27 -2
  155. data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -1
  156. data/lib/pubid/cen_cenelec/identifiers/fragment.rb +15 -5
  157. data/lib/pubid/cen_cenelec/identifiers/guide.rb +1 -1
  158. data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -1
  159. data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -1
  160. data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -1
  161. data/lib/pubid/cen_cenelec/parser.rb +1 -1
  162. data/lib/pubid/cen_cenelec/renderer.rb +55 -60
  163. data/lib/pubid/cen_cenelec/single_identifier.rb +20 -2
  164. data/lib/pubid/cen_cenelec/urn_generator.rb +66 -44
  165. data/lib/pubid/cen_cenelec.rb +104 -82
  166. data/lib/pubid/cie/builder.rb +149 -24
  167. data/lib/pubid/cie/identifier.rb +13 -4
  168. data/lib/pubid/cie/identifiers/bundle.rb +35 -5
  169. data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
  170. data/lib/pubid/cie/identifiers/conference.rb +11 -6
  171. data/lib/pubid/cie/identifiers/corrigendum.rb +17 -23
  172. data/lib/pubid/cie/identifiers/dual_published.rb +6 -6
  173. data/lib/pubid/cie/identifiers/identical.rb +9 -9
  174. data/lib/pubid/cie/identifiers/joint_published.rb +10 -10
  175. data/lib/pubid/cie/identifiers/proceedings.rb +41 -0
  176. data/lib/pubid/cie/identifiers/standard.rb +43 -8
  177. data/lib/pubid/cie/identifiers/supplement.rb +27 -25
  178. data/lib/pubid/cie/identifiers/tutorial_bundle.rb +7 -3
  179. data/lib/pubid/cie/identifiers.rb +2 -0
  180. data/lib/pubid/cie/parser.rb +55 -6
  181. data/lib/pubid/cie/single_identifier.rb +40 -1
  182. data/lib/pubid/cie/supplement_identifier.rb +29 -16
  183. data/lib/pubid/cie/urn_generator.rb +11 -8
  184. data/lib/pubid/cie.rb +7 -2
  185. data/lib/pubid/components/date.rb +21 -5
  186. data/lib/pubid/conformance/checks.rb +72 -0
  187. data/lib/pubid/conformance/corpus/case.rb +55 -0
  188. data/lib/pubid/conformance/corpus.rb +36 -0
  189. data/lib/pubid/conformance/generator.rb +212 -0
  190. data/lib/pubid/conformance/pending.rb +63 -0
  191. data/lib/pubid/conformance/runner.rb +153 -0
  192. data/lib/pubid/conformance.rb +55 -0
  193. data/lib/pubid/core.rb +2 -0
  194. data/lib/pubid/csa/builder.rb +48 -48
  195. data/lib/pubid/csa/composite_identifier.rb +18 -7
  196. data/lib/pubid/csa/identifier.rb +187 -80
  197. data/lib/pubid/csa/identifiers/bundled.rb +25 -9
  198. data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
  199. data/lib/pubid/csa/identifiers/cec.rb +44 -4
  200. data/lib/pubid/csa/identifiers/combined.rb +97 -69
  201. data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
  202. data/lib/pubid/csa/identifiers/package.rb +4 -4
  203. data/lib/pubid/csa/parser.rb +12 -8
  204. data/lib/pubid/csa/renderer.rb +13 -5
  205. data/lib/pubid/csa/single_identifier.rb +93 -4
  206. data/lib/pubid/csa/urn_generator.rb +9 -2
  207. data/lib/pubid/csa/wrapper_identifier.rb +43 -10
  208. data/lib/pubid/csa.rb +7 -1
  209. data/lib/pubid/doi/builder.rb +18 -0
  210. data/lib/pubid/doi/identifier.rb +49 -0
  211. data/lib/pubid/doi/identifiers/resource.rb +30 -0
  212. data/lib/pubid/doi/identifiers.rb +9 -0
  213. data/lib/pubid/doi/parser.rb +52 -0
  214. data/lib/pubid/doi/renderer.rb +13 -0
  215. data/lib/pubid/doi.rb +56 -0
  216. data/lib/pubid/easc/builder.rb +55 -0
  217. data/lib/pubid/easc/identifier.rb +59 -0
  218. data/lib/pubid/easc/identifiers/pmg.rb +20 -0
  219. data/lib/pubid/easc/identifiers/rmg.rb +19 -0
  220. data/lib/pubid/easc/identifiers.rb +10 -0
  221. data/lib/pubid/easc/parser.rb +88 -0
  222. data/lib/pubid/easc/renderer.rb +48 -0
  223. data/lib/pubid/easc/urn_generator.rb +46 -0
  224. data/lib/pubid/easc/urn_parser.rb +57 -0
  225. data/lib/pubid/easc.rb +53 -0
  226. data/lib/pubid/ecma/builder.rb +45 -0
  227. data/lib/pubid/ecma/identifier.rb +147 -0
  228. data/lib/pubid/ecma/identifiers/memento.rb +30 -0
  229. data/lib/pubid/ecma/identifiers/standard.rb +31 -0
  230. data/lib/pubid/ecma/identifiers/technical_report.rb +31 -0
  231. data/lib/pubid/ecma/identifiers.rb +11 -0
  232. data/lib/pubid/ecma/parser.rb +76 -0
  233. data/lib/pubid/ecma/renderer.rb +67 -0
  234. data/lib/pubid/ecma/urn_generator.rb +46 -0
  235. data/lib/pubid/ecma/urn_parser.rb +51 -0
  236. data/lib/pubid/ecma.rb +68 -0
  237. data/lib/pubid/errors.rb +80 -0
  238. data/lib/pubid/etsi/builder.rb +13 -4
  239. data/lib/pubid/etsi/identifier.rb +1 -3
  240. data/lib/pubid/etsi/identifiers/base.rb +43 -11
  241. data/lib/pubid/etsi/identifiers/etsi_standard.rb +207 -4
  242. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +45 -3
  243. data/lib/pubid/etsi/identifiers.rb +0 -1
  244. data/lib/pubid/etsi/parser.rb +9 -3
  245. data/lib/pubid/etsi/renderer.rb +8 -2
  246. data/lib/pubid/etsi.rb +6 -5
  247. data/lib/pubid/evs/builder.rb +26 -0
  248. data/lib/pubid/evs/identifier.rb +37 -0
  249. data/lib/pubid/evs/identifiers/national_adoption.rb +17 -0
  250. data/lib/pubid/evs/identifiers.rb +9 -0
  251. data/lib/pubid/evs/parser.rb +27 -0
  252. data/lib/pubid/evs/renderer.rb +30 -0
  253. data/lib/pubid/evs/urn_generator.rb +30 -0
  254. data/lib/pubid/evs/urn_parser.rb +80 -0
  255. data/lib/pubid/evs.rb +90 -0
  256. data/lib/pubid/export/exporter.rb +2 -1
  257. data/lib/pubid/export/flavor_exporter.rb +18 -3
  258. data/lib/pubid/export.rb +1 -0
  259. data/lib/pubid/format_detector.rb +1 -0
  260. data/lib/pubid/gb/builder.rb +45 -0
  261. data/lib/pubid/gb/identifier.rb +67 -0
  262. data/lib/pubid/gb/identifiers/standard.rb +34 -0
  263. data/lib/pubid/gb/identifiers.rb +9 -0
  264. data/lib/pubid/gb/parser.rb +63 -0
  265. data/lib/pubid/gb/renderer.rb +35 -0
  266. data/lib/pubid/gb.rb +88 -0
  267. data/lib/pubid/gost/builder.rb +185 -0
  268. data/lib/pubid/gost/identifier.rb +47 -0
  269. data/lib/pubid/gost/identifiers/foreign_reference.rb +25 -0
  270. data/lib/pubid/gost/identifiers/harmonized.rb +39 -0
  271. data/lib/pubid/gost/identifiers/identical_adoption.rb +39 -0
  272. data/lib/pubid/gost/identifiers/interstate_standard.rb +20 -0
  273. data/lib/pubid/gost/identifiers/national_standard.rb +19 -0
  274. data/lib/pubid/gost/identifiers.rb +13 -0
  275. data/lib/pubid/gost/parser.rb +105 -0
  276. data/lib/pubid/gost/renderer.rb +48 -0
  277. data/lib/pubid/gost/urn_generator.rb +46 -0
  278. data/lib/pubid/gost/urn_parser.rb +52 -0
  279. data/lib/pubid/gost.rb +50 -0
  280. data/lib/pubid/iala/builder.rb +22 -27
  281. data/lib/pubid/iala/identifier.rb +36 -8
  282. data/lib/pubid/iala/identifiers/advice.rb +1 -1
  283. data/lib/pubid/iala/identifiers/annex.rb +10 -10
  284. data/lib/pubid/iala/identifiers/general_assembly.rb +5 -2
  285. data/lib/pubid/iala/identifiers/guideline.rb +3 -1
  286. data/lib/pubid/iala/identifiers/letter.rb +1 -1
  287. data/lib/pubid/iala/identifiers/manual.rb +3 -1
  288. data/lib/pubid/iala/identifiers/model_course.rb +3 -1
  289. data/lib/pubid/iala/identifiers/recommendation.rb +3 -1
  290. data/lib/pubid/iala/identifiers/report.rb +1 -1
  291. data/lib/pubid/iala/identifiers/resolution.rb +1 -1
  292. data/lib/pubid/iala/identifiers/standard.rb +3 -1
  293. data/lib/pubid/iala/identifiers.rb +0 -1
  294. data/lib/pubid/iala/parser.rb +10 -2
  295. data/lib/pubid/iala/renderer.rb +1 -1
  296. data/lib/pubid/iala/urn_generator.rb +1 -1
  297. data/lib/pubid/iala/urn_parser.rb +24 -3
  298. data/lib/pubid/iala.rb +5 -4
  299. data/lib/pubid/iana/builder.rb +22 -0
  300. data/lib/pubid/iana/identifier.rb +140 -0
  301. data/lib/pubid/iana/identifiers/registry.rb +69 -0
  302. data/lib/pubid/iana/identifiers.rb +9 -0
  303. data/lib/pubid/iana/parser.rb +38 -0
  304. data/lib/pubid/iana/renderer.rb +32 -0
  305. data/lib/pubid/iana/urn_generator.rb +19 -0
  306. data/lib/pubid/iana/urn_parser.rb +24 -0
  307. data/lib/pubid/iana.rb +70 -0
  308. data/lib/pubid/identifier.rb +797 -26
  309. data/lib/pubid/identifier_metadata.rb +1 -0
  310. data/lib/pubid/idf/builder.rb +4 -4
  311. data/lib/pubid/idf/identifier.rb +18 -9
  312. data/lib/pubid/idf/parser.rb +3 -3
  313. data/lib/pubid/idf/renderer.rb +5 -5
  314. data/lib/pubid/idf/supplement_identifier.rb +3 -3
  315. data/lib/pubid/idf/urn_generator.rb +1 -1
  316. data/lib/pubid/idf.rb +7 -1
  317. data/lib/pubid/iec/builder.rb +49 -32
  318. data/lib/pubid/iec/components.rb +0 -1
  319. data/lib/pubid/iec/identifier.rb +112 -77
  320. data/lib/pubid/iec/identifiers/amendment.rb +6 -2
  321. data/lib/pubid/iec/identifiers/base.rb +2 -2
  322. data/lib/pubid/iec/identifiers/component_specification.rb +0 -10
  323. data/lib/pubid/iec/identifiers/conformity_assessment.rb +0 -10
  324. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +6 -0
  325. data/lib/pubid/iec/identifiers/corrigendum.rb +2 -2
  326. data/lib/pubid/iec/identifiers/fragment_identifier.rb +13 -15
  327. data/lib/pubid/iec/identifiers/guide.rb +0 -16
  328. data/lib/pubid/iec/identifiers/international_standard.rb +22 -6
  329. data/lib/pubid/iec/identifiers/operational_document.rb +0 -10
  330. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +0 -12
  331. data/lib/pubid/iec/identifiers/sheet_identifier.rb +12 -12
  332. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +0 -10
  333. data/lib/pubid/iec/identifiers/systems_reference_document.rb +0 -10
  334. data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
  335. data/lib/pubid/iec/identifiers/technical_report.rb +1 -18
  336. data/lib/pubid/iec/identifiers/technical_specification.rb +1 -18
  337. data/lib/pubid/iec/identifiers/technology_report.rb +0 -10
  338. data/lib/pubid/iec/identifiers/test_report_form.rb +0 -11
  339. data/lib/pubid/iec/identifiers/vap_identifier.rb +12 -12
  340. data/lib/pubid/iec/identifiers/white_paper.rb +0 -10
  341. data/lib/pubid/iec/identifiers/working_document.rb +24 -10
  342. data/lib/pubid/iec/identifiers.rb +1 -0
  343. data/lib/pubid/iec/parser.rb +53 -28
  344. data/lib/pubid/iec/renderer.rb +31 -18
  345. data/lib/pubid/iec/single_identifier.rb +34 -11
  346. data/lib/pubid/iec/supplement_identifier.rb +32 -19
  347. data/lib/pubid/iec/urn_generator.rb +227 -61
  348. data/lib/pubid/iec/urn_parser.rb +42 -4
  349. data/lib/pubid/iec.rb +2 -6
  350. data/lib/pubid/ieee/aiee/builder.rb +17 -3
  351. data/lib/pubid/ieee/aiee/identifier.rb +46 -62
  352. data/lib/pubid/ieee/aiee/parser.rb +1 -1
  353. data/lib/pubid/ieee/builder.rb +386 -69
  354. data/lib/pubid/ieee/compaction.rb +121 -0
  355. data/lib/pubid/ieee/components/draft.rb +47 -7
  356. data/lib/pubid/ieee/identifier.rb +1 -3
  357. data/lib/pubid/ieee/identifiers/adopted_standard.rb +62 -5
  358. data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
  359. data/lib/pubid/ieee/identifiers/base.rb +148 -18
  360. data/lib/pubid/ieee/identifiers/code_number.rb +82 -0
  361. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +6 -2
  362. data/lib/pubid/ieee/identifiers/corrigendum.rb +17 -2
  363. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +24 -3
  364. data/lib/pubid/ieee/identifiers/dual_identifier.rb +3 -3
  365. data/lib/pubid/ieee/identifiers/dual_published.rb +58 -3
  366. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +102 -5
  367. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +25 -1
  368. data/lib/pubid/ieee/identifiers/joint_development.rb +64 -15
  369. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +58 -6
  370. data/lib/pubid/ieee/identifiers/nesc/base.rb +90 -19
  371. data/lib/pubid/ieee/identifiers/nesc/draft.rb +20 -5
  372. data/lib/pubid/ieee/identifiers/nesc/edition.rb +32 -0
  373. data/lib/pubid/ieee/identifiers/nesc/handbook.rb +16 -5
  374. data/lib/pubid/ieee/identifiers/nesc/redline.rb +11 -2
  375. data/lib/pubid/ieee/identifiers/nesc/standard.rb +18 -3
  376. data/lib/pubid/ieee/identifiers/nesc.rb +1 -0
  377. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +3 -3
  378. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +14 -6
  379. data/lib/pubid/ieee/identifiers/redlined_standard.rb +4 -4
  380. data/lib/pubid/ieee/identifiers/si_standard.rb +4 -1
  381. data/lib/pubid/ieee/identifiers/standard.rb +4 -1
  382. data/lib/pubid/ieee/identifiers/supplement_identifier.rb +26 -7
  383. data/lib/pubid/ieee/identifiers.rb +2 -1
  384. data/lib/pubid/ieee/ire/builder.rb +7 -6
  385. data/lib/pubid/ieee/ire/identifier.rb +48 -33
  386. data/lib/pubid/ieee/ire/parser.rb +1 -1
  387. data/lib/pubid/ieee/nesc/builder.rb +33 -20
  388. data/lib/pubid/ieee/nesc/parser.rb +16 -15
  389. data/lib/pubid/ieee/parser.rb +462 -44
  390. data/lib/pubid/ieee/pre_parser.rb +1 -1
  391. data/lib/pubid/ieee/renderer.rb +158 -57
  392. data/lib/pubid/ieee/typed_stages.rb +12 -1
  393. data/lib/pubid/ieee/urn_generator.rb +35 -8
  394. data/lib/pubid/ieee.rb +63 -4
  395. data/lib/pubid/ieee_debug.rb +1 -0
  396. data/lib/pubid/ietf/builder.rb +78 -0
  397. data/lib/pubid/ietf/identifier.rb +5 -0
  398. data/lib/pubid/ietf/identifiers/base.rb +72 -0
  399. data/lib/pubid/ietf/identifiers/bcp.rb +36 -0
  400. data/lib/pubid/ietf/identifiers/fyi.rb +36 -0
  401. data/lib/pubid/ietf/identifiers/internet_draft.rb +45 -0
  402. data/lib/pubid/ietf/identifiers/rfc.rb +27 -0
  403. data/lib/pubid/ietf/identifiers/serialization.rb +51 -0
  404. data/lib/pubid/ietf/identifiers/std.rb +36 -0
  405. data/lib/pubid/ietf/identifiers.rb +14 -0
  406. data/lib/pubid/ietf/parser.rb +61 -0
  407. data/lib/pubid/ietf/renderer.rb +64 -0
  408. data/lib/pubid/ietf/urn_generator.rb +37 -0
  409. data/lib/pubid/ietf/urn_parser.rb +43 -0
  410. data/lib/pubid/ietf.rb +86 -0
  411. data/lib/pubid/iho/identifier.rb +1 -3
  412. data/lib/pubid/iho/identifiers/base.rb +11 -10
  413. data/lib/pubid/iho/identifiers/bibliographic.rb +1 -1
  414. data/lib/pubid/iho/identifiers/circular_letter.rb +1 -1
  415. data/lib/pubid/iho/identifiers/miscellaneous.rb +1 -1
  416. data/lib/pubid/iho/identifiers/publication.rb +1 -1
  417. data/lib/pubid/iho/identifiers/standard.rb +1 -1
  418. data/lib/pubid/iho/identifiers.rb +0 -1
  419. data/lib/pubid/iho/parser.rb +1 -1
  420. data/lib/pubid/iho.rb +8 -7
  421. data/lib/pubid/isbn/builder.rb +44 -0
  422. data/lib/pubid/isbn/check_digit.rb +53 -0
  423. data/lib/pubid/isbn/identifier.rb +81 -0
  424. data/lib/pubid/isbn/identifiers/book.rb +30 -0
  425. data/lib/pubid/isbn/identifiers.rb +9 -0
  426. data/lib/pubid/isbn/parser.rb +45 -0
  427. data/lib/pubid/isbn/renderer.rb +16 -0
  428. data/lib/pubid/isbn.rb +53 -0
  429. data/lib/pubid/iso/builder.rb +9 -4
  430. data/lib/pubid/iso/bundled_identifier.rb +5 -3
  431. data/lib/pubid/iso/combined_identifier.rb +6 -4
  432. data/lib/pubid/iso/identifier.rb +29 -8
  433. data/lib/pubid/iso/identifiers/directives_supplement.rb +12 -12
  434. data/lib/pubid/iso/normalizer.rb +2 -2
  435. data/lib/pubid/iso/parser.rb +17 -13
  436. data/lib/pubid/iso/supplement_identifier.rb +19 -6
  437. data/lib/pubid/iso/urn_generator.rb +4 -1
  438. data/lib/pubid/iso/urn_parser.rb +1 -1
  439. data/lib/pubid/iso.rb +7 -1
  440. data/lib/pubid/itu/builder.rb +230 -29
  441. data/lib/pubid/itu/components/code.rb +48 -5
  442. data/lib/pubid/itu/components/designation.rb +35 -0
  443. data/lib/pubid/itu/components.rb +1 -0
  444. data/lib/pubid/itu/identifier.rb +1 -3
  445. data/lib/pubid/itu/identifiers/addendum.rb +15 -0
  446. data/lib/pubid/itu/identifiers/amendment.rb +7 -29
  447. data/lib/pubid/itu/identifiers/annex.rb +13 -2
  448. data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +87 -0
  449. data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +92 -0
  450. data/lib/pubid/itu/identifiers/base.rb +357 -25
  451. data/lib/pubid/itu/identifiers/combined_identifier.rb +99 -23
  452. data/lib/pubid/itu/identifiers/corrigendum.rb +16 -23
  453. data/lib/pubid/itu/identifiers/errata.rb +15 -0
  454. data/lib/pubid/itu/identifiers/handbook.rb +38 -0
  455. data/lib/pubid/itu/identifiers/question.rb +63 -0
  456. data/lib/pubid/itu/identifiers/recommendation.rb +3 -2
  457. data/lib/pubid/itu/identifiers/report.rb +39 -0
  458. data/lib/pubid/itu/identifiers/special_publication.rb +3 -1
  459. data/lib/pubid/itu/identifiers/standard_serialization.rb +58 -0
  460. data/lib/pubid/itu/identifiers/supplement.rb +119 -14
  461. data/lib/pubid/itu/identifiers.rb +10 -1
  462. data/lib/pubid/itu/model.rb +1 -1
  463. data/lib/pubid/itu/parser.rb +481 -27
  464. data/lib/pubid/itu/urn_generator.rb +36 -6
  465. data/lib/pubid/itu/urn_parser.rb +8 -0
  466. data/lib/pubid/itu.rb +12 -3
  467. data/lib/pubid/jcgm/builder.rb +24 -14
  468. data/lib/pubid/jcgm/identifier.rb +10 -0
  469. data/lib/pubid/jcgm/identifiers/amendment.rb +0 -2
  470. data/lib/pubid/jcgm/identifiers/corrigendum.rb +34 -0
  471. data/lib/pubid/jcgm/identifiers/gum_guide.rb +3 -3
  472. data/lib/pubid/jcgm/identifiers/meeting.rb +47 -0
  473. data/lib/pubid/jcgm/identifiers.rb +2 -0
  474. data/lib/pubid/jcgm/parser.rb +74 -7
  475. data/lib/pubid/jcgm/renderer.rb +33 -12
  476. data/lib/pubid/jcgm/single_identifier.rb +84 -6
  477. data/lib/pubid/jcgm/supplement_identifier.rb +39 -4
  478. data/lib/pubid/jcgm/urn_generator.rb +21 -13
  479. data/lib/pubid/jcgm/urn_parser.rb +164 -10
  480. data/lib/pubid/jcgm.rb +10 -0
  481. data/lib/pubid/jis/identifier.rb +62 -3
  482. data/lib/pubid/jis/parser.rb +1 -1
  483. data/lib/pubid/jis.rb +1 -0
  484. data/lib/pubid/nist/builder.rb +29 -9
  485. data/lib/pubid/nist/caster.rb +7 -45
  486. data/lib/pubid/nist/circular_supplement_builder.rb +7 -5
  487. data/lib/pubid/nist/components/stage.rb +2 -2
  488. data/lib/pubid/nist/components/supplement.rb +5 -2
  489. data/lib/pubid/nist/configuration.rb +6 -2
  490. data/lib/pubid/nist/identifier.rb +1 -3
  491. data/lib/pubid/nist/identifiers/base.rb +133 -39
  492. data/lib/pubid/nist/identifiers/circular.rb +10 -3
  493. data/lib/pubid/nist/identifiers/circular_supplement.rb +14 -5
  494. data/lib/pubid/nist/identifiers/commercial_standard.rb +1 -1
  495. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +1 -1
  496. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +8 -2
  497. data/lib/pubid/nist/identifiers/crpl_report.rb +8 -2
  498. data/lib/pubid/nist/identifiers/dated_document.rb +1 -1
  499. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +1 -1
  500. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +1 -1
  501. data/lib/pubid/nist/identifiers/handbook.rb +10 -3
  502. data/lib/pubid/nist/identifiers/internal_report.rb +13 -6
  503. data/lib/pubid/nist/identifiers/letter_circular.rb +1 -1
  504. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +15 -7
  505. data/lib/pubid/nist/identifiers/monograph.rb +15 -8
  506. data/lib/pubid/nist/identifiers/ncstar.rb +2 -2
  507. data/lib/pubid/nist/identifiers/nsrds.rb +1 -1
  508. data/lib/pubid/nist/identifiers/owmwp.rb +1 -1
  509. data/lib/pubid/nist/identifiers/report.rb +15 -7
  510. data/lib/pubid/nist/identifiers/special_publication.rb +10 -1
  511. data/lib/pubid/nist/identifiers/technical_note.rb +1 -1
  512. data/lib/pubid/nist/identifiers.rb +0 -1
  513. data/lib/pubid/nist/parser.rb +27 -4
  514. data/lib/pubid/nist/preprocessor.rb +15 -0
  515. data/lib/pubid/nist/router.rb +2 -2
  516. data/lib/pubid/nist/series/ir.rb +0 -3
  517. data/lib/pubid/nist/supplement_identifier.rb +24 -9
  518. data/lib/pubid/nist.rb +19 -13
  519. data/lib/pubid/oasis/builder.rb +79 -0
  520. data/lib/pubid/oasis/identifier.rb +160 -0
  521. data/lib/pubid/oasis/identifiers/standard.rb +29 -0
  522. data/lib/pubid/oasis/identifiers.rb +9 -0
  523. data/lib/pubid/oasis/parser.rb +34 -0
  524. data/lib/pubid/oasis/renderer.rb +29 -0
  525. data/lib/pubid/oasis/urn_generator.rb +25 -0
  526. data/lib/pubid/oasis/urn_parser.rb +22 -0
  527. data/lib/pubid/oasis.rb +80 -0
  528. data/lib/pubid/ogc/builder.rb +33 -0
  529. data/lib/pubid/ogc/identifier.rb +81 -0
  530. data/lib/pubid/ogc/identifiers/document.rb +26 -0
  531. data/lib/pubid/ogc/identifiers.rb +10 -0
  532. data/lib/pubid/ogc/parser.rb +40 -0
  533. data/lib/pubid/ogc/renderer.rb +33 -0
  534. data/lib/pubid/ogc/urn_generator.rb +14 -0
  535. data/lib/pubid/ogc/urn_parser.rb +22 -0
  536. data/lib/pubid/ogc.rb +72 -0
  537. data/lib/pubid/oiml/builder.rb +36 -8
  538. data/lib/pubid/oiml/identifier.rb +9 -1
  539. data/lib/pubid/oiml/identifiers/basic_publication.rb +2 -0
  540. data/lib/pubid/oiml/identifiers/bulletin.rb +36 -0
  541. data/lib/pubid/oiml/identifiers/code_number.rb +90 -0
  542. data/lib/pubid/oiml/identifiers/document.rb +2 -0
  543. data/lib/pubid/oiml/identifiers/expert_report.rb +2 -0
  544. data/lib/pubid/oiml/identifiers/guide.rb +2 -0
  545. data/lib/pubid/oiml/identifiers/recommendation.rb +2 -0
  546. data/lib/pubid/oiml/identifiers/seminar_report.rb +2 -0
  547. data/lib/pubid/oiml/identifiers/vocabulary.rb +2 -0
  548. data/lib/pubid/oiml/identifiers.rb +1 -0
  549. data/lib/pubid/oiml/parser.rb +12 -13
  550. data/lib/pubid/oiml/renderer.rb +13 -13
  551. data/lib/pubid/oiml/single_identifier.rb +41 -37
  552. data/lib/pubid/oiml/supplement_identifier.rb +36 -9
  553. data/lib/pubid/oiml/urn_parser.rb +23 -6
  554. data/lib/pubid/oiml.rb +10 -0
  555. data/lib/pubid/omg/builder.rb +20 -0
  556. data/lib/pubid/omg/identifier.rb +61 -0
  557. data/lib/pubid/omg/identifiers/specification.rb +32 -0
  558. data/lib/pubid/omg/identifiers.rb +9 -0
  559. data/lib/pubid/omg/parser.rb +93 -0
  560. data/lib/pubid/omg/renderer.rb +31 -0
  561. data/lib/pubid/omg.rb +52 -0
  562. data/lib/pubid/parser/grammar.rb +74 -0
  563. data/lib/pubid/parser.rb +2 -0
  564. data/lib/pubid/parsers/mr_string.rb +120 -7
  565. data/lib/pubid/plateau/builder.rb +8 -4
  566. data/lib/pubid/plateau/identifier.rb +1 -3
  567. data/lib/pubid/plateau/identifiers/base.rb +1 -6
  568. data/lib/pubid/plateau/identifiers/handbook.rb +1 -1
  569. data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
  570. data/lib/pubid/plateau/identifiers.rb +0 -1
  571. data/lib/pubid/plateau/parser.rb +16 -6
  572. data/lib/pubid/plateau/renderer.rb +1 -1
  573. data/lib/pubid/plateau/supplement_identifier.rb +11 -11
  574. data/lib/pubid/plateau.rb +14 -4
  575. data/lib/pubid/prefixes_support.rb +1 -0
  576. data/lib/pubid/renderers/annotator.rb +233 -0
  577. data/lib/pubid/renderers/base.rb +13 -0
  578. data/lib/pubid/renderers/directives_renderer.rb +3 -3
  579. data/lib/pubid/renderers/human_readable.rb +6 -4
  580. data/lib/pubid/renderers/mr_string.rb +54 -6
  581. data/lib/pubid/renderers/supplement_renderer.rb +1 -1
  582. data/lib/pubid/renderers.rb +1 -0
  583. data/lib/pubid/rendering/numbering.rb +25 -7
  584. data/lib/pubid/rendering/supplement.rb +4 -4
  585. data/lib/pubid/rendering.rb +1 -0
  586. data/lib/pubid/sae/builder.rb +1 -1
  587. data/lib/pubid/sae/identifier.rb +1 -3
  588. data/lib/pubid/sae/identifiers/base.rb +19 -9
  589. data/lib/pubid/sae/identifiers.rb +0 -1
  590. data/lib/pubid/sae/parser.rb +1 -1
  591. data/lib/pubid/sae.rb +4 -3
  592. data/lib/pubid/schema/declaration.rb +33 -0
  593. data/lib/pubid/schema/error.rb +14 -0
  594. data/lib/pubid/schema/identifier_type.rb +23 -0
  595. data/lib/pubid/schema/loader.rb +117 -0
  596. data/lib/pubid/schema/typed_stage.rb +24 -0
  597. data/lib/pubid/schema.rb +25 -0
  598. data/lib/pubid/tgpp/builder.rb +41 -0
  599. data/lib/pubid/tgpp/identifier.rb +107 -0
  600. data/lib/pubid/tgpp/identifiers/technical_report.rb +32 -0
  601. data/lib/pubid/tgpp/identifiers/technical_specification.rb +33 -0
  602. data/lib/pubid/tgpp/identifiers.rb +11 -0
  603. data/lib/pubid/tgpp/parser.rb +78 -0
  604. data/lib/pubid/tgpp/renderer.rb +52 -0
  605. data/lib/pubid/tgpp/urn_generator.rb +39 -0
  606. data/lib/pubid/tgpp/urn_parser.rb +30 -0
  607. data/lib/pubid/tgpp.rb +84 -0
  608. data/lib/pubid/type_resolver.rb +74 -0
  609. data/lib/pubid/un/builder.rb +42 -0
  610. data/lib/pubid/un/identifier.rb +40 -0
  611. data/lib/pubid/un/identifiers/document.rb +24 -0
  612. data/lib/pubid/un/identifiers.rb +9 -0
  613. data/lib/pubid/un/parser.rb +25 -0
  614. data/lib/pubid/un/renderer.rb +11 -0
  615. data/lib/pubid/un.rb +47 -0
  616. data/lib/pubid/urn_parser/errors.rb +8 -1
  617. data/lib/pubid/urn_parser.rb +1 -0
  618. data/lib/pubid/utils.rb +1 -0
  619. data/lib/pubid/version.rb +1 -1
  620. data/lib/pubid/w3c/builder.rb +55 -0
  621. data/lib/pubid/w3c/identifier.rb +130 -0
  622. data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +31 -0
  623. data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +31 -0
  624. data/lib/pubid/w3c/identifiers/draft_note.rb +31 -0
  625. data/lib/pubid/w3c/identifiers/note.rb +30 -0
  626. data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +31 -0
  627. data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +31 -0
  628. data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +31 -0
  629. data/lib/pubid/w3c/identifiers/recommendation.rb +31 -0
  630. data/lib/pubid/w3c/identifiers/standard.rb +12 -0
  631. data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +31 -0
  632. data/lib/pubid/w3c/identifiers/working_draft.rb +30 -0
  633. data/lib/pubid/w3c/identifiers.rb +25 -0
  634. data/lib/pubid/w3c/parser.rb +43 -0
  635. data/lib/pubid/w3c/renderer.rb +35 -0
  636. data/lib/pubid/w3c/urn_generator.rb +18 -0
  637. data/lib/pubid/w3c/urn_parser.rb +36 -0
  638. data/lib/pubid/w3c.rb +68 -0
  639. data/lib/pubid/xsf/builder.rb +17 -0
  640. data/lib/pubid/xsf/identifier.rb +66 -0
  641. data/lib/pubid/xsf/identifiers/xep.rb +31 -0
  642. data/lib/pubid/xsf/identifiers.rb +9 -0
  643. data/lib/pubid/xsf/parser.rb +38 -0
  644. data/lib/pubid/xsf/renderer.rb +23 -0
  645. data/lib/pubid/xsf/urn_generator.rb +13 -0
  646. data/lib/pubid/xsf/urn_parser.rb +18 -0
  647. data/lib/pubid/xsf.rb +82 -0
  648. data/lib/pubid.rb +424 -22
  649. data/lib/tasks/conformance.rake +34 -0
  650. data/lib/tasks/docs.rake +3 -3
  651. data/lib/tasks/schema.rake +88 -0
  652. data/schema/core/joint_prefixes.yaml +24 -0
  653. data/schema/iec.yaml +1017 -0
  654. data/schema/iso.yaml +1586 -0
  655. data/schema/schema.schema.yaml +96 -0
  656. metadata +241 -19
  657. data/archived-gems/pubid-ccsds/update_codes.yaml +0 -1
  658. data/archived-gems/pubid-iec/stages.yaml +0 -129
  659. data/archived-gems/pubid-iec/update_codes.yaml +0 -67
  660. data/archived-gems/pubid-ieee/update_codes.yaml +0 -104
  661. data/archived-gems/pubid-iso/stages.yaml +0 -106
  662. data/archived-gems/pubid-iso/update_codes.yaml +0 -4
  663. data/archived-gems/pubid-itu/i18n.yaml +0 -13
  664. data/archived-gems/pubid-itu/series.yaml +0 -42
  665. data/archived-gems/pubid-nist/publishers.yaml +0 -6
  666. data/archived-gems/pubid-nist/update_codes.yaml +0 -93
  667. data/archived-gems/pubid-plateau/update_codes.yaml +0 -6
  668. data/lib/pubid/cen_cenelec/supplement_identifier.rb +0 -48
  669. data/lib/pubid/cie/components/code.rb +0 -80
  670. data/lib/pubid/iala/identifiers/base.rb +0 -14
  671. data/lib/pubid/iec/components/code.rb +0 -36
  672. /data/{archived-gems/pubid-nist → data/nist}/stages.yaml +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5987bc5bdc86f9fdf02244f7b5e1abbff308a0d7a5ae88c9ea6e26d20f316ec4
4
- data.tar.gz: d768df87e4d1b06d0be0dbcc72dab8d5e5eda5476b4157bbf754c5863a2ad1f0
3
+ metadata.gz: 18402e85b2e19640920f3e216f62f704c6770a840f654d92f96d799b03fbda71
4
+ data.tar.gz: e9b1735e843fe5eb20574749d2581c19192799f86fe3f31a8e72b3d0a00ab047
5
5
  SHA512:
6
- metadata.gz: 7214ebd2c2eac905def41dd1b4304ef299224378e703ab3d9883022b8fd2770adafd08c8e697d759a9ae6e2a984ff54927051090039c8b20cd56f98ae21bc3b8
7
- data.tar.gz: 32227b91be942f7f59c758685ea7cbe105845eaa758c29984d43f81adeaf33321e68f6b4f7a8d9d71709f3395acf7011d008e1a2983ae43a61610b267c785d0e
6
+ metadata.gz: 1cbcaa48b3fb036aca2a62aabe9cdfc4733ad030dc833aa31b5be2dbba433ef6459f87dc22c0b811e707687ce18ee966a2882f928a44d2d0df89e159df5ea837
7
+ data.tar.gz: 0ea8984849aa9f56a400948fb5ab7b29f5de122f70ab036d35fe344655abe70fbe9e34d9cdc04b80673593190b1479d8ac47b31bd21e056ad9b64fa6743e18e6
data/README.adoc CHANGED
@@ -147,18 +147,35 @@ id.to_json
147
147
 
148
148
  === Import from Hash
149
149
 
150
+ `Pubid.from_hash` is the hash counterpart of `Pubid.parse`. It builds the
151
+ correct identifier class from a hash that `#to_hash` emits. You do not name
152
+ the flavor: the `_type` key (`pubid:<flavor>:<type>`) identifies the class.
153
+
150
154
  [source,ruby]
151
155
  ----
152
- require 'pubid/iso'
156
+ require 'pubid'
153
157
 
154
158
  hash = {
155
- flavor: "iso",
156
- publisher: "ISO",
157
- number: "9001",
158
- year: "2015"
159
+ "_type" => "pubid:iso:international-standard",
160
+ "number" => "9001",
161
+ "year" => "2015"
159
162
  }
160
- id = Pubid::Serializable.from_h(hash)
161
- id.to_s # => "ISO 9001:2015"
163
+ id = Pubid.from_hash(hash)
164
+ id.class # => Pubid::Iso::Identifiers::InternationalStandard
165
+ id.to_s # => "ISO 9001:2015"
166
+ ----
167
+
168
+ For a row of a relaton-data `index-v2.yaml` file, give the identifier hash in
169
+ the `:id` key of the row: `Pubid.from_hash(row[:id])`.
170
+
171
+ A hash that is not an identifier hash raises `Pubid::Errors::InvalidInputError`
172
+ (an `ArgumentError`). This occurs when the input is not a Hash, has no `_type`,
173
+ or has a `_type` that no flavor defines.
174
+
175
+ [source,ruby]
176
+ ----
177
+ Pubid.from_hash({ "number" => "9001" })
178
+ # => Pubid::Errors::InvalidInputError: identifier hash has no _type key: ...
162
179
  ----
163
180
 
164
181
  === Import from JSON
@@ -181,11 +198,15 @@ All identifiers support full round-trip conversion preserving all attributes:
181
198
  require 'pubid/iso'
182
199
 
183
200
  original = Pubid::Iso.parse("ISO 9001:2015/Amd 1:2020/Cor 1:2021")
184
- hash = original.to_h
185
- restored = Pubid::Serializable.from_h(hash)
201
+ hash = original.to_hash
202
+ # => {"_type" => "pubid:iso:corrigendum", "number" => "1", "year" => "2021",
203
+ # "base" => {"_type" => "pubid:iso:amendment", "number" => "1", "year" => "2020",
204
+ # "base" => {"_type" => "pubid:iso:international-standard",
205
+ # "number" => "9001", "year" => "2015"}}}
206
+ restored = Pubid.from_hash(hash)
186
207
 
187
208
  restored.to_s # => "ISO 9001:2015/Amd 1:2020/Cor 1:2021"
188
- restored.to_urn # => "urn:iso:std:iso:9001:amd:2020:cor:2021:v1"
209
+ restored.to_urn # => "urn:iso:std:iso:9001:amd:2020:v1:cor:2021:v1"
189
210
  ----
190
211
 
191
212
  == Utility Methods
@@ -1756,7 +1777,8 @@ require 'pubid'
1756
1777
 
1757
1778
  # update_codes.yaml: "NBS HB: NIST HB"
1758
1779
  id = Pubid::Nist.parse("NBS HB 105-1")
1759
- id.to_s # => "NIST HB 105-1" (NBS→NIST correction applied)
1780
+ id.to_s # => "NBS HB 105-1" (NBS identity preserved - documents published
1781
+ # by NBS, i.e. before/equal 1988, keep their NBS identifiers forever)
1760
1782
 
1761
1783
  # update_codes.yaml: "FIPS.140-2: FIPS 140-2" (normalizes dotted format)
1762
1784
  id = Pubid::Nist.parse("FIPS.140-2")
@@ -0,0 +1,4 @@
1
+ # Cases this implementation explicitly cannot handle yet.
2
+ # Rules: entries need reason + ref; a pending case that passes raises
3
+ # the pending-satisfied alarm and MUST be unmarked (TODO.correct-test-suite/04).
4
+ ---
@@ -0,0 +1,9 @@
1
+ # Legacy / docnumber-style BIPM identifier spellings normalized to a canonical,
2
+ # parseable Pubid::Bipm form before parsing. Keys are full-line-anchored plain
3
+ # strings (Regexp.escaped) or /regex/ literals — see lib/pubid/core/update_codes.rb.
4
+ #
5
+ # CIPM MRA:2005 interpretation document (relaton-data-bipm docnumber
6
+ # "CIPM/2005-06(REV)"): strip the slash and the "(REV)" revision marker so both
7
+ # the docnumber and docidentifier spellings map onto the bare "CIPM 2005-06" form.
8
+ "CIPM/2005-06(REV)": CIPM 2005-06
9
+ "CIPM 2005-06(REV)": CIPM 2005-06
@@ -1,4 +1,7 @@
1
1
  IECEx TRF 60079-11v3-4:2002: IECEx TRF 60079-11v4C:2002
2
+ # IECEE TRF data-source anomaly: the OD-010-1 ampersand separator (&) was
3
+ # mistyped as a semicolon (;) in IEC's source data. See pubid/pubid#239.
4
+ IECEE TRF 60335-2-4;7F:2012: IECEE TRF 60335-2-4&7F:2012
2
5
  IECEE TRF cispr 15N:2022: IECEE TRF CISPR 15N:2022
3
6
  IECEE TRF cispr 15M:2021: IECEE TRF CISPR 15M:2021
4
7
  IECEE TRF cispr 15L:2020: IECEE TRF CISPR 15L:2020
@@ -1,4 +1,9 @@
1
1
  IEEE Unapproved Draft Std PC37.110/D911Oct 07: IEEE Unapproved Draft Std PC37.110/D711, Oct 07
2
+ # Issue #206: "IEEE Unapproved Draft Std P15289, 06" — the ", 06" suffix
3
+ # has no clear meaning in IEEE's own grammar. Treating it as a draft
4
+ # iteration number (D6) gives a parseable form. Conservative targeted
5
+ # normalization rather than a general rule; revisit if more cases surface.
6
+ IEEE Unapproved Draft Std P15289, 06: IEEE Unapproved Draft Std P15289/D6
2
7
  IEEE C57.139/D14June 2010: IEEE C57.139/D14, June 2010
3
8
  IEEE P1653.5/D7d1 November, 2019: IEEE P1653.5/D7.1 November, 2019
4
9
  IEEE P1017/D062012: P1017/D062012, Jun 2012
@@ -32,7 +37,13 @@ ISO/IEC/IEEE P26515 FDIS, May 2018: ISO/IEC/IEEE FDIS P26515, May 2018
32
37
  IEEE Std Std 1139-2008: IEEE Std 1139-2008
33
38
  IEC/IEEE P60214-2, FDIS 2018: IEC/IEEE FDIS P60214-2-2018(E)
34
39
  IEC/IEEE P62582-6, FDIS 2018: IEC/IEEE FDIS P62582-6-2018(E)
35
- ISO/IEC DIS P26511.2, May 2017: ISO/IEC DIS P26511-2, May 2017
40
+ # ISO/IEC DIS P26511.2 (May 2017) is an IEEE-style citation of an ISO/IEC
41
+ # DIS draft — ".2" is a draft version, not a part, so the prior mapping
42
+ # to "ISO/IEC DIS P26511-2" produced a phantom document that doesn't exist
43
+ # (ISO/IEC 26511 has no part 2). The ISO parser doesn't yet support the
44
+ # IEEE-style "P" prefix or the ", Month Year" date suffix on ISO/IEC DIS
45
+ # citations, so normalize to the bare DIS base + year. See pubid/pubid#212.
46
+ ISO/IEC DIS P26511.2, May 2017: ISO/IEC DIS 26511.2:2017
36
47
  ISO/IEC/IEEE P90003_FDIS, August 2018: ISO/IEC/IEEE FDIS P90003, August 2018
37
48
  ISO/IEC/IEEE&#xA0;P29119-1/FDIS, September 2021: ISO/IEC/IEEE FDIS P29119-1, September 2021
38
49
  ISO/IEC/IEEE/ P12207-2/D3_FDIS, July 2020: ISO/IEC/IEEE FDIS P12207-2/D3, July 2020
@@ -102,3 +113,98 @@ IEEE Unapproved Draft Std P1635/ASHRAE 21_D4, Jan 2010: IEEE Unapproved Draft St
102
113
  IEC/IEEE 62582-1:2011 Edition 1.0 2011-08: IEC/IEEE 62582-1-2011 Edition 1.0 2011-08
103
114
  ISO/IEC/IEEE CD P26513/D1, August 2015: ISO/IEC/IEEE P26513/D1, August 2015
104
115
  /C37.0I0d-1984/: C37.010d-1984
116
+
117
+ # --- month spellings pubid rejects -> canonical (relaton-ieee normtitles) ---
118
+ # Surgical, case-sensitive: only forms the grammar genuinely REJECTS. Do NOT
119
+ # add full-name->abbr rules (pubid accepts "June"/"September") or a blanket
120
+ # underscore rule — a broader ruleset regressed 12 already-parsing normtitles.
121
+ # Validated over relaton's 8,767 normtitles: +33 gained, 0 regressions.
122
+ # 4-letter abbreviation
123
+ /\bSept\b/: Sep
124
+ # OCR typos seen in the IEEE rawbib feed
125
+ /\bFeburary\b/: Feb
126
+ /\bNovemer\b/: Nov
127
+ /\bOctobor\b/: Oct
128
+ /\bJanurary\b/: Jan
129
+ # lowercase-only month words -> proper case (case-sensitive: leaves correct case alone)
130
+ /\bjanuary\b/: January
131
+ /\bfebruary\b/: February
132
+ /\bmarch\b/: March
133
+ /\bapril\b/: April
134
+ /\bjune\b/: June
135
+ /\bjuly\b/: July
136
+ /\baugust\b/: August
137
+ /\bseptember\b/: September
138
+ /\boctober\b/: October
139
+ /\bnovember\b/: November
140
+ /\bdecember\b/: December
141
+
142
+ # --- one-off IEEE normtitles migrated from relaton-ieee RawbibIdParser ---
143
+ # Exact-match, anchored (plain keys compile to /^…$/), zero-regression: each
144
+ # maps a specific malformed catalog string to relaton's canonical id, which
145
+ # pubid parses losslessly. (hand-off: ieee-update-codes-oneoffs.) Group 1
146
+ # parses on its own; the "dotted-draft" group relies on the verbatim-draft fix.
147
+ "IEEE Std P1073.1.3.4/D3.0": "IEEE Std P11073.00101"
148
+ "IEEE P802.1Qbu/03.0, July 2015": "IEEE P802.1Qbu/D-3.0-2015"
149
+ "IEEE P802.11aqTM/013.0 October 2017": "IEEE P802.11aqTM/D-13.0-2017"
150
+ "IEC/IEEE P62271-37-013:2015 D13.4": "IEC/IEEE P62271.37-013/D-13.4-2015"
151
+ "ISO/IEC/IEEE DIS P42020:201x(E), June 2017": "ISO/IEC/IEEE DIS P42020-2017-06"
152
+ "ISO/IEC/IEEE DIS P16326/201x, December 2018": "ISO/IEC/IEEE DIS P16326-2018-12"
153
+ "ISO/IEC/IEEE/P21839, 2019(E)": "ISO/IEC/IEEE P21839-2019"
154
+ "ISO/IEC/IEEE CD2 P12207-2: 201x(E), February 2019": "ISO/IEC/IEEE CD2 P12207.2-2019-02"
155
+ "ISO/IEC/IEEE P42010.WD4:2019(E)": "ISO/IEC/IEEE P42010/D-4-2019"
156
+ "IEC/IEEE P63195_CDV/V3, February 2020": "IEC/IEEE CDV P63195-2020-02"
157
+ "ISO/IEC/IEEE/P16085_DIS, March 2020": "ISO/IEC/IEEE DIS P16085-2020-03"
158
+ "ANSI/IEEE Std: Outdoor Apparatus Bushings": "ANSI/IEEE Std 21-1976-11"
159
+ "Draft National Electrical Safety Code, January 2016": "IEEE PC2-2016-01"
160
+ "International Standard ISO/IEC 8802-9: 1996(E) ANSI/IEEE Std 802.9, 1996 Edition": "ISO/IEC/IEEE Std 802.9-1996"
161
+ "ISO/IEC13210: 1994 (E) ANSI/IEEE Std 1003.3-1991": "ISO/IEC/IEEE 13210-1994"
162
+ "J-STD-016-1995": "IEEE 016-1995"
163
+ "Nuclear EQ Sourcebook and Supplement": "IEEE 7438946"
164
+ "PC37.30.2/D043 Rev 18, May 2015": "IEEE PC37.30-2/D-043/R-18-2015"
165
+ "IEEE/IEC P62582 CD2 proposal, May 2017": "IEEE/IEC CD2 P62582-2017-05"
166
+ "ISO/IEC/IEEE P16326:201x WD.4a, July 2017": "ISO/IEC/IEEE P16326/D-4a-2017-07"
167
+ "ISO/IEC/IEEE CD.1 P21839, October 2017": "ISO/IEC/IEEE CD1 P21839-2017-10"
168
+ "ISO/IEC/IEEE P16326:201x WD5, December 2017": "ISO/IEC/IEEE P16326/D-5-2017-12"
169
+ "IEEE/ISO/IEC P42010.CD1-V1.0, April 2020": "IEEE/ISO/IEC CD1 P42010-2020-04"
170
+ "Unapproved Draft Std ISO/IEC FDIS 15288:2007(E) IEEE P15288/D3,": "ISO/IEC/IEEE FDIS Std P15288/D-3-2007"
171
+ "IS0/IEC/IEEE 8802-11:2012/Amd.5:2015(E) (Adoption of IEEE Std 802.11af-2014)": "ISO/IEC/IEEE 802.11/Amd5-2012"
172
+ # `/D-` corrupted IEEE draft docids — malformed draft designations emitted by
173
+ # relaton-ieee's RawbibIdParser fallback rendering (the `/D-`, `_CDV_`, `.pdf`,
174
+ # `201x`, stray dots/spaces). Each maps to a canonical parseable form that
175
+ # retains number/part/draft/stage/date in the hash (the relaton index-v2 gate
176
+ # is the hash round-trip + non-empty root.number, not `to_s == input`).
177
+ # Interim measure; the durable fix is upstream in RawbibIdParser. See
178
+ # HANDOFFS/metanorma__pubid__ieee-update-codes-dashD-drafts.md.
179
+ # --- 8 pre-verified ---
180
+ "IEEE Approved Std P1609.3/D-23.pdf-2007-02": "IEEE Approved Std P1609.3/D23, 02 2007"
181
+ "IEEE P3004.5/D-6.2.": "IEEE P3004.5/D6.2"
182
+ "IEEE P730/D-0.16.-2025": "IEEE P730/D0.16-2025"
183
+ "IEEE PC37.107/D-4.-2023-11": "IEEE PC37.107/D4, 11 2023"
184
+ "IEEE PC37.113/D-8.0.-2015-08": "IEEE PC37.113/D8.0, 08 2015"
185
+ "IEEE PC37.98/D-5.1D-2013": "IEEE PC37.98/D5.1D-2013"
186
+ "IEEE PC57.637/D-6.2.-2014-03": "IEEE PC57.637/D6.2, 03 2014"
187
+ "IEEE Std P650/D-9.-2006": "IEEE Std P650/D9-2006"
188
+ # --- 21 derived (revision markers dropped, corrigendum reordered, joint
189
+ # stage+draft repositions year onto number with stage moved front) ---
190
+ "IEC/IEEE P63198.2775/D-6.1_CDV_March-2022": "IEC/IEEE CDV P63198.2775/D6.1, March 2022"
191
+ "IEEE 3.Rev.B/D-4.0-2023-01": "IEEE P3/D4.0, 01 2023"
192
+ "IEEE 3.Rev.B/D-5.0-2023-03": "IEEE P3/D5.0, 03 2023"
193
+ "IEEE P1003.1/D-5/Cor1-201x-2012-04": "IEEE P1003.1/Cor 1/D5, 04 2012"
194
+ "IEEE P1003.1/D-5/Cor1-201x-2012-08": "IEEE P1003.1/Cor 1/D5, 08 2012"
195
+ "IEEE P1127/D-4.1_July-2023": "IEEE P1127/D4.1, July 2023"
196
+ "IEEE P2660_1/D-2-2020-06": "IEEE P2660.1/D2, 06 2020"
197
+ "IEEE P802.1AE/D-1.0/R-/Cor1": "IEEE P802.1AE/Cor 1/D1.0"
198
+ "IEEE P802.1AE_Rev/D-1.2-2018": "IEEE P802.1AE/D1.2-2018"
199
+ "IEEE P802.1AE_Rev/D-1.3-2018": "IEEE P802.1AE/D1.3-2018"
200
+ "IEEE Unapproved Std P802.16Rev2/D-9-2009-01": "IEEE Unapproved Std P802.16Rev2/D9-2009"
201
+ "IEEE Unapproved Std P802.1X_REV/D-4.5-2009": "IEEE Unapproved Std P802.1X/D4.5-2009"
202
+ "IEEE Unapproved Std PC37.91/D-8-2007-20": "IEEE Unapproved Std PC37.91/D8-2007"
203
+ "IEEEE P1243/D-3-2023-02": "IEEE P1243/D3, 02 2023"
204
+ "ISO/IEC/IEEE FDIS P15289./E-3/D-2-2016": "ISO/IEC/IEEE FDIS P15289-2016/D2"
205
+ "ISO/IEC/IEEE P24641/D-2_CD-2020": "ISO/IEC/IEEE CD P24641-2020/D2"
206
+ "ISO/IEC/IEEE P24641/D-3_CD2": "ISO/IEC/IEEE CD2 P24641/D3"
207
+ "ISO/IEC/IEEE P24748.3/D-3_FDIS-2020": "ISO/IEC/IEEE FDIS P24748.3-2020/D3"
208
+ "ISO/IEC/IEEE/ P12207.2/D-3_FDIS-2020": "ISO/IEC/IEEE FDIS P12207.2-2020/D3"
209
+ "ISO/IEC/IEEE/ P24748.3/D-IS-2019": "ISO/IEC/IEEE DIS P24748.3-2019"
210
+ "P1635/D10/ASHARE 21/D-10-2016": "IEEE P1635/D10-2016"
@@ -69,6 +69,40 @@ abbrev:
69
69
  CSRC Building Block: CSRC Building Block
70
70
  JPCRD: J. Phys. & Chem. Ref. Data
71
71
  JRES: J. Res. Natl. Inst. Stan.
72
+ # Issue #150: abbreviated descriptions for series that previously had
73
+ # none. Convention follows existing entries (shortened, period-suffixed).
74
+ # Ronald Tse should review and refine as needed.
75
+ AI: AI
76
+ BH: Bldg. & Hous.
77
+ BMS: Bldg. Mat. Struct.
78
+ CIRC: Circ.
79
+ CRPL: CRPL
80
+ CS: Commer. Stand.
81
+ CSM: Commer. Stand. Mo.
82
+ EAB: Econ. Anal. Br.
83
+ GCR: Grant/Contract Rpt.
84
+ IR: Interag. Rep.
85
+ ITL Bulletin: ITL Bull.
86
+ MP: Misc. Publ.
87
+ NBS BRPD-CRPL-D: Bas. Radio Prop. Pred.
88
+ NBS CIS: Consum. Inf. Ser.
89
+ NBS CRPL-F-A: CRPL Ionos. Data
90
+ NBS CRPL-F-B: CRPL Solar-Geophys. Data
91
+ NBS CS-E: Commer. Stand. (Emerg.)
92
+ NBS HR: Hydraul. Res.
93
+ NBS IP: CRPL Ionos. Pred.
94
+ NBS IRPL: Interserv. Radio Prop. Lab.
95
+ NBS LC: Lett. Circ.
96
+ NIST LC: Lett. Circ.
97
+ OWMWP: Off. Weights Meas. WP
98
+ PC: Photo. Lab. Circ.
99
+ RPT: Rpt.
100
+ SIBS: Spec. Inter. Ball. Stud.
101
+ TIBM: Tech. Inf. Bldg. Mat.
102
+ TTB: Tech. Transf. Br.
103
+ VTS: Voting Tech. Ser.
104
+ JPCRD: J. Phys. & Chem. Ref. Data
105
+ JRES: J. Res. Natl. Inst. Stan.
72
106
  mr:
73
107
  AMS: AMS
74
108
  BSS: BSS
@@ -25,8 +25,16 @@
25
25
  # by earlier ones. Run `bundle exec rspec spec/pubid/nist/` after edits.
26
26
  NBS MN: NBS MONO
27
27
  NIST MN: NIST MONO
28
+ # Long-form series names — normalize to the abbreviated form the parser expects.
29
+ /\bMonograph\b/: MONO
30
+ # Citation-form comma before long parameter prefixes — strip so the parser's
31
+ # " Rev. " / " Part. " / " Vol. " prefix rules match (issue #197).
32
+ '/,\s+(Rev\.|Part\.|Vol\.|Revision|Volume|Part)(?=\s|\d)/': ' \1'
28
33
  NIST MP: NBS MP
29
34
  NIST SP 260-162 2006ed.: NIST SP 260-162e2006
35
+ # Doubled publisher+series prefix — an error in the NIST Tech Pubs source data
36
+ # (pubid/pubid#152). Collapse the repeated "NIST AI" so the remainder parses.
37
+ NIST AI NIST AI 100-2e2023 ipd: NIST AI 100-2e2023 ipd
30
38
  NBS CIRC 154suprev: NBS CIRC 154r1sup
31
39
  NBS CIRC supJun1925-Jun1926: NBS CIRC 24e7sup2
32
40
  NBS CIRC supJun1925-Jun1927: NBS CIRC 24e7sup3
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Adobe
5
+ # Builds an Adobe identifier object from the Parslet parse tree.
6
+ class Builder
7
+ def build(parsed)
8
+ return build_tech_note(parsed[:tech_note]) if parsed[:tech_note]
9
+ return build_tech_note_bare(parsed[:tech_note_bare]) if parsed[:tech_note_bare]
10
+ return build_publication_version(parsed[:publication_version]) if parsed[:publication_version]
11
+ return build_publication(parsed[:slug]) if parsed[:slug]
12
+
13
+ raise ArgumentError, "Unrecognized Adobe parse tree: #{parsed.inspect}"
14
+ end
15
+
16
+ def self.build(parsed)
17
+ new.build(parsed)
18
+ end
19
+
20
+ private
21
+
22
+ def build_tech_note(hash)
23
+ Identifiers::TechNote.new(
24
+ number: stringify(hash[:number]),
25
+ slug: stringify(hash[:slug]),
26
+ )
27
+ end
28
+
29
+ def build_tech_note_bare(number_hash)
30
+ Identifiers::TechNote.new(number: stringify(number_hash))
31
+ end
32
+
33
+ def build_publication(slug_value)
34
+ Identifiers::Publication.new(slug: stringify(slug_value))
35
+ end
36
+
37
+ def build_publication_version(hash)
38
+ Identifiers::Publication.new(
39
+ slug: stringify(hash[:slug]),
40
+ version: stringify(hash[:version]),
41
+ )
42
+ end
43
+
44
+ def stringify(value)
45
+ return nil if value.nil?
46
+
47
+ str = value.to_s
48
+ str.empty? ? nil : str
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Adobe
5
+ # Base class for all Adobe identifiers. Canonical name
6
+ # Pubid::Adobe::Identifier; every concrete Adobe identifier
7
+ # (Identifiers::*) descends from it.
8
+ #
9
+ # Adobe identifiers come in two shapes:
10
+ #
11
+ # * TechNote — `Adobe Technical Note #<number>` / `ATN<number>`
12
+ # e.g. `Adobe Technical Note #5014`, `ATN5014`.
13
+ # * Publication — slug-keyed named specs that have no number
14
+ # e.g. `adobe-glyph-list`, `adobe-japan1-7`.
15
+ class Identifier < ::Pubid::Identifier
16
+ # Parse an Adobe identifier string into an identifier object.
17
+ # @param identifier [String]
18
+ # @return [Pubid::Adobe::Identifier]
19
+ # @raise [Pubid::Errors::ParseError] If parsing fails
20
+ def self.parse(identifier)
21
+ parsed = Parser.parse(identifier)
22
+ Builder.build(parsed)
23
+ end
24
+
25
+ attribute :publisher, :string, default: "Adobe"
26
+
27
+ ADOBE_TYPE_MAP = {
28
+ "pubid:adobe:tech-note" => "Pubid::Adobe::Identifiers::TechNote",
29
+ "pubid:adobe:publication" => "Pubid::Adobe::Identifiers::Publication",
30
+ }.freeze
31
+
32
+ key_value do
33
+ map "_type", to: :_type, polymorphic_map: ADOBE_TYPE_MAP
34
+ end
35
+
36
+ def to_urn
37
+ UrnGenerator.new(self).generate
38
+ end
39
+
40
+ # Short type code (e.g. "ATN", nil for Publication) — convenience
41
+ # accessor used by Renderer and UrnGenerator.
42
+ def type_short
43
+ self.class.type[:short]
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Adobe
5
+ module Identifiers
6
+ # Adobe named publication. Slug-keyed specs that have no tech-note
7
+ # number — Adobe Glyph List, PostScript Language, character
8
+ # collections, etc.
9
+ #
10
+ # Surface forms:
11
+ # * slug `adobe-glyph-list`, `adobe-postscript-language`
12
+ # * versioned character collections: `adobe-japan1` + version `7`
13
+ # * human render is the slug title-cased (`Adobe Glyph List`,
14
+ # `Adobe-Japan1-7`); the full publication title lives in the
15
+ # data repo's title attribute, not here.
16
+ class Publication < Identifier
17
+ attribute :slug, :string # "adobe-glyph-list", "adobe-japan1"
18
+ attribute :version, :string # "7", "3", nil
19
+
20
+ key_value do
21
+ map "slug", to: :slug
22
+ map "version", to: :version
23
+ end
24
+
25
+ def self.type
26
+ { key: :publication, title: "Publication", short: nil }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Adobe
5
+ module Identifiers
6
+ # Adobe Technical Note. Numbered 4-digit (5xxx series observed).
7
+ #
8
+ # Surface forms:
9
+ # * `Adobe Technical Note #5014` — formal citation form
10
+ # * `ATN5014` — short alias used in Metanorma
11
+ # anchor ids ([[atn5014,…]])
12
+ # * filename `5014.CIDFont_Spec.pdf` (data repo splits filename
13
+ # into number + slug before calling the parser)
14
+ #
15
+ # The optional `slug` carries the filename's title segment
16
+ # (`CIDFont_Spec`) so round-trip through the data repo is lossless.
17
+ class TechNote < Identifier
18
+ attribute :number, :string # "5014", "5902"
19
+ attribute :slug, :string # "CIDFont_Spec", "AFM_Spec", nil
20
+
21
+ key_value do
22
+ map "number", to: :number
23
+ map "slug", to: :slug
24
+ end
25
+
26
+ def self.type
27
+ { key: :"tech-note", title: "Technical Note", short: "ATN" }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Adobe
5
+ module Identifiers
6
+ autoload :TechNote, "#{__dir__}/identifiers/tech_note"
7
+ autoload :Publication, "#{__dir__}/identifiers/publication"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,136 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "parslet"
4
+
5
+ module Pubid
6
+ module Adobe
7
+ # Parslet grammar for Adobe identifiers.
8
+ #
9
+ # Canonical citation forms (what the renderer produces):
10
+ #
11
+ # Adobe TN 5014 (tech note; replaces the older
12
+ # "Adobe Technical Note #5014")
13
+ # Adobe Publication adobe-glyph-list
14
+ # Adobe Publication adobe-japan1-7
15
+ #
16
+ # The parser also accepts these legacy forms for back-compat:
17
+ #
18
+ # Adobe Technical Note #5014
19
+ # Adobe Technical Note 5014
20
+ # Adobe TN5014 (no space)
21
+ # ATN5014 (short alias)
22
+ # 5014 (bare number; data-repo context)
23
+ # adobe-glyph-list (bare slug)
24
+ class Parser < ::Pubid::Parser::Grammar
25
+ include ::Pubid::Parser::CommonParseRules
26
+
27
+ root :identifier
28
+
29
+ rule(:space) { str(" ") }
30
+ rule(:space?) { space.maybe }
31
+ rule(:hash) { str("#") }
32
+ rule(:dot) { str(".") }
33
+ rule(:dash) { str("-") }
34
+
35
+ # Canonical short prefix: "Adobe TN" with optional trailing space.
36
+ # Matches both "Adobe TN 5014" and "Adobe TN5014".
37
+ rule(:tech_note_tn_prefix) do
38
+ str("Adobe") >> space >> str("TN") >> space?.maybe
39
+ end
40
+
41
+ # Legacy long prefix: "Adobe Technical Note" with optional "#".
42
+ rule(:tech_note_long_prefix) do
43
+ str("Adobe") >> space >> str("Technical") >> space >> str("Note") >>
44
+ (space? >> hash.maybe >> space?).maybe
45
+ end
46
+
47
+ # Legacy short alias: "ATN" with optional trailing space.
48
+ rule(:tech_note_atn_prefix) do
49
+ str("ATN") >> space?.maybe
50
+ end
51
+
52
+ rule(:tech_note_prefix) do
53
+ tech_note_tn_prefix | tech_note_long_prefix | tech_note_atn_prefix
54
+ end
55
+
56
+ rule(:digits) do
57
+ match("[0-9]").repeat(1)
58
+ end
59
+
60
+ # 4-digit tech note number, optionally followed by ".<Slug>" from
61
+ # the filename form. The slug is captured but not required.
62
+ rule(:slug_chars) do
63
+ match("[A-Za-z0-9_]").repeat(1)
64
+ end
65
+
66
+ rule(:tech_note) do
67
+ (tech_note_prefix >>
68
+ digits.as(:number) >>
69
+ (dot >> slug_chars.as(:slug)).maybe).as(:tech_note)
70
+ end
71
+
72
+ # Bare number form (e.g. when the data repo passes just "5014"
73
+ # extracted from a filename). Not advertised in user docs; used
74
+ # internally by AdobeFetcher::Docid.
75
+ rule(:bare_number) do
76
+ digits.as(:number).as(:tech_note_bare)
77
+ end
78
+
79
+ # "Adobe Publication " prefix. Matched literally then discarded —
80
+ # the publication slug/version is parsed by the inner rule.
81
+ rule(:publication_prefix) do
82
+ str("Adobe") >> space >> str("Publication") >> space
83
+ end
84
+
85
+ # Publication slug. Lowercase ASCII letters and digits joined by `-`.
86
+ # Each segment starts with a letter (so a trailing `-<digits>` is
87
+ # unambiguously a version suffix, not part of the slug).
88
+ rule(:slug_segment) do
89
+ match("[a-z]") >> match("[a-z0-9]").repeat
90
+ end
91
+
92
+ rule(:slug_inner) do
93
+ slug_segment >> (dash >> slug_segment).repeat
94
+ end
95
+
96
+ rule(:publication_with_version) do
97
+ (slug_inner.as(:slug) >> dash >> digits.as(:version)).as(:publication_version)
98
+ end
99
+
100
+ rule(:publication_slug_or_version) do
101
+ # Try with-version first so `adobe-japan1-7` doesn't get captured
102
+ # as slug `adobe-japan1-7` with no version. The flat `:slug` form
103
+ # is the fallback for unversioned slugs.
104
+ publication_with_version | slug_inner.as(:slug)
105
+ end
106
+
107
+ rule(:publication) do
108
+ # Optional "Adobe Publication " prefix. The prefix is consumed
109
+ # but not captured — the inner rule produces :slug or
110
+ # :publication_version as before.
111
+ publication_prefix.maybe >> publication_slug_or_version
112
+ end
113
+
114
+ rule(:identifier) do
115
+ tech_note | bare_number | publication
116
+ end
117
+
118
+ # Parse a string and return the raw parslet tree.
119
+ # @param string [String]
120
+ # @return [Hash]
121
+ def self.parse(string)
122
+ unless string.is_a?(String)
123
+ raise ::Pubid::Errors::InvalidInputError,
124
+ ::Pubid::INPUT_NOT_A_STRING_MESSAGE
125
+ end
126
+
127
+ if string.length > ::Pubid::MAX_INPUT_LENGTH
128
+ raise ::Pubid::Errors::InvalidInputError,
129
+ ::Pubid::INPUT_TOO_LONG_MESSAGE
130
+ end
131
+
132
+ new.parse(string.strip)
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Adobe
5
+ # Human-readable renderer for Adobe identifiers.
6
+ #
7
+ # Produces the canonical citation forms:
8
+ # "Adobe TN 5014" (tech note)
9
+ # "Adobe Publication adobe-glyph-list" (publication, slug)
10
+ # "Adobe Publication adobe-japan1-7" (publication, slug + version)
11
+ #
12
+ # The data repo (AdobeFetcher::Docid) overrides #to_s for publications
13
+ # to use the title from metadata instead of the slug, producing e.g.
14
+ # "Adobe Publication Adobe Glyph List". Pubid::Adobe itself is purely
15
+ # structural and renders slug-form citations.
16
+ class Renderer < ::Pubid::Renderers::Base
17
+ def render(context: nil, **_opts)
18
+ id = @id
19
+
20
+ return render_tech_note(id) if id.is_a?(Identifiers::TechNote)
21
+ return render_publication(id) if id.is_a?(Identifiers::Publication)
22
+
23
+ raise ArgumentError, "Unknown Adobe identifier class: #{id.class}"
24
+ end
25
+
26
+ private
27
+
28
+ def render_tech_note(id)
29
+ "Adobe TN #{id.number}"
30
+ end
31
+
32
+ def render_publication(id)
33
+ rendered = "Adobe Publication #{id.slug}"
34
+ rendered << "-#{id.version}" if id.version
35
+ rendered
36
+ end
37
+ end
38
+ end
39
+ end