pubid 1.15.19 → 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,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Renderers
5
+ class GuideRenderer < HumanReadable
6
+ private
7
+
8
+ def render_publisher_and_stage(context)
9
+ pub_str = @id.publisher.render(context:) if @id.publisher
10
+ stage_str = @id.typed_stage.render(context:) if @id.typed_stage
11
+
12
+ if stage_str && !stage_str.empty?
13
+ "#{pub_str} #{stage_str}"
14
+ else
15
+ pub_str
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Renderers
5
+ class HumanReadable < Base
6
+ def render(context:, with_edition: false)
7
+ parts = []
8
+ parts << render_publisher_and_stage(context)
9
+ parts << render_number_portion(context)
10
+ parts << render_edition_portion(context) if with_edition
11
+ result = parts.compact.join(" ")
12
+ result << render_language_portion(context, with_edition: with_edition)
13
+ result << " (all parts)" if @id.all_parts
14
+ result
15
+ end
16
+
17
+ private
18
+
19
+ def render_publisher_and_stage(context)
20
+ pub_str = @id.publisher.render(context:) if @id.publisher
21
+ stage_str = @id.typed_stage.render(context:) if @id.typed_stage
22
+
23
+ if stage_str && !stage_str.empty?
24
+ has_copub = @id.publisher&.copublished?
25
+ sep = has_copub ? " " : "/"
26
+ "#{pub_str}#{sep}#{stage_str}"
27
+ else
28
+ pub_str
29
+ end
30
+ end
31
+
32
+ def render_number_portion(context)
33
+ parts = []
34
+ parts << @id.number.render(context:) if @id.number
35
+ parts << "-#{@id.part.render(context:)}" if @id.part
36
+ parts << "-#{@id.subpart.render(context:)}" if @id.subpart
37
+ parts << ".#{@id.stage_iteration.render(context:)}" if @id.stage_iteration
38
+ date_str = @id.date.render(context:) if @id.date && context.with_date
39
+ parts << ":#{date_str}" if date_str
40
+ parts.join
41
+ end
42
+
43
+ def render_edition_portion(context)
44
+ @id.edition.render(context:) if @id.edition&.number
45
+ end
46
+
47
+ def render_language_portion(context, with_edition: false)
48
+ return "" unless @id.languages&.any? && context.with_language_code != :none
49
+
50
+ use_single = with_edition ? false : context.with_language_code == :single
51
+ rendered = @id.languages.map do |l|
52
+ l.render(context:, lang_single: use_single)
53
+ end
54
+ "(#{rendered.join(use_single ? '/' : ',')})"
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Renderers
5
+ class IwaRenderer < HumanReadable
6
+ def render(context:, with_edition: false)
7
+ parts = []
8
+ parts << @id.typed_stage.render(context:) if @id.typed_stage
9
+ parts << render_number_portion(context)
10
+ result = parts.compact.join(" ")
11
+ result << render_language_portion(context, with_edition: with_edition)
12
+ result
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Renderers
5
+ class MrString < Base
6
+ def render(context: nil, **)
7
+ parts = []
8
+ parts << @id.mr_publisher
9
+ parts << @id.mr_type
10
+ parts << @id.mr_number_with_part
11
+ parts << @id.mr_year
12
+ parts.compact.join(".")
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Renderers
5
+ class SupplementRenderer < HumanReadable
6
+ def render(context:, with_edition: false)
7
+ parts = []
8
+
9
+ base_str = @id.base_identifier.to_s(
10
+ with_edition: with_edition,
11
+ stage_format_long: context.stage_format_long,
12
+ with_date: context.with_date,
13
+ )
14
+
15
+ stage_str = @id.typed_stage.render(context:)
16
+ parts << "#{base_str}/#{stage_str}"
17
+
18
+ num_port = render_number_portion(context)
19
+ if num_port && !num_port.empty? && !num_port.start_with?(":")
20
+ parts << (stage_str.end_with?(".") ? "" : " ")
21
+ end
22
+ parts << num_port
23
+
24
+ parts << " #{render_edition_portion(context)}" if with_edition && @id.edition&.number
25
+ if @id.languages&.any?
26
+ parts << render_language_portion(context,
27
+ with_edition: with_edition)
28
+ end
29
+ parts.compact.join
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Renderers
5
+ class Urn < Base
6
+ def render(context: nil, **)
7
+ @id.to_urn
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Renderers
5
+ autoload :Base, "pubid/renderers/base"
6
+ autoload :DirectivesRenderer, "pubid/renderers/directives_renderer"
7
+ autoload :GuideRenderer, "pubid/renderers/guide_renderer"
8
+ autoload :HumanReadable, "pubid/renderers/human_readable"
9
+ autoload :IwaRenderer, "pubid/renderers/iwa_renderer"
10
+ autoload :MrString, "pubid/renderers/mr_string"
11
+ autoload :SupplementRenderer, "pubid/renderers/supplement_renderer"
12
+ autoload :Urn, "pubid/renderers/urn"
13
+ end
14
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "publisher"
4
+ require_relative "numbering"
5
+ require_relative "date"
6
+ require_relative "supplement"
7
+ require_relative "stage"
8
+ require_relative "language"
9
+ require_relative "format"
10
+
11
+ module Pubid
12
+ module Rendering
13
+ module Base
14
+ include Pubid::Rendering::Publisher
15
+ include Pubid::Rendering::Numbering
16
+ include Pubid::Rendering::Date
17
+ include Pubid::Rendering::Supplement
18
+ include Pubid::Rendering::Stage
19
+ include Pubid::Rendering::Language
20
+ include Pubid::Rendering::Format
21
+
22
+ # Base rendering method to be composed by subclasses
23
+ # @param options [Hash] rendering options
24
+ # @return [String] formatted identifier string
25
+ def render_base(**options)
26
+ parts = []
27
+
28
+ # Publisher/copublisher
29
+ pub = maybe(:publisher)
30
+ if pub
31
+ parts << render_publisher(pub,
32
+ maybe(:copublishers), **options)
33
+ end
34
+
35
+ # Numbering (number, part, subpart)
36
+ num = maybe(:number)
37
+ if num
38
+ parts << render_numbering(num, maybe(:part),
39
+ maybe(:subpart), **options)
40
+ end
41
+
42
+ # Date
43
+ d = maybe(:date)
44
+ if d
45
+ parts << render_date(d, **options)
46
+ end
47
+
48
+ # Stage and type
49
+ stg = maybe(:stage)
50
+ if stg
51
+ parts << render_stage(stg, maybe(:type),
52
+ has_copublisher: maybe(:copublishers)&.any?, **options)
53
+ end
54
+
55
+ # Language codes
56
+ langs = maybe(:languages)
57
+ if langs&.any?
58
+ parts << render_languages(langs, **options)
59
+ end
60
+
61
+ parts.compact.join
62
+ end
63
+
64
+ private
65
+
66
+ def maybe(method_name)
67
+ return nil unless self.class.attributes.key?(method_name)
68
+
69
+ public_send(method_name)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,211 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Rendering
5
+ # Common rendering methods for identifier string representation
6
+ #
7
+ # This module extracts duplicated rendering logic across flavors
8
+ # to reduce code duplication and ensure consistency.
9
+ #
10
+ # == Usage
11
+ #
12
+ # Include this module in flavor-specific identifier base classes:
13
+ #
14
+ # class Base < ::Pubid::Identifier
15
+ # include Pubid::Rendering::Common
16
+ #
17
+ # def to_s(lang: :en, lang_single: false, with_edition: false)
18
+ # render_identifier(lang: lang, lang_single: lang_single, with_edition: with_edition)
19
+ # end
20
+ # end
21
+ #
22
+ module Common
23
+ # Render publisher with optional copublishers
24
+ #
25
+ # @param publisher [Components::Publisher] publisher component
26
+ # @param copublisher_separator [String] separator for copublishers (default: "/")
27
+ # @return [String] formatted publisher string
28
+ def render_publisher(publisher, copublisher_separator: "/")
29
+ return "" unless publisher
30
+
31
+ result = publisher.to_s
32
+ cops = publisher.is_a?(Components::Publisher) ? publisher.copublisher : nil
33
+ if cops&.any?
34
+ result += cops.map do |cp|
35
+ "#{copublisher_separator}#{cp}"
36
+ end.join
37
+ end
38
+ result
39
+ end
40
+
41
+ # Render stage and type abbreviations with proper separators
42
+ #
43
+ # @param stage [Components::Stage] stage component
44
+ # @param type [Components::Type] type component
45
+ # @param has_copublisher [Boolean] whether identifier has copublisher
46
+ # @param default_type_abbr [String] default type abbreviation to skip (default: "IS")
47
+ # @param stage_separator [String] separator before stage without copublisher
48
+ # @return [String] formatted stage/type string
49
+ def render_stage_type(stage, type, has_copublisher: false,
50
+ default_type_abbr: "IS",
51
+ stage_separator: "/")
52
+ result = ""
53
+
54
+ # Add stage abbreviation if present
55
+ if stage&.abbr
56
+ sep = has_copublisher ? " " : stage_separator
57
+ result += "#{sep}#{stage.abbr}"
58
+ end
59
+
60
+ # Add type abbreviation if present and not default
61
+ if type&.abbr && type.abbr != default_type_abbr
62
+ # Separator: space after stage or copublisher, slash otherwise
63
+ has_prefix = stage&.abbr || has_copublisher
64
+ sep = has_prefix ? " " : stage_separator
65
+ result += "#{sep}#{type.abbr}"
66
+ end
67
+
68
+ result
69
+ end
70
+
71
+ # Render number with optional parts
72
+ #
73
+ # @param number [Components::Code] primary number component
74
+ # @param part [Components::Code] optional part component
75
+ # @param subpart [Components::Code] optional subpart component
76
+ # @param part_separator [String] separator for parts (default: "-")
77
+ # @return [String] formatted numbering string
78
+ def render_numbering(number, part = nil, subpart = nil,
79
+ part_separator: "-")
80
+ return "" unless number&.value
81
+
82
+ result = " #{number.value}"
83
+ result += "#{part_separator}#{part.value}" if part&.value
84
+ result += "#{part_separator}#{subpart.value}" if subpart&.value
85
+ result
86
+ end
87
+
88
+ # Render stage iteration (e.g., ".1" for stage iteration)
89
+ #
90
+ # @param stage_iteration [Components::Code] stage iteration component
91
+ # @return [String] formatted stage iteration or empty string
92
+ def render_stage_iteration(stage_iteration)
93
+ stage_iteration&.value ? ".#{stage_iteration.value}" : ""
94
+ end
95
+
96
+ # Render date with optional year/month/day
97
+ #
98
+ # @param date [Components::Date] date component
99
+ # @param include_month [Boolean] include month in output
100
+ # @param date_separator [String] separator for date parts (default: "-")
101
+ # @return [String] formatted date string or empty string
102
+ def render_date(date, include_month: false, date_separator: "-")
103
+ return "" unless date&.year
104
+
105
+ result = ":#{date.year}"
106
+ if date.month && include_month
107
+ result += "#{date_separator}#{format('%02d', date.month)}"
108
+ result += "#{date_separator}#{format('%02d', date.day)}" if date.day
109
+ end
110
+ result
111
+ end
112
+
113
+ # Render language codes
114
+ #
115
+ # @param languages [Array<Components::Language>] language components
116
+ # @param lang_single [Boolean] use single character format
117
+ # @param lang_separator [String] separator between languages (default: "/")
118
+ # @return [String] formatted language string or empty string
119
+ def render_languages(languages, lang_single: false, lang_separator: "/")
120
+ return "" unless languages&.any?
121
+
122
+ formatted = languages.map do |l|
123
+ l.to_s(lang_single: lang_single)
124
+ end.join(lang_separator)
125
+ "(#{formatted})"
126
+ end
127
+
128
+ # Render edition component
129
+ #
130
+ # @param edition [Components::Edition] edition component
131
+ # @param with_prefix [Boolean] include prefix (default: true)
132
+ # @return [String] formatted edition string or empty string
133
+ def render_edition(edition, with_prefix: true)
134
+ return "" unless edition
135
+
136
+ if with_prefix
137
+ edition.to_s
138
+ else
139
+ " #{edition}"
140
+ end
141
+ end
142
+
143
+ # Check if publisher has copublishers
144
+ #
145
+ # @param publisher [Components::Publisher] publisher component
146
+ # @return [Boolean] true if has copublishers
147
+ def publisher_has_copublisher?(publisher)
148
+ publisher.is_a?(Components::Publisher) && publisher.has_copublisher?
149
+ end
150
+
151
+ # Get publisher body/name
152
+ #
153
+ # @param publisher [Components::Publisher] publisher component
154
+ # @return [String] publisher body
155
+ def publisher_body(publisher)
156
+ publisher.is_a?(Components::Publisher) ? publisher.body : publisher.to_s
157
+ end
158
+
159
+ # Get copublishers as array
160
+ #
161
+ # @param publisher [Components::Publisher] publisher component
162
+ # @return [Array<String>] array of copublisher names
163
+ def copublishers_list(publisher)
164
+ return [] unless publisher.is_a?(Components::Publisher) && publisher.copublisher&.any?
165
+
166
+ publisher.copublisher.map { |cp| publisher_body(cp) }
167
+ end
168
+
169
+ # Render full identifier with all components
170
+ #
171
+ # This is a convenience method that combines all rendering methods
172
+ # in the standard order for most identifier types.
173
+ #
174
+ # @param publisher [Components::Publisher] publisher component
175
+ # @param stage [Components::Stage] stage component
176
+ # @param type [Components::Type] type component
177
+ # @param number [Components::Code] number component
178
+ # @param part [Components::Code] part component
179
+ # @param subpart [Components::Code] subpart component
180
+ # @param stage_iteration [Components::Code] stage iteration component
181
+ # @param date [Components::Date] date component
182
+ # @param edition [Components::Edition] edition component
183
+ # @param languages [Array<Components::Language>] language components
184
+ # @param lang [Symbol] language for rendering (:en or :fr)
185
+ # @param lang_single [Boolean] use single char language format
186
+ # @param with_edition [Boolean] include edition in output
187
+ # @param default_type_abbr [String] default type abbreviation to skip
188
+ # @return [String] formatted identifier string
189
+ def render_full_identifier(publisher:, stage: nil, type: nil,
190
+ number: nil, part: nil, subpart: nil,
191
+ stage_iteration: nil, date: nil,
192
+ edition: nil, languages: nil,
193
+ lang: :en, lang_single: false,
194
+ with_edition: false,
195
+ default_type_abbr: "IS")
196
+ result = render_publisher(publisher)
197
+ result += render_stage_type(stage, type,
198
+ has_copublisher: publisher_has_copublisher?(
199
+ publisher,
200
+ ),
201
+ default_type_abbr: default_type_abbr)
202
+ result += render_numbering(number, part, subpart)
203
+ result += render_stage_iteration(stage_iteration) if stage_iteration
204
+ result += render_date(date)
205
+ result += render_edition(edition) if with_edition && edition
206
+ result += render_languages(languages, lang_single: lang_single)
207
+ result
208
+ end
209
+ end
210
+ end
211
+ end
@@ -0,0 +1,156 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Rendering
5
+ # Context object for flavor-specific rendering rules
6
+ #
7
+ # This encapsulates the rendering rules that vary between flavors,
8
+ # allowing components to render themselves correctly based on context.
9
+ #
10
+ # == Usage
11
+ #
12
+ # context = RenderingContext.new(
13
+ # stage_separator: "/",
14
+ # stage_separator_with_copublisher: " ",
15
+ # type_separator: "/",
16
+ # type_separator_with_prefix: " ",
17
+ # default_type_abbr: "IS"
18
+ # )
19
+ # identifier.to_s(context: context)
20
+ #
21
+ class RenderingContext
22
+ attr_reader :stage_separator, :stage_separator_with_copublisher,
23
+ :type_separator, :type_separator_with_prefix,
24
+ :default_type_abbr, :lang, :lang_single,
25
+ :with_language_code, :stage_format_long, :with_date
26
+
27
+ # Initialize a new rendering context
28
+ #
29
+ # @param stage_separator [String] separator before stage without copublisher
30
+ # @param stage_separator_with_copublisher [String] separator before stage with copublisher
31
+ # @param type_separator [String] separator before type (default)
32
+ # @param type_separator_with_prefix [String] separator before type when prefix exists
33
+ # @param default_type_abbr [String] default type abbreviation to skip rendering
34
+ # @param lang [Symbol] language for rendering (:en or :fr)
35
+ # @param lang_single [Boolean] use single char language format
36
+ def initialize(stage_separator: "/",
37
+ stage_separator_with_copublisher: " ",
38
+ type_separator: "/",
39
+ type_separator_with_prefix: " ",
40
+ default_type_abbr: "IS",
41
+ lang: :en,
42
+ lang_single: false,
43
+ with_language_code: :none,
44
+ stage_format_long: false,
45
+ with_date: true)
46
+ @stage_separator = stage_separator
47
+ @stage_separator_with_copublisher = stage_separator_with_copublisher
48
+ @type_separator = type_separator
49
+ @type_separator_with_prefix = type_separator_with_prefix
50
+ @default_type_abbr = default_type_abbr
51
+ @lang = lang
52
+ @lang_single = lang_single
53
+ @with_language_code = with_language_code
54
+ @stage_format_long = stage_format_long
55
+ @with_date = with_date
56
+ end
57
+
58
+ # Get the appropriate stage separator based on whether there's a copublisher
59
+ #
60
+ # @param has_copublisher [Boolean] whether identifier has copublisher
61
+ # @return [String] the separator to use
62
+ def stage_separator_for(has_copublisher:)
63
+ has_copublisher ? @stage_separator_with_copublisher : @stage_separator
64
+ end
65
+
66
+ # Get the appropriate type separator based on whether there's a prefix
67
+ #
68
+ # @param has_prefix [Boolean] whether there's a prefix (stage or copublisher)
69
+ # @return [String] the separator to use
70
+ def type_separator_for(has_prefix:)
71
+ has_prefix ? @type_separator_with_prefix : @type_separator
72
+ end
73
+
74
+ # Check if type should be rendered (not default)
75
+ #
76
+ # @param type_abbr [String] type abbreviation to check
77
+ # @return [Boolean] true if type should be rendered
78
+ def should_render_type?(type_abbr)
79
+ type_abbr && type_abbr != @default_type_abbr
80
+ end
81
+
82
+ # ISO rendering context singleton
83
+ # @return [RenderingContext] ISO-specific context
84
+ def self.iso
85
+ @iso ||= new(
86
+ stage_separator: "/",
87
+ stage_separator_with_copublisher: " ",
88
+ type_separator: "/",
89
+ type_separator_with_prefix: " ",
90
+ default_type_abbr: "IS",
91
+ )
92
+ end
93
+
94
+ # IEC rendering context singleton
95
+ # @return [RenderingContext] IEC-specific context
96
+ def self.iec
97
+ @iec ||= new(
98
+ stage_separator: "/",
99
+ stage_separator_with_copublisher: " ",
100
+ type_separator: "/",
101
+ type_separator_with_prefix: " ",
102
+ default_type_abbr: "IS",
103
+ )
104
+ end
105
+
106
+ # NIST rendering context singleton
107
+ # @return [RenderingContext] NIST-specific context
108
+ def self.nist
109
+ @nist ||= new(
110
+ stage_separator: "",
111
+ stage_separator_with_copublisher: " ",
112
+ type_separator: " ",
113
+ type_separator_with_prefix: " ",
114
+ default_type_abbr: "",
115
+ )
116
+ end
117
+
118
+ # Format factory methods — replace RenderingStyle hierarchy
119
+ def self.ref_num_short
120
+ new(with_language_code: :single, stage_format_long: false,
121
+ with_date: true)
122
+ end
123
+
124
+ def self.ref_num_long
125
+ new(with_language_code: :iso, stage_format_long: true, with_date: true)
126
+ end
127
+
128
+ def self.ref_dated
129
+ new(with_language_code: :none, stage_format_long: false,
130
+ with_date: true)
131
+ end
132
+
133
+ def self.ref_undated
134
+ new(with_language_code: :none, stage_format_long: false,
135
+ with_date: false)
136
+ end
137
+
138
+ def self.ref_undated_long
139
+ new(with_language_code: :none, stage_format_long: true,
140
+ with_date: false)
141
+ end
142
+
143
+ def self.from_format(format)
144
+ case format
145
+ when :ref_num_short then ref_num_short
146
+ when :ref_num_long then ref_num_long
147
+ when :ref_dated then ref_dated
148
+ when :ref_dated_long then ref_dated
149
+ when :ref_undated then ref_undated
150
+ when :ref_undated_long then ref_undated_long
151
+ else ref_dated
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Rendering
5
+ module Date
6
+ # Render date with optional month/day
7
+ # @param date [Components::Date] date component
8
+ # @param options [Hash] rendering options
9
+ # @return [String] formatted date string
10
+ def render_date(date, **options)
11
+ return "" unless date&.year
12
+
13
+ result = ":#{date.year}"
14
+
15
+ if date.month && options[:include_month]
16
+ result += "-#{format('%02d', date.month)}"
17
+ end
18
+
19
+ if date.day && options[:include_day]
20
+ result += "-#{format('%02d', date.day)}"
21
+ end
22
+
23
+ result
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Rendering
5
+ module Format
6
+ # Dispatch to appropriate format renderer
7
+ # @param format [Symbol] target format
8
+ # @return [String] formatted identifier string
9
+ def to_s(format = nil)
10
+ effective_format = determine_format(format)
11
+ send(:"to_#{effective_format}_style")
12
+ end
13
+
14
+ private
15
+
16
+ def determine_format(format)
17
+ return :short unless format
18
+ return :mr if format.to_sym == :mr
19
+ return :full if %i[full long].include?(format.to_sym)
20
+
21
+ :short
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pubid
4
+ module Rendering
5
+ module Language
6
+ # Render language codes in parenthetical format
7
+ # @param languages [Array<Components::Language>] language components
8
+ # @param options [Hash] rendering options
9
+ # @return [String] formatted language string
10
+ def render_languages(languages, **options)
11
+ return "" unless languages&.any?
12
+
13
+ options[:lang_format] || :short
14
+ formatted = languages.map do |l|
15
+ l.to_s(lang_single: options[:lang_single])
16
+ end
17
+ "(#{formatted.join('/')})"
18
+ end
19
+ end
20
+ end
21
+ end