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.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.adoc +2044 -53
- data/archived-gems/pubid-ccsds/update_codes.yaml +1 -0
- data/archived-gems/pubid-iec/stages.yaml +129 -0
- data/archived-gems/pubid-iec/update_codes.yaml +67 -0
- data/archived-gems/pubid-ieee/update_codes.yaml +104 -0
- data/archived-gems/pubid-iso/stages.yaml +106 -0
- data/archived-gems/pubid-iso/update_codes.yaml +4 -0
- data/archived-gems/pubid-itu/i18n.yaml +13 -0
- data/archived-gems/pubid-itu/series.yaml +42 -0
- data/archived-gems/pubid-nist/publishers.yaml +6 -0
- data/archived-gems/pubid-nist/series.yaml +121 -0
- data/archived-gems/pubid-nist/stages.yaml +16 -0
- data/archived-gems/pubid-nist/update_codes.yaml +93 -0
- data/archived-gems/pubid-plateau/update_codes.yaml +6 -0
- data/data/bipm/update_codes.yaml +9 -0
- data/data/ccsds/update_codes.yaml +1 -0
- data/data/iec/update_codes.yaml +70 -0
- data/data/ieee/update_codes.yaml +210 -0
- data/data/iso/update_codes.yaml +21 -0
- data/data/nist/series.yaml +155 -0
- data/data/nist/update_codes.yaml +122 -0
- data/data/plateau/update_codes.yaml +6 -0
- data/lib/pubid/adobe/builder.rb +52 -0
- data/lib/pubid/adobe/identifier.rb +47 -0
- data/lib/pubid/adobe/identifiers/publication.rb +31 -0
- data/lib/pubid/adobe/identifiers/tech_note.rb +32 -0
- data/lib/pubid/adobe/identifiers.rb +10 -0
- data/lib/pubid/adobe/parser.rb +136 -0
- data/lib/pubid/adobe/renderer.rb +39 -0
- data/lib/pubid/adobe/urn_generator.rb +42 -0
- data/lib/pubid/adobe/urn_parser.rb +69 -0
- data/lib/pubid/adobe.rb +60 -0
- data/lib/pubid/amca/builder.rb +176 -0
- data/lib/pubid/amca/identifier.rb +4 -0
- data/lib/pubid/amca/identifiers/base.rb +92 -0
- data/lib/pubid/amca/identifiers/interpretation.rb +38 -0
- data/lib/pubid/amca/identifiers/publication.rb +34 -0
- data/lib/pubid/amca/identifiers/standard.rb +20 -0
- data/lib/pubid/amca/identifiers.rb +11 -0
- data/lib/pubid/amca/parser.rb +153 -0
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +10 -0
- data/lib/pubid/amca/urn_generator.rb +51 -0
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +73 -0
- data/lib/pubid/ansi/builder.rb +54 -0
- data/lib/pubid/ansi/identifier.rb +31 -0
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +13 -0
- data/lib/pubid/ansi/identifiers/standard.rb +15 -0
- data/lib/pubid/ansi/identifiers.rb +11 -0
- data/lib/pubid/ansi/parser.rb +91 -0
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +16 -0
- data/lib/pubid/ansi/urn_generator.rb +41 -0
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +68 -0
- data/lib/pubid/api/builder.rb +58 -0
- data/lib/pubid/api/components/code.rb +9 -0
- data/lib/pubid/api/identifier.rb +42 -0
- data/lib/pubid/api/identifiers/base.rb +12 -0
- data/lib/pubid/api/identifiers/bulletin.rb +13 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +13 -0
- data/lib/pubid/api/identifiers/mpms.rb +26 -0
- data/lib/pubid/api/identifiers/publication.rb +13 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +13 -0
- data/lib/pubid/api/identifiers/specification.rb +13 -0
- data/lib/pubid/api/identifiers/standard.rb +13 -0
- data/lib/pubid/api/identifiers/technical_report.rb +13 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +11 -0
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/parser.rb +140 -0
- data/lib/pubid/api/renderer.rb +98 -0
- data/lib/pubid/api/single_identifier.rb +24 -0
- data/lib/pubid/api/urn_generator.rb +23 -0
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +68 -0
- data/lib/pubid/ashrae/builder.rb +519 -0
- data/lib/pubid/ashrae/identifier.rb +8 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +42 -0
- data/lib/pubid/ashrae/identifiers/addendum.rb +44 -0
- data/lib/pubid/ashrae/identifiers/base.rb +119 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +43 -0
- data/lib/pubid/ashrae/identifiers/errata.rb +39 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +41 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +45 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +41 -0
- data/lib/pubid/ashrae/identifiers.rb +15 -0
- data/lib/pubid/ashrae/parser.rb +748 -0
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +10 -0
- data/lib/pubid/ashrae/supplement_identifier.rb +38 -0
- data/lib/pubid/ashrae/urn_generator.rb +57 -0
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +77 -0
- data/lib/pubid/asme/builder.rb +162 -0
- data/lib/pubid/asme/components/code.rb +26 -0
- data/lib/pubid/asme/identifier.rb +24 -0
- data/lib/pubid/asme/identifiers/base.rb +10 -0
- data/lib/pubid/asme/identifiers/standard.rb +96 -0
- data/lib/pubid/asme/identifiers.rb +10 -0
- data/lib/pubid/asme/parser.rb +308 -0
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/single_identifier.rb +38 -0
- data/lib/pubid/asme/urn_generator.rb +133 -0
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +67 -0
- data/lib/pubid/astm/builder.rb +166 -0
- data/lib/pubid/astm/components/code.rb +42 -0
- data/lib/pubid/astm/components.rb +9 -0
- data/lib/pubid/astm/identifier.rb +24 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +28 -0
- data/lib/pubid/astm/identifiers/base.rb +13 -0
- data/lib/pubid/astm/identifiers/code_number.rb +81 -0
- data/lib/pubid/astm/identifiers/data_series.rb +13 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +65 -0
- data/lib/pubid/astm/identifiers/manual.rb +23 -0
- data/lib/pubid/astm/identifiers/monograph.rb +13 -0
- data/lib/pubid/astm/identifiers/research_report.rb +21 -0
- data/lib/pubid/astm/identifiers/standard.rb +23 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +12 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +12 -0
- data/lib/pubid/astm/identifiers.rb +19 -0
- data/lib/pubid/astm/parser.rb +244 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +47 -0
- data/lib/pubid/astm/urn_generator.rb +101 -0
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +55 -0
- data/lib/pubid/bipm/builder.rb +163 -0
- data/lib/pubid/bipm/identifier.rb +285 -0
- data/lib/pubid/bipm/identifiers/committee_document.rb +36 -0
- data/lib/pubid/bipm/identifiers/guide.rb +35 -0
- data/lib/pubid/bipm/identifiers/meeting.rb +53 -0
- data/lib/pubid/bipm/identifiers/mep.rb +33 -0
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +48 -0
- data/lib/pubid/bipm/identifiers/si_brochure.rb +33 -0
- data/lib/pubid/bipm/identifiers.rb +15 -0
- data/lib/pubid/bipm/parser.rb +237 -0
- data/lib/pubid/bipm/renderer.rb +118 -0
- data/lib/pubid/bipm/urn_generator.rb +58 -0
- data/lib/pubid/bipm/urn_parser.rb +60 -0
- data/lib/pubid/bipm.rb +91 -0
- data/lib/pubid/bsi/builder.rb +1495 -0
- data/lib/pubid/bsi/components/code.rb +11 -0
- data/lib/pubid/bsi/components/date.rb +11 -0
- data/lib/pubid/bsi/components/publisher.rb +11 -0
- data/lib/pubid/bsi/components/type.rb +11 -0
- data/lib/pubid/bsi/identifier.rb +6 -0
- data/lib/pubid/bsi/identifiers/addendum_document.rb +30 -0
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +67 -0
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +51 -0
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +65 -0
- data/lib/pubid/bsi/identifiers/amendment.rb +48 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +21 -0
- data/lib/pubid/bsi/identifiers/british_standard.rb +34 -0
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +40 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +44 -0
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +84 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +44 -0
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +33 -0
- data/lib/pubid/bsi/identifiers/disc.rb +27 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +27 -0
- data/lib/pubid/bsi/identifiers/electronic_book.rb +16 -0
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +36 -0
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +35 -0
- data/lib/pubid/bsi/identifiers/flex.rb +30 -0
- data/lib/pubid/bsi/identifiers/handbook.rb +23 -0
- data/lib/pubid/bsi/identifiers/index.rb +30 -0
- data/lib/pubid/bsi/identifiers/method.rb +35 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +48 -0
- data/lib/pubid/bsi/identifiers/practice_guide.rb +21 -0
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +27 -0
- data/lib/pubid/bsi/identifiers/published_document.rb +27 -0
- data/lib/pubid/bsi/identifiers/section.rb +32 -0
- data/lib/pubid/bsi/identifiers/set.rb +40 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/supplement_document.rb +29 -0
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +35 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +34 -0
- data/lib/pubid/bsi/identifiers/test_method.rb +35 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +37 -0
- data/lib/pubid/bsi/identifiers.rb +51 -0
- data/lib/pubid/bsi/model.rb +196 -0
- data/lib/pubid/bsi/parser.rb +673 -0
- data/lib/pubid/bsi/renderer.rb +1064 -0
- data/lib/pubid/bsi/single_identifier.rb +141 -0
- data/lib/pubid/bsi/urn_generator.rb +92 -0
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +282 -0
- data/lib/pubid/builder/base.rb +187 -0
- data/lib/pubid/bundled_identifier.rb +134 -0
- data/lib/pubid/calconnect/builder.rb +38 -0
- data/lib/pubid/calconnect/identifier.rb +121 -0
- data/lib/pubid/calconnect/identifiers/standard.rb +29 -0
- data/lib/pubid/calconnect/identifiers.rb +9 -0
- data/lib/pubid/calconnect/parser.rb +54 -0
- data/lib/pubid/calconnect/renderer.rb +36 -0
- data/lib/pubid/calconnect/urn_generator.rb +33 -0
- data/lib/pubid/calconnect/urn_parser.rb +34 -0
- data/lib/pubid/calconnect.rb +82 -0
- data/lib/pubid/ccsds/builder.rb +57 -0
- data/lib/pubid/ccsds/identifier.rb +76 -0
- data/lib/pubid/ccsds/identifiers/base.rb +41 -0
- data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +40 -0
- data/lib/pubid/ccsds/identifiers.rb +10 -0
- data/lib/pubid/ccsds/parser.rb +73 -0
- data/lib/pubid/ccsds/single_identifier.rb +77 -0
- data/lib/pubid/ccsds/supplement_identifier.rb +37 -0
- data/lib/pubid/ccsds/urn_generator.rb +115 -0
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +64 -0
- data/lib/pubid/cen_cenelec/builder.rb +362 -0
- data/lib/pubid/cen_cenelec/identifier.rb +38 -0
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +45 -0
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +19 -0
- data/lib/pubid/cen_cenelec/identifiers/base.rb +34 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +40 -0
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +20 -0
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +99 -0
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +50 -0
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +18 -0
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +36 -0
- data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
- data/lib/pubid/cen_cenelec/parser.rb +144 -0
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +49 -0
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +47 -0
- data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +208 -0
- data/lib/pubid/cie/builder.rb +524 -0
- data/lib/pubid/cie/components/language.rb +58 -0
- data/lib/pubid/cie/identifier.rb +33 -0
- data/lib/pubid/cie/identifiers/bundle.rb +50 -0
- data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
- data/lib/pubid/cie/identifiers/conference.rb +37 -0
- data/lib/pubid/cie/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/cie/identifiers/dual_published.rb +41 -0
- data/lib/pubid/cie/identifiers/identical.rb +64 -0
- data/lib/pubid/cie/identifiers/joint_published.rb +52 -0
- data/lib/pubid/cie/identifiers/proceedings.rb +41 -0
- data/lib/pubid/cie/identifiers/standard.rb +93 -0
- data/lib/pubid/cie/identifiers/supplement.rb +47 -0
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +24 -0
- data/lib/pubid/cie/identifiers.rb +19 -0
- data/lib/pubid/cie/parser.rb +396 -0
- data/lib/pubid/cie/single_identifier.rb +69 -0
- data/lib/pubid/cie/supplement_identifier.rb +39 -0
- data/lib/pubid/cie/urn_generator.rb +126 -0
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +83 -0
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +47 -0
- data/lib/pubid/components/date.rb +72 -0
- data/lib/pubid/components/edition.rb +35 -0
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +39 -0
- data/lib/pubid/components/locality.rb +19 -0
- data/lib/pubid/components/publisher.rb +39 -0
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +45 -0
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +48 -0
- data/lib/pubid/components/typed_stage.rb +58 -0
- data/lib/pubid/components.rb +19 -0
- data/lib/pubid/core/pattern_doc_generator.rb +272 -0
- data/lib/pubid/core/update_codes.rb +98 -0
- data/lib/pubid/core.rb +8 -0
- data/lib/pubid/csa/builder.rb +671 -0
- data/lib/pubid/csa/components/code.rb +9 -0
- data/lib/pubid/csa/components.rb +9 -0
- data/lib/pubid/csa/composite_identifier.rb +38 -0
- data/lib/pubid/csa/identifier.rb +570 -0
- data/lib/pubid/csa/identifiers/base.rb +10 -0
- data/lib/pubid/csa/identifiers/bundled.rb +141 -0
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
- data/lib/pubid/csa/identifiers/cec.rb +66 -0
- data/lib/pubid/csa/identifiers/combined.rb +158 -0
- data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
- data/lib/pubid/csa/identifiers/package.rb +65 -0
- data/lib/pubid/csa/identifiers/series.rb +23 -0
- data/lib/pubid/csa/identifiers/standard.rb +10 -0
- data/lib/pubid/csa/identifiers.rb +17 -0
- data/lib/pubid/csa/parser.rb +449 -0
- data/lib/pubid/csa/renderer.rb +300 -0
- data/lib/pubid/csa/single_identifier.rb +119 -0
- data/lib/pubid/csa/urn_generator.rb +87 -0
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa/wrapper_identifier.rb +64 -0
- data/lib/pubid/csa.rb +80 -0
- data/lib/pubid/doi/builder.rb +18 -0
- data/lib/pubid/doi/identifier.rb +49 -0
- data/lib/pubid/doi/identifiers/resource.rb +30 -0
- data/lib/pubid/doi/identifiers.rb +9 -0
- data/lib/pubid/doi/parser.rb +52 -0
- data/lib/pubid/doi/renderer.rb +13 -0
- data/lib/pubid/doi.rb +55 -0
- data/lib/pubid/easc/builder.rb +55 -0
- data/lib/pubid/easc/identifier.rb +59 -0
- data/lib/pubid/easc/identifiers/pmg.rb +20 -0
- data/lib/pubid/easc/identifiers/rmg.rb +19 -0
- data/lib/pubid/easc/identifiers.rb +10 -0
- data/lib/pubid/easc/parser.rb +88 -0
- data/lib/pubid/easc/renderer.rb +48 -0
- data/lib/pubid/easc/urn_generator.rb +46 -0
- data/lib/pubid/easc/urn_parser.rb +57 -0
- data/lib/pubid/easc.rb +52 -0
- data/lib/pubid/ecma/builder.rb +45 -0
- data/lib/pubid/ecma/identifier.rb +147 -0
- data/lib/pubid/ecma/identifiers/memento.rb +30 -0
- data/lib/pubid/ecma/identifiers/standard.rb +31 -0
- data/lib/pubid/ecma/identifiers/technical_report.rb +31 -0
- data/lib/pubid/ecma/identifiers.rb +11 -0
- data/lib/pubid/ecma/parser.rb +76 -0
- data/lib/pubid/ecma/renderer.rb +67 -0
- data/lib/pubid/ecma/urn_generator.rb +46 -0
- data/lib/pubid/ecma/urn_parser.rb +51 -0
- data/lib/pubid/ecma.rb +67 -0
- data/lib/pubid/errors.rb +79 -0
- data/lib/pubid/etsi/builder.rb +142 -0
- data/lib/pubid/etsi/components/code.rb +43 -0
- data/lib/pubid/etsi/components/version.rb +32 -0
- data/lib/pubid/etsi/components.rb +10 -0
- data/lib/pubid/etsi/identifier.rb +4 -0
- data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
- data/lib/pubid/etsi/identifiers/base.rb +74 -0
- data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +222 -0
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +123 -0
- data/lib/pubid/etsi/identifiers.rb +13 -0
- data/lib/pubid/etsi/parser.rb +139 -0
- data/lib/pubid/etsi/renderer.rb +48 -0
- data/lib/pubid/etsi/urn_generator.rb +76 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +71 -0
- data/lib/pubid/export/auditor.rb +89 -0
- data/lib/pubid/export/exporter.rb +33 -0
- data/lib/pubid/export/flavor_exporter.rb +250 -0
- data/lib/pubid/export/result.rb +97 -0
- data/lib/pubid/export.rb +12 -0
- data/lib/pubid/format_detector.rb +16 -0
- data/lib/pubid/format_registry.rb +42 -0
- data/lib/pubid/gb/builder.rb +45 -0
- data/lib/pubid/gb/identifier.rb +67 -0
- data/lib/pubid/gb/identifiers/standard.rb +34 -0
- data/lib/pubid/gb/identifiers.rb +9 -0
- data/lib/pubid/gb/parser.rb +63 -0
- data/lib/pubid/gb/renderer.rb +35 -0
- data/lib/pubid/gb.rb +87 -0
- data/lib/pubid/gost/builder.rb +148 -0
- data/lib/pubid/gost/identifier.rb +47 -0
- data/lib/pubid/gost/identifiers/foreign_reference.rb +25 -0
- data/lib/pubid/gost/identifiers/harmonized.rb +39 -0
- data/lib/pubid/gost/identifiers/identical_adoption.rb +39 -0
- data/lib/pubid/gost/identifiers/interstate_standard.rb +20 -0
- data/lib/pubid/gost/identifiers/national_standard.rb +19 -0
- data/lib/pubid/gost/identifiers.rb +13 -0
- data/lib/pubid/gost/parser.rb +105 -0
- data/lib/pubid/gost/renderer.rb +48 -0
- data/lib/pubid/gost/urn_generator.rb +46 -0
- data/lib/pubid/gost/urn_parser.rb +52 -0
- data/lib/pubid/gost.rb +49 -0
- data/lib/pubid/iala/builder.rb +102 -0
- data/lib/pubid/iala/identifier.rb +90 -0
- data/lib/pubid/iala/identifiers/advice.rb +15 -0
- data/lib/pubid/iala/identifiers/annex.rb +57 -0
- data/lib/pubid/iala/identifiers/general_assembly.rb +19 -0
- data/lib/pubid/iala/identifiers/guideline.rb +17 -0
- data/lib/pubid/iala/identifiers/letter.rb +16 -0
- data/lib/pubid/iala/identifiers/manual.rb +18 -0
- data/lib/pubid/iala/identifiers/model_course.rb +17 -0
- data/lib/pubid/iala/identifiers/recommendation.rb +17 -0
- data/lib/pubid/iala/identifiers/report.rb +16 -0
- data/lib/pubid/iala/identifiers/resolution.rb +16 -0
- data/lib/pubid/iala/identifiers/standard.rb +17 -0
- data/lib/pubid/iala/identifiers.rb +19 -0
- data/lib/pubid/iala/parser.rb +138 -0
- data/lib/pubid/iala/renderer.rb +36 -0
- data/lib/pubid/iala/urn_generator.rb +49 -0
- data/lib/pubid/iala/urn_parser.rb +67 -0
- data/lib/pubid/iala.rb +71 -0
- data/lib/pubid/iana/builder.rb +22 -0
- data/lib/pubid/iana/identifier.rb +140 -0
- data/lib/pubid/iana/identifiers/registry.rb +69 -0
- data/lib/pubid/iana/identifiers.rb +9 -0
- data/lib/pubid/iana/parser.rb +38 -0
- data/lib/pubid/iana/renderer.rb +32 -0
- data/lib/pubid/iana/urn_generator.rb +19 -0
- data/lib/pubid/iana/urn_parser.rb +24 -0
- data/lib/pubid/iana.rb +69 -0
- data/lib/pubid/identifier.rb +1118 -0
- data/lib/pubid/identifier_metadata.rb +148 -0
- data/lib/pubid/idf/builder.rb +82 -0
- data/lib/pubid/idf/identifier.rb +79 -0
- data/lib/pubid/idf/identifiers/amendment.rb +28 -0
- data/lib/pubid/idf/identifiers/corrigendum.rb +28 -0
- data/lib/pubid/idf/identifiers/international_standard.rb +124 -0
- data/lib/pubid/idf/identifiers/reviewed_method.rb +101 -0
- data/lib/pubid/idf/identifiers.rb +13 -0
- data/lib/pubid/idf/parser.rb +144 -0
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/single_identifier.rb +19 -0
- data/lib/pubid/idf/supplement_identifier.rb +35 -0
- data/lib/pubid/idf/urn_generator.rb +49 -0
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +89 -0
- data/lib/pubid/iec/builder.rb +458 -0
- data/lib/pubid/iec/components/code.rb +36 -0
- data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
- data/lib/pubid/iec/components/publisher.rb +35 -0
- data/lib/pubid/iec/components/sheet.rb +32 -0
- data/lib/pubid/iec/components/trf_info.rb +38 -0
- data/lib/pubid/iec/components/vap_suffix.rb +41 -0
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +341 -0
- data/lib/pubid/iec/identifiers/amendment.rb +97 -0
- data/lib/pubid/iec/identifiers/base.rb +54 -0
- data/lib/pubid/iec/identifiers/component_specification.rb +29 -0
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +28 -0
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +85 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +93 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +148 -0
- data/lib/pubid/iec/identifiers/guide.rb +86 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +162 -0
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +103 -0
- data/lib/pubid/iec/identifiers/operational_document.rb +29 -0
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +88 -0
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +68 -0
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +30 -0
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +29 -0
- data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +114 -0
- data/lib/pubid/iec/identifiers/technical_specification.rb +114 -0
- data/lib/pubid/iec/identifiers/technology_report.rb +28 -0
- data/lib/pubid/iec/identifiers/test_report_form.rb +35 -0
- data/lib/pubid/iec/identifiers/vap_identifier.rb +76 -0
- data/lib/pubid/iec/identifiers/white_paper.rb +29 -0
- data/lib/pubid/iec/identifiers/working_document.rb +62 -0
- data/lib/pubid/iec/identifiers.rb +31 -0
- data/lib/pubid/iec/parser.rb +443 -0
- data/lib/pubid/iec/renderer.rb +267 -0
- data/lib/pubid/iec/rendering_style.rb +113 -0
- data/lib/pubid/iec/single_identifier.rb +72 -0
- data/lib/pubid/iec/supplement_identifier.rb +178 -0
- data/lib/pubid/iec/urn_generator.rb +245 -0
- data/lib/pubid/iec/urn_parser.rb +128 -0
- data/lib/pubid/iec.rb +64 -0
- data/lib/pubid/ieee/aiee/builder.rb +85 -0
- data/lib/pubid/ieee/aiee/identifier.rb +89 -0
- data/lib/pubid/ieee/aiee/parser.rb +130 -0
- data/lib/pubid/ieee/aiee.rb +11 -0
- data/lib/pubid/ieee/builder.rb +1554 -0
- data/lib/pubid/ieee/compaction.rb +121 -0
- data/lib/pubid/ieee/components/code.rb +110 -0
- data/lib/pubid/ieee/components/draft.rb +147 -0
- data/lib/pubid/ieee/components/relationship.rb +13 -0
- data/lib/pubid/ieee/components/typed_stage.rb +100 -0
- data/lib/pubid/ieee/identifier.rb +5 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +81 -0
- data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
- data/lib/pubid/ieee/identifiers/base.rb +384 -0
- data/lib/pubid/ieee/identifiers/code_number.rb +82 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +29 -0
- data/lib/pubid/ieee/identifiers/corrigendum.rb +40 -0
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +62 -0
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +14 -0
- data/lib/pubid/ieee/identifiers/dual_published.rb +79 -0
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +115 -0
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +48 -0
- data/lib/pubid/ieee/identifiers/joint_development.rb +223 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +85 -0
- data/lib/pubid/ieee/identifiers/nesc/base.rb +127 -0
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +43 -0
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +43 -0
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +35 -0
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +41 -0
- data/lib/pubid/ieee/identifiers/nesc.rb +16 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +14 -0
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +49 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +26 -0
- data/lib/pubid/ieee/identifiers/si_standard.rb +38 -0
- data/lib/pubid/ieee/identifiers/standard.rb +44 -0
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +42 -0
- data/lib/pubid/ieee/identifiers.rb +34 -0
- data/lib/pubid/ieee/ire/builder.rb +62 -0
- data/lib/pubid/ieee/ire/identifier.rb +73 -0
- data/lib/pubid/ieee/ire/parser.rb +91 -0
- data/lib/pubid/ieee/ire.rb +11 -0
- data/lib/pubid/ieee/nesc/builder.rb +114 -0
- data/lib/pubid/ieee/nesc/parser.rb +155 -0
- data/lib/pubid/ieee/nesc.rb +10 -0
- data/lib/pubid/ieee/parser.rb +1644 -0
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +408 -0
- data/lib/pubid/ieee/typed_stages.rb +183 -0
- data/lib/pubid/ieee/urn_generator.rb +215 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +163 -0
- data/lib/pubid/ieee_debug.rb +30 -0
- data/lib/pubid/ietf/builder.rb +78 -0
- data/lib/pubid/ietf/identifier.rb +5 -0
- data/lib/pubid/ietf/identifiers/base.rb +72 -0
- data/lib/pubid/ietf/identifiers/bcp.rb +36 -0
- data/lib/pubid/ietf/identifiers/fyi.rb +36 -0
- data/lib/pubid/ietf/identifiers/internet_draft.rb +45 -0
- data/lib/pubid/ietf/identifiers/rfc.rb +27 -0
- data/lib/pubid/ietf/identifiers/serialization.rb +51 -0
- data/lib/pubid/ietf/identifiers/std.rb +36 -0
- data/lib/pubid/ietf/identifiers.rb +14 -0
- data/lib/pubid/ietf/parser.rb +61 -0
- data/lib/pubid/ietf/renderer.rb +64 -0
- data/lib/pubid/ietf/urn_generator.rb +37 -0
- data/lib/pubid/ietf/urn_parser.rb +43 -0
- data/lib/pubid/ietf.rb +85 -0
- data/lib/pubid/iho/builder.rb +37 -0
- data/lib/pubid/iho/identifier.rb +7 -0
- data/lib/pubid/iho/identifiers/base.rb +75 -0
- data/lib/pubid/iho/identifiers/bibliographic.rb +16 -0
- data/lib/pubid/iho/identifiers/circular_letter.rb +15 -0
- data/lib/pubid/iho/identifiers/miscellaneous.rb +16 -0
- data/lib/pubid/iho/identifiers/publication.rb +15 -0
- data/lib/pubid/iho/identifiers/standard.rb +15 -0
- data/lib/pubid/iho/identifiers.rb +13 -0
- data/lib/pubid/iho/parser.rb +68 -0
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +29 -0
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +77 -0
- data/lib/pubid/isbn/builder.rb +44 -0
- data/lib/pubid/isbn/check_digit.rb +53 -0
- data/lib/pubid/isbn/identifier.rb +81 -0
- data/lib/pubid/isbn/identifiers/book.rb +30 -0
- data/lib/pubid/isbn/identifiers.rb +9 -0
- data/lib/pubid/isbn/parser.rb +45 -0
- data/lib/pubid/isbn/renderer.rb +16 -0
- data/lib/pubid/isbn.rb +52 -0
- data/lib/pubid/iso/builder.rb +316 -0
- data/lib/pubid/iso/bundled_identifier.rb +138 -0
- data/lib/pubid/iso/combined_identifier.rb +24 -0
- data/lib/pubid/iso/components/code.rb +24 -0
- data/lib/pubid/iso/components/publisher.rb +62 -0
- data/lib/pubid/iso/components.rb +10 -0
- data/lib/pubid/iso/format_resolver.rb +45 -0
- data/lib/pubid/iso/identifier.rb +318 -0
- data/lib/pubid/iso/identifiers/addendum.rb +107 -0
- data/lib/pubid/iso/identifiers/amendment.rb +132 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
- data/lib/pubid/iso/identifiers/data.rb +75 -0
- data/lib/pubid/iso/identifiers/directives.rb +65 -0
- data/lib/pubid/iso/identifiers/directives_supplement.rb +148 -0
- data/lib/pubid/iso/identifiers/extract.rb +30 -0
- data/lib/pubid/iso/identifiers/guide.rb +99 -0
- data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +95 -0
- data/lib/pubid/iso/identifiers/pas.rb +93 -0
- data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
- data/lib/pubid/iso/identifiers/supplement.rb +95 -0
- data/lib/pubid/iso/identifiers/tc_document.rb +137 -0
- data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
- data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
- data/lib/pubid/iso/identifiers.rb +32 -0
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +534 -0
- data/lib/pubid/iso/rendering_style.rb +120 -0
- data/lib/pubid/iso/single_identifier.rb +60 -0
- data/lib/pubid/iso/supplement_identifier.rb +53 -0
- data/lib/pubid/iso/urn_generator.rb +313 -0
- data/lib/pubid/iso/urn_parser.rb +442 -0
- data/lib/pubid/iso/utilities.rb +86 -0
- data/lib/pubid/iso.rb +236 -0
- data/lib/pubid/itu/builder.rb +360 -0
- data/lib/pubid/itu/components/code.rb +84 -0
- data/lib/pubid/itu/components/designation.rb +35 -0
- data/lib/pubid/itu/components/sector.rb +46 -0
- data/lib/pubid/itu/components/series.rb +25 -0
- data/lib/pubid/itu/components.rb +12 -0
- data/lib/pubid/itu/i18n.rb +9 -0
- data/lib/pubid/itu/i18n.yaml +30 -0
- data/lib/pubid/itu/identifier.rb +4 -0
- data/lib/pubid/itu/identifiers/addendum.rb +15 -0
- data/lib/pubid/itu/identifiers/amendment.rb +19 -0
- data/lib/pubid/itu/identifiers/annex.rb +83 -0
- data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +87 -0
- data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +92 -0
- data/lib/pubid/itu/identifiers/base.rb +482 -0
- data/lib/pubid/itu/identifiers/combined_identifier.rb +121 -0
- data/lib/pubid/itu/identifiers/corrigendum.rb +35 -0
- data/lib/pubid/itu/identifiers/errata.rb +15 -0
- data/lib/pubid/itu/identifiers/handbook.rb +38 -0
- data/lib/pubid/itu/identifiers/question.rb +63 -0
- data/lib/pubid/itu/identifiers/recommendation.rb +15 -0
- data/lib/pubid/itu/identifiers/report.rb +39 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
- data/lib/pubid/itu/identifiers/standard_serialization.rb +58 -0
- data/lib/pubid/itu/identifiers/supplement.rb +149 -0
- data/lib/pubid/itu/identifiers.rb +25 -0
- data/lib/pubid/itu/model.rb +111 -0
- data/lib/pubid/itu/parser.rb +679 -0
- data/lib/pubid/itu/urn_generator.rb +135 -0
- data/lib/pubid/itu/urn_parser.rb +31 -0
- data/lib/pubid/itu.rb +78 -0
- data/lib/pubid/jcgm/builder.rb +106 -0
- data/lib/pubid/jcgm/components/publisher.rb +20 -0
- data/lib/pubid/jcgm/components.rb +9 -0
- data/lib/pubid/jcgm/identifier.rb +21 -0
- data/lib/pubid/jcgm/identifiers/amendment.rb +24 -0
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +39 -0
- data/lib/pubid/jcgm/identifiers/meeting.rb +47 -0
- data/lib/pubid/jcgm/identifiers.rb +13 -0
- data/lib/pubid/jcgm/parser.rb +151 -0
- data/lib/pubid/jcgm/renderer.rb +89 -0
- data/lib/pubid/jcgm/single_identifier.rb +118 -0
- data/lib/pubid/jcgm/supplement_identifier.rb +51 -0
- data/lib/pubid/jcgm/urn_generator.rb +116 -0
- data/lib/pubid/jcgm/urn_parser.rb +177 -0
- data/lib/pubid/jcgm.rb +86 -0
- data/lib/pubid/jis/builder.rb +116 -0
- data/lib/pubid/jis/identifier.rb +194 -0
- data/lib/pubid/jis/identifiers/amendment.rb +16 -0
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/explanation.rb +22 -0
- data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +28 -0
- data/lib/pubid/jis/identifiers/technical_report.rb +32 -0
- data/lib/pubid/jis/identifiers/technical_specification.rb +32 -0
- data/lib/pubid/jis/identifiers.rb +17 -0
- data/lib/pubid/jis/parser.rb +135 -0
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +31 -0
- data/lib/pubid/jis/supplement_identifier.rb +50 -0
- data/lib/pubid/jis/urn_generator.rb +25 -0
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +69 -0
- data/lib/pubid/lutaml/no_store_registration.rb +30 -0
- data/lib/pubid/nist/builder.rb +481 -0
- data/lib/pubid/nist/caster.rb +1234 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +293 -0
- data/lib/pubid/nist/components/code.rb +27 -0
- data/lib/pubid/nist/components/edition.rb +134 -0
- data/lib/pubid/nist/components/issue_number.rb +28 -0
- data/lib/pubid/nist/components/part.rb +77 -0
- data/lib/pubid/nist/components/stage.rb +53 -0
- data/lib/pubid/nist/components/supplement.rb +191 -0
- data/lib/pubid/nist/components/translation.rb +42 -0
- data/lib/pubid/nist/components/update.rb +103 -0
- data/lib/pubid/nist/components/version.rb +35 -0
- data/lib/pubid/nist/components/volume.rb +32 -0
- data/lib/pubid/nist/components.rb +18 -0
- data/lib/pubid/nist/configuration.rb +87 -0
- data/lib/pubid/nist/identifier.rb +8 -0
- data/lib/pubid/nist/identifiers/base.rb +744 -0
- data/lib/pubid/nist/identifiers/circular.rb +80 -0
- data/lib/pubid/nist/identifiers/circular_supplement.rb +60 -0
- data/lib/pubid/nist/identifiers/commercial_standard.rb +42 -0
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +58 -0
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +69 -0
- data/lib/pubid/nist/identifiers/crpl_report.rb +138 -0
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +95 -0
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +36 -0
- data/lib/pubid/nist/identifiers/handbook.rb +58 -0
- data/lib/pubid/nist/identifiers/internal_report.rb +64 -0
- data/lib/pubid/nist/identifiers/letter_circular.rb +46 -0
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +74 -0
- data/lib/pubid/nist/identifiers/monograph.rb +80 -0
- data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
- data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
- data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
- data/lib/pubid/nist/identifiers/report.rb +77 -0
- data/lib/pubid/nist/identifiers/special_publication.rb +46 -0
- data/lib/pubid/nist/identifiers/technical_note.rb +91 -0
- data/lib/pubid/nist/identifiers.rb +33 -0
- data/lib/pubid/nist/parser.rb +752 -0
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +443 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +149 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +57 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +84 -0
- data/lib/pubid/nist/urn_generator.rb +133 -0
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +138 -0
- data/lib/pubid/oasis/builder.rb +79 -0
- data/lib/pubid/oasis/identifier.rb +160 -0
- data/lib/pubid/oasis/identifiers/standard.rb +29 -0
- data/lib/pubid/oasis/identifiers.rb +9 -0
- data/lib/pubid/oasis/parser.rb +34 -0
- data/lib/pubid/oasis/renderer.rb +29 -0
- data/lib/pubid/oasis/urn_generator.rb +25 -0
- data/lib/pubid/oasis/urn_parser.rb +22 -0
- data/lib/pubid/oasis.rb +79 -0
- data/lib/pubid/ogc/builder.rb +33 -0
- data/lib/pubid/ogc/identifier.rb +81 -0
- data/lib/pubid/ogc/identifiers/document.rb +26 -0
- data/lib/pubid/ogc/identifiers.rb +10 -0
- data/lib/pubid/ogc/parser.rb +40 -0
- data/lib/pubid/ogc/renderer.rb +33 -0
- data/lib/pubid/ogc/urn_generator.rb +14 -0
- data/lib/pubid/ogc/urn_parser.rb +22 -0
- data/lib/pubid/ogc.rb +71 -0
- data/lib/pubid/oiml/builder.rb +270 -0
- data/lib/pubid/oiml/components/code.rb +37 -0
- data/lib/pubid/oiml/components.rb +9 -0
- data/lib/pubid/oiml/identifier.rb +64 -0
- data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
- data/lib/pubid/oiml/identifiers/annex.rb +29 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +15 -0
- data/lib/pubid/oiml/identifiers/bulletin.rb +137 -0
- data/lib/pubid/oiml/identifiers/code_number.rb +90 -0
- data/lib/pubid/oiml/identifiers/document.rb +15 -0
- data/lib/pubid/oiml/identifiers/errata.rb +15 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +15 -0
- data/lib/pubid/oiml/identifiers/guide.rb +15 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +15 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +15 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +15 -0
- data/lib/pubid/oiml/identifiers.rb +20 -0
- data/lib/pubid/oiml/parser.rb +274 -0
- data/lib/pubid/oiml/renderer.rb +232 -0
- data/lib/pubid/oiml/single_identifier.rb +113 -0
- data/lib/pubid/oiml/supplement_identifier.rb +88 -0
- data/lib/pubid/oiml/urn_generator.rb +78 -0
- data/lib/pubid/oiml/urn_parser.rb +39 -0
- data/lib/pubid/oiml.rb +81 -0
- data/lib/pubid/omg/builder.rb +19 -0
- data/lib/pubid/omg/identifier.rb +47 -0
- data/lib/pubid/omg/identifiers/specification.rb +32 -0
- data/lib/pubid/omg/identifiers.rb +9 -0
- data/lib/pubid/omg/parser.rb +40 -0
- data/lib/pubid/omg/renderer.rb +19 -0
- data/lib/pubid/omg.rb +51 -0
- data/lib/pubid/parser/common_parse_methods.rb +13 -0
- data/lib/pubid/parser/common_parse_rules.rb +56 -0
- data/lib/pubid/parser/grammar.rb +74 -0
- data/lib/pubid/parser.rb +9 -0
- data/lib/pubid/parsers/base.rb +11 -0
- data/lib/pubid/parsers/mr_string.rb +206 -0
- data/lib/pubid/plateau/builder.rb +54 -0
- data/lib/pubid/plateau/identifier.rb +4 -0
- data/lib/pubid/plateau/identifiers/annex.rb +16 -0
- data/lib/pubid/plateau/identifiers/base.rb +55 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +28 -0
- data/lib/pubid/plateau/identifiers/technical_report.rb +16 -0
- data/lib/pubid/plateau/identifiers.rb +11 -0
- data/lib/pubid/plateau/parser.rb +73 -0
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +68 -0
- data/lib/pubid/plateau/urn_generator.rb +29 -0
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +82 -0
- data/lib/pubid/prefixes_support.rb +51 -0
- data/lib/pubid/renderers/annotator.rb +233 -0
- data/lib/pubid/renderers/base.rb +66 -0
- data/lib/pubid/renderers/directives_renderer.rb +75 -0
- data/lib/pubid/renderers/guide_renderer.rb +26 -0
- data/lib/pubid/renderers/human_readable.rb +83 -0
- data/lib/pubid/renderers/iwa_renderer.rb +20 -0
- data/lib/pubid/renderers/mr_string.rb +64 -0
- data/lib/pubid/renderers/supplement_renderer.rb +36 -0
- data/lib/pubid/renderers/urn.rb +11 -0
- data/lib/pubid/renderers.rb +15 -0
- data/lib/pubid/rendering/context.rb +168 -0
- data/lib/pubid/rendering/date.rb +27 -0
- data/lib/pubid/rendering/language.rb +21 -0
- data/lib/pubid/rendering/numbering.rb +42 -0
- data/lib/pubid/rendering/publisher.rb +25 -0
- data/lib/pubid/rendering/stage.rb +38 -0
- data/lib/pubid/rendering/supplement.rb +46 -0
- data/lib/pubid/rendering.rb +13 -0
- data/lib/pubid/sae/builder.rb +32 -0
- data/lib/pubid/sae/components/code.rb +9 -0
- data/lib/pubid/sae/components/date.rb +27 -0
- data/lib/pubid/sae/components/type.rb +23 -0
- data/lib/pubid/sae/components.rb +11 -0
- data/lib/pubid/sae/identifier.rb +4 -0
- data/lib/pubid/sae/identifiers/base.rb +47 -0
- data/lib/pubid/sae/identifiers.rb +8 -0
- data/lib/pubid/sae/parser.rb +55 -0
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +30 -0
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +66 -0
- data/lib/pubid/tgpp/builder.rb +41 -0
- data/lib/pubid/tgpp/identifier.rb +107 -0
- data/lib/pubid/tgpp/identifiers/technical_report.rb +32 -0
- data/lib/pubid/tgpp/identifiers/technical_specification.rb +33 -0
- data/lib/pubid/tgpp/identifiers.rb +11 -0
- data/lib/pubid/tgpp/parser.rb +78 -0
- data/lib/pubid/tgpp/renderer.rb +52 -0
- data/lib/pubid/tgpp/urn_generator.rb +39 -0
- data/lib/pubid/tgpp/urn_parser.rb +30 -0
- data/lib/pubid/tgpp.rb +83 -0
- data/lib/pubid/type_resolver.rb +59 -0
- data/lib/pubid/un/builder.rb +42 -0
- data/lib/pubid/un/identifier.rb +40 -0
- data/lib/pubid/un/identifiers/document.rb +24 -0
- data/lib/pubid/un/identifiers.rb +9 -0
- data/lib/pubid/un/parser.rb +25 -0
- data/lib/pubid/un/renderer.rb +11 -0
- data/lib/pubid/un.rb +46 -0
- data/lib/pubid/urn_generator/base.rb +110 -0
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +16 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/utils/string_normalizer.rb +196 -0
- data/lib/pubid/utils.rb +7 -0
- data/lib/pubid/version.rb +3 -1
- data/lib/pubid/w3c/builder.rb +55 -0
- data/lib/pubid/w3c/identifier.rb +130 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +31 -0
- data/lib/pubid/w3c/identifiers/draft_note.rb +31 -0
- data/lib/pubid/w3c/identifiers/note.rb +30 -0
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/standard.rb +12 -0
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/working_draft.rb +30 -0
- data/lib/pubid/w3c/identifiers.rb +25 -0
- data/lib/pubid/w3c/parser.rb +43 -0
- data/lib/pubid/w3c/renderer.rb +35 -0
- data/lib/pubid/w3c/urn_generator.rb +18 -0
- data/lib/pubid/w3c/urn_parser.rb +36 -0
- data/lib/pubid/w3c.rb +67 -0
- data/lib/pubid/xsf/builder.rb +17 -0
- data/lib/pubid/xsf/identifier.rb +66 -0
- data/lib/pubid/xsf/identifiers/xep.rb +31 -0
- data/lib/pubid/xsf/identifiers.rb +9 -0
- data/lib/pubid/xsf/parser.rb +25 -0
- data/lib/pubid/xsf/renderer.rb +23 -0
- data/lib/pubid/xsf/urn_generator.rb +13 -0
- data/lib/pubid/xsf/urn_parser.rb +18 -0
- data/lib/pubid/xsf.rb +81 -0
- data/lib/pubid.rb +551 -13
- data/lib/tasks/docs.rake +37 -0
- data/lib/tasks/export.rake +39 -0
- data/lib/tasks/website-data.json +7546 -0
- metadata +875 -171
- data/lib/pubid/registry.rb +0 -30
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
# Builder class for constructing ACMA identifier scheme from parsed data
|
|
6
|
+
# Single Responsibility: Transform parsed data into identifier objects
|
|
7
|
+
class Builder
|
|
8
|
+
attr_reader :identifier_class
|
|
9
|
+
|
|
10
|
+
def initialize(identifier_class = Identifier)
|
|
11
|
+
@identifier_class = identifier_class
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Build a scheme object from parsed data
|
|
15
|
+
# @param parsed [Hash, Array] the parsed identifier data
|
|
16
|
+
# @return [identifier] the constructed scheme object
|
|
17
|
+
def build(parsed)
|
|
18
|
+
# Parslet can return array of hashes - merge them
|
|
19
|
+
parsed_hash = parsed.is_a?(Array) ? merge_parsed_array(parsed) : parsed
|
|
20
|
+
|
|
21
|
+
# Handle base identifier wrapper
|
|
22
|
+
if parsed_hash[:base]
|
|
23
|
+
parsed_hash = parsed_hash[:base]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Check for publication identifier (must come before standard check)
|
|
27
|
+
if parsed_hash[:publication] || parsed_hash[:publication_keyword] || parsed_hash[:revision]
|
|
28
|
+
return build_publication(parsed_hash[:publication] || parsed_hash)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Check for interpretation identifier
|
|
32
|
+
if parsed_hash[:interpretation] || parsed_hash[:interpretation_code] || parsed_hash[:interp_keyword]
|
|
33
|
+
return build_interpretation(parsed_hash[:interpretation] || parsed_hash)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Handle standard identifier
|
|
37
|
+
if parsed_hash[:standard]
|
|
38
|
+
return build_standard(parsed_hash[:standard])
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Default: extract attributes and create identifier
|
|
42
|
+
attributes = extract_attributes(parsed_hash)
|
|
43
|
+
identifier_class = determine_identifier_class(attributes)
|
|
44
|
+
identifier_class.new(**attributes)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Class method to build an identifier from parsed data
|
|
48
|
+
# @param parsed [Hash, Array] the parsed identifier data
|
|
49
|
+
# @return [Identifier] the constructed identifier object
|
|
50
|
+
def self.build(parsed)
|
|
51
|
+
new.build(parsed)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
# Merge an array of parsed hashes into a single hash
|
|
57
|
+
# @param parsed_array [Array<Hash>] array of parsed hashes
|
|
58
|
+
# @return [Hash] merged hash
|
|
59
|
+
def merge_parsed_array(parsed_array)
|
|
60
|
+
parsed_array.inject({}) do |result, hash|
|
|
61
|
+
result.merge(hash)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Extract and normalize attributes from parsed data
|
|
66
|
+
# @param parsed [Hash] the parsed data
|
|
67
|
+
# @return [Hash] normalized attributes for Identifier
|
|
68
|
+
def extract_attributes(parsed)
|
|
69
|
+
attributes = {}
|
|
70
|
+
|
|
71
|
+
# Extract copublisher
|
|
72
|
+
if parsed[:copublisher]
|
|
73
|
+
attributes[:copublisher] =
|
|
74
|
+
extract_value(parsed[:copublisher])
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Extract code
|
|
78
|
+
if parsed[:code_with_year]
|
|
79
|
+
code_year_data = parsed[:code_with_year]
|
|
80
|
+
if code_year_data && code_year_data[:code]
|
|
81
|
+
attributes[:number] =
|
|
82
|
+
extract_value(code_year_data[:code])
|
|
83
|
+
end
|
|
84
|
+
if code_year_data && code_year_data[:year]
|
|
85
|
+
attributes[:year] =
|
|
86
|
+
extract_value(code_year_data[:year])
|
|
87
|
+
end
|
|
88
|
+
elsif parsed[:code]
|
|
89
|
+
attributes[:number] = extract_value(parsed[:code])
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Extract year if not already extracted from code_with_year
|
|
93
|
+
attributes[:year] ||= extract_value(parsed[:year]) if parsed[:year]
|
|
94
|
+
|
|
95
|
+
# Extract suffix
|
|
96
|
+
attributes[:suffix] = extract_value(parsed[:suffix]) if parsed[:suffix]
|
|
97
|
+
|
|
98
|
+
# Extract reaffirmed year (R2008, R2010, etc.)
|
|
99
|
+
if parsed[:reaffirmed]
|
|
100
|
+
attributes[:reaffirmed] =
|
|
101
|
+
extract_value(parsed[:reaffirmed])
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
attributes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Determine which identifier class to use based on attributes
|
|
108
|
+
# @param attributes [Hash] the extracted attributes
|
|
109
|
+
# @return [Class] the identifier class
|
|
110
|
+
def determine_identifier_class(_attributes)
|
|
111
|
+
# Default to Standard for ACMA
|
|
112
|
+
Identifiers::Standard
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Extract a simple value from parsed data
|
|
116
|
+
# @param value [Object] the value to extract
|
|
117
|
+
# @return [String, nil] the extracted string value
|
|
118
|
+
def extract_value(value)
|
|
119
|
+
return nil if value.nil?
|
|
120
|
+
return nil if value.is_a?(Array) && value.empty?
|
|
121
|
+
|
|
122
|
+
if value.is_a?(Array)
|
|
123
|
+
joined = value.join
|
|
124
|
+
return joined.length.positive? ? joined : nil
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
str_value = value.to_s.strip
|
|
128
|
+
str_value.length.positive? ? str_value : nil
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Build an Interpretation identifier from parsed interpretation data
|
|
132
|
+
# @param parsed [Hash] the parsed interpretation data
|
|
133
|
+
# @return [Identifiers::Interpretation] the constructed interpretation identifier
|
|
134
|
+
def build_interpretation(parsed)
|
|
135
|
+
attributes = extract_attributes(parsed)
|
|
136
|
+
|
|
137
|
+
# Extract interpretation code (JW, KB, RG, AW, AH, or number)
|
|
138
|
+
if parsed[:interpretation_code]
|
|
139
|
+
attributes[:interpretation_code] =
|
|
140
|
+
extract_value(parsed[:interpretation_code])
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Interpretations may not have a year
|
|
144
|
+
attributes[:year] ||= extract_value(parsed[:interpretation_year]) if parsed[:interpretation_year]
|
|
145
|
+
|
|
146
|
+
Identifiers::Interpretation.new(**attributes)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Build a Publication identifier from parsed publication data
|
|
150
|
+
# @param parsed [Hash] the parsed publication data
|
|
151
|
+
# @return [Identifiers::Publication] the constructed publication identifier
|
|
152
|
+
def build_publication(parsed)
|
|
153
|
+
attributes = extract_attributes(parsed)
|
|
154
|
+
|
|
155
|
+
# Extract revision (Rev. 01-23)
|
|
156
|
+
if parsed[:revision]
|
|
157
|
+
revision_data = parsed[:revision]
|
|
158
|
+
if revision_data && revision_data[:revision_year]
|
|
159
|
+
attributes[:revision] =
|
|
160
|
+
extract_value(revision_data[:revision_year])
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
Identifiers::Publication.new(**attributes)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Build a Standard identifier from parsed standard data
|
|
168
|
+
# @param parsed [Hash] the parsed standard data
|
|
169
|
+
# @return [Identifiers::Standard] the constructed standard identifier
|
|
170
|
+
def build_standard(parsed)
|
|
171
|
+
attributes = extract_attributes(parsed)
|
|
172
|
+
Identifiers::Standard.new(**attributes)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
# Base identifier class for AMCA identifiers. Canonical name
|
|
6
|
+
# Pubid::Amca::Identifier; common
|
|
7
|
+
# functionality for all AMCA identifier types.
|
|
8
|
+
class Identifier < ::Pubid::Identifier
|
|
9
|
+
# @raise [Pubid::Errors::ParseError] If parsing fails
|
|
10
|
+
def self.parse(identifier)
|
|
11
|
+
unless identifier.is_a?(String)
|
|
12
|
+
raise Pubid::Errors::InvalidInputError,
|
|
13
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
17
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
parsed = Parser.parse(identifier)
|
|
21
|
+
Builder.build(parsed)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Stored as a plain string (always "AMCA") so it round-trips through
|
|
25
|
+
# to_hash/from_hash. Was a `def publisher` method, which made lutaml
|
|
26
|
+
# serialize a String against the Components::Publisher attribute and raise.
|
|
27
|
+
attribute :publisher, :string, default: -> { "AMCA" }
|
|
28
|
+
attribute :copublisher, :string
|
|
29
|
+
# The document number used to live in AMCA's own `code` attribute, leaving
|
|
30
|
+
# the `number` inherited from ::Pubid::Identifier nil — so relaton-index,
|
|
31
|
+
# which sorts and bsearches on `id.root.number.to_s`, keyed every AMCA row
|
|
32
|
+
# on "". `code` is gone; each LEAF now declares `attribute :number,
|
|
33
|
+
# :string` (see standard.rb / publication.rb / interpretation.rb).
|
|
34
|
+
#
|
|
35
|
+
# It is declared on the leaves, never here: this class is inherited by all
|
|
36
|
+
# three of them, and redefining the parent's Components::Code-typed
|
|
37
|
+
# `number` on an inherited-from class resolves nondeterministically under
|
|
38
|
+
# multi-flavor load. Do not reintroduce `code`, and do not move `number`
|
|
39
|
+
# up here.
|
|
40
|
+
#
|
|
41
|
+
# A bare 2-digit edition year ("21", "02"). Declared :string, not
|
|
42
|
+
# Components::Date: the builder assigns a String and lutaml does not cast
|
|
43
|
+
# it, so a Date declaration left the PARSE path holding a String while
|
|
44
|
+
# from_hash produced a Components::Date — making
|
|
45
|
+
# `parse(x) == from_hash(parse(x).to_hash)` false for every AMCA id and
|
|
46
|
+
# breaking #matches?, which is built on ==. to_hash and to_s agreed, so
|
|
47
|
+
# the relaton index gate never caught it.
|
|
48
|
+
attribute :year, :string
|
|
49
|
+
attribute :suffix, :string
|
|
50
|
+
attribute :reaffirmed, :string
|
|
51
|
+
|
|
52
|
+
# Explicit key_value mapping: only these keys serialize (the inherited
|
|
53
|
+
# Pubid::Identifier attributes — including :type, which subclasses expose
|
|
54
|
+
# as a class-metadata Hash via `self.type` — are intentionally dropped).
|
|
55
|
+
# Every mapped attribute is a plain scalar, so no custom converters are
|
|
56
|
+
# needed; the canonical to_hash already drops empty and default values.
|
|
57
|
+
key_value do
|
|
58
|
+
map "_type", to: :_type
|
|
59
|
+
map "publisher", to: :publisher
|
|
60
|
+
map "copublisher", to: :copublisher
|
|
61
|
+
map "number", to: :number
|
|
62
|
+
map "year", to: :year
|
|
63
|
+
map "suffix", to: :suffix
|
|
64
|
+
map "reaffirmed", to: :reaffirmed
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def to_urn
|
|
68
|
+
UrnGenerator.new(self).generate
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# AMCA models its document type as class metadata (`self.type`), not as a
|
|
72
|
+
# `typed_stage`, so the base `mr_type` hook found nothing. Without it an
|
|
73
|
+
# interpretation and the standard it interprets share a slug — and
|
|
74
|
+
# `to_slug` is an output FILENAME. Before the index columns landed the
|
|
75
|
+
# whole flavor collapsed onto two slugs ("amca" and "").
|
|
76
|
+
def mr_type
|
|
77
|
+
return nil unless self.class.respond_to?(:type)
|
|
78
|
+
|
|
79
|
+
self.class.type[:key]&.to_s
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# AMCA keeps the edition in its own `year` string, not in the inherited
|
|
83
|
+
# `date`, so the base `mr_year` hook read nil and two editions of one
|
|
84
|
+
# standard — "ANSI/AMCA 300-14" and "ANSI/AMCA Standard 300-24" —
|
|
85
|
+
# produced the same slug. Same shape as the BIPM year recorded in
|
|
86
|
+
# CLAUDE.md.
|
|
87
|
+
def mr_year
|
|
88
|
+
year&.to_s
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Interpretation identifier for ACMA interpretations
|
|
7
|
+
# Examples:
|
|
8
|
+
# - AMCA 99 JW Interp
|
|
9
|
+
# - AMCA 204 – 1
|
|
10
|
+
# - ANSI/AMCA 204 Interp
|
|
11
|
+
class Interpretation < Identifier
|
|
12
|
+
attribute :number, :string
|
|
13
|
+
|
|
14
|
+
# See Publication: the hand-written keyword initializer bypassed lutaml,
|
|
15
|
+
# costing this class its `_type`, its `publisher` default and the
|
|
16
|
+
# serialization of `interpretation_code`.
|
|
17
|
+
attribute :interpretation_code, :string
|
|
18
|
+
|
|
19
|
+
key_value do
|
|
20
|
+
map "interpretation_code", to: :interpretation_code
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# The interpretation letter is what distinguishes one interpretation of
|
|
24
|
+
# a standard from another ("AMCA 99 JW Interp" vs "AMCA 99 KB Interp" —
|
|
25
|
+
# different documents, and #== agrees). It is in `==` and in `to_s`, so
|
|
26
|
+
# it must reach the slug too, or three interpretations of standard 99
|
|
27
|
+
# share one filename.
|
|
28
|
+
def mr_number_with_part
|
|
29
|
+
mr_join(super, interpretation_code&.to_s&.downcase)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.type
|
|
33
|
+
{ key: :interpretation, title: "Interpretation", short: "Interp" }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Publication identifier for ACMA publications
|
|
7
|
+
# Examples:
|
|
8
|
+
# - AMCA Publication 211-22 (Rev. 01-23)
|
|
9
|
+
# - AMCA Publication 311-16
|
|
10
|
+
# - AMCA Publication 1011-03 (R2010)
|
|
11
|
+
class Publication < Identifier
|
|
12
|
+
attribute :number, :string
|
|
13
|
+
|
|
14
|
+
# Was a hand-written keyword initializer assigning ivars directly,
|
|
15
|
+
# which bypassed lutaml entirely. Three things broke as a result: no
|
|
16
|
+
# `_type` was emitted (so Identifier.from_hash could not route back to
|
|
17
|
+
# this class), the `publisher` default never materialised, and
|
|
18
|
+
# `revision` was a plain attr_reader that to_hash dropped. Removing it
|
|
19
|
+
# — and making `revision` a real attribute — is the AIEE/IRE/NESC
|
|
20
|
+
# migration applied here; the builder already calls `new(**attributes)`
|
|
21
|
+
# exactly as it does for Standard, which never had this problem.
|
|
22
|
+
attribute :revision, :string
|
|
23
|
+
|
|
24
|
+
key_value do
|
|
25
|
+
map "revision", to: :revision
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.type
|
|
29
|
+
{ key: :publication, title: "Publication", short: nil }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Standard identifier for ACMA standards
|
|
7
|
+
# Examples:
|
|
8
|
+
# - ANSI/AMCA 210-16
|
|
9
|
+
# - ANSI/AMCA Standard 99-25
|
|
10
|
+
# - AMCA Standard 803-02 (R2008)
|
|
11
|
+
class Standard < Identifier
|
|
12
|
+
attribute :number, :string
|
|
13
|
+
|
|
14
|
+
def self.type
|
|
15
|
+
{ key: :standard, title: "Standard", short: nil }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
module Identifiers
|
|
6
|
+
autoload :Interpretation, "#{__dir__}/identifiers/interpretation"
|
|
7
|
+
autoload :Publication, "#{__dir__}/identifiers/publication"
|
|
8
|
+
autoload :Standard, "#{__dir__}/identifiers/standard"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
# Parser class for ACMA identifiers
|
|
6
|
+
# Single Responsibility: Parsing ACMA identifier syntax
|
|
7
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
8
|
+
# Basic building blocks
|
|
9
|
+
rule(:space) { str(" ") }
|
|
10
|
+
rule(:space?) { space.maybe }
|
|
11
|
+
rule(:dash) { str("-") }
|
|
12
|
+
rule(:slash) { str("/") }
|
|
13
|
+
rule(:lparen) { str("(") }
|
|
14
|
+
rule(:rparen) { str(")") }
|
|
15
|
+
rule(:dot) { str(".") }
|
|
16
|
+
|
|
17
|
+
rule(:digit) { match("[0-9]") }
|
|
18
|
+
rule(:digits) { digit.repeat(1) }
|
|
19
|
+
rule(:letter) { match("[A-Za-z]") }
|
|
20
|
+
|
|
21
|
+
# Year pattern (2 digits starting with 0-1, or 4 digits starting with 19 or 20)
|
|
22
|
+
rule(:year_digits) do
|
|
23
|
+
((str("19") | str("20")) >> digit.repeat(2, 2)) |
|
|
24
|
+
digit.repeat(2, 2)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Copublisher (ANSI/AMCA or AMCA)
|
|
28
|
+
rule(:copublisher) do
|
|
29
|
+
(str("ANSI") >> slash >> str("AMCA")) |
|
|
30
|
+
str("AMCA")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Additional copublisher after year (e.g., /ASHRAE 51-16)
|
|
34
|
+
rule(:additional_copublisher) do
|
|
35
|
+
slash >> letter.repeat(2,
|
|
36
|
+
10) >> space >> digits >> (dash >> digits).maybe
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Code pattern (e.g., 210, 500-D, 99, 204)
|
|
40
|
+
rule(:code) do
|
|
41
|
+
(
|
|
42
|
+
digits >> # Main number
|
|
43
|
+
(dash >> letter).maybe >> # Optional letter suffix (500-D)
|
|
44
|
+
(dot >> digits).maybe # Optional decimal (not in fixtures but possible)
|
|
45
|
+
).as(:code)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Type (Standard or Publication)
|
|
49
|
+
rule(:type) do
|
|
50
|
+
str("Standard") | str("Publication")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Reaffirmation year (R2008, R2010, etc.)
|
|
54
|
+
rule(:reaffirmation) do
|
|
55
|
+
lparen >> str("R") >> digits.as(:reaffirmed) >> rparen
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Suffix
|
|
59
|
+
rule(:suffix) do
|
|
60
|
+
str("R") | str("P")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Publication revision (Rev. 01-23)
|
|
64
|
+
rule(:revision) do
|
|
65
|
+
lparen >> str("Rev") >> dot.maybe >> space >> digits.as(:revision_year) >> dash >> digits >> rparen
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Interpretation code (JW, KB, RG, AW, AH, or just a number)
|
|
69
|
+
rule(:interpretation_code) do
|
|
70
|
+
letter.repeat(2).as(:interpretation_code) | # Two-letter code
|
|
71
|
+
digits.as(:interpretation_code) # Number
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Interpretation keyword
|
|
75
|
+
rule(:interp_keyword) do
|
|
76
|
+
space >> str("Interp")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Main identifier rule
|
|
80
|
+
rule(:identifier) do
|
|
81
|
+
# Interpretation patterns (must come first as they're more specific)
|
|
82
|
+
interpretation_identifier |
|
|
83
|
+
# Publication patterns
|
|
84
|
+
publication_identifier |
|
|
85
|
+
# Standard patterns (must come last as they're the most general)
|
|
86
|
+
standard_identifier
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Interpretation pattern (e.g., AMCA 99 JW Interp, AMCA 204 – 1)
|
|
90
|
+
rule(:interpretation_identifier) do
|
|
91
|
+
(
|
|
92
|
+
copublisher.as(:copublisher).maybe >> space >>
|
|
93
|
+
code >>
|
|
94
|
+
space >>
|
|
95
|
+
# Either a letter code (JW, KB, etc.) or a dash-number pattern
|
|
96
|
+
(
|
|
97
|
+
(interpretation_code >> interp_keyword) |
|
|
98
|
+
((str("–") | str("-")) >> digits.as(:interpretation_year) >> interp_keyword.maybe)
|
|
99
|
+
)
|
|
100
|
+
).as(:interpretation) |
|
|
101
|
+
# Simple interpretation: AMCA 511 Interp
|
|
102
|
+
(
|
|
103
|
+
copublisher.as(:copublisher).maybe >> space >>
|
|
104
|
+
code >>
|
|
105
|
+
interp_keyword
|
|
106
|
+
).as(:interpretation)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Publication pattern (e.g., AMCA Publication 211-22 (Rev. 01-23))
|
|
110
|
+
rule(:publication_identifier) do
|
|
111
|
+
(
|
|
112
|
+
copublisher.as(:copublisher).maybe >> space >>
|
|
113
|
+
str("Publication").as(:publication_keyword) >> space >>
|
|
114
|
+
code >>
|
|
115
|
+
(dash >> year_digits.as(:year)).maybe >>
|
|
116
|
+
(space >> revision).maybe >>
|
|
117
|
+
(space >> reaffirmation).maybe
|
|
118
|
+
).as(:publication)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Standard pattern (e.g., ANSI/AMCA 210-16, ANSI/AMCA Standard 99-25)
|
|
122
|
+
rule(:standard_identifier) do
|
|
123
|
+
(
|
|
124
|
+
copublisher.as(:copublisher).maybe >> space >>
|
|
125
|
+
type.as(:type).maybe >> space.maybe >>
|
|
126
|
+
code >>
|
|
127
|
+
(dash >> year_digits.as(:year)).maybe >>
|
|
128
|
+
(space >> additional_copublisher).maybe >>
|
|
129
|
+
suffix.maybe >>
|
|
130
|
+
(space >> reaffirmation).maybe
|
|
131
|
+
).as(:standard)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
root(:identifier)
|
|
135
|
+
|
|
136
|
+
def self.parse(string)
|
|
137
|
+
# Strip leading/trailing whitespace
|
|
138
|
+
cleaned = string.strip
|
|
139
|
+
|
|
140
|
+
# Normalize multiple spaces to single space
|
|
141
|
+
cleaned = cleaned.gsub(/\s+/, " ")
|
|
142
|
+
|
|
143
|
+
# Normalize en dash to regular dash
|
|
144
|
+
cleaned = cleaned.gsub("–", "-")
|
|
145
|
+
|
|
146
|
+
# Remove trailing periods and commas
|
|
147
|
+
cleaned = cleaned.gsub(/[,.]$/, "")
|
|
148
|
+
|
|
149
|
+
new.parse(cleaned)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
# Human-readable renderer for AMCA identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "AMCA Standard 210-16"
|
|
9
|
+
# "AMCA Publication 211-22 (Rev. 01-23)"
|
|
10
|
+
# "ANSI/AMCA 204 Interp"
|
|
11
|
+
# "AMCA 99 JW Interp"
|
|
12
|
+
#
|
|
13
|
+
# The renderer is registered as the `:human` format in the AMCA format
|
|
14
|
+
# registry and invoked via `render(format: :human)`.
|
|
15
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
16
|
+
def render(context: nil, **opts)
|
|
17
|
+
id = @id
|
|
18
|
+
|
|
19
|
+
case id
|
|
20
|
+
when Identifiers::Publication
|
|
21
|
+
render_publication(id)
|
|
22
|
+
when Identifiers::Interpretation
|
|
23
|
+
render_interpretation(id)
|
|
24
|
+
else
|
|
25
|
+
render_base(id)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def render_base(id)
|
|
32
|
+
parts = []
|
|
33
|
+
parts << id.copublisher if id.copublisher
|
|
34
|
+
t = id.class.respond_to?(:type) ? id.class.type : nil
|
|
35
|
+
if t.is_a?(Hash) && t[:title]
|
|
36
|
+
parts << t[:title].to_s
|
|
37
|
+
end
|
|
38
|
+
parts << id.number.to_s
|
|
39
|
+
parts << "-#{id.year}" if id.year
|
|
40
|
+
|
|
41
|
+
result = parts.compact.join(" ")
|
|
42
|
+
|
|
43
|
+
if id.copublisher&.include?("/") && id.year
|
|
44
|
+
type_title = t.is_a?(Hash) ? t[:title].to_s : ""
|
|
45
|
+
result = "#{id.copublisher} #{type_title} #{id.number}-#{id.year}"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
result += " (#{id.reaffirmed})" if id.reaffirmed
|
|
49
|
+
|
|
50
|
+
result
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def render_publication(id)
|
|
54
|
+
parts = []
|
|
55
|
+
parts << id.copublisher if id.copublisher
|
|
56
|
+
parts << "Publication"
|
|
57
|
+
parts << id.number.to_s
|
|
58
|
+
parts << "-#{id.year}" if id.year
|
|
59
|
+
parts << " (Rev. #{id.revision})" if id.revision
|
|
60
|
+
parts << " (#{id.reaffirmed})" if id.reaffirmed && !id.revision
|
|
61
|
+
|
|
62
|
+
parts.join(" ").squeeze(" ")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def render_interpretation(id)
|
|
66
|
+
parts = []
|
|
67
|
+
parts << id.copublisher if id.copublisher
|
|
68
|
+
parts << id.number.to_s
|
|
69
|
+
|
|
70
|
+
if id.interpretation_code
|
|
71
|
+
parts << "– #{id.interpretation_code}"
|
|
72
|
+
elsif id.year
|
|
73
|
+
parts << "-#{id.year}"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
parts << " #{id.suffix}" if id.suffix
|
|
77
|
+
|
|
78
|
+
parts.join(" ").squeeze(" ")
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Amca
|
|
5
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
6
|
+
def urn_number
|
|
7
|
+
return nil unless identifier.number
|
|
8
|
+
|
|
9
|
+
identifier.number.to_s
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def urn_year
|
|
13
|
+
return nil unless identifier.year
|
|
14
|
+
|
|
15
|
+
identifier.year.to_s
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def urn_suffix
|
|
19
|
+
identifier.suffix&.to_s&.downcase
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def urn_reaffirmed
|
|
23
|
+
"reaff.#{identifier.reaffirmed}" if identifier.reaffirmed
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def urn_copublisher
|
|
27
|
+
"copub.#{identifier.copublisher.to_s.downcase}" if identifier.copublisher
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def urn_type
|
|
31
|
+
(identifier.class.respond_to?(:type) ? identifier.class.type : nil)
|
|
32
|
+
&.to_s&.downcase
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def generate
|
|
36
|
+
parts = ["urn", "amca"]
|
|
37
|
+
parts << urn_number if urn_number
|
|
38
|
+
parts << urn_year if urn_year
|
|
39
|
+
parts << urn_suffix if urn_suffix
|
|
40
|
+
parts << urn_reaffirmed if urn_reaffirmed
|
|
41
|
+
parts << urn_copublisher if urn_copublisher
|
|
42
|
+
|
|
43
|
+
parts[1] = identifier.publisher.to_s.downcase if identifier.publisher
|
|
44
|
+
|
|
45
|
+
parts << urn_type if urn_type
|
|
46
|
+
|
|
47
|
+
parts.join(":")
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|