pubid 1.15.21 → 2.0.0.alpha.10

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 (863) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.adoc +2044 -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/bipm/update_codes.yaml +9 -0
  18. data/data/ccsds/update_codes.yaml +1 -0
  19. data/data/iec/update_codes.yaml +70 -0
  20. data/data/ieee/update_codes.yaml +210 -0
  21. data/data/iso/update_codes.yaml +21 -0
  22. data/data/nist/series.yaml +155 -0
  23. data/data/nist/update_codes.yaml +122 -0
  24. data/data/plateau/update_codes.yaml +6 -0
  25. data/lib/pubid/adobe/builder.rb +52 -0
  26. data/lib/pubid/adobe/identifier.rb +47 -0
  27. data/lib/pubid/adobe/identifiers/publication.rb +31 -0
  28. data/lib/pubid/adobe/identifiers/tech_note.rb +32 -0
  29. data/lib/pubid/adobe/identifiers.rb +10 -0
  30. data/lib/pubid/adobe/parser.rb +136 -0
  31. data/lib/pubid/adobe/renderer.rb +39 -0
  32. data/lib/pubid/adobe/urn_generator.rb +42 -0
  33. data/lib/pubid/adobe/urn_parser.rb +69 -0
  34. data/lib/pubid/adobe.rb +60 -0
  35. data/lib/pubid/amca/builder.rb +176 -0
  36. data/lib/pubid/amca/identifier.rb +4 -0
  37. data/lib/pubid/amca/identifiers/base.rb +92 -0
  38. data/lib/pubid/amca/identifiers/interpretation.rb +38 -0
  39. data/lib/pubid/amca/identifiers/publication.rb +34 -0
  40. data/lib/pubid/amca/identifiers/standard.rb +20 -0
  41. data/lib/pubid/amca/identifiers.rb +11 -0
  42. data/lib/pubid/amca/parser.rb +153 -0
  43. data/lib/pubid/amca/renderer.rb +82 -0
  44. data/lib/pubid/amca/single_identifier.rb +10 -0
  45. data/lib/pubid/amca/urn_generator.rb +51 -0
  46. data/lib/pubid/amca/urn_parser.rb +28 -0
  47. data/lib/pubid/amca.rb +73 -0
  48. data/lib/pubid/ansi/builder.rb +54 -0
  49. data/lib/pubid/ansi/identifier.rb +31 -0
  50. data/lib/pubid/ansi/identifiers/american_national_standard.rb +13 -0
  51. data/lib/pubid/ansi/identifiers/standard.rb +15 -0
  52. data/lib/pubid/ansi/identifiers.rb +11 -0
  53. data/lib/pubid/ansi/parser.rb +91 -0
  54. data/lib/pubid/ansi/renderer.rb +53 -0
  55. data/lib/pubid/ansi/single_identifier.rb +16 -0
  56. data/lib/pubid/ansi/urn_generator.rb +41 -0
  57. data/lib/pubid/ansi/urn_parser.rb +23 -0
  58. data/lib/pubid/ansi.rb +68 -0
  59. data/lib/pubid/api/builder.rb +58 -0
  60. data/lib/pubid/api/components/code.rb +9 -0
  61. data/lib/pubid/api/identifier.rb +42 -0
  62. data/lib/pubid/api/identifiers/base.rb +12 -0
  63. data/lib/pubid/api/identifiers/bulletin.rb +13 -0
  64. data/lib/pubid/api/identifiers/continuous_operations_standard.rb +13 -0
  65. data/lib/pubid/api/identifiers/mpms.rb +26 -0
  66. data/lib/pubid/api/identifiers/publication.rb +13 -0
  67. data/lib/pubid/api/identifiers/recommended_practice.rb +13 -0
  68. data/lib/pubid/api/identifiers/specification.rb +13 -0
  69. data/lib/pubid/api/identifiers/standard.rb +13 -0
  70. data/lib/pubid/api/identifiers/technical_report.rb +13 -0
  71. data/lib/pubid/api/identifiers/typeless_standard.rb +11 -0
  72. data/lib/pubid/api/identifiers.rb +18 -0
  73. data/lib/pubid/api/parser.rb +140 -0
  74. data/lib/pubid/api/renderer.rb +98 -0
  75. data/lib/pubid/api/single_identifier.rb +24 -0
  76. data/lib/pubid/api/urn_generator.rb +23 -0
  77. data/lib/pubid/api/urn_parser.rb +35 -0
  78. data/lib/pubid/api.rb +68 -0
  79. data/lib/pubid/ashrae/builder.rb +519 -0
  80. data/lib/pubid/ashrae/identifier.rb +8 -0
  81. data/lib/pubid/ashrae/identifiers/addenda_package.rb +42 -0
  82. data/lib/pubid/ashrae/identifiers/addendum.rb +44 -0
  83. data/lib/pubid/ashrae/identifiers/base.rb +119 -0
  84. data/lib/pubid/ashrae/identifiers/combined_addenda.rb +43 -0
  85. data/lib/pubid/ashrae/identifiers/errata.rb +39 -0
  86. data/lib/pubid/ashrae/identifiers/guideline.rb +41 -0
  87. data/lib/pubid/ashrae/identifiers/interpretation.rb +45 -0
  88. data/lib/pubid/ashrae/identifiers/standard.rb +41 -0
  89. data/lib/pubid/ashrae/identifiers.rb +15 -0
  90. data/lib/pubid/ashrae/parser.rb +748 -0
  91. data/lib/pubid/ashrae/renderer.rb +117 -0
  92. data/lib/pubid/ashrae/single_identifier.rb +10 -0
  93. data/lib/pubid/ashrae/supplement_identifier.rb +38 -0
  94. data/lib/pubid/ashrae/urn_generator.rb +57 -0
  95. data/lib/pubid/ashrae/urn_parser.rb +27 -0
  96. data/lib/pubid/ashrae.rb +77 -0
  97. data/lib/pubid/asme/builder.rb +162 -0
  98. data/lib/pubid/asme/components/code.rb +26 -0
  99. data/lib/pubid/asme/identifier.rb +24 -0
  100. data/lib/pubid/asme/identifiers/base.rb +10 -0
  101. data/lib/pubid/asme/identifiers/standard.rb +96 -0
  102. data/lib/pubid/asme/identifiers.rb +10 -0
  103. data/lib/pubid/asme/parser.rb +308 -0
  104. data/lib/pubid/asme/renderer.rb +66 -0
  105. data/lib/pubid/asme/single_identifier.rb +38 -0
  106. data/lib/pubid/asme/urn_generator.rb +133 -0
  107. data/lib/pubid/asme/urn_parser.rb +31 -0
  108. data/lib/pubid/asme.rb +67 -0
  109. data/lib/pubid/astm/builder.rb +166 -0
  110. data/lib/pubid/astm/components/code.rb +42 -0
  111. data/lib/pubid/astm/components.rb +9 -0
  112. data/lib/pubid/astm/identifier.rb +24 -0
  113. data/lib/pubid/astm/identifiers/adjunct.rb +28 -0
  114. data/lib/pubid/astm/identifiers/base.rb +13 -0
  115. data/lib/pubid/astm/identifiers/code_number.rb +81 -0
  116. data/lib/pubid/astm/identifiers/data_series.rb +13 -0
  117. data/lib/pubid/astm/identifiers/iso_dual_published.rb +65 -0
  118. data/lib/pubid/astm/identifiers/manual.rb +23 -0
  119. data/lib/pubid/astm/identifiers/monograph.rb +13 -0
  120. data/lib/pubid/astm/identifiers/research_report.rb +21 -0
  121. data/lib/pubid/astm/identifiers/standard.rb +23 -0
  122. data/lib/pubid/astm/identifiers/technical_report.rb +12 -0
  123. data/lib/pubid/astm/identifiers/work_in_progress.rb +12 -0
  124. data/lib/pubid/astm/identifiers.rb +19 -0
  125. data/lib/pubid/astm/parser.rb +244 -0
  126. data/lib/pubid/astm/renderer.rb +172 -0
  127. data/lib/pubid/astm/single_identifier.rb +47 -0
  128. data/lib/pubid/astm/urn_generator.rb +101 -0
  129. data/lib/pubid/astm/urn_parser.rb +30 -0
  130. data/lib/pubid/astm.rb +55 -0
  131. data/lib/pubid/bipm/builder.rb +163 -0
  132. data/lib/pubid/bipm/identifier.rb +285 -0
  133. data/lib/pubid/bipm/identifiers/committee_document.rb +36 -0
  134. data/lib/pubid/bipm/identifiers/guide.rb +35 -0
  135. data/lib/pubid/bipm/identifiers/meeting.rb +53 -0
  136. data/lib/pubid/bipm/identifiers/mep.rb +33 -0
  137. data/lib/pubid/bipm/identifiers/metrologia_article.rb +48 -0
  138. data/lib/pubid/bipm/identifiers/si_brochure.rb +33 -0
  139. data/lib/pubid/bipm/identifiers.rb +15 -0
  140. data/lib/pubid/bipm/parser.rb +237 -0
  141. data/lib/pubid/bipm/renderer.rb +118 -0
  142. data/lib/pubid/bipm/urn_generator.rb +58 -0
  143. data/lib/pubid/bipm/urn_parser.rb +60 -0
  144. data/lib/pubid/bipm.rb +91 -0
  145. data/lib/pubid/bsi/builder.rb +1495 -0
  146. data/lib/pubid/bsi/components/code.rb +11 -0
  147. data/lib/pubid/bsi/components/date.rb +11 -0
  148. data/lib/pubid/bsi/components/publisher.rb +11 -0
  149. data/lib/pubid/bsi/components/type.rb +11 -0
  150. data/lib/pubid/bsi/identifier.rb +6 -0
  151. data/lib/pubid/bsi/identifiers/addendum_document.rb +30 -0
  152. data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +67 -0
  153. data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +51 -0
  154. data/lib/pubid/bsi/identifiers/aerospace_standard.rb +65 -0
  155. data/lib/pubid/bsi/identifiers/amendment.rb +48 -0
  156. data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +21 -0
  157. data/lib/pubid/bsi/identifiers/british_standard.rb +34 -0
  158. data/lib/pubid/bsi/identifiers/bundled_identifier.rb +40 -0
  159. data/lib/pubid/bsi/identifiers/committee_document.rb +44 -0
  160. data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +84 -0
  161. data/lib/pubid/bsi/identifiers/corrigendum.rb +44 -0
  162. data/lib/pubid/bsi/identifiers/detailed_specification.rb +33 -0
  163. data/lib/pubid/bsi/identifiers/disc.rb +27 -0
  164. data/lib/pubid/bsi/identifiers/draft_document.rb +27 -0
  165. data/lib/pubid/bsi/identifiers/electronic_book.rb +16 -0
  166. data/lib/pubid/bsi/identifiers/expert_commentary.rb +36 -0
  167. data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +35 -0
  168. data/lib/pubid/bsi/identifiers/flex.rb +30 -0
  169. data/lib/pubid/bsi/identifiers/handbook.rb +23 -0
  170. data/lib/pubid/bsi/identifiers/index.rb +30 -0
  171. data/lib/pubid/bsi/identifiers/method.rb +35 -0
  172. data/lib/pubid/bsi/identifiers/national_annex.rb +48 -0
  173. data/lib/pubid/bsi/identifiers/practice_guide.rb +21 -0
  174. data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +27 -0
  175. data/lib/pubid/bsi/identifiers/published_document.rb +27 -0
  176. data/lib/pubid/bsi/identifiers/section.rb +32 -0
  177. data/lib/pubid/bsi/identifiers/set.rb +40 -0
  178. data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
  179. data/lib/pubid/bsi/identifiers/supplement_document.rb +29 -0
  180. data/lib/pubid/bsi/identifiers/supplementary_index.rb +35 -0
  181. data/lib/pubid/bsi/identifiers/technical_specification.rb +34 -0
  182. data/lib/pubid/bsi/identifiers/test_method.rb +35 -0
  183. data/lib/pubid/bsi/identifiers/value_added_publication.rb +37 -0
  184. data/lib/pubid/bsi/identifiers.rb +51 -0
  185. data/lib/pubid/bsi/model.rb +196 -0
  186. data/lib/pubid/bsi/parser.rb +673 -0
  187. data/lib/pubid/bsi/renderer.rb +1064 -0
  188. data/lib/pubid/bsi/single_identifier.rb +141 -0
  189. data/lib/pubid/bsi/urn_generator.rb +92 -0
  190. data/lib/pubid/bsi/urn_parser.rb +52 -0
  191. data/lib/pubid/bsi.rb +282 -0
  192. data/lib/pubid/builder/base.rb +187 -0
  193. data/lib/pubid/bundled_identifier.rb +134 -0
  194. data/lib/pubid/calconnect/builder.rb +38 -0
  195. data/lib/pubid/calconnect/identifier.rb +121 -0
  196. data/lib/pubid/calconnect/identifiers/standard.rb +29 -0
  197. data/lib/pubid/calconnect/identifiers.rb +9 -0
  198. data/lib/pubid/calconnect/parser.rb +54 -0
  199. data/lib/pubid/calconnect/renderer.rb +36 -0
  200. data/lib/pubid/calconnect/urn_generator.rb +33 -0
  201. data/lib/pubid/calconnect/urn_parser.rb +34 -0
  202. data/lib/pubid/calconnect.rb +82 -0
  203. data/lib/pubid/ccsds/builder.rb +57 -0
  204. data/lib/pubid/ccsds/identifier.rb +76 -0
  205. data/lib/pubid/ccsds/identifiers/base.rb +41 -0
  206. data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
  207. data/lib/pubid/ccsds/identifiers/corrigendum.rb +40 -0
  208. data/lib/pubid/ccsds/identifiers.rb +10 -0
  209. data/lib/pubid/ccsds/parser.rb +73 -0
  210. data/lib/pubid/ccsds/single_identifier.rb +77 -0
  211. data/lib/pubid/ccsds/supplement_identifier.rb +37 -0
  212. data/lib/pubid/ccsds/urn_generator.rb +115 -0
  213. data/lib/pubid/ccsds/urn_parser.rb +20 -0
  214. data/lib/pubid/ccsds.rb +64 -0
  215. data/lib/pubid/cen_cenelec/builder.rb +362 -0
  216. data/lib/pubid/cen_cenelec/identifier.rb +38 -0
  217. data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +45 -0
  218. data/lib/pubid/cen_cenelec/identifiers/amendment.rb +19 -0
  219. data/lib/pubid/cen_cenelec/identifiers/base.rb +34 -0
  220. data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +29 -0
  221. data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +28 -0
  222. data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
  223. data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +40 -0
  224. data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +20 -0
  225. data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +99 -0
  226. data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +50 -0
  227. data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +29 -0
  228. data/lib/pubid/cen_cenelec/identifiers/fragment.rb +18 -0
  229. data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
  230. data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +28 -0
  231. data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +28 -0
  232. data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +36 -0
  233. data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
  234. data/lib/pubid/cen_cenelec/parser.rb +144 -0
  235. data/lib/pubid/cen_cenelec/renderer.rb +261 -0
  236. data/lib/pubid/cen_cenelec/single_identifier.rb +49 -0
  237. data/lib/pubid/cen_cenelec/supplement_identifier.rb +47 -0
  238. data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
  239. data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
  240. data/lib/pubid/cen_cenelec.rb +208 -0
  241. data/lib/pubid/cie/builder.rb +524 -0
  242. data/lib/pubid/cie/components/language.rb +58 -0
  243. data/lib/pubid/cie/identifier.rb +33 -0
  244. data/lib/pubid/cie/identifiers/bundle.rb +50 -0
  245. data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
  246. data/lib/pubid/cie/identifiers/conference.rb +37 -0
  247. data/lib/pubid/cie/identifiers/corrigendum.rb +34 -0
  248. data/lib/pubid/cie/identifiers/dual_published.rb +41 -0
  249. data/lib/pubid/cie/identifiers/identical.rb +64 -0
  250. data/lib/pubid/cie/identifiers/joint_published.rb +52 -0
  251. data/lib/pubid/cie/identifiers/proceedings.rb +41 -0
  252. data/lib/pubid/cie/identifiers/standard.rb +93 -0
  253. data/lib/pubid/cie/identifiers/supplement.rb +47 -0
  254. data/lib/pubid/cie/identifiers/tutorial_bundle.rb +24 -0
  255. data/lib/pubid/cie/identifiers.rb +19 -0
  256. data/lib/pubid/cie/parser.rb +396 -0
  257. data/lib/pubid/cie/single_identifier.rb +69 -0
  258. data/lib/pubid/cie/supplement_identifier.rb +39 -0
  259. data/lib/pubid/cie/urn_generator.rb +126 -0
  260. data/lib/pubid/cie/urn_parser.rb +28 -0
  261. data/lib/pubid/cie.rb +83 -0
  262. data/lib/pubid/components/adoption.rb +104 -0
  263. data/lib/pubid/components/code.rb +47 -0
  264. data/lib/pubid/components/date.rb +72 -0
  265. data/lib/pubid/components/edition.rb +35 -0
  266. data/lib/pubid/components/iteration.rb +32 -0
  267. data/lib/pubid/components/language.rb +39 -0
  268. data/lib/pubid/components/locality.rb +19 -0
  269. data/lib/pubid/components/publisher.rb +39 -0
  270. data/lib/pubid/components/relationship.rb +151 -0
  271. data/lib/pubid/components/stage.rb +45 -0
  272. data/lib/pubid/components/supplement.rb +184 -0
  273. data/lib/pubid/components/type.rb +48 -0
  274. data/lib/pubid/components/typed_stage.rb +58 -0
  275. data/lib/pubid/components.rb +19 -0
  276. data/lib/pubid/core/pattern_doc_generator.rb +272 -0
  277. data/lib/pubid/core/update_codes.rb +98 -0
  278. data/lib/pubid/core.rb +8 -0
  279. data/lib/pubid/csa/builder.rb +671 -0
  280. data/lib/pubid/csa/components/code.rb +9 -0
  281. data/lib/pubid/csa/components.rb +9 -0
  282. data/lib/pubid/csa/composite_identifier.rb +38 -0
  283. data/lib/pubid/csa/identifier.rb +570 -0
  284. data/lib/pubid/csa/identifiers/base.rb +10 -0
  285. data/lib/pubid/csa/identifiers/bundled.rb +141 -0
  286. data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
  287. data/lib/pubid/csa/identifiers/cec.rb +66 -0
  288. data/lib/pubid/csa/identifiers/combined.rb +158 -0
  289. data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
  290. data/lib/pubid/csa/identifiers/package.rb +65 -0
  291. data/lib/pubid/csa/identifiers/series.rb +23 -0
  292. data/lib/pubid/csa/identifiers/standard.rb +10 -0
  293. data/lib/pubid/csa/identifiers.rb +17 -0
  294. data/lib/pubid/csa/parser.rb +449 -0
  295. data/lib/pubid/csa/renderer.rb +300 -0
  296. data/lib/pubid/csa/single_identifier.rb +119 -0
  297. data/lib/pubid/csa/urn_generator.rb +87 -0
  298. data/lib/pubid/csa/urn_parser.rb +33 -0
  299. data/lib/pubid/csa/wrapper_identifier.rb +64 -0
  300. data/lib/pubid/csa.rb +80 -0
  301. data/lib/pubid/doi/builder.rb +18 -0
  302. data/lib/pubid/doi/identifier.rb +49 -0
  303. data/lib/pubid/doi/identifiers/resource.rb +30 -0
  304. data/lib/pubid/doi/identifiers.rb +9 -0
  305. data/lib/pubid/doi/parser.rb +52 -0
  306. data/lib/pubid/doi/renderer.rb +13 -0
  307. data/lib/pubid/doi.rb +55 -0
  308. data/lib/pubid/easc/builder.rb +55 -0
  309. data/lib/pubid/easc/identifier.rb +59 -0
  310. data/lib/pubid/easc/identifiers/pmg.rb +20 -0
  311. data/lib/pubid/easc/identifiers/rmg.rb +19 -0
  312. data/lib/pubid/easc/identifiers.rb +10 -0
  313. data/lib/pubid/easc/parser.rb +88 -0
  314. data/lib/pubid/easc/renderer.rb +48 -0
  315. data/lib/pubid/easc/urn_generator.rb +46 -0
  316. data/lib/pubid/easc/urn_parser.rb +57 -0
  317. data/lib/pubid/easc.rb +52 -0
  318. data/lib/pubid/ecma/builder.rb +45 -0
  319. data/lib/pubid/ecma/identifier.rb +147 -0
  320. data/lib/pubid/ecma/identifiers/memento.rb +30 -0
  321. data/lib/pubid/ecma/identifiers/standard.rb +31 -0
  322. data/lib/pubid/ecma/identifiers/technical_report.rb +31 -0
  323. data/lib/pubid/ecma/identifiers.rb +11 -0
  324. data/lib/pubid/ecma/parser.rb +76 -0
  325. data/lib/pubid/ecma/renderer.rb +67 -0
  326. data/lib/pubid/ecma/urn_generator.rb +46 -0
  327. data/lib/pubid/ecma/urn_parser.rb +51 -0
  328. data/lib/pubid/ecma.rb +67 -0
  329. data/lib/pubid/errors.rb +79 -0
  330. data/lib/pubid/etsi/builder.rb +142 -0
  331. data/lib/pubid/etsi/components/code.rb +43 -0
  332. data/lib/pubid/etsi/components/version.rb +32 -0
  333. data/lib/pubid/etsi/components.rb +10 -0
  334. data/lib/pubid/etsi/identifier.rb +4 -0
  335. data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
  336. data/lib/pubid/etsi/identifiers/base.rb +74 -0
  337. data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
  338. data/lib/pubid/etsi/identifiers/etsi_standard.rb +222 -0
  339. data/lib/pubid/etsi/identifiers/supplement_identifier.rb +123 -0
  340. data/lib/pubid/etsi/identifiers.rb +13 -0
  341. data/lib/pubid/etsi/parser.rb +139 -0
  342. data/lib/pubid/etsi/renderer.rb +48 -0
  343. data/lib/pubid/etsi/urn_generator.rb +76 -0
  344. data/lib/pubid/etsi/urn_parser.rb +34 -0
  345. data/lib/pubid/etsi.rb +71 -0
  346. data/lib/pubid/export/auditor.rb +89 -0
  347. data/lib/pubid/export/exporter.rb +33 -0
  348. data/lib/pubid/export/flavor_exporter.rb +250 -0
  349. data/lib/pubid/export/result.rb +97 -0
  350. data/lib/pubid/export.rb +12 -0
  351. data/lib/pubid/format_detector.rb +16 -0
  352. data/lib/pubid/format_registry.rb +42 -0
  353. data/lib/pubid/gb/builder.rb +45 -0
  354. data/lib/pubid/gb/identifier.rb +67 -0
  355. data/lib/pubid/gb/identifiers/standard.rb +34 -0
  356. data/lib/pubid/gb/identifiers.rb +9 -0
  357. data/lib/pubid/gb/parser.rb +63 -0
  358. data/lib/pubid/gb/renderer.rb +35 -0
  359. data/lib/pubid/gb.rb +87 -0
  360. data/lib/pubid/gost/builder.rb +148 -0
  361. data/lib/pubid/gost/identifier.rb +47 -0
  362. data/lib/pubid/gost/identifiers/foreign_reference.rb +25 -0
  363. data/lib/pubid/gost/identifiers/harmonized.rb +39 -0
  364. data/lib/pubid/gost/identifiers/identical_adoption.rb +39 -0
  365. data/lib/pubid/gost/identifiers/interstate_standard.rb +20 -0
  366. data/lib/pubid/gost/identifiers/national_standard.rb +19 -0
  367. data/lib/pubid/gost/identifiers.rb +13 -0
  368. data/lib/pubid/gost/parser.rb +105 -0
  369. data/lib/pubid/gost/renderer.rb +48 -0
  370. data/lib/pubid/gost/urn_generator.rb +46 -0
  371. data/lib/pubid/gost/urn_parser.rb +52 -0
  372. data/lib/pubid/gost.rb +49 -0
  373. data/lib/pubid/iala/builder.rb +102 -0
  374. data/lib/pubid/iala/identifier.rb +90 -0
  375. data/lib/pubid/iala/identifiers/advice.rb +15 -0
  376. data/lib/pubid/iala/identifiers/annex.rb +57 -0
  377. data/lib/pubid/iala/identifiers/general_assembly.rb +19 -0
  378. data/lib/pubid/iala/identifiers/guideline.rb +17 -0
  379. data/lib/pubid/iala/identifiers/letter.rb +16 -0
  380. data/lib/pubid/iala/identifiers/manual.rb +18 -0
  381. data/lib/pubid/iala/identifiers/model_course.rb +17 -0
  382. data/lib/pubid/iala/identifiers/recommendation.rb +17 -0
  383. data/lib/pubid/iala/identifiers/report.rb +16 -0
  384. data/lib/pubid/iala/identifiers/resolution.rb +16 -0
  385. data/lib/pubid/iala/identifiers/standard.rb +17 -0
  386. data/lib/pubid/iala/identifiers.rb +19 -0
  387. data/lib/pubid/iala/parser.rb +138 -0
  388. data/lib/pubid/iala/renderer.rb +36 -0
  389. data/lib/pubid/iala/urn_generator.rb +49 -0
  390. data/lib/pubid/iala/urn_parser.rb +67 -0
  391. data/lib/pubid/iala.rb +71 -0
  392. data/lib/pubid/iana/builder.rb +22 -0
  393. data/lib/pubid/iana/identifier.rb +140 -0
  394. data/lib/pubid/iana/identifiers/registry.rb +69 -0
  395. data/lib/pubid/iana/identifiers.rb +9 -0
  396. data/lib/pubid/iana/parser.rb +38 -0
  397. data/lib/pubid/iana/renderer.rb +32 -0
  398. data/lib/pubid/iana/urn_generator.rb +19 -0
  399. data/lib/pubid/iana/urn_parser.rb +24 -0
  400. data/lib/pubid/iana.rb +69 -0
  401. data/lib/pubid/identifier.rb +1118 -0
  402. data/lib/pubid/identifier_metadata.rb +148 -0
  403. data/lib/pubid/idf/builder.rb +82 -0
  404. data/lib/pubid/idf/identifier.rb +79 -0
  405. data/lib/pubid/idf/identifiers/amendment.rb +28 -0
  406. data/lib/pubid/idf/identifiers/corrigendum.rb +28 -0
  407. data/lib/pubid/idf/identifiers/international_standard.rb +124 -0
  408. data/lib/pubid/idf/identifiers/reviewed_method.rb +101 -0
  409. data/lib/pubid/idf/identifiers.rb +13 -0
  410. data/lib/pubid/idf/parser.rb +144 -0
  411. data/lib/pubid/idf/renderer.rb +84 -0
  412. data/lib/pubid/idf/single_identifier.rb +19 -0
  413. data/lib/pubid/idf/supplement_identifier.rb +35 -0
  414. data/lib/pubid/idf/urn_generator.rb +49 -0
  415. data/lib/pubid/idf/urn_parser.rb +25 -0
  416. data/lib/pubid/idf.rb +89 -0
  417. data/lib/pubid/iec/builder.rb +458 -0
  418. data/lib/pubid/iec/components/code.rb +36 -0
  419. data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
  420. data/lib/pubid/iec/components/publisher.rb +35 -0
  421. data/lib/pubid/iec/components/sheet.rb +32 -0
  422. data/lib/pubid/iec/components/trf_info.rb +38 -0
  423. data/lib/pubid/iec/components/vap_suffix.rb +41 -0
  424. data/lib/pubid/iec/components.rb +14 -0
  425. data/lib/pubid/iec/identifier.rb +341 -0
  426. data/lib/pubid/iec/identifiers/amendment.rb +97 -0
  427. data/lib/pubid/iec/identifiers/base.rb +54 -0
  428. data/lib/pubid/iec/identifiers/component_specification.rb +29 -0
  429. data/lib/pubid/iec/identifiers/conformity_assessment.rb +28 -0
  430. data/lib/pubid/iec/identifiers/consolidated_identifier.rb +85 -0
  431. data/lib/pubid/iec/identifiers/corrigendum.rb +93 -0
  432. data/lib/pubid/iec/identifiers/fragment_identifier.rb +148 -0
  433. data/lib/pubid/iec/identifiers/guide.rb +86 -0
  434. data/lib/pubid/iec/identifiers/international_standard.rb +162 -0
  435. data/lib/pubid/iec/identifiers/interpretation_sheet.rb +103 -0
  436. data/lib/pubid/iec/identifiers/operational_document.rb +29 -0
  437. data/lib/pubid/iec/identifiers/publicly_available_specification.rb +88 -0
  438. data/lib/pubid/iec/identifiers/sheet_identifier.rb +68 -0
  439. data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +30 -0
  440. data/lib/pubid/iec/identifiers/systems_reference_document.rb +29 -0
  441. data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
  442. data/lib/pubid/iec/identifiers/technical_report.rb +114 -0
  443. data/lib/pubid/iec/identifiers/technical_specification.rb +114 -0
  444. data/lib/pubid/iec/identifiers/technology_report.rb +28 -0
  445. data/lib/pubid/iec/identifiers/test_report_form.rb +35 -0
  446. data/lib/pubid/iec/identifiers/vap_identifier.rb +76 -0
  447. data/lib/pubid/iec/identifiers/white_paper.rb +29 -0
  448. data/lib/pubid/iec/identifiers/working_document.rb +62 -0
  449. data/lib/pubid/iec/identifiers.rb +31 -0
  450. data/lib/pubid/iec/parser.rb +443 -0
  451. data/lib/pubid/iec/renderer.rb +267 -0
  452. data/lib/pubid/iec/rendering_style.rb +113 -0
  453. data/lib/pubid/iec/single_identifier.rb +72 -0
  454. data/lib/pubid/iec/supplement_identifier.rb +178 -0
  455. data/lib/pubid/iec/urn_generator.rb +245 -0
  456. data/lib/pubid/iec/urn_parser.rb +128 -0
  457. data/lib/pubid/iec.rb +64 -0
  458. data/lib/pubid/ieee/aiee/builder.rb +85 -0
  459. data/lib/pubid/ieee/aiee/identifier.rb +89 -0
  460. data/lib/pubid/ieee/aiee/parser.rb +130 -0
  461. data/lib/pubid/ieee/aiee.rb +11 -0
  462. data/lib/pubid/ieee/builder.rb +1554 -0
  463. data/lib/pubid/ieee/compaction.rb +121 -0
  464. data/lib/pubid/ieee/components/code.rb +110 -0
  465. data/lib/pubid/ieee/components/draft.rb +147 -0
  466. data/lib/pubid/ieee/components/relationship.rb +13 -0
  467. data/lib/pubid/ieee/components/typed_stage.rb +100 -0
  468. data/lib/pubid/ieee/identifier.rb +5 -0
  469. data/lib/pubid/ieee/identifiers/adopted_standard.rb +81 -0
  470. data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
  471. data/lib/pubid/ieee/identifiers/base.rb +384 -0
  472. data/lib/pubid/ieee/identifiers/code_number.rb +82 -0
  473. data/lib/pubid/ieee/identifiers/conformance_identifier.rb +29 -0
  474. data/lib/pubid/ieee/identifiers/corrigendum.rb +40 -0
  475. data/lib/pubid/ieee/identifiers/csa_dual_published.rb +62 -0
  476. data/lib/pubid/ieee/identifiers/dual_identifier.rb +14 -0
  477. data/lib/pubid/ieee/identifiers/dual_published.rb +79 -0
  478. data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +115 -0
  479. data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +48 -0
  480. data/lib/pubid/ieee/identifiers/joint_development.rb +223 -0
  481. data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +85 -0
  482. data/lib/pubid/ieee/identifiers/nesc/base.rb +127 -0
  483. data/lib/pubid/ieee/identifiers/nesc/draft.rb +43 -0
  484. data/lib/pubid/ieee/identifiers/nesc/edition.rb +32 -0
  485. data/lib/pubid/ieee/identifiers/nesc/handbook.rb +43 -0
  486. data/lib/pubid/ieee/identifiers/nesc/redline.rb +35 -0
  487. data/lib/pubid/ieee/identifiers/nesc/standard.rb +41 -0
  488. data/lib/pubid/ieee/identifiers/nesc.rb +16 -0
  489. data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +14 -0
  490. data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +49 -0
  491. data/lib/pubid/ieee/identifiers/redlined_standard.rb +26 -0
  492. data/lib/pubid/ieee/identifiers/si_standard.rb +38 -0
  493. data/lib/pubid/ieee/identifiers/standard.rb +44 -0
  494. data/lib/pubid/ieee/identifiers/supplement_identifier.rb +42 -0
  495. data/lib/pubid/ieee/identifiers.rb +34 -0
  496. data/lib/pubid/ieee/ire/builder.rb +62 -0
  497. data/lib/pubid/ieee/ire/identifier.rb +73 -0
  498. data/lib/pubid/ieee/ire/parser.rb +91 -0
  499. data/lib/pubid/ieee/ire.rb +11 -0
  500. data/lib/pubid/ieee/nesc/builder.rb +114 -0
  501. data/lib/pubid/ieee/nesc/parser.rb +155 -0
  502. data/lib/pubid/ieee/nesc.rb +10 -0
  503. data/lib/pubid/ieee/parser.rb +1644 -0
  504. data/lib/pubid/ieee/pre_parser.rb +301 -0
  505. data/lib/pubid/ieee/renderer.rb +408 -0
  506. data/lib/pubid/ieee/typed_stages.rb +183 -0
  507. data/lib/pubid/ieee/urn_generator.rb +215 -0
  508. data/lib/pubid/ieee/urn_parser.rb +34 -0
  509. data/lib/pubid/ieee.rb +163 -0
  510. data/lib/pubid/ieee_debug.rb +30 -0
  511. data/lib/pubid/ietf/builder.rb +78 -0
  512. data/lib/pubid/ietf/identifier.rb +5 -0
  513. data/lib/pubid/ietf/identifiers/base.rb +72 -0
  514. data/lib/pubid/ietf/identifiers/bcp.rb +36 -0
  515. data/lib/pubid/ietf/identifiers/fyi.rb +36 -0
  516. data/lib/pubid/ietf/identifiers/internet_draft.rb +45 -0
  517. data/lib/pubid/ietf/identifiers/rfc.rb +27 -0
  518. data/lib/pubid/ietf/identifiers/serialization.rb +51 -0
  519. data/lib/pubid/ietf/identifiers/std.rb +36 -0
  520. data/lib/pubid/ietf/identifiers.rb +14 -0
  521. data/lib/pubid/ietf/parser.rb +61 -0
  522. data/lib/pubid/ietf/renderer.rb +64 -0
  523. data/lib/pubid/ietf/urn_generator.rb +37 -0
  524. data/lib/pubid/ietf/urn_parser.rb +43 -0
  525. data/lib/pubid/ietf.rb +85 -0
  526. data/lib/pubid/iho/builder.rb +37 -0
  527. data/lib/pubid/iho/identifier.rb +7 -0
  528. data/lib/pubid/iho/identifiers/base.rb +75 -0
  529. data/lib/pubid/iho/identifiers/bibliographic.rb +16 -0
  530. data/lib/pubid/iho/identifiers/circular_letter.rb +15 -0
  531. data/lib/pubid/iho/identifiers/miscellaneous.rb +16 -0
  532. data/lib/pubid/iho/identifiers/publication.rb +15 -0
  533. data/lib/pubid/iho/identifiers/standard.rb +15 -0
  534. data/lib/pubid/iho/identifiers.rb +13 -0
  535. data/lib/pubid/iho/parser.rb +68 -0
  536. data/lib/pubid/iho/renderer.rb +30 -0
  537. data/lib/pubid/iho/urn_generator.rb +29 -0
  538. data/lib/pubid/iho/urn_parser.rb +58 -0
  539. data/lib/pubid/iho.rb +77 -0
  540. data/lib/pubid/isbn/builder.rb +44 -0
  541. data/lib/pubid/isbn/check_digit.rb +53 -0
  542. data/lib/pubid/isbn/identifier.rb +81 -0
  543. data/lib/pubid/isbn/identifiers/book.rb +30 -0
  544. data/lib/pubid/isbn/identifiers.rb +9 -0
  545. data/lib/pubid/isbn/parser.rb +45 -0
  546. data/lib/pubid/isbn/renderer.rb +16 -0
  547. data/lib/pubid/isbn.rb +52 -0
  548. data/lib/pubid/iso/builder.rb +316 -0
  549. data/lib/pubid/iso/bundled_identifier.rb +138 -0
  550. data/lib/pubid/iso/combined_identifier.rb +24 -0
  551. data/lib/pubid/iso/components/code.rb +24 -0
  552. data/lib/pubid/iso/components/publisher.rb +62 -0
  553. data/lib/pubid/iso/components.rb +10 -0
  554. data/lib/pubid/iso/format_resolver.rb +45 -0
  555. data/lib/pubid/iso/identifier.rb +318 -0
  556. data/lib/pubid/iso/identifiers/addendum.rb +107 -0
  557. data/lib/pubid/iso/identifiers/amendment.rb +132 -0
  558. data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
  559. data/lib/pubid/iso/identifiers/data.rb +75 -0
  560. data/lib/pubid/iso/identifiers/directives.rb +65 -0
  561. data/lib/pubid/iso/identifiers/directives_supplement.rb +148 -0
  562. data/lib/pubid/iso/identifiers/extract.rb +30 -0
  563. data/lib/pubid/iso/identifiers/guide.rb +99 -0
  564. data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
  565. data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
  566. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +95 -0
  567. data/lib/pubid/iso/identifiers/pas.rb +93 -0
  568. data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
  569. data/lib/pubid/iso/identifiers/supplement.rb +95 -0
  570. data/lib/pubid/iso/identifiers/tc_document.rb +137 -0
  571. data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
  572. data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
  573. data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
  574. data/lib/pubid/iso/identifiers.rb +32 -0
  575. data/lib/pubid/iso/normalizer.rb +89 -0
  576. data/lib/pubid/iso/parser.rb +534 -0
  577. data/lib/pubid/iso/rendering_style.rb +120 -0
  578. data/lib/pubid/iso/single_identifier.rb +60 -0
  579. data/lib/pubid/iso/supplement_identifier.rb +53 -0
  580. data/lib/pubid/iso/urn_generator.rb +313 -0
  581. data/lib/pubid/iso/urn_parser.rb +442 -0
  582. data/lib/pubid/iso/utilities.rb +86 -0
  583. data/lib/pubid/iso.rb +236 -0
  584. data/lib/pubid/itu/builder.rb +360 -0
  585. data/lib/pubid/itu/components/code.rb +84 -0
  586. data/lib/pubid/itu/components/designation.rb +35 -0
  587. data/lib/pubid/itu/components/sector.rb +46 -0
  588. data/lib/pubid/itu/components/series.rb +25 -0
  589. data/lib/pubid/itu/components.rb +12 -0
  590. data/lib/pubid/itu/i18n.rb +9 -0
  591. data/lib/pubid/itu/i18n.yaml +30 -0
  592. data/lib/pubid/itu/identifier.rb +4 -0
  593. data/lib/pubid/itu/identifiers/addendum.rb +15 -0
  594. data/lib/pubid/itu/identifiers/amendment.rb +19 -0
  595. data/lib/pubid/itu/identifiers/annex.rb +83 -0
  596. data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +87 -0
  597. data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +92 -0
  598. data/lib/pubid/itu/identifiers/base.rb +482 -0
  599. data/lib/pubid/itu/identifiers/combined_identifier.rb +121 -0
  600. data/lib/pubid/itu/identifiers/corrigendum.rb +35 -0
  601. data/lib/pubid/itu/identifiers/errata.rb +15 -0
  602. data/lib/pubid/itu/identifiers/handbook.rb +38 -0
  603. data/lib/pubid/itu/identifiers/question.rb +63 -0
  604. data/lib/pubid/itu/identifiers/recommendation.rb +15 -0
  605. data/lib/pubid/itu/identifiers/report.rb +39 -0
  606. data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
  607. data/lib/pubid/itu/identifiers/standard_serialization.rb +58 -0
  608. data/lib/pubid/itu/identifiers/supplement.rb +149 -0
  609. data/lib/pubid/itu/identifiers.rb +25 -0
  610. data/lib/pubid/itu/model.rb +111 -0
  611. data/lib/pubid/itu/parser.rb +679 -0
  612. data/lib/pubid/itu/urn_generator.rb +135 -0
  613. data/lib/pubid/itu/urn_parser.rb +31 -0
  614. data/lib/pubid/itu.rb +78 -0
  615. data/lib/pubid/jcgm/builder.rb +106 -0
  616. data/lib/pubid/jcgm/components/publisher.rb +20 -0
  617. data/lib/pubid/jcgm/components.rb +9 -0
  618. data/lib/pubid/jcgm/identifier.rb +21 -0
  619. data/lib/pubid/jcgm/identifiers/amendment.rb +24 -0
  620. data/lib/pubid/jcgm/identifiers/corrigendum.rb +34 -0
  621. data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
  622. data/lib/pubid/jcgm/identifiers/gum_guide.rb +39 -0
  623. data/lib/pubid/jcgm/identifiers/meeting.rb +47 -0
  624. data/lib/pubid/jcgm/identifiers.rb +13 -0
  625. data/lib/pubid/jcgm/parser.rb +151 -0
  626. data/lib/pubid/jcgm/renderer.rb +89 -0
  627. data/lib/pubid/jcgm/single_identifier.rb +118 -0
  628. data/lib/pubid/jcgm/supplement_identifier.rb +51 -0
  629. data/lib/pubid/jcgm/urn_generator.rb +116 -0
  630. data/lib/pubid/jcgm/urn_parser.rb +177 -0
  631. data/lib/pubid/jcgm.rb +86 -0
  632. data/lib/pubid/jis/builder.rb +116 -0
  633. data/lib/pubid/jis/identifier.rb +194 -0
  634. data/lib/pubid/jis/identifiers/amendment.rb +16 -0
  635. data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
  636. data/lib/pubid/jis/identifiers/explanation.rb +22 -0
  637. data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
  638. data/lib/pubid/jis/identifiers/standard.rb +28 -0
  639. data/lib/pubid/jis/identifiers/technical_report.rb +32 -0
  640. data/lib/pubid/jis/identifiers/technical_specification.rb +32 -0
  641. data/lib/pubid/jis/identifiers.rb +17 -0
  642. data/lib/pubid/jis/parser.rb +135 -0
  643. data/lib/pubid/jis/renderer.rb +69 -0
  644. data/lib/pubid/jis/single_identifier.rb +31 -0
  645. data/lib/pubid/jis/supplement_identifier.rb +50 -0
  646. data/lib/pubid/jis/urn_generator.rb +25 -0
  647. data/lib/pubid/jis/urn_parser.rb +23 -0
  648. data/lib/pubid/jis.rb +69 -0
  649. data/lib/pubid/lutaml/no_store_registration.rb +30 -0
  650. data/lib/pubid/nist/builder.rb +481 -0
  651. data/lib/pubid/nist/caster.rb +1234 -0
  652. data/lib/pubid/nist/circular_supplement_builder.rb +293 -0
  653. data/lib/pubid/nist/components/code.rb +27 -0
  654. data/lib/pubid/nist/components/edition.rb +134 -0
  655. data/lib/pubid/nist/components/issue_number.rb +28 -0
  656. data/lib/pubid/nist/components/part.rb +77 -0
  657. data/lib/pubid/nist/components/stage.rb +53 -0
  658. data/lib/pubid/nist/components/supplement.rb +191 -0
  659. data/lib/pubid/nist/components/translation.rb +42 -0
  660. data/lib/pubid/nist/components/update.rb +103 -0
  661. data/lib/pubid/nist/components/version.rb +35 -0
  662. data/lib/pubid/nist/components/volume.rb +32 -0
  663. data/lib/pubid/nist/components.rb +18 -0
  664. data/lib/pubid/nist/configuration.rb +87 -0
  665. data/lib/pubid/nist/identifier.rb +8 -0
  666. data/lib/pubid/nist/identifiers/base.rb +744 -0
  667. data/lib/pubid/nist/identifiers/circular.rb +80 -0
  668. data/lib/pubid/nist/identifiers/circular_supplement.rb +60 -0
  669. data/lib/pubid/nist/identifiers/commercial_standard.rb +42 -0
  670. data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +58 -0
  671. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +69 -0
  672. data/lib/pubid/nist/identifiers/crpl_report.rb +138 -0
  673. data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
  674. data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +95 -0
  675. data/lib/pubid/nist/identifiers/grant_contractor_report.rb +36 -0
  676. data/lib/pubid/nist/identifiers/handbook.rb +58 -0
  677. data/lib/pubid/nist/identifiers/internal_report.rb +64 -0
  678. data/lib/pubid/nist/identifiers/letter_circular.rb +46 -0
  679. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +74 -0
  680. data/lib/pubid/nist/identifiers/monograph.rb +80 -0
  681. data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
  682. data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
  683. data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
  684. data/lib/pubid/nist/identifiers/report.rb +77 -0
  685. data/lib/pubid/nist/identifiers/special_publication.rb +46 -0
  686. data/lib/pubid/nist/identifiers/technical_note.rb +91 -0
  687. data/lib/pubid/nist/identifiers.rb +33 -0
  688. data/lib/pubid/nist/parser.rb +752 -0
  689. data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
  690. data/lib/pubid/nist/preprocessor.rb +443 -0
  691. data/lib/pubid/nist/renderer.rb +43 -0
  692. data/lib/pubid/nist/router.rb +149 -0
  693. data/lib/pubid/nist/series/base.rb +58 -0
  694. data/lib/pubid/nist/series/crpl.rb +13 -0
  695. data/lib/pubid/nist/series/fips.rb +14 -0
  696. data/lib/pubid/nist/series/ir.rb +57 -0
  697. data/lib/pubid/nist/series/letter_preserving.rb +15 -0
  698. data/lib/pubid/nist/series/mono.rb +19 -0
  699. data/lib/pubid/nist/series/ncstar.rb +20 -0
  700. data/lib/pubid/nist/series.rb +49 -0
  701. data/lib/pubid/nist/supplement_identifier.rb +84 -0
  702. data/lib/pubid/nist/urn_generator.rb +133 -0
  703. data/lib/pubid/nist/urn_parser.rb +67 -0
  704. data/lib/pubid/nist.rb +138 -0
  705. data/lib/pubid/oasis/builder.rb +79 -0
  706. data/lib/pubid/oasis/identifier.rb +160 -0
  707. data/lib/pubid/oasis/identifiers/standard.rb +29 -0
  708. data/lib/pubid/oasis/identifiers.rb +9 -0
  709. data/lib/pubid/oasis/parser.rb +34 -0
  710. data/lib/pubid/oasis/renderer.rb +29 -0
  711. data/lib/pubid/oasis/urn_generator.rb +25 -0
  712. data/lib/pubid/oasis/urn_parser.rb +22 -0
  713. data/lib/pubid/oasis.rb +79 -0
  714. data/lib/pubid/ogc/builder.rb +33 -0
  715. data/lib/pubid/ogc/identifier.rb +81 -0
  716. data/lib/pubid/ogc/identifiers/document.rb +26 -0
  717. data/lib/pubid/ogc/identifiers.rb +10 -0
  718. data/lib/pubid/ogc/parser.rb +40 -0
  719. data/lib/pubid/ogc/renderer.rb +33 -0
  720. data/lib/pubid/ogc/urn_generator.rb +14 -0
  721. data/lib/pubid/ogc/urn_parser.rb +22 -0
  722. data/lib/pubid/ogc.rb +71 -0
  723. data/lib/pubid/oiml/builder.rb +270 -0
  724. data/lib/pubid/oiml/components/code.rb +37 -0
  725. data/lib/pubid/oiml/components.rb +9 -0
  726. data/lib/pubid/oiml/identifier.rb +64 -0
  727. data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
  728. data/lib/pubid/oiml/identifiers/annex.rb +29 -0
  729. data/lib/pubid/oiml/identifiers/basic_publication.rb +15 -0
  730. data/lib/pubid/oiml/identifiers/bulletin.rb +137 -0
  731. data/lib/pubid/oiml/identifiers/code_number.rb +90 -0
  732. data/lib/pubid/oiml/identifiers/document.rb +15 -0
  733. data/lib/pubid/oiml/identifiers/errata.rb +15 -0
  734. data/lib/pubid/oiml/identifiers/expert_report.rb +15 -0
  735. data/lib/pubid/oiml/identifiers/guide.rb +15 -0
  736. data/lib/pubid/oiml/identifiers/recommendation.rb +15 -0
  737. data/lib/pubid/oiml/identifiers/seminar_report.rb +15 -0
  738. data/lib/pubid/oiml/identifiers/vocabulary.rb +15 -0
  739. data/lib/pubid/oiml/identifiers.rb +20 -0
  740. data/lib/pubid/oiml/parser.rb +274 -0
  741. data/lib/pubid/oiml/renderer.rb +232 -0
  742. data/lib/pubid/oiml/single_identifier.rb +113 -0
  743. data/lib/pubid/oiml/supplement_identifier.rb +88 -0
  744. data/lib/pubid/oiml/urn_generator.rb +78 -0
  745. data/lib/pubid/oiml/urn_parser.rb +39 -0
  746. data/lib/pubid/oiml.rb +81 -0
  747. data/lib/pubid/omg/builder.rb +19 -0
  748. data/lib/pubid/omg/identifier.rb +47 -0
  749. data/lib/pubid/omg/identifiers/specification.rb +32 -0
  750. data/lib/pubid/omg/identifiers.rb +9 -0
  751. data/lib/pubid/omg/parser.rb +40 -0
  752. data/lib/pubid/omg/renderer.rb +19 -0
  753. data/lib/pubid/omg.rb +51 -0
  754. data/lib/pubid/parser/common_parse_methods.rb +13 -0
  755. data/lib/pubid/parser/common_parse_rules.rb +56 -0
  756. data/lib/pubid/parser/grammar.rb +74 -0
  757. data/lib/pubid/parser.rb +9 -0
  758. data/lib/pubid/parsers/base.rb +11 -0
  759. data/lib/pubid/parsers/mr_string.rb +206 -0
  760. data/lib/pubid/plateau/builder.rb +54 -0
  761. data/lib/pubid/plateau/identifier.rb +4 -0
  762. data/lib/pubid/plateau/identifiers/annex.rb +16 -0
  763. data/lib/pubid/plateau/identifiers/base.rb +55 -0
  764. data/lib/pubid/plateau/identifiers/handbook.rb +28 -0
  765. data/lib/pubid/plateau/identifiers/technical_report.rb +16 -0
  766. data/lib/pubid/plateau/identifiers.rb +11 -0
  767. data/lib/pubid/plateau/parser.rb +73 -0
  768. data/lib/pubid/plateau/renderer.rb +51 -0
  769. data/lib/pubid/plateau/supplement_identifier.rb +68 -0
  770. data/lib/pubid/plateau/urn_generator.rb +29 -0
  771. data/lib/pubid/plateau/urn_parser.rb +43 -0
  772. data/lib/pubid/plateau.rb +82 -0
  773. data/lib/pubid/prefixes_support.rb +51 -0
  774. data/lib/pubid/renderers/annotator.rb +233 -0
  775. data/lib/pubid/renderers/base.rb +66 -0
  776. data/lib/pubid/renderers/directives_renderer.rb +75 -0
  777. data/lib/pubid/renderers/guide_renderer.rb +26 -0
  778. data/lib/pubid/renderers/human_readable.rb +83 -0
  779. data/lib/pubid/renderers/iwa_renderer.rb +20 -0
  780. data/lib/pubid/renderers/mr_string.rb +64 -0
  781. data/lib/pubid/renderers/supplement_renderer.rb +36 -0
  782. data/lib/pubid/renderers/urn.rb +11 -0
  783. data/lib/pubid/renderers.rb +15 -0
  784. data/lib/pubid/rendering/context.rb +168 -0
  785. data/lib/pubid/rendering/date.rb +27 -0
  786. data/lib/pubid/rendering/language.rb +21 -0
  787. data/lib/pubid/rendering/numbering.rb +42 -0
  788. data/lib/pubid/rendering/publisher.rb +25 -0
  789. data/lib/pubid/rendering/stage.rb +38 -0
  790. data/lib/pubid/rendering/supplement.rb +46 -0
  791. data/lib/pubid/rendering.rb +13 -0
  792. data/lib/pubid/sae/builder.rb +32 -0
  793. data/lib/pubid/sae/components/code.rb +9 -0
  794. data/lib/pubid/sae/components/date.rb +27 -0
  795. data/lib/pubid/sae/components/type.rb +23 -0
  796. data/lib/pubid/sae/components.rb +11 -0
  797. data/lib/pubid/sae/identifier.rb +4 -0
  798. data/lib/pubid/sae/identifiers/base.rb +47 -0
  799. data/lib/pubid/sae/identifiers.rb +8 -0
  800. data/lib/pubid/sae/parser.rb +55 -0
  801. data/lib/pubid/sae/renderer.rb +36 -0
  802. data/lib/pubid/sae/urn_generator.rb +30 -0
  803. data/lib/pubid/sae/urn_parser.rb +36 -0
  804. data/lib/pubid/sae.rb +66 -0
  805. data/lib/pubid/tgpp/builder.rb +41 -0
  806. data/lib/pubid/tgpp/identifier.rb +107 -0
  807. data/lib/pubid/tgpp/identifiers/technical_report.rb +32 -0
  808. data/lib/pubid/tgpp/identifiers/technical_specification.rb +33 -0
  809. data/lib/pubid/tgpp/identifiers.rb +11 -0
  810. data/lib/pubid/tgpp/parser.rb +78 -0
  811. data/lib/pubid/tgpp/renderer.rb +52 -0
  812. data/lib/pubid/tgpp/urn_generator.rb +39 -0
  813. data/lib/pubid/tgpp/urn_parser.rb +30 -0
  814. data/lib/pubid/tgpp.rb +83 -0
  815. data/lib/pubid/type_resolver.rb +59 -0
  816. data/lib/pubid/un/builder.rb +42 -0
  817. data/lib/pubid/un/identifier.rb +40 -0
  818. data/lib/pubid/un/identifiers/document.rb +24 -0
  819. data/lib/pubid/un/identifiers.rb +9 -0
  820. data/lib/pubid/un/parser.rb +25 -0
  821. data/lib/pubid/un/renderer.rb +11 -0
  822. data/lib/pubid/un.rb +46 -0
  823. data/lib/pubid/urn_generator/base.rb +110 -0
  824. data/lib/pubid/urn_parser/base.rb +81 -0
  825. data/lib/pubid/urn_parser/errors.rb +16 -0
  826. data/lib/pubid/urn_parser.rb +14 -0
  827. data/lib/pubid/utils/string_normalizer.rb +196 -0
  828. data/lib/pubid/utils.rb +7 -0
  829. data/lib/pubid/version.rb +3 -1
  830. data/lib/pubid/w3c/builder.rb +55 -0
  831. data/lib/pubid/w3c/identifier.rb +130 -0
  832. data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +31 -0
  833. data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +31 -0
  834. data/lib/pubid/w3c/identifiers/draft_note.rb +31 -0
  835. data/lib/pubid/w3c/identifiers/note.rb +30 -0
  836. data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +31 -0
  837. data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +31 -0
  838. data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +31 -0
  839. data/lib/pubid/w3c/identifiers/recommendation.rb +31 -0
  840. data/lib/pubid/w3c/identifiers/standard.rb +12 -0
  841. data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +31 -0
  842. data/lib/pubid/w3c/identifiers/working_draft.rb +30 -0
  843. data/lib/pubid/w3c/identifiers.rb +25 -0
  844. data/lib/pubid/w3c/parser.rb +43 -0
  845. data/lib/pubid/w3c/renderer.rb +35 -0
  846. data/lib/pubid/w3c/urn_generator.rb +18 -0
  847. data/lib/pubid/w3c/urn_parser.rb +36 -0
  848. data/lib/pubid/w3c.rb +67 -0
  849. data/lib/pubid/xsf/builder.rb +17 -0
  850. data/lib/pubid/xsf/identifier.rb +66 -0
  851. data/lib/pubid/xsf/identifiers/xep.rb +31 -0
  852. data/lib/pubid/xsf/identifiers.rb +9 -0
  853. data/lib/pubid/xsf/parser.rb +25 -0
  854. data/lib/pubid/xsf/renderer.rb +23 -0
  855. data/lib/pubid/xsf/urn_generator.rb +13 -0
  856. data/lib/pubid/xsf/urn_parser.rb +18 -0
  857. data/lib/pubid/xsf.rb +81 -0
  858. data/lib/pubid.rb +551 -13
  859. data/lib/tasks/docs.rake +37 -0
  860. data/lib/tasks/export.rake +39 -0
  861. data/lib/tasks/website-data.json +7546 -0
  862. metadata +875 -171
  863. data/lib/pubid/registry.rb +0 -30
@@ -0,0 +1,1064 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Bsi
5
+ # Human-readable renderer for BSI identifiers.
6
+ #
7
+ # Produces strings like:
8
+ # "BS 4592-0:2006+A1:2012"
9
+ # "BSI Flex 220 v1.0:2024"
10
+ # "NA+A1:2012 to BS EN 1090-2:2018"
11
+ #
12
+ # The renderer is registered as the +:human+ format in the BSI format
13
+ # registry and invoked via +render(format: :human)+.
14
+ #
15
+ # For wrapper types (Consolidated, NationalAnnex, ExpertCommentary, etc.)
16
+ # the renderer composes child identifiers. For simple identifiers it
17
+ # dispatches to type-specific rendering methods.
18
+ class Renderer < ::Pubid::Renderers::Base
19
+ def render(context: nil, **opts)
20
+ @context = context
21
+ id = @id
22
+
23
+ case id
24
+ when Identifiers::AddendumDocument
25
+ render_addendum_document(id, opts)
26
+ when Identifiers::AdoptedEuropeanNorm
27
+ render_adopted_european_norm(id)
28
+ when Identifiers::AdoptedInternationalStandard
29
+ render_adopted_international_standard(id)
30
+ when Identifiers::AerospaceStandard
31
+ render_aerospace_standard(id)
32
+ when Identifiers::Amendment
33
+ render_amendment(id)
34
+ when Identifiers::BritishIndustrialPractice
35
+ render_british_industrial_practice(id)
36
+ when Identifiers::BundledIdentifier
37
+ render_bundled_identifier(id)
38
+ when Identifiers::CommitteeDocument
39
+ render_committee_document(id)
40
+ when Identifiers::ConsolidatedIdentifier
41
+ render_consolidated_identifier(id, opts)
42
+ when Identifiers::Corrigendum
43
+ render_corrigendum(id)
44
+ when Identifiers::DetailedSpecification
45
+ render_detailed_specification(id)
46
+ when Identifiers::Disc
47
+ render_disc(id)
48
+ when Identifiers::DraftDocument
49
+ render_draft_document(id)
50
+ when Identifiers::ElectronicBook
51
+ render_electronic_book(id)
52
+ when Identifiers::ExpertCommentary
53
+ render_expert_commentary(id)
54
+ when Identifiers::ExplanatorySupplement
55
+ render_explanatory_supplement(id)
56
+ when Identifiers::Flex
57
+ render_flex(id)
58
+ when Identifiers::Handbook
59
+ render_handbook(id)
60
+ when Identifiers::Index
61
+ render_index(id)
62
+ when Identifiers::Method
63
+ render_method(id)
64
+ when Identifiers::NationalAnnex
65
+ render_national_annex(id)
66
+ when Identifiers::PracticeGuide
67
+ render_practice_guide(id)
68
+ when Identifiers::PubliclyAvailableSpecification
69
+ render_publicly_available_specification(id)
70
+ when Identifiers::PublishedDocument
71
+ render_published_document(id)
72
+ when Identifiers::Section
73
+ render_section(id)
74
+ when Identifiers::Set
75
+ render_set(id)
76
+ when Identifiers::StandaloneAmendment
77
+ render_standalone_amendment(id)
78
+ when Identifiers::SupplementDocument
79
+ render_supplement_document(id)
80
+ when Identifiers::SupplementaryIndex
81
+ render_supplementary_index(id)
82
+ when Identifiers::TechnicalSpecification
83
+ render_technical_specification(id)
84
+ when Identifiers::TestMethod
85
+ render_test_method(id)
86
+ when Identifiers::ValueAddedPublication
87
+ render_value_added_publication(id, opts)
88
+ when SingleIdentifier
89
+ render_single_identifier(id)
90
+ else
91
+ id.to_s
92
+ end
93
+ end
94
+
95
+ private
96
+
97
+ # Read a value that may be a component or a bare scalar. BSI's own
98
+ # `number`/`part`/`subpart` are plain strings, but a bundle member or an
99
+ # adopted identifier can be a foreign one (ISO, IEC, CEN/CENELEC) whose
100
+ # equivalents are still a Components::Code.
101
+ def component_str(value)
102
+ return "" if value.nil?
103
+
104
+ (value.respond_to?(:render) ? value.render(context: @context) : value).to_s
105
+ end
106
+
107
+ # ------------------------------------------------------------------
108
+ # SingleIdentifier (base BSI identifier)
109
+ # ------------------------------------------------------------------
110
+
111
+ def render_single_identifier(id)
112
+ parts = []
113
+
114
+ parts << id.publisher.to_s if id.publisher
115
+ if id.flex_prefix
116
+ parts << id.flex_prefix
117
+ elsif id.prefix
118
+ parts << id.prefix.to_s
119
+ end
120
+
121
+ if id.number
122
+ number_str = id.number
123
+
124
+ if id.second_number
125
+ second_val = id.second_number.render(context: @context)
126
+ number_str += "/#{second_val}"
127
+ end
128
+
129
+ space_separated = id.space_separated_part
130
+ if id.part
131
+ part_val = id.part
132
+ part_str = part_val.to_s.strip
133
+ separator = space_separated ? " " : "-"
134
+ number_str += "#{separator}#{part_str}"
135
+ end
136
+ if id.subpart
137
+ subpart_val = id.subpart
138
+ subpart_str = subpart_val.to_s.strip
139
+ number_str += "-#{subpart_str}"
140
+ end
141
+
142
+ if id.iteration && !id.iteration.empty?
143
+ number_str += "[#{id.iteration}]"
144
+ end
145
+
146
+ parts << number_str
147
+ end
148
+
149
+ result = parts.join(" ")
150
+
151
+ if id.date
152
+ year_val = id.date.render(context: @context)
153
+ result += ":#{year_val}"
154
+ result += "-#{format('%02d', id.month)}" if id.month
155
+ end
156
+
157
+ result += " v#{id.edition}" if id.edition
158
+
159
+ if id.translation_lang
160
+ result += " (#{id.translation_lang})"
161
+ elsif id.translation_upper
162
+ result += " (#{id.translation_upper})"
163
+ end
164
+
165
+ result
166
+ end
167
+
168
+ # ------------------------------------------------------------------
169
+ # Wrapper types
170
+ # ------------------------------------------------------------------
171
+
172
+ def render_addendum_document(id, opts)
173
+ result = id.base.to_s(**opts)
174
+
175
+ base_has_year = id.base.to_s =~ /:(\d{4})$/
176
+
177
+ sep = if id.separator == ":"
178
+ ":"
179
+ elsif base_has_year && id.base.to_s !~ /:\d{4}:/
180
+ " "
181
+ else
182
+ id.separator
183
+ end
184
+
185
+ result += sep
186
+ result += "Addendum"
187
+
188
+ if id.addendum_type.empty?
189
+ # No type prefix
190
+ else
191
+ result += " #{id.addendum_type}"
192
+ end
193
+ result += " "
194
+ result += " "
195
+
196
+ result += id.addendum_number.to_s
197
+ result += ":#{id.addendum_year}" if id.addendum_year
198
+
199
+ result
200
+ end
201
+
202
+ def render_adopted_european_norm(id)
203
+ prefix = case id.publisher
204
+ when Components::Publisher
205
+ id.publisher.render(context: @context)
206
+ when Array
207
+ id.publisher.join("/")
208
+ when String
209
+ id.publisher
210
+ else
211
+ "BS"
212
+ end
213
+
214
+ result = prefix
215
+ result += " #{id.adopted_identifier}" if id.adopted_identifier
216
+ result += " ED#{id.edition}" if id.edition
217
+
218
+ result += " (R#{id.reaffirmation_year})" if id.reaffirmation_year
219
+
220
+ result = render_translation(result, id)
221
+
222
+ result = render_expert_commentary_suffix(result, id)
223
+
224
+ result
225
+ end
226
+
227
+ def render_adopted_international_standard(id)
228
+ prefix = case id.publisher
229
+ when Components::Publisher
230
+ id.publisher.render(context: @context)
231
+ when Array
232
+ id.publisher.join("/")
233
+ when String
234
+ id.publisher
235
+ else
236
+ "BS"
237
+ end
238
+
239
+ result = prefix
240
+ result += " #{id.adopted_identifier}" if id.adopted_identifier
241
+ result += " ED#{id.edition}" if id.edition
242
+
243
+ result += " (R#{id.reaffirmation_year})" if id.reaffirmation_year
244
+
245
+ if id.translation_lang
246
+ result += " (#{id.translation_lang})"
247
+ elsif id.translation_upper
248
+ result += " (#{id.translation_upper})"
249
+ end
250
+
251
+ result = render_expert_commentary_suffix(result, id)
252
+
253
+ result
254
+ end
255
+
256
+ def render_aerospace_standard(id)
257
+ parts = []
258
+ parts << "BS"
259
+ parts << id.prefix if id.prefix
260
+
261
+ if id.number
262
+ number_str = id.number
263
+
264
+ if id.part
265
+ part_val = id.part
266
+ number_str += "-#{part_val}"
267
+ end
268
+ if id.subpart
269
+ subpart_val = id.subpart
270
+ number_str += "-#{subpart_val}"
271
+ end
272
+
273
+ parts << number_str
274
+ end
275
+
276
+ result = parts.join(" ")
277
+
278
+ if id.edition&.match?(/^[a-zA-Z]$/)
279
+ result += id.edition
280
+ end
281
+
282
+ if id.date
283
+ year_val = id.date.render(context: @context)
284
+ result += ":#{year_val}"
285
+ result += "-#{format('%02d', id.month)}" if id.month
286
+ end
287
+
288
+ if id.edition && !id.edition.match?(/^[a-zA-Z]$/)
289
+ result += " v#{id.edition}"
290
+ end
291
+
292
+ if id.translation_lang
293
+ result += " (#{id.translation_lang})"
294
+ elsif id.translation_upper
295
+ result += " (#{id.translation_upper})"
296
+ end
297
+
298
+ result
299
+ end
300
+
301
+ def render_amendment(id)
302
+ base = id.base ? id.base.to_s : ""
303
+
304
+ if id.amd_suffix_form
305
+ # Trailing " AMD5" / " AMD AA" suffix form
306
+ suffix = if id.amendment_number&.match?(/^[A-Z]+$/)
307
+ " AMD #{id.amendment_number}"
308
+ else
309
+ " AMD#{id.amendment_number}"
310
+ end
311
+ base.empty? ? suffix.lstrip : "#{base}#{suffix}"
312
+ else
313
+ # Compact "+A5" / "/A5" join form, with an optional ":year"
314
+ compact = "#{id.separator}A#{id.amendment_number}"
315
+ compact += ":#{id.amendment_year}" if id.amendment_year
316
+ "#{base}#{compact}"
317
+ end
318
+ end
319
+
320
+ def render_british_industrial_practice(id)
321
+ result = "BIP #{id.number}"
322
+ result += ":#{id.date.render(context: @context)}" if id.date
323
+ result
324
+ end
325
+
326
+ def render_bundled_identifier(id)
327
+ return "" if id.identifiers.nil? || id.identifiers.empty?
328
+
329
+ if id.bundle_type
330
+ base_id = id.identifiers.first
331
+ parts_list = id.identifiers[1..].map do |idd|
332
+ part_val = idd.class.attributes.key?(:part) ? idd.part : nil
333
+ if part_val
334
+ # A bundle member may be a foreign identifier (ISO, CEN/CENELEC),
335
+ # whose `part` is still a Components::Code, so read through
336
+ # whichever shape it holds.
337
+ component_str(part_val)
338
+ else
339
+ idd.to_s
340
+ end
341
+ end.join(" and ")
342
+
343
+ result = "#{base_id.to_s.sub(/:.*$/, '')}:#{id.bundle_type} #{parts_list}"
344
+ result += ":#{id.common_year.render(context: @context)}" if id.common_year
345
+ return result
346
+ end
347
+
348
+ parts = []
349
+
350
+ id.identifiers.each_with_index do |idd, i|
351
+ explicit_prefix = idd.explicit_prefix
352
+ explicit_publisher = idd.explicit_publisher
353
+
354
+ if i.zero?
355
+ parts << idd.to_s
356
+ elsif explicit_publisher
357
+ parts << idd.to_s
358
+ elsif explicit_prefix
359
+ abbrev_str = ""
360
+ prefix = idd.class.attributes.key?(:prefix) ? idd.prefix : nil
361
+ if prefix && !prefix.to_s.empty?
362
+ abbrev_str = prefix.to_s
363
+ end
364
+ if idd.number
365
+ number_val = idd.number
366
+ abbrev_str += " " if !abbrev_str.empty?
367
+ abbrev_str += number_val.to_s
368
+ end
369
+ if idd.part
370
+ part_val = idd.part
371
+ abbrev_str += "-#{part_val}"
372
+ end
373
+ parts << abbrev_str
374
+ else
375
+ abbrev_str = ""
376
+ if idd.number
377
+ number_val = idd.number
378
+ abbrev_str = number_val.to_s
379
+ end
380
+ if idd.part
381
+ part_val = idd.part
382
+ abbrev_str += "-#{part_val}"
383
+ end
384
+ parts << abbrev_str
385
+ end
386
+
387
+ if i < id.identifiers.length - 1
388
+ sep = id.separators[i] || " and "
389
+ parts << sep
390
+ end
391
+ end
392
+
393
+ result = parts.join
394
+
395
+ if id.common_year && !result.match?(/:#{id.common_year.render(context: @context)}$/)
396
+ result += ":#{id.common_year.render(context: @context)}"
397
+ end
398
+
399
+ result
400
+ end
401
+
402
+ def render_committee_document(id)
403
+ year_str = if id.date
404
+ id.date.render(context: @context).to_s[-2, 2]
405
+ else
406
+ "00"
407
+ end
408
+
409
+ "#{year_str}/#{id.number} DC"
410
+ end
411
+
412
+ def render_consolidated_identifier(id, opts)
413
+ base_id = id.identifiers.first
414
+
415
+ base_str = base_id.to_s
416
+ result = base_str.sub(/ ExComm \(.*?\)$/, "")
417
+ .sub(/ ExComm$/, "")
418
+ .sub(/ - TC$/, "")
419
+ .sub(/ PDF$/, "")
420
+ .sub(/ \([A-Z][a-z]+\)$/, "")
421
+
422
+ id.identifiers[1..].each do |idd|
423
+ if idd.is_a?(Identifiers::Amendment)
424
+ if idd.amd_suffix_form
425
+ result += if idd.amendment_number&.match?(/^[A-Z]+$/)
426
+ " AMD #{idd.amendment_number}"
427
+ else
428
+ " AMD#{idd.amendment_number}"
429
+ end
430
+ else
431
+ sep = idd.separator || "+"
432
+ result += "#{sep}A#{idd.amendment_number}"
433
+ result += ":#{idd.amendment_year}" if idd.amendment_year
434
+ end
435
+ elsif idd.is_a?(Identifiers::Corrigendum)
436
+ sep = idd.separator || "+"
437
+ result += "#{sep}C"
438
+ result += idd.corrigendum_number.to_s if idd.corrigendum_number
439
+ result += ":#{idd.corrigendum_year}" if idd.corrigendum_year
440
+ else
441
+ result += idd.to_s
442
+ end
443
+ end
444
+
445
+ if base_id.is_a?(Pubid::Identifier)
446
+ base_attrs = base_id.class.attributes
447
+ ec = base_attrs.key?(:expert_commentary) ? base_id.expert_commentary : nil
448
+ if ec
449
+ ect = base_attrs.key?(:expert_commentary_topic) ? base_id.expert_commentary_topic : nil
450
+ result += ect ? " ExComm (#{ect})" : " ExComm"
451
+ end
452
+
453
+ tc = base_attrs.key?(:tracked_changes) ? base_id.tracked_changes : nil
454
+ result += " - TC" if tc
455
+
456
+ tl = base_attrs.key?(:translation_lang) ? base_id.translation_lang : nil
457
+ if tl
458
+ ts_type = base_attrs.key?(:translation_suffix_type) ? base_id.translation_suffix_type : nil
459
+ result += if ts_type == "version"
460
+ " (#{tl} version)"
461
+ elsif ts_type == "Translation"
462
+ " (#{tl} Translation)"
463
+ else
464
+ " (#{tl})"
465
+ end
466
+ else
467
+ tu = base_attrs.key?(:translation_upper) ? base_id.translation_upper : nil
468
+ if tu
469
+ ts_type = base_attrs.key?(:translation_suffix_type) ? base_id.translation_suffix_type : nil
470
+ result += if ts_type == "Translation"
471
+ " (#{tu} Translation)"
472
+ else
473
+ " (#{tu})"
474
+ end
475
+ end
476
+ end
477
+
478
+ ry = base_attrs.key?(:reaffirmation_year) ? base_id.reaffirmation_year : nil
479
+ result += " (R#{ry})" if ry
480
+ end
481
+
482
+ result
483
+ end
484
+
485
+ def render_corrigendum(id)
486
+ result = id.base ? id.base.to_s : ""
487
+ result += "#{id.separator}C"
488
+ result += id.corrigendum_number.to_s if id.corrigendum_number
489
+ result += ":#{id.corrigendum_year}" if id.corrigendum_year
490
+ result
491
+ end
492
+
493
+ def render_detailed_specification(id)
494
+ parts = []
495
+ parts << "BS"
496
+
497
+ if id.number
498
+ number_str = id.number
499
+ parts << number_str
500
+ end
501
+
502
+ if id.spec_code
503
+ code_val = id.spec_code.render(context: @context)
504
+ result = "#{parts.join(' ')} #{code_val}"
505
+ else
506
+ result = parts.join(" ")
507
+ end
508
+
509
+ if id.date
510
+ year_val = id.date.render(context: @context)
511
+ result += ":#{year_val}"
512
+ end
513
+
514
+ result
515
+ end
516
+
517
+ def render_disc(id)
518
+ parts = []
519
+ parts << "DISC"
520
+
521
+ if id.number
522
+ number_str = id.number
523
+ if id.part
524
+ part_val = id.part
525
+ number_str += "-#{part_val.to_s.strip}"
526
+ end
527
+ parts << "PD #{number_str}"
528
+ end
529
+
530
+ result = parts.join(" ")
531
+
532
+ result += ":#{id.date}" if id.date
533
+
534
+ result
535
+ end
536
+
537
+ def render_draft_document(id)
538
+ parts = []
539
+
540
+ type_abbr = id.type&.abbr || "DD"
541
+ parts << type_abbr
542
+
543
+ if id.number
544
+ number_str = id.number
545
+
546
+ if id.part
547
+ part_val = id.part
548
+ number_str += "-#{part_val.to_s.strip}"
549
+ end
550
+ if id.subpart
551
+ subpart_val = id.subpart
552
+ number_str += "-#{subpart_val.to_s.strip}"
553
+ end
554
+
555
+ parts << number_str
556
+ end
557
+
558
+ result = parts.join(" ")
559
+
560
+ if id.date
561
+ year_val = id.date.render(context: @context)
562
+ result += ":#{year_val}"
563
+ end
564
+
565
+ result += " v#{id.edition}" if id.edition
566
+
567
+ result = render_translation(result, id)
568
+
569
+ result
570
+ end
571
+
572
+ def render_electronic_book(id)
573
+ parts = []
574
+ parts << "EP"
575
+
576
+ if id.number
577
+ number_str = id.number
578
+
579
+ if id.part
580
+ part_val = id.part
581
+ number_str += "-#{part_val.to_s.strip}"
582
+ end
583
+ if id.subpart
584
+ subpart_val = id.subpart
585
+ number_str += "-#{subpart_val.to_s.strip}"
586
+ end
587
+
588
+ parts << number_str
589
+ end
590
+
591
+ result = parts.join(" ")
592
+
593
+ if id.date
594
+ year_val = id.date.render(context: @context)
595
+ result += ":#{year_val}"
596
+ end
597
+
598
+ result += " Version #{id.edition}" if id.edition
599
+
600
+ result
601
+ end
602
+
603
+ def render_expert_commentary(id)
604
+ base_str = id.base.to_s
605
+ base_str = base_str.sub(/ (Expert Commentary|ExComm(\s*\(.*\))?)$/, "")
606
+
607
+ case id.format
608
+ when "full"
609
+ "#{base_str} Expert Commentary"
610
+ when "abbr_with_topic"
611
+ "#{base_str} ExComm (#{id.topic})"
612
+ else
613
+ "#{base_str} ExComm"
614
+ end
615
+ end
616
+
617
+ def render_explanatory_supplement(id)
618
+ parts = []
619
+ parts << "BS"
620
+
621
+ if id.number
622
+ number_str = id.number
623
+
624
+ if id.part
625
+ part_val = id.part
626
+ number_str += "-#{part_val}"
627
+ end
628
+ if id.subpart
629
+ subpart_val = id.subpart
630
+ number_str += "-#{subpart_val}"
631
+ end
632
+
633
+ parts << number_str
634
+ end
635
+
636
+ result = parts.join(" ")
637
+
638
+ if id.date
639
+ year_val = id.date.render(context: @context)
640
+ result += ":Explanatory Supplement:#{year_val}"
641
+ result += "-#{format('%02d', id.month)}" if id.month
642
+ end
643
+
644
+ result
645
+ end
646
+
647
+ def render_flex(id)
648
+ parts = []
649
+ parts << "BSI Flex"
650
+
651
+ if id.number
652
+ number_str = id.number
653
+ if id.part
654
+ part_val = id.part
655
+ number_str += "-#{part_val}"
656
+ end
657
+ if id.subpart
658
+ subpart_val = id.subpart
659
+ number_str += "-#{subpart_val}"
660
+ end
661
+ parts << number_str
662
+ end
663
+
664
+ result = parts.join(" ")
665
+
666
+ result += " v#{id.edition}" if id.edition
667
+
668
+ if id.date
669
+ year_val = id.date.render(context: @context)
670
+ result += ":#{year_val}"
671
+ result += "-#{format('%02d', id.month)}" if id.month
672
+ end
673
+
674
+ result
675
+ end
676
+
677
+ def render_handbook(id)
678
+ abbr = id.original_abbr || "Handbook"
679
+
680
+ number_str = id.number
681
+ if id.part
682
+ part_val = id.part
683
+ number_str += "-#{part_val.to_s.strip}"
684
+ end
685
+
686
+ result = "#{abbr} #{number_str}"
687
+ result += ":#{id.date.render(context: @context)}" if id.date
688
+ result
689
+ end
690
+
691
+ def render_index(id)
692
+ parts = []
693
+ parts << id.publisher.to_s if id.publisher
694
+
695
+ if id.number
696
+ number_str = id.number
697
+ parts << number_str
698
+ end
699
+
700
+ result = parts.join(" ")
701
+
702
+ if id.issue_number
703
+ result += " Index Issue #{id.issue_number}"
704
+ elsif id.index_format == "colon"
705
+ result += ":Index"
706
+ else
707
+ result += " Index"
708
+ end
709
+
710
+ if id.date
711
+ year_val = id.date.render(context: @context)
712
+ result += ":#{year_val}"
713
+ end
714
+
715
+ result
716
+ end
717
+
718
+ def render_method(id)
719
+ parts = []
720
+ parts << id.publisher.to_s if id.publisher
721
+
722
+ if id.number
723
+ number_str = id.number
724
+ if id.part
725
+ part_val = id.part
726
+ number_str += "-#{part_val}"
727
+ end
728
+ parts << number_str
729
+ end
730
+
731
+ result = parts.join(" ")
732
+
733
+ if id.method_to
734
+ result += ":Methods #{id.method_code} to #{id.method_to}"
735
+ elsif id.method_and
736
+ result += ":Methods #{id.method_code} and #{id.method_and}"
737
+ else
738
+ method_word = id.is_plural ? "Methods" : "Method"
739
+ result += ":#{method_word} #{id.method_code}"
740
+ end
741
+
742
+ if id.date
743
+ year_val = id.date.render(context: @context)
744
+ result += ":#{year_val}"
745
+ end
746
+
747
+ result
748
+ end
749
+
750
+ def render_national_annex(id)
751
+ result = "NA"
752
+
753
+ if id.na_supplements&.any?
754
+ id.na_supplements.each do |supp|
755
+ if supp.is_a?(Identifiers::Amendment)
756
+ result += "+A#{supp.amendment_number}:#{supp.amendment_year}"
757
+ elsif supp.is_a?(Identifiers::Corrigendum)
758
+ result += "+C#{supp.corrigendum_number}:#{supp.corrigendum_year}"
759
+ end
760
+ end
761
+ end
762
+
763
+ result += " to "
764
+
765
+ result += if id.base_doc
766
+ id.base_doc.to_s
767
+ else
768
+ render_single_identifier(id)
769
+ end
770
+
771
+ result
772
+ end
773
+
774
+ def render_practice_guide(id)
775
+ result = "PP #{id.number}"
776
+ result += ":#{id.date.render(context: @context)}" if id.date
777
+ result
778
+ end
779
+
780
+ def render_publicly_available_specification(id)
781
+ parts = []
782
+ type_abbr = id.type&.abbr || "PAS"
783
+ parts << type_abbr
784
+
785
+ if id.number
786
+ number_str = id.number
787
+
788
+ if id.second_number
789
+ second_val = id.second_number.render(context: @context)
790
+ number_str += "/#{second_val}"
791
+ end
792
+
793
+ if id.part
794
+ part_val = id.part
795
+ number_str += "-#{part_val.to_s.strip}"
796
+ end
797
+ if id.subpart
798
+ subpart_val = id.subpart
799
+ number_str += "-#{subpart_val.to_s.strip}"
800
+ end
801
+
802
+ parts << number_str
803
+ end
804
+
805
+ result = parts.join(" ")
806
+
807
+ if id.date
808
+ year_val = id.date.render(context: @context)
809
+ result += ":#{year_val}"
810
+ result += "-#{format('%02d', id.month)}" if id.month
811
+ end
812
+
813
+ result += " v#{id.edition}" if id.edition
814
+
815
+ result = render_translation(result, id)
816
+
817
+ result
818
+ end
819
+
820
+ def render_published_document(id)
821
+ parts = []
822
+ type_abbr = id.type&.abbr || "PD"
823
+ parts << type_abbr
824
+
825
+ if id.number
826
+ number_str = id.number
827
+
828
+ if id.second_number
829
+ second_val = id.second_number.render(context: @context)
830
+ number_str += "/#{second_val}"
831
+ end
832
+
833
+ if id.part
834
+ part_val = id.part
835
+ number_str += "-#{part_val.to_s.strip}"
836
+ end
837
+ if id.subpart
838
+ subpart_val = id.subpart
839
+ number_str += "-#{subpart_val.to_s.strip}"
840
+ end
841
+
842
+ parts << number_str
843
+ end
844
+
845
+ result = parts.join(" ")
846
+
847
+ if id.date
848
+ year_val = id.date.render(context: @context)
849
+ result += ":#{year_val}"
850
+ result += "-#{format('%02d', id.month)}" if id.month
851
+ end
852
+
853
+ result += " v#{id.edition}" if id.edition
854
+
855
+ result = render_translation(result, id)
856
+
857
+ result
858
+ end
859
+
860
+ def render_section(id)
861
+ parts = []
862
+ parts << id.publisher.to_s if id.publisher
863
+
864
+ if id.number
865
+ number_str = id.number
866
+ parts << number_str
867
+ end
868
+
869
+ result = parts.join(" ")
870
+
871
+ if id.section_format == "colon"
872
+ result += ":Section #{id.section_id}"
873
+ else
874
+ result += " Section #{id.section_id}"
875
+ end
876
+
877
+ if id.date
878
+ year_val = id.date.render(context: @context)
879
+ result += ":#{year_val}"
880
+ end
881
+
882
+ result
883
+ end
884
+
885
+ def render_set(id)
886
+ return "" if id.identifiers.nil? || id.identifiers.empty?
887
+
888
+ parts = []
889
+ id.identifiers.each_with_index do |idd, i|
890
+ parts << idd.to_s
891
+ if i < id.identifiers.length - 1
892
+ parts << " + "
893
+ end
894
+ end
895
+
896
+ parts.join
897
+ end
898
+
899
+ def render_standalone_amendment(id)
900
+ base = if id.corrigendum
901
+ "AMD Corrigendum #{id.number}"
902
+ else
903
+ "AMD #{id.number}"
904
+ end
905
+
906
+ id.parenthesized ? "(#{base})" : base
907
+ end
908
+
909
+ def render_supplement_document(id)
910
+ base_str = id.base.to_s
911
+
912
+ if id.reverse_format
913
+ supplement_str = if id.supplement_type == "No."
914
+ "Supplement No. #{id.supplement_number} (#{id.supplement_year})"
915
+ else
916
+ "Supplement #{id.supplement_number} (#{id.supplement_year})"
917
+ end
918
+ "#{supplement_str} to #{base_str}"
919
+ else
920
+ supplement_str = if id.supplement_type == "No."
921
+ "#{id.separator}Supplement No. #{id.supplement_number}:#{id.supplement_year}"
922
+ else
923
+ "#{id.separator}Supplement #{id.supplement_number}:#{id.supplement_year}"
924
+ end
925
+ "#{base_str}#{supplement_str}"
926
+ end
927
+ end
928
+
929
+ def render_supplementary_index(id)
930
+ parts = []
931
+ parts << "BS"
932
+
933
+ if id.number
934
+ number_str = id.number
935
+
936
+ if id.part
937
+ part_val = id.part
938
+ number_str += "-#{part_val}"
939
+ end
940
+ if id.subpart
941
+ subpart_val = id.subpart
942
+ number_str += "-#{subpart_val}"
943
+ end
944
+
945
+ parts << number_str
946
+ end
947
+
948
+ result = parts.join(" ")
949
+
950
+ if id.date
951
+ year_val = id.date.render(context: @context)
952
+ result += " Supplementary Index:#{year_val}"
953
+ result += "-#{format('%02d', id.month)}" if id.month
954
+ end
955
+
956
+ result
957
+ end
958
+
959
+ def render_technical_specification(id)
960
+ parts = []
961
+ parts << "TS"
962
+
963
+ if id.number
964
+ number_str = id.number
965
+
966
+ if id.part
967
+ part_val = id.part
968
+ number_str += "-#{part_val}"
969
+ end
970
+ if id.subpart
971
+ subpart_val = id.subpart
972
+ number_str += "-#{subpart_val}"
973
+ end
974
+
975
+ parts << number_str
976
+ end
977
+
978
+ result = parts.join(" ")
979
+
980
+ if id.date
981
+ year_val = id.date.render(context: @context)
982
+ result += ":#{year_val}"
983
+ result += "-#{format('%02d', id.month)}" if id.month
984
+ end
985
+
986
+ result
987
+ end
988
+
989
+ def render_test_method(id)
990
+ parts = []
991
+ parts << "BS"
992
+
993
+ if id.number
994
+ number_str = id.number
995
+ parts << number_str
996
+ end
997
+
998
+ result = parts.join(" ")
999
+
1000
+ if id.test_series && id.test_id
1001
+ result += ":#{id.test_series}:#{id.test_id}"
1002
+ end
1003
+
1004
+ if id.date
1005
+ year_val = id.date.render(context: @context)
1006
+ result += ":#{year_val}"
1007
+ end
1008
+
1009
+ result
1010
+ end
1011
+
1012
+ def render_value_added_publication(id, opts)
1013
+ base_str = id.base.to_s(**opts)
1014
+
1015
+ case id.format
1016
+ when "TC"
1017
+ "#{base_str} - TC"
1018
+ when "PDF"
1019
+ "#{base_str} PDF"
1020
+ when "BOOK"
1021
+ "#{base_str} BOOK"
1022
+ else
1023
+ base_str
1024
+ end
1025
+ end
1026
+
1027
+ # ------------------------------------------------------------------
1028
+ # Shared helpers
1029
+ # ------------------------------------------------------------------
1030
+
1031
+ def render_translation(result, id)
1032
+ if id.translation_lang
1033
+ suffix_type = id.translation_suffix_type if id.class.attributes.key?(:translation_suffix_type)
1034
+ result += if suffix_type == "version"
1035
+ " (#{id.translation_lang} version)"
1036
+ elsif suffix_type == "Translation"
1037
+ " (#{id.translation_lang} Translation)"
1038
+ else
1039
+ " (#{id.translation_lang})"
1040
+ end
1041
+ elsif id.translation_upper
1042
+ suffix_type = id.translation_suffix_type if id.class.attributes.key?(:translation_suffix_type)
1043
+ result += if suffix_type == "Translation"
1044
+ " (#{id.translation_upper} Translation)"
1045
+ else
1046
+ " (#{id.translation_upper})"
1047
+ end
1048
+ end
1049
+ result
1050
+ end
1051
+
1052
+ def render_expert_commentary_suffix(result, id)
1053
+ if id.expert_commentary
1054
+ if id.expert_commentary_topic
1055
+ result += " ExComm (#{id.expert_commentary_topic})"
1056
+ else
1057
+ result += " ExComm"
1058
+ end
1059
+ end
1060
+ result
1061
+ end
1062
+ end
1063
+ end
1064
+ end