pubid 1.15.18 → 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 (601) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.adoc +2041 -53
  4. data/archived-gems/pubid-ccsds/update_codes.yaml +1 -0
  5. data/archived-gems/pubid-iec/stages.yaml +129 -0
  6. data/archived-gems/pubid-iec/update_codes.yaml +67 -0
  7. data/archived-gems/pubid-ieee/update_codes.yaml +104 -0
  8. data/archived-gems/pubid-iso/stages.yaml +106 -0
  9. data/archived-gems/pubid-iso/update_codes.yaml +4 -0
  10. data/archived-gems/pubid-itu/i18n.yaml +13 -0
  11. data/archived-gems/pubid-itu/series.yaml +42 -0
  12. data/archived-gems/pubid-nist/publishers.yaml +6 -0
  13. data/archived-gems/pubid-nist/series.yaml +121 -0
  14. data/archived-gems/pubid-nist/stages.yaml +16 -0
  15. data/archived-gems/pubid-nist/update_codes.yaml +93 -0
  16. data/archived-gems/pubid-plateau/update_codes.yaml +6 -0
  17. data/data/ccsds/update_codes.yaml +1 -0
  18. data/data/iec/update_codes.yaml +67 -0
  19. data/data/ieee/update_codes.yaml +104 -0
  20. data/data/iso/update_codes.yaml +21 -0
  21. data/data/nist/update_codes.yaml +87 -0
  22. data/data/plateau/update_codes.yaml +6 -0
  23. data/lib/pubid/amca/builder.rb +176 -0
  24. data/lib/pubid/amca/identifier.rb +18 -0
  25. data/lib/pubid/amca/identifiers/base.rb +64 -0
  26. data/lib/pubid/amca/identifiers/interpretation.rb +51 -0
  27. data/lib/pubid/amca/identifiers/publication.rb +47 -0
  28. data/lib/pubid/amca/identifiers/standard.rb +22 -0
  29. data/lib/pubid/amca/identifiers.rb +12 -0
  30. data/lib/pubid/amca/parser.rb +153 -0
  31. data/lib/pubid/amca/scheme.rb +16 -0
  32. data/lib/pubid/amca/single_identifier.rb +33 -0
  33. data/lib/pubid/amca/urn_generator.rb +50 -0
  34. data/lib/pubid/amca.rb +26 -0
  35. data/lib/pubid/ansi/builder.rb +52 -0
  36. data/lib/pubid/ansi/identifier.rb +13 -0
  37. data/lib/pubid/ansi/identifiers/american_national_standard.rb +12 -0
  38. data/lib/pubid/ansi/identifiers/standard.rb +16 -0
  39. data/lib/pubid/ansi/identifiers.rb +11 -0
  40. data/lib/pubid/ansi/parser.rb +91 -0
  41. data/lib/pubid/ansi/scheme.rb +15 -0
  42. data/lib/pubid/ansi/single_identifier.rb +45 -0
  43. data/lib/pubid/ansi/urn_generator.rb +76 -0
  44. data/lib/pubid/ansi.rb +27 -0
  45. data/lib/pubid/api/builder.rb +85 -0
  46. data/lib/pubid/api/components/code.rb +9 -0
  47. data/lib/pubid/api/identifier.rb +21 -0
  48. data/lib/pubid/api/identifiers/base.rb +24 -0
  49. data/lib/pubid/api/identifiers/bulletin.rb +15 -0
  50. data/lib/pubid/api/identifiers/continuous_operations_standard.rb +15 -0
  51. data/lib/pubid/api/identifiers/mpms.rb +44 -0
  52. data/lib/pubid/api/identifiers/publication.rb +15 -0
  53. data/lib/pubid/api/identifiers/recommended_practice.rb +15 -0
  54. data/lib/pubid/api/identifiers/specification.rb +15 -0
  55. data/lib/pubid/api/identifiers/standard.rb +15 -0
  56. data/lib/pubid/api/identifiers/technical_report.rb +15 -0
  57. data/lib/pubid/api/identifiers/typeless_standard.rb +27 -0
  58. data/lib/pubid/api/parser.rb +140 -0
  59. data/lib/pubid/api/scheme.rb +66 -0
  60. data/lib/pubid/api/single_identifier.rb +46 -0
  61. data/lib/pubid/api/urn_generator.rb +41 -0
  62. data/lib/pubid/api.rb +17 -0
  63. data/lib/pubid/ashrae/builder.rb +498 -0
  64. data/lib/pubid/ashrae/identifier.rb +18 -0
  65. data/lib/pubid/ashrae/identifiers/addenda_package.rb +46 -0
  66. data/lib/pubid/ashrae/identifiers/addendum.rb +55 -0
  67. data/lib/pubid/ashrae/identifiers/base.rb +23 -0
  68. data/lib/pubid/ashrae/identifiers/combined_addenda.rb +51 -0
  69. data/lib/pubid/ashrae/identifiers/errata.rb +40 -0
  70. data/lib/pubid/ashrae/identifiers/guideline.rb +38 -0
  71. data/lib/pubid/ashrae/identifiers/interpretation.rb +39 -0
  72. data/lib/pubid/ashrae/identifiers/standard.rb +38 -0
  73. data/lib/pubid/ashrae/identifiers.rb +16 -0
  74. data/lib/pubid/ashrae/parser.rb +724 -0
  75. data/lib/pubid/ashrae/scheme.rb +53 -0
  76. data/lib/pubid/ashrae/single_identifier.rb +23 -0
  77. data/lib/pubid/ashrae/supplement_identifier.rb +23 -0
  78. data/lib/pubid/ashrae/urn_generator.rb +59 -0
  79. data/lib/pubid/ashrae.rb +21 -0
  80. data/lib/pubid/asme/builder.rb +153 -0
  81. data/lib/pubid/asme/components/code.rb +18 -0
  82. data/lib/pubid/asme/identifier.rb +15 -0
  83. data/lib/pubid/asme/identifiers/base.rb +70 -0
  84. data/lib/pubid/asme/identifiers/standard.rb +12 -0
  85. data/lib/pubid/asme/identifiers.rb +10 -0
  86. data/lib/pubid/asme/parser.rb +308 -0
  87. data/lib/pubid/asme/scheme.rb +37 -0
  88. data/lib/pubid/asme/single_identifier.rb +29 -0
  89. data/lib/pubid/asme/urn_generator.rb +133 -0
  90. data/lib/pubid/asme.rb +21 -0
  91. data/lib/pubid/astm/builder.rb +159 -0
  92. data/lib/pubid/astm/components/code.rb +33 -0
  93. data/lib/pubid/astm/identifier.rb +15 -0
  94. data/lib/pubid/astm/identifiers/adjunct.rb +21 -0
  95. data/lib/pubid/astm/identifiers/base.rb +13 -0
  96. data/lib/pubid/astm/identifiers/data_series.rb +25 -0
  97. data/lib/pubid/astm/identifiers/iso_dual_published.rb +74 -0
  98. data/lib/pubid/astm/identifiers/manual.rb +40 -0
  99. data/lib/pubid/astm/identifiers/monograph.rb +25 -0
  100. data/lib/pubid/astm/identifiers/research_report.rb +18 -0
  101. data/lib/pubid/astm/identifiers/standard.rb +52 -0
  102. data/lib/pubid/astm/identifiers/technical_report.rb +23 -0
  103. data/lib/pubid/astm/identifiers/work_in_progress.rb +21 -0
  104. data/lib/pubid/astm/parser.rb +244 -0
  105. data/lib/pubid/astm/scheme.rb +55 -0
  106. data/lib/pubid/astm/single_identifier.rb +25 -0
  107. data/lib/pubid/astm/urn_generator.rb +99 -0
  108. data/lib/pubid/astm.rb +38 -0
  109. data/lib/pubid/bsi/builder.rb +1483 -0
  110. data/lib/pubid/bsi/components/code.rb +11 -0
  111. data/lib/pubid/bsi/components/date.rb +11 -0
  112. data/lib/pubid/bsi/components/publisher.rb +11 -0
  113. data/lib/pubid/bsi/components/type.rb +11 -0
  114. data/lib/pubid/bsi/identifier.rb +27 -0
  115. data/lib/pubid/bsi/identifiers/addendum_document.rb +64 -0
  116. data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +95 -0
  117. data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +82 -0
  118. data/lib/pubid/bsi/identifiers/aerospace_standard.rb +118 -0
  119. data/lib/pubid/bsi/identifiers/amendment.rb +40 -0
  120. data/lib/pubid/bsi/identifiers/base.rb +11 -0
  121. data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +27 -0
  122. data/lib/pubid/bsi/identifiers/british_standard.rb +33 -0
  123. data/lib/pubid/bsi/identifiers/bundled_identifier.rb +114 -0
  124. data/lib/pubid/bsi/identifiers/committee_document.rb +51 -0
  125. data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +152 -0
  126. data/lib/pubid/bsi/identifiers/corrigendum.rb +28 -0
  127. data/lib/pubid/bsi/identifiers/detailed_specification.rb +69 -0
  128. data/lib/pubid/bsi/identifiers/disc.rb +56 -0
  129. data/lib/pubid/bsi/identifiers/draft_document.rb +71 -0
  130. data/lib/pubid/bsi/identifiers/electronic_book.rb +52 -0
  131. data/lib/pubid/bsi/identifiers/expert_commentary.rb +47 -0
  132. data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +82 -0
  133. data/lib/pubid/bsi/identifiers/flex.rb +61 -0
  134. data/lib/pubid/bsi/identifiers/handbook.rb +39 -0
  135. data/lib/pubid/bsi/identifiers/index.rb +62 -0
  136. data/lib/pubid/bsi/identifiers/method.rb +76 -0
  137. data/lib/pubid/bsi/identifiers/national_annex.rb +73 -0
  138. data/lib/pubid/bsi/identifiers/practice_guide.rb +27 -0
  139. data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +79 -0
  140. data/lib/pubid/bsi/identifiers/published_document.rb +79 -0
  141. data/lib/pubid/bsi/identifiers/section.rb +62 -0
  142. data/lib/pubid/bsi/identifiers/set.rb +46 -0
  143. data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
  144. data/lib/pubid/bsi/identifiers/supplement_document.rb +51 -0
  145. data/lib/pubid/bsi/identifiers/supplementary_index.rb +81 -0
  146. data/lib/pubid/bsi/identifiers/technical_specification.rb +79 -0
  147. data/lib/pubid/bsi/identifiers/test_method.rb +67 -0
  148. data/lib/pubid/bsi/identifiers/value_added_publication.rb +52 -0
  149. data/lib/pubid/bsi/identifiers.rb +52 -0
  150. data/lib/pubid/bsi/model.rb +196 -0
  151. data/lib/pubid/bsi/parser.rb +659 -0
  152. data/lib/pubid/bsi/scheme.rb +243 -0
  153. data/lib/pubid/bsi/single_identifier.rb +129 -0
  154. data/lib/pubid/bsi/urn_generator.rb +84 -0
  155. data/lib/pubid/bsi.rb +32 -0
  156. data/lib/pubid/builder/base.rb +138 -0
  157. data/lib/pubid/bundled_identifier.rb +126 -0
  158. data/lib/pubid/ccsds/builder.rb +56 -0
  159. data/lib/pubid/ccsds/identifier.rb +16 -0
  160. data/lib/pubid/ccsds/identifiers/base.rb +78 -0
  161. data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
  162. data/lib/pubid/ccsds/identifiers/corrigendum.rb +39 -0
  163. data/lib/pubid/ccsds/identifiers.rb +10 -0
  164. data/lib/pubid/ccsds/parser.rb +71 -0
  165. data/lib/pubid/ccsds/scheme.rb +57 -0
  166. data/lib/pubid/ccsds/single_identifier.rb +74 -0
  167. data/lib/pubid/ccsds/supplement_identifier.rb +33 -0
  168. data/lib/pubid/ccsds/urn_generator.rb +115 -0
  169. data/lib/pubid/ccsds.rb +21 -0
  170. data/lib/pubid/cen_cenelec/builder.rb +330 -0
  171. data/lib/pubid/cen_cenelec/identifier.rb +15 -0
  172. data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +40 -0
  173. data/lib/pubid/cen_cenelec/identifiers/amendment.rb +29 -0
  174. data/lib/pubid/cen_cenelec/identifiers/base.rb +75 -0
  175. data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +28 -0
  176. data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +27 -0
  177. data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
  178. data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +61 -0
  179. data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +35 -0
  180. data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +41 -0
  181. data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +37 -0
  182. data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +28 -0
  183. data/lib/pubid/cen_cenelec/identifiers/fragment.rb +22 -0
  184. data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
  185. data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +27 -0
  186. data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +27 -0
  187. data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +35 -0
  188. data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
  189. data/lib/pubid/cen_cenelec/parser.rb +144 -0
  190. data/lib/pubid/cen_cenelec/scheme.rb +164 -0
  191. data/lib/pubid/cen_cenelec/single_identifier.rb +130 -0
  192. data/lib/pubid/cen_cenelec/supplement_identifier.rb +48 -0
  193. data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
  194. data/lib/pubid/cen_cenelec.rb +21 -0
  195. data/lib/pubid/cie/builder.rb +399 -0
  196. data/lib/pubid/cie/components/code.rb +72 -0
  197. data/lib/pubid/cie/components/language.rb +58 -0
  198. data/lib/pubid/cie/identifier.rb +18 -0
  199. data/lib/pubid/cie/identifiers/bundle.rb +20 -0
  200. data/lib/pubid/cie/identifiers/conference.rb +32 -0
  201. data/lib/pubid/cie/identifiers/corrigendum.rb +40 -0
  202. data/lib/pubid/cie/identifiers/dual_published.rb +41 -0
  203. data/lib/pubid/cie/identifiers/identical.rb +64 -0
  204. data/lib/pubid/cie/identifiers/joint_published.rb +52 -0
  205. data/lib/pubid/cie/identifiers/standard.rb +58 -0
  206. data/lib/pubid/cie/identifiers/supplement.rb +45 -0
  207. data/lib/pubid/cie/identifiers/tutorial_bundle.rb +20 -0
  208. data/lib/pubid/cie/identifiers.rb +17 -0
  209. data/lib/pubid/cie/parser.rb +347 -0
  210. data/lib/pubid/cie/scheme.rb +64 -0
  211. data/lib/pubid/cie/single_identifier.rb +30 -0
  212. data/lib/pubid/cie/supplement_identifier.rb +26 -0
  213. data/lib/pubid/cie/urn_generator.rb +123 -0
  214. data/lib/pubid/cie.rb +28 -0
  215. data/lib/pubid/components/code.rb +33 -0
  216. data/lib/pubid/components/date.rb +49 -0
  217. data/lib/pubid/components/edition.rb +32 -0
  218. data/lib/pubid/components/language.rb +37 -0
  219. data/lib/pubid/components/locality.rb +10 -0
  220. data/lib/pubid/components/publisher.rb +36 -0
  221. data/lib/pubid/components/stage.rb +54 -0
  222. data/lib/pubid/components/type.rb +58 -0
  223. data/lib/pubid/components/typed_stage.rb +55 -0
  224. data/lib/pubid/components.rb +15 -0
  225. data/lib/pubid/core/pattern_doc_generator.rb +272 -0
  226. data/lib/pubid/core/update_codes.rb +77 -0
  227. data/lib/pubid/core.rb +8 -0
  228. data/lib/pubid/csa/builder.rb +671 -0
  229. data/lib/pubid/csa/components/code.rb +9 -0
  230. data/lib/pubid/csa/components.rb +9 -0
  231. data/lib/pubid/csa/composite_identifier.rb +27 -0
  232. data/lib/pubid/csa/identifier.rb +457 -0
  233. data/lib/pubid/csa/identifiers/base.rb +133 -0
  234. data/lib/pubid/csa/identifiers/bundled.rb +125 -0
  235. data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
  236. data/lib/pubid/csa/identifiers/cec.rb +129 -0
  237. data/lib/pubid/csa/identifiers/combined.rb +130 -0
  238. data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
  239. data/lib/pubid/csa/identifiers/package.rb +65 -0
  240. data/lib/pubid/csa/identifiers/series.rb +127 -0
  241. data/lib/pubid/csa/identifiers/standard.rb +10 -0
  242. data/lib/pubid/csa/identifiers.rb +17 -0
  243. data/lib/pubid/csa/parser.rb +445 -0
  244. data/lib/pubid/csa/scheme.rb +44 -0
  245. data/lib/pubid/csa/single_identifier.rb +30 -0
  246. data/lib/pubid/csa/urn_generator.rb +80 -0
  247. data/lib/pubid/csa/wrapper_identifier.rb +31 -0
  248. data/lib/pubid/csa.rb +25 -0
  249. data/lib/pubid/etsi/builder.rb +133 -0
  250. data/lib/pubid/etsi/components/code.rb +42 -0
  251. data/lib/pubid/etsi/components/version.rb +37 -0
  252. data/lib/pubid/etsi/components.rb +10 -0
  253. data/lib/pubid/etsi/identifier.rb +14 -0
  254. data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
  255. data/lib/pubid/etsi/identifiers/base.rb +38 -0
  256. data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
  257. data/lib/pubid/etsi/identifiers/etsi_standard.rb +19 -0
  258. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +91 -0
  259. data/lib/pubid/etsi/identifiers.rb +14 -0
  260. data/lib/pubid/etsi/parser.rb +133 -0
  261. data/lib/pubid/etsi/scheme.rb +42 -0
  262. data/lib/pubid/etsi/urn_generator.rb +76 -0
  263. data/lib/pubid/etsi.rb +21 -0
  264. data/lib/pubid/export/auditor.rb +89 -0
  265. data/lib/pubid/export/data_class_exporter.rb +59 -0
  266. data/lib/pubid/export/exporter.rb +74 -0
  267. data/lib/pubid/export/flavor_exporter.rb +402 -0
  268. data/lib/pubid/export/ieee_exporter.rb +78 -0
  269. data/lib/pubid/export/itu_exporter.rb +66 -0
  270. data/lib/pubid/export/nist_exporter.rb +64 -0
  271. data/lib/pubid/export/registry_exporter.rb +90 -0
  272. data/lib/pubid/export/result.rb +97 -0
  273. data/lib/pubid/export/scheme_exporter.rb +70 -0
  274. data/lib/pubid/export.rb +18 -0
  275. data/lib/pubid/format_detector.rb +16 -0
  276. data/lib/pubid/format_registry.rb +42 -0
  277. data/lib/pubid/identifier.rb +235 -0
  278. data/lib/pubid/identifier_metadata.rb +148 -0
  279. data/lib/pubid/identifier_registry.rb +198 -0
  280. data/lib/pubid/idf/builder.rb +82 -0
  281. data/lib/pubid/idf/identifier.rb +69 -0
  282. data/lib/pubid/idf/identifiers/amendment.rb +27 -0
  283. data/lib/pubid/idf/identifiers/corrigendum.rb +27 -0
  284. data/lib/pubid/idf/identifiers/international_standard.rb +123 -0
  285. data/lib/pubid/idf/identifiers/reviewed_method.rb +100 -0
  286. data/lib/pubid/idf/identifiers.rb +13 -0
  287. data/lib/pubid/idf/parser.rb +143 -0
  288. data/lib/pubid/idf/scheme.rb +61 -0
  289. data/lib/pubid/idf/single_identifier.rb +19 -0
  290. data/lib/pubid/idf/supplement_identifier.rb +43 -0
  291. data/lib/pubid/idf/urn_generator.rb +84 -0
  292. data/lib/pubid/idf.rb +25 -0
  293. data/lib/pubid/iec/builder.rb +457 -0
  294. data/lib/pubid/iec/components/code.rb +59 -0
  295. data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
  296. data/lib/pubid/iec/components/publisher.rb +35 -0
  297. data/lib/pubid/iec/components/sheet.rb +32 -0
  298. data/lib/pubid/iec/components/trf_info.rb +38 -0
  299. data/lib/pubid/iec/components/vap_suffix.rb +41 -0
  300. data/lib/pubid/iec/identifier.rb +21 -0
  301. data/lib/pubid/iec/identifiers/amendment.rb +94 -0
  302. data/lib/pubid/iec/identifiers/base.rb +78 -0
  303. data/lib/pubid/iec/identifiers/component_specification.rb +39 -0
  304. data/lib/pubid/iec/identifiers/conformity_assessment.rb +39 -0
  305. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +86 -0
  306. data/lib/pubid/iec/identifiers/corrigendum.rb +94 -0
  307. data/lib/pubid/iec/identifiers/fragment_identifier.rb +141 -0
  308. data/lib/pubid/iec/identifiers/guide.rb +104 -0
  309. data/lib/pubid/iec/identifiers/international_standard.rb +147 -0
  310. data/lib/pubid/iec/identifiers/interpretation_sheet.rb +104 -0
  311. data/lib/pubid/iec/identifiers/operational_document.rb +39 -0
  312. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +101 -0
  313. data/lib/pubid/iec/identifiers/sheet_identifier.rb +66 -0
  314. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +40 -0
  315. data/lib/pubid/iec/identifiers/systems_reference_document.rb +40 -0
  316. data/lib/pubid/iec/identifiers/technical_report.rb +132 -0
  317. data/lib/pubid/iec/identifiers/technical_specification.rb +132 -0
  318. data/lib/pubid/iec/identifiers/technology_report.rb +39 -0
  319. data/lib/pubid/iec/identifiers/test_report_form.rb +78 -0
  320. data/lib/pubid/iec/identifiers/vap_identifier.rb +77 -0
  321. data/lib/pubid/iec/identifiers/white_paper.rb +39 -0
  322. data/lib/pubid/iec/identifiers/working_document.rb +96 -0
  323. data/lib/pubid/iec/parser.rb +412 -0
  324. data/lib/pubid/iec/rendering_style.rb +113 -0
  325. data/lib/pubid/iec/scheme.rb +71 -0
  326. data/lib/pubid/iec/single_identifier.rb +80 -0
  327. data/lib/pubid/iec/supplement_identifier.rb +161 -0
  328. data/lib/pubid/iec/urn_generator.rb +193 -0
  329. data/lib/pubid/iec/urn_parser.rb +289 -0
  330. data/lib/pubid/iec.rb +85 -0
  331. data/lib/pubid/ieee/aiee/builder.rb +71 -0
  332. data/lib/pubid/ieee/aiee/identifier.rb +105 -0
  333. data/lib/pubid/ieee/aiee/parser.rb +130 -0
  334. data/lib/pubid/ieee/aiee.rb +11 -0
  335. data/lib/pubid/ieee/builder.rb +1237 -0
  336. data/lib/pubid/ieee/components/code.rb +102 -0
  337. data/lib/pubid/ieee/components/draft.rb +93 -0
  338. data/lib/pubid/ieee/components/relationship.rb +157 -0
  339. data/lib/pubid/ieee/components/typed_stage.rb +100 -0
  340. data/lib/pubid/ieee/identifier.rb +13 -0
  341. data/lib/pubid/ieee/identifiers/adopted_standard.rb +33 -0
  342. data/lib/pubid/ieee/identifiers/base.rb +591 -0
  343. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +35 -0
  344. data/lib/pubid/ieee/identifiers/corrigendum.rb +37 -0
  345. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +51 -0
  346. data/lib/pubid/ieee/identifiers/dual_identifier.rb +18 -0
  347. data/lib/pubid/ieee/identifiers/dual_published.rb +28 -0
  348. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +27 -0
  349. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +34 -0
  350. data/lib/pubid/ieee/identifiers/joint_development.rb +172 -0
  351. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +51 -0
  352. data/lib/pubid/ieee/identifiers/nesc/base.rb +56 -0
  353. data/lib/pubid/ieee/identifiers/nesc/draft.rb +28 -0
  354. data/lib/pubid/ieee/identifiers/nesc/handbook.rb +32 -0
  355. data/lib/pubid/ieee/identifiers/nesc/redline.rb +26 -0
  356. data/lib/pubid/ieee/identifiers/nesc/standard.rb +26 -0
  357. data/lib/pubid/ieee/identifiers/nesc.rb +15 -0
  358. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +20 -0
  359. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +26 -0
  360. data/lib/pubid/ieee/identifiers/redlined_standard.rb +33 -0
  361. data/lib/pubid/ieee/identifiers/si_standard.rb +73 -0
  362. data/lib/pubid/ieee/identifiers/standard.rb +41 -0
  363. data/lib/pubid/ieee/identifiers/supplement_identifier.rb +23 -0
  364. data/lib/pubid/ieee/identifiers.rb +33 -0
  365. data/lib/pubid/ieee/ire/builder.rb +61 -0
  366. data/lib/pubid/ieee/ire/identifier.rb +58 -0
  367. data/lib/pubid/ieee/ire/parser.rb +91 -0
  368. data/lib/pubid/ieee/ire.rb +11 -0
  369. data/lib/pubid/ieee/nesc/builder.rb +101 -0
  370. data/lib/pubid/ieee/nesc/parser.rb +154 -0
  371. data/lib/pubid/ieee/nesc.rb +10 -0
  372. data/lib/pubid/ieee/parser.rb +1226 -0
  373. data/lib/pubid/ieee/scheme.rb +90 -0
  374. data/lib/pubid/ieee/typed_stages.rb +172 -0
  375. data/lib/pubid/ieee/urn_generator.rb +188 -0
  376. data/lib/pubid/ieee.rb +32 -0
  377. data/lib/pubid/ieee_debug.rb +31 -0
  378. data/lib/pubid/iho/builder.rb +37 -0
  379. data/lib/pubid/iho/identifier.rb +19 -0
  380. data/lib/pubid/iho/identifiers/base.rb +41 -0
  381. data/lib/pubid/iho/identifiers/bibliographic.rb +20 -0
  382. data/lib/pubid/iho/identifiers/circular_letter.rb +19 -0
  383. data/lib/pubid/iho/identifiers/miscellaneous.rb +20 -0
  384. data/lib/pubid/iho/identifiers/publication.rb +19 -0
  385. data/lib/pubid/iho/identifiers/standard.rb +19 -0
  386. data/lib/pubid/iho/identifiers.rb +14 -0
  387. data/lib/pubid/iho/parser.rb +68 -0
  388. data/lib/pubid/iho/scheme.rb +29 -0
  389. data/lib/pubid/iho/urn_generator.rb +29 -0
  390. data/lib/pubid/iho.rb +21 -0
  391. data/lib/pubid/iso/builder.rb +305 -0
  392. data/lib/pubid/iso/bundled_identifier.rb +85 -0
  393. data/lib/pubid/iso/combined_identifier.rb +22 -0
  394. data/lib/pubid/iso/components/code.rb +36 -0
  395. data/lib/pubid/iso/components/publisher.rb +60 -0
  396. data/lib/pubid/iso/components.rb +12 -0
  397. data/lib/pubid/iso/format_resolver.rb +45 -0
  398. data/lib/pubid/iso/identifier.rb +69 -0
  399. data/lib/pubid/iso/identifiers/addendum.rb +104 -0
  400. data/lib/pubid/iso/identifiers/amendment.rb +128 -0
  401. data/lib/pubid/iso/identifiers/base.rb +115 -0
  402. data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
  403. data/lib/pubid/iso/identifiers/data.rb +76 -0
  404. data/lib/pubid/iso/identifiers/directives.rb +59 -0
  405. data/lib/pubid/iso/identifiers/directives_supplement.rb +119 -0
  406. data/lib/pubid/iso/identifiers/extract.rb +30 -0
  407. data/lib/pubid/iso/identifiers/guide.rb +100 -0
  408. data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
  409. data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
  410. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +89 -0
  411. data/lib/pubid/iso/identifiers/pas.rb +93 -0
  412. data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
  413. data/lib/pubid/iso/identifiers/supplement.rb +87 -0
  414. data/lib/pubid/iso/identifiers/tc_document.rb +108 -0
  415. data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
  416. data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
  417. data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
  418. data/lib/pubid/iso/identifiers.rb +33 -0
  419. data/lib/pubid/iso/parser.rb +510 -0
  420. data/lib/pubid/iso/rendering_style.rb +120 -0
  421. data/lib/pubid/iso/scheme.rb +187 -0
  422. data/lib/pubid/iso/single_identifier.rb +61 -0
  423. data/lib/pubid/iso/supplement_identifier.rb +27 -0
  424. data/lib/pubid/iso/urn_generator.rb +412 -0
  425. data/lib/pubid/iso/urn_parser.rb +423 -0
  426. data/lib/pubid/iso/utilities.rb +86 -0
  427. data/lib/pubid/iso.rb +50 -0
  428. data/lib/pubid/itu/builder.rb +171 -0
  429. data/lib/pubid/itu/components/code.rb +39 -0
  430. data/lib/pubid/itu/components/sector.rb +35 -0
  431. data/lib/pubid/itu/components/series.rb +29 -0
  432. data/lib/pubid/itu/i18n.rb +9 -0
  433. data/lib/pubid/itu/i18n.yaml +30 -0
  434. data/lib/pubid/itu/identifier.rb +53 -0
  435. data/lib/pubid/itu/identifiers/amendment.rb +43 -0
  436. data/lib/pubid/itu/identifiers/annex.rb +74 -0
  437. data/lib/pubid/itu/identifiers/base.rb +154 -0
  438. data/lib/pubid/itu/identifiers/combined_identifier.rb +47 -0
  439. data/lib/pubid/itu/identifiers/corrigendum.rb +44 -0
  440. data/lib/pubid/itu/identifiers/recommendation.rb +16 -0
  441. data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
  442. data/lib/pubid/itu/identifiers/supplement.rb +46 -0
  443. data/lib/pubid/itu/identifiers.rb +16 -0
  444. data/lib/pubid/itu/model.rb +111 -0
  445. data/lib/pubid/itu/parser.rb +225 -0
  446. data/lib/pubid/itu/scheme.rb +174 -0
  447. data/lib/pubid/itu/urn_generator.rb +105 -0
  448. data/lib/pubid/itu.rb +22 -0
  449. data/lib/pubid/jcgm/builder.rb +88 -0
  450. data/lib/pubid/jcgm/components/publisher.rb +20 -0
  451. data/lib/pubid/jcgm/components.rb +9 -0
  452. data/lib/pubid/jcgm/identifier.rb +11 -0
  453. data/lib/pubid/jcgm/identifiers/amendment.rb +35 -0
  454. data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
  455. data/lib/pubid/jcgm/identifiers/gum_guide.rb +51 -0
  456. data/lib/pubid/jcgm/identifiers.rb +11 -0
  457. data/lib/pubid/jcgm/parser.rb +84 -0
  458. data/lib/pubid/jcgm/scheme.rb +60 -0
  459. data/lib/pubid/jcgm/single_identifier.rb +48 -0
  460. data/lib/pubid/jcgm/supplement_identifier.rb +16 -0
  461. data/lib/pubid/jcgm/urn_generator.rb +110 -0
  462. data/lib/pubid/jcgm.rb +31 -0
  463. data/lib/pubid/jis/builder.rb +124 -0
  464. data/lib/pubid/jis/components/code.rb +59 -0
  465. data/lib/pubid/jis/components.rb +9 -0
  466. data/lib/pubid/jis/identifier.rb +18 -0
  467. data/lib/pubid/jis/identifiers/amendment.rb +16 -0
  468. data/lib/pubid/jis/identifiers/base.rb +72 -0
  469. data/lib/pubid/jis/identifiers/explanation.rb +22 -0
  470. data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
  471. data/lib/pubid/jis/identifiers/standard.rb +27 -0
  472. data/lib/pubid/jis/identifiers/technical_report.rb +31 -0
  473. data/lib/pubid/jis/identifiers/technical_specification.rb +31 -0
  474. data/lib/pubid/jis/identifiers.rb +17 -0
  475. data/lib/pubid/jis/parser.rb +109 -0
  476. data/lib/pubid/jis/scheme.rb +49 -0
  477. data/lib/pubid/jis/single_identifier.rb +37 -0
  478. data/lib/pubid/jis/supplement_identifier.rb +47 -0
  479. data/lib/pubid/jis/urn_generator.rb +25 -0
  480. data/lib/pubid/jis.rb +23 -0
  481. data/lib/pubid/lutaml/no_store_registration.rb +30 -0
  482. data/lib/pubid/nist/builder.rb +2100 -0
  483. data/lib/pubid/nist/components/code.rb +38 -0
  484. data/lib/pubid/nist/components/edition.rb +118 -0
  485. data/lib/pubid/nist/components/issue_number.rb +28 -0
  486. data/lib/pubid/nist/components/part.rb +77 -0
  487. data/lib/pubid/nist/components/publisher.rb +24 -0
  488. data/lib/pubid/nist/components/stage.rb +53 -0
  489. data/lib/pubid/nist/components/supplement.rb +121 -0
  490. data/lib/pubid/nist/components/translation.rb +42 -0
  491. data/lib/pubid/nist/components/update.rb +103 -0
  492. data/lib/pubid/nist/components/version.rb +35 -0
  493. data/lib/pubid/nist/components/volume.rb +32 -0
  494. data/lib/pubid/nist/components.rb +19 -0
  495. data/lib/pubid/nist/configuration.rb +77 -0
  496. data/lib/pubid/nist/identifiers/base.rb +499 -0
  497. data/lib/pubid/nist/identifiers/circular.rb +68 -0
  498. data/lib/pubid/nist/identifiers/circular_supplement.rb +50 -0
  499. data/lib/pubid/nist/identifiers/commercial_standard.rb +41 -0
  500. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +56 -0
  501. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +56 -0
  502. data/lib/pubid/nist/identifiers/crpl_report.rb +135 -0
  503. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +94 -0
  504. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +35 -0
  505. data/lib/pubid/nist/identifiers/handbook.rb +50 -0
  506. data/lib/pubid/nist/identifiers/internal_report.rb +56 -0
  507. data/lib/pubid/nist/identifiers/letter_circular.rb +45 -0
  508. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +65 -0
  509. data/lib/pubid/nist/identifiers/monograph.rb +69 -0
  510. data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
  511. data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
  512. data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
  513. data/lib/pubid/nist/identifiers/report.rb +68 -0
  514. data/lib/pubid/nist/identifiers/special_publication.rb +36 -0
  515. data/lib/pubid/nist/identifiers/technical_note.rb +90 -0
  516. data/lib/pubid/nist/identifiers.rb +33 -0
  517. data/lib/pubid/nist/parser.rb +1084 -0
  518. data/lib/pubid/nist/scheme.rb +199 -0
  519. data/lib/pubid/nist/supplement_identifier.rb +83 -0
  520. data/lib/pubid/nist/urn_generator.rb +127 -0
  521. data/lib/pubid/nist.rb +36 -0
  522. data/lib/pubid/oiml/builder.rb +189 -0
  523. data/lib/pubid/oiml/components/code.rb +20 -0
  524. data/lib/pubid/oiml/components.rb +9 -0
  525. data/lib/pubid/oiml/identifier.rb +11 -0
  526. data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
  527. data/lib/pubid/oiml/identifiers/annex.rb +62 -0
  528. data/lib/pubid/oiml/identifiers/base.rb +36 -0
  529. data/lib/pubid/oiml/identifiers/basic_publication.rb +13 -0
  530. data/lib/pubid/oiml/identifiers/document.rb +13 -0
  531. data/lib/pubid/oiml/identifiers/expert_report.rb +13 -0
  532. data/lib/pubid/oiml/identifiers/guide.rb +13 -0
  533. data/lib/pubid/oiml/identifiers/recommendation.rb +13 -0
  534. data/lib/pubid/oiml/identifiers/seminar_report.rb +13 -0
  535. data/lib/pubid/oiml/identifiers/vocabulary.rb +13 -0
  536. data/lib/pubid/oiml/identifiers.rb +18 -0
  537. data/lib/pubid/oiml/parser.rb +173 -0
  538. data/lib/pubid/oiml/scheme.rb +46 -0
  539. data/lib/pubid/oiml/single_identifier.rb +90 -0
  540. data/lib/pubid/oiml/supplement_identifier.rb +43 -0
  541. data/lib/pubid/oiml/urn_generator.rb +64 -0
  542. data/lib/pubid/oiml.rb +26 -0
  543. data/lib/pubid/parser/common_parse_methods.rb +13 -0
  544. data/lib/pubid/parser/common_parse_rules.rb +56 -0
  545. data/lib/pubid/parser.rb +8 -0
  546. data/lib/pubid/parsers/base.rb +11 -0
  547. data/lib/pubid/parsers/mr_string.rb +93 -0
  548. data/lib/pubid/plateau/builder.rb +50 -0
  549. data/lib/pubid/plateau/identifiers/annex.rb +16 -0
  550. data/lib/pubid/plateau/identifiers/base.rb +51 -0
  551. data/lib/pubid/plateau/identifiers/handbook.rb +34 -0
  552. data/lib/pubid/plateau/identifiers/technical_report.rb +20 -0
  553. data/lib/pubid/plateau/identifiers.rb +12 -0
  554. data/lib/pubid/plateau/parser.rb +63 -0
  555. data/lib/pubid/plateau/scheme.rb +45 -0
  556. data/lib/pubid/plateau/supplement_identifier.rb +72 -0
  557. data/lib/pubid/plateau/urn_generator.rb +29 -0
  558. data/lib/pubid/plateau.rb +25 -0
  559. data/lib/pubid/renderers/base.rb +19 -0
  560. data/lib/pubid/renderers/directives_renderer.rb +62 -0
  561. data/lib/pubid/renderers/guide_renderer.rb +20 -0
  562. data/lib/pubid/renderers/human_readable.rb +58 -0
  563. data/lib/pubid/renderers/iwa_renderer.rb +16 -0
  564. data/lib/pubid/renderers/mr_string.rb +16 -0
  565. data/lib/pubid/renderers/supplement_renderer.rb +33 -0
  566. data/lib/pubid/renderers/urn.rb +11 -0
  567. data/lib/pubid/renderers.rb +14 -0
  568. data/lib/pubid/rendering/base.rb +73 -0
  569. data/lib/pubid/rendering/common.rb +211 -0
  570. data/lib/pubid/rendering/context.rb +156 -0
  571. data/lib/pubid/rendering/date.rb +27 -0
  572. data/lib/pubid/rendering/format.rb +25 -0
  573. data/lib/pubid/rendering/language.rb +21 -0
  574. data/lib/pubid/rendering/numbering.rb +24 -0
  575. data/lib/pubid/rendering/publisher.rb +25 -0
  576. data/lib/pubid/rendering/stage.rb +38 -0
  577. data/lib/pubid/rendering/supplement.rb +46 -0
  578. data/lib/pubid/rendering.rb +16 -0
  579. data/lib/pubid/sae/builder.rb +32 -0
  580. data/lib/pubid/sae/components/code.rb +9 -0
  581. data/lib/pubid/sae/components/date.rb +19 -0
  582. data/lib/pubid/sae/components/type.rb +19 -0
  583. data/lib/pubid/sae/components.rb +11 -0
  584. data/lib/pubid/sae/identifier.rb +14 -0
  585. data/lib/pubid/sae/identifiers/base.rb +42 -0
  586. data/lib/pubid/sae/identifiers.rb +9 -0
  587. data/lib/pubid/sae/parser.rb +55 -0
  588. data/lib/pubid/sae/scheme.rb +47 -0
  589. data/lib/pubid/sae/urn_generator.rb +38 -0
  590. data/lib/pubid/sae.rb +19 -0
  591. data/lib/pubid/scheme.rb +207 -0
  592. data/lib/pubid/urn_generator/base.rb +110 -0
  593. data/lib/pubid/utils/string_normalizer.rb +196 -0
  594. data/lib/pubid/utils.rb +7 -0
  595. data/lib/pubid/version.rb +3 -1
  596. data/lib/pubid.rb +137 -13
  597. data/lib/tasks/docs.rake +37 -0
  598. data/lib/tasks/export.rake +38 -0
  599. data/lib/tasks/website-data.json +7488 -0
  600. metadata +613 -171
  601. data/lib/pubid/registry.rb +0 -30
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ module Identifiers
6
+ # Interpretation identifier for ACMA interpretations
7
+ # Examples:
8
+ # - AMCA 99 JW Interp
9
+ # - AMCA 204 – 1
10
+ # - ANSI/AMCA 204 Interp
11
+ class Interpretation < Base
12
+ attr_reader :interpretation_code
13
+
14
+ def initialize(code:, year: nil, copublisher: nil, suffix: nil,
15
+ reaffirmed: nil, interpretation_code: nil)
16
+ @code = Components::Code.new(value: code.to_s)
17
+ @year = Components::Date.new(year: year.to_s) if year
18
+ @copublisher = copublisher
19
+ @suffix = suffix
20
+ @reaffirmed = reaffirmed
21
+ @interpretation_code = interpretation_code
22
+ end
23
+
24
+ def self.type
25
+ { key: :interpretation, title: "Interpretation", short: "Interp" }
26
+ end
27
+
28
+ def type
29
+ Interpretation.type
30
+ end
31
+
32
+ # @return [String] the rendered interpretation identifier
33
+ def to_s
34
+ parts = []
35
+ parts << @copublisher if @copublisher
36
+ parts << @code.to_s
37
+
38
+ if @interpretation_code
39
+ parts << "– #{@interpretation_code}"
40
+ elsif @year
41
+ parts << "-#{@year}"
42
+ end
43
+
44
+ parts << " #{@suffix}" if @suffix
45
+
46
+ parts.join(" ").squeeze(" ")
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ module Identifiers
6
+ # Publication identifier for ACMA publications
7
+ # Examples:
8
+ # - AMCA Publication 211-22 (Rev. 01-23)
9
+ # - AMCA Publication 311-16
10
+ # - AMCA Publication 1011-03 (R2010)
11
+ class Publication < Base
12
+ attr_reader :revision
13
+
14
+ def initialize(code:, year:, copublisher: nil, suffix: nil,
15
+ reaffirmed: nil, revision: nil)
16
+ @code = Components::Code.new(value: code.to_s)
17
+ @year = Components::Date.new(year: year.to_s) if year
18
+ @copublisher = copublisher
19
+ @suffix = suffix
20
+ @reaffirmed = reaffirmed
21
+ @revision = revision
22
+ end
23
+
24
+ def self.type
25
+ { key: :publication, title: "Publication", short: nil }
26
+ end
27
+
28
+ def type
29
+ Publication.type
30
+ end
31
+
32
+ # @return [String] the rendered publication identifier
33
+ def to_s
34
+ parts = []
35
+ parts << @copublisher if @copublisher
36
+ parts << "Publication"
37
+ parts << @code.to_s
38
+ parts << "-#{@year}" if @year
39
+ parts << " (Rev. #{@revision})" if @revision
40
+ parts << " (#{@reaffirmed})" if @reaffirmed && !@revision
41
+
42
+ parts.join(" ").squeeze(" ")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ module Identifiers
6
+ # Standard identifier for ACMA standards
7
+ # Examples:
8
+ # - ANSI/AMCA 210-16
9
+ # - ANSI/AMCA Standard 99-25
10
+ # - AMCA Standard 803-02 (R2008)
11
+ class Standard < Base
12
+ def self.type
13
+ { key: :standard, title: "Standard", short: nil }
14
+ end
15
+
16
+ def type
17
+ Standard.type
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ module Identifiers
6
+ autoload :Base, "#{__dir__}/identifiers/base"
7
+ autoload :Interpretation, "#{__dir__}/identifiers/interpretation"
8
+ autoload :Publication, "#{__dir__}/identifiers/publication"
9
+ autoload :Standard, "#{__dir__}/identifiers/standard"
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,153 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ # Parser class for ACMA identifiers
6
+ # Single Responsibility: Parsing ACMA identifier syntax
7
+ class Parser < Parslet::Parser
8
+ # Basic building blocks
9
+ rule(:space) { str(" ") }
10
+ rule(:space?) { space.maybe }
11
+ rule(:dash) { str("-") }
12
+ rule(:slash) { str("/") }
13
+ rule(:lparen) { str("(") }
14
+ rule(:rparen) { str(")") }
15
+ rule(:dot) { str(".") }
16
+
17
+ rule(:digit) { match("[0-9]") }
18
+ rule(:digits) { digit.repeat(1) }
19
+ rule(:letter) { match("[A-Za-z]") }
20
+
21
+ # Year pattern (2 digits starting with 0-1, or 4 digits starting with 19 or 20)
22
+ rule(:year_digits) do
23
+ ((str("19") | str("20")) >> digit.repeat(2, 2)) |
24
+ digit.repeat(2, 2)
25
+ end
26
+
27
+ # Copublisher (ANSI/AMCA or AMCA)
28
+ rule(:copublisher) do
29
+ (str("ANSI") >> slash >> str("AMCA")) |
30
+ str("AMCA")
31
+ end
32
+
33
+ # Additional copublisher after year (e.g., /ASHRAE 51-16)
34
+ rule(:additional_copublisher) do
35
+ slash >> letter.repeat(2,
36
+ 10) >> space >> digits >> (dash >> digits).maybe
37
+ end
38
+
39
+ # Code pattern (e.g., 210, 500-D, 99, 204)
40
+ rule(:code) do
41
+ (
42
+ digits >> # Main number
43
+ (dash >> letter).maybe >> # Optional letter suffix (500-D)
44
+ (dot >> digits).maybe # Optional decimal (not in fixtures but possible)
45
+ ).as(:code)
46
+ end
47
+
48
+ # Type (Standard or Publication)
49
+ rule(:type) do
50
+ str("Standard") | str("Publication")
51
+ end
52
+
53
+ # Reaffirmation year (R2008, R2010, etc.)
54
+ rule(:reaffirmation) do
55
+ lparen >> str("R") >> digits.as(:reaffirmed) >> rparen
56
+ end
57
+
58
+ # Suffix
59
+ rule(:suffix) do
60
+ str("R") | str("P")
61
+ end
62
+
63
+ # Publication revision (Rev. 01-23)
64
+ rule(:revision) do
65
+ lparen >> str("Rev") >> dot.maybe >> space >> digits.as(:revision_year) >> dash >> digits >> rparen
66
+ end
67
+
68
+ # Interpretation code (JW, KB, RG, AW, AH, or just a number)
69
+ rule(:interpretation_code) do
70
+ letter.repeat(2).as(:interpretation_code) | # Two-letter code
71
+ digits.as(:interpretation_code) # Number
72
+ end
73
+
74
+ # Interpretation keyword
75
+ rule(:interp_keyword) do
76
+ space >> str("Interp")
77
+ end
78
+
79
+ # Main identifier rule
80
+ rule(:identifier) do
81
+ # Interpretation patterns (must come first as they're more specific)
82
+ interpretation_identifier |
83
+ # Publication patterns
84
+ publication_identifier |
85
+ # Standard patterns (must come last as they're the most general)
86
+ standard_identifier
87
+ end
88
+
89
+ # Interpretation pattern (e.g., AMCA 99 JW Interp, AMCA 204 – 1)
90
+ rule(:interpretation_identifier) do
91
+ (
92
+ copublisher.as(:copublisher).maybe >> space >>
93
+ code >>
94
+ space >>
95
+ # Either a letter code (JW, KB, etc.) or a dash-number pattern
96
+ (
97
+ (interpretation_code >> interp_keyword) |
98
+ ((str("–") | str("-")) >> digits.as(:interpretation_year) >> interp_keyword.maybe)
99
+ )
100
+ ).as(:interpretation) |
101
+ # Simple interpretation: AMCA 511 Interp
102
+ (
103
+ copublisher.as(:copublisher).maybe >> space >>
104
+ code >>
105
+ interp_keyword
106
+ ).as(:interpretation)
107
+ end
108
+
109
+ # Publication pattern (e.g., AMCA Publication 211-22 (Rev. 01-23))
110
+ rule(:publication_identifier) do
111
+ (
112
+ copublisher.as(:copublisher).maybe >> space >>
113
+ str("Publication").as(:publication_keyword) >> space >>
114
+ code >>
115
+ (dash >> year_digits.as(:year)).maybe >>
116
+ (space >> revision).maybe >>
117
+ (space >> reaffirmation).maybe
118
+ ).as(:publication)
119
+ end
120
+
121
+ # Standard pattern (e.g., ANSI/AMCA 210-16, ANSI/AMCA Standard 99-25)
122
+ rule(:standard_identifier) do
123
+ (
124
+ copublisher.as(:copublisher).maybe >> space >>
125
+ type.as(:type).maybe >> space.maybe >>
126
+ code >>
127
+ (dash >> year_digits.as(:year)).maybe >>
128
+ (space >> additional_copublisher).maybe >>
129
+ suffix.maybe >>
130
+ (space >> reaffirmation).maybe
131
+ ).as(:standard)
132
+ end
133
+
134
+ root(:identifier)
135
+
136
+ def self.parse(string)
137
+ # Strip leading/trailing whitespace
138
+ cleaned = string.strip
139
+
140
+ # Normalize multiple spaces to single space
141
+ cleaned = cleaned.gsub(/\s+/, " ")
142
+
143
+ # Normalize en dash to regular dash
144
+ cleaned = cleaned.gsub("–", "-")
145
+
146
+ # Remove trailing periods and commas
147
+ cleaned = cleaned.gsub(/[,.]$/, "")
148
+
149
+ new.parse(cleaned)
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ # Scheme class for ACMA identifier configuration
6
+ class Scheme < Pubid::Scheme
7
+ def initialize
8
+ @identifiers = [
9
+ Identifiers::Standard,
10
+ Identifiers::Publication,
11
+ Identifiers::Interpretation,
12
+ ].freeze
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ # Base class for single (non-supplement) ACMA identifiers
6
+ # Includes: Standard, Publication
7
+ class SingleIdentifier < Identifiers::Base
8
+ def to_s
9
+ parts = []
10
+ parts << copublisher if copublisher
11
+ # type is a hash, get the title
12
+ t = self.class.attributes.key?(:type) ? type : nil
13
+ if t.is_a?(Hash) && t[:title]
14
+ parts << t[:title].to_s
15
+ end
16
+ parts << code.to_s
17
+ parts << "-#{year}" if year
18
+
19
+ result = parts.compact.join(" ")
20
+
21
+ # Handle additional copublisher after year (e.g., /ASHRAE 51-16)
22
+ if copublisher&.include?("/") && year
23
+ type_title = t.is_a?(Hash) ? t[:title].to_s : ""
24
+ result = "#{copublisher} #{type_title} #{code}-#{year}"
25
+ end
26
+
27
+ result += " (#{reaffirmed})" if reaffirmed
28
+
29
+ result
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ class UrnGenerator < Pubid::UrnGenerator::Base
6
+ def urn_number
7
+ return nil unless identifier.code
8
+
9
+ identifier.code.to_s
10
+ end
11
+
12
+ def urn_year
13
+ return nil unless identifier.year
14
+
15
+ identifier.year.to_s
16
+ end
17
+
18
+ def urn_suffix
19
+ identifier.suffix&.to_s&.downcase
20
+ end
21
+
22
+ def urn_reaffirmed
23
+ "reaff.#{identifier.reaffirmed}" if identifier.reaffirmed
24
+ end
25
+
26
+ def urn_copublisher
27
+ "copub.#{identifier.copublisher.to_s.downcase}" if identifier.copublisher
28
+ end
29
+
30
+ def urn_type
31
+ identifier.type&.to_s&.downcase
32
+ end
33
+
34
+ def generate
35
+ parts = ["urn", "amca"]
36
+ parts << urn_number if urn_number
37
+ parts << urn_year if urn_year
38
+ parts << urn_suffix if urn_suffix
39
+ parts << urn_reaffirmed if urn_reaffirmed
40
+ parts << urn_copublisher if urn_copublisher
41
+
42
+ parts[1] = identifier.publisher.to_s.downcase if identifier.publisher
43
+
44
+ parts << urn_type if urn_type
45
+
46
+ parts.join(":")
47
+ end
48
+ end
49
+ end
50
+ end
data/lib/pubid/amca.rb ADDED
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Amca
5
+ autoload :Identifier, "#{__dir__}/amca/identifier"
6
+ autoload :Identifiers, "#{__dir__}/amca/identifiers"
7
+ autoload :Builder, "#{__dir__}/amca/builder"
8
+ autoload :Parser, "#{__dir__}/amca/parser"
9
+ autoload :Scheme, "#{__dir__}/amca/scheme"
10
+ autoload :SingleIdentifier, "#{__dir__}/amca/single_identifier"
11
+ autoload :UrnGenerator, "#{__dir__}/amca/urn_generator"
12
+
13
+ # Parse an ACMA identifier string into an identifier object
14
+ # @param identifier [String] The ACMA identifier string to parse
15
+ # @return [Pubid::Amca::Identifier] The appropriate identifier object
16
+ # @raise [Parslet::ParseFailed] If parsing fails
17
+ def self.parse(identifier)
18
+ Identifier.parse(identifier)
19
+ end
20
+ end
21
+
22
+ # Register this flavor with the Pubid registry
23
+ end
24
+
25
+ # Register Uamca flavor with the registry
26
+ Pubid::Registry.register(:amca, Pubid::Amca)
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Ansi
5
+ class Builder < Pubid::Builder::Base
6
+ def initialize(scheme)
7
+ @scheme = scheme
8
+ super(Identifiers::Standard)
9
+ end
10
+
11
+ private
12
+
13
+ def default_identifier_class
14
+ Identifiers::Standard
15
+ end
16
+
17
+ def cast(type, value)
18
+ case type
19
+ when :publisher
20
+ Components::Publisher.new(body: value)
21
+ when :std_keyword
22
+ !value.nil? && !value.empty?
23
+ when :copublishers
24
+ if value.nil? || value.empty?
25
+ nil
26
+ else
27
+ value.map do |copublisher|
28
+ Components::Publisher.new(body: copublisher[:copublisher])
29
+ end
30
+ end
31
+ when :number_with_part
32
+ original_value = value.to_s
33
+ main_and_parts = original_value.split("-")
34
+ main_number = main_and_parts[0]
35
+ part_number = main_and_parts[1]
36
+ {
37
+ number: Components::Code.new(value: main_number),
38
+ part: part_number ? Components::Code.new(value: part_number) : nil,
39
+ }.compact
40
+ when :date
41
+ Components::Date.new(year: value.to_s)
42
+ when :languages
43
+ value.to_s.split(",").map do |lang|
44
+ Components::Language.new(code: lang.strip)
45
+ end
46
+ else
47
+ raise ArgumentError, "Unknown parameter type: #{type}"
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Ansi
5
+ # Base ANSI identifier class
6
+ class Identifier < ::Pubid::Identifier
7
+ def self.parse(string)
8
+ parsed = Pubid::Ansi::Parser.new.parse(string)
9
+ Pubid::Ansi::Builder.new(Pubid::Ansi::Scheme).build(parsed)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module Pubid
2
+ module Ansi
3
+ module Identifiers
4
+ # American National Standard identifier
5
+ class AmericanNationalStandard < SingleIdentifier
6
+ def self.type
7
+ { key: :ans, title: "American National Standard", short: "ANS" }
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "american_national_standard"
4
+
5
+ module Pubid
6
+ module Ansi
7
+ module Identifiers
8
+ # American National Standard identifier
9
+ class Standard < SingleIdentifier
10
+ def self.type
11
+ { key: :ans, title: "American National Standard", short: "ANS" }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Ansi
5
+ module Identifiers
6
+ autoload :AmericanNationalStandard,
7
+ "#{__dir__}/identifiers/american_national_standard"
8
+ autoload :Standard, "#{__dir__}/identifiers/standard"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Ansi
5
+ # Parser for ANSI (American National Standards Institute) identifiers
6
+ # Examples: ANSI X3.4-1986, ANSI C63.4-2014, ANSI/ISO 9899:1990
7
+ class Parser < Parslet::Parser
8
+ include ::Pubid::Parser::CommonParseRules
9
+ include ::Pubid::Parser::CommonParseMethods
10
+
11
+ root :identifier
12
+
13
+ # ANSI as sole publisher
14
+ rule(:publisher) do
15
+ str("ANSI").as(:publisher)
16
+ end
17
+
18
+ # Copublishers: ISO, IEEE, IEC, etc.
19
+ ORGANIZATIONS = %w[ISO IEC IEEE SAE ASME ASTM].freeze
20
+ rule(:copublishers) do
21
+ (str("/") >> space? >> array_to_str(ORGANIZATIONS).as(:copublisher)).repeat(1).as(:copublishers)
22
+ end
23
+
24
+ # Optional "Std" keyword
25
+ rule(:std_keyword) do
26
+ (str("Std") >> space).maybe
27
+ end
28
+
29
+ # Number with optional parts and subparts
30
+ # Examples:
31
+ # - X3.4-1986 (letter prefix, one dot, year)
32
+ # - C63.4-2014 (letter prefix, one dot, year)
33
+ # - C37.06.1-2000 (letter prefix, two dots, year)
34
+ # - C57.12.10-1988 (letter prefix, three dots, year)
35
+ # - N323A-1997 (letter prefix, number, letter suffix, year)
36
+ # - N42.49A-2011 (letter prefix, dot, number, letter suffix, year)
37
+ # - 9899 (just digits)
38
+ # - 802.3-2012 (digits with dot and year)
39
+ # - 802.1b-1995 (digits, dot, digits, letter, year)
40
+ rule(:number_with_part) do
41
+ (
42
+ # Letter prefix with multiple dots and optional letter suffix
43
+ # C37.06.1, C57.12.10, C63.25.1, N323A, N42.49A
44
+ (match["A-Z"].repeat(1) >>
45
+ digits >>
46
+ (str(".") >> digits).repeat(0, 3) >> # Allow up to 3 additional dot-separated parts
47
+ match["A-Z"].maybe >> # Optional letter suffix (A, B, etc.)
48
+ (str("-") >> digits).maybe) | # Optional dash-year part
49
+ # Just digits with optional dots and letter suffix: 9899, 802.3-2012, 802.1b-1995
50
+ (digits >>
51
+ (str(".") >> digits >> match["a-z"].maybe).repeat(0, 2) >> # Dots with optional lowercase letter
52
+ (str("-") >> digits).maybe)
53
+ ).as(:number_with_part)
54
+ end
55
+
56
+ # Date - year only
57
+ rule(:date) do
58
+ str(":") >> year_digits.as(:date)
59
+ end
60
+
61
+ # Language codes
62
+ rule(:language) do
63
+ str("(") >>
64
+ (match["a-z"].repeat(2) >> str(",").maybe).repeat.as(:languages) >>
65
+ str(")")
66
+ end
67
+
68
+ # Main identifier for ANSI with copublishers
69
+ # ANSI/ISO 9899:1990, ANSI/IEEE Std 1-1986
70
+ rule(:identifier_with_copublishers) do
71
+ publisher >> copublishers >>
72
+ space >> std_keyword >>
73
+ number_with_part >>
74
+ date.maybe >> language.maybe
75
+ end
76
+
77
+ # Main identifier for ANSI alone
78
+ # ANSI X3.4-1986, ANSI Std C63.4-1991
79
+ rule(:identifier_sole) do
80
+ publisher >> space >>
81
+ std_keyword >>
82
+ number_with_part >>
83
+ date.maybe >> language.maybe
84
+ end
85
+
86
+ rule(:identifier) do
87
+ identifier_with_copublishers | identifier_sole
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Ansi
5
+ # Scheme configuration for ANSI identifiers
6
+ IDENTIFIER_TYPES = [
7
+ Identifiers::Standard,
8
+ ].freeze
9
+
10
+ Scheme = Pubid::Scheme.new(
11
+ identifiers: IDENTIFIER_TYPES,
12
+ supplement_identifiers: [],
13
+ )
14
+ end
15
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Ansi
5
+ # Single ANSI identifier (non-bundled)
6
+ class SingleIdentifier < Identifier
7
+ # Generate URN for this identifier
8
+ #
9
+ # @return [String] URN representation
10
+
11
+ def to_s(lang: :en)
12
+ [].tap do |parts|
13
+ parts << publisher_portion
14
+ parts << number_portion
15
+ end.compact.join(" ").tap do |s|
16
+ s << language_portion if languages&.any?
17
+ end
18
+ end
19
+
20
+ def publisher_portion
21
+ if copublishers&.any?
22
+ # ANSI/ISO 9899
23
+ ([publisher] + copublishers).map(&:body).join("/")
24
+ else
25
+ # ANSI X3.4
26
+ publisher.body
27
+ end
28
+ end
29
+
30
+ def number_portion
31
+ [
32
+ number.value,
33
+ (part ? "-#{part.value}" : ""),
34
+ (date ? ":#{date.year}" : ""),
35
+ ].join
36
+ end
37
+
38
+ def language_portion
39
+ return "" unless languages&.any?
40
+
41
+ "(#{languages.map(&:code).join(',')})"
42
+ end
43
+ end
44
+ end
45
+ end