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,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
# Turns the parse tree into an Ogc::Identifiers::Document. OGC has a single
|
|
6
|
+
# document type, so there is no type dispatch.
|
|
7
|
+
class Builder
|
|
8
|
+
def self.build(parsed_data)
|
|
9
|
+
new.build(parsed_data)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def build(data)
|
|
13
|
+
Identifiers::Document.new(
|
|
14
|
+
year: data[:year].to_s,
|
|
15
|
+
number: data[:number].to_s,
|
|
16
|
+
revision: normalize_revision(data[:revision]),
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
# Normalize the revision suffix to its canonical lowercased form (the
|
|
23
|
+
# shape the relaton index stores, e.g. "R1" -> "r1"). nil when there is
|
|
24
|
+
# no revision.
|
|
25
|
+
def normalize_revision(revision)
|
|
26
|
+
return nil if revision.nil?
|
|
27
|
+
|
|
28
|
+
normalized = revision.to_s.strip.downcase
|
|
29
|
+
normalized.empty? ? nil : normalized
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
# Base class for every OGC identifier AND the flavor's parse/create entry
|
|
6
|
+
# point. There is a single concrete type (Identifiers::Document), so this
|
|
7
|
+
# base mostly exists to hold the shared attributes and the polymorphic
|
|
8
|
+
# serialization mapping.
|
|
9
|
+
class Identifier < ::Pubid::Identifier
|
|
10
|
+
# OGC ids are digit-leading (`<yy>-<nnn>`) with no publisher token in the
|
|
11
|
+
# printed form. Everything is kept as a string to preserve zero-padding
|
|
12
|
+
# ("032", not 32) and the exact revision suffix.
|
|
13
|
+
attribute :year, :string # the "<yy>" field, e.g. "24"
|
|
14
|
+
attribute :number, :string # the "<nnn>" field, e.g. "032"
|
|
15
|
+
# Optional revision suffix, stored as the full lowercased token including
|
|
16
|
+
# its separator letter: "r1", "c1", "a", "r3a", "r12a". nil when absent.
|
|
17
|
+
attribute :revision, :string
|
|
18
|
+
|
|
19
|
+
# Polymorphic type map for lutaml::Model key_value (de)serialization: maps
|
|
20
|
+
# the concrete class's polymorphic_name to its class name so a stored hash
|
|
21
|
+
# rebuilds the correct identifier type via from_hash.
|
|
22
|
+
OGC_TYPE_MAP = {
|
|
23
|
+
"pubid:ogc:document" => "Pubid::Ogc::Identifiers::Document",
|
|
24
|
+
}.freeze
|
|
25
|
+
|
|
26
|
+
key_value do
|
|
27
|
+
map "_type", to: :_type, polymorphic_map: OGC_TYPE_MAP
|
|
28
|
+
map "year", to: :year
|
|
29
|
+
map "number", to: :number
|
|
30
|
+
map "revision", to: :revision
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Publisher is always "OGC". A plain constant (not a `publisher` method)
|
|
34
|
+
# so it doesn't shadow the inherited lutaml `publisher` attribute, which
|
|
35
|
+
# would otherwise fail serialization type validation.
|
|
36
|
+
PUBLISHER = "OGC"
|
|
37
|
+
|
|
38
|
+
attr_reader :with_publisher
|
|
39
|
+
|
|
40
|
+
# Basic string representation. Delegates to the human renderer. The
|
|
41
|
+
# printed OGC id carries no publisher token, so with_publisher defaults to
|
|
42
|
+
# false; pass with_publisher: true to prepend "OGC ".
|
|
43
|
+
def to_s(**opts)
|
|
44
|
+
render(format: :human, **opts)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Capture the with_publisher flag on EVERY render call (default false), so
|
|
48
|
+
# it can never leak across calls: a bare render/to_s always renders
|
|
49
|
+
# without the publisher token regardless of a prior with_publisher: true.
|
|
50
|
+
# The base `render` only forwards `:with_edition` to the renderer, so the
|
|
51
|
+
# flag is threaded via this per-call instance write (the renderer reads
|
|
52
|
+
# `id.with_publisher`).
|
|
53
|
+
def render(format: :human, with_publisher: false, **opts)
|
|
54
|
+
@with_publisher = with_publisher
|
|
55
|
+
super(format: format, **opts)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# from_hash is the shared polymorphic dispatch on Pubid::Identifier.
|
|
59
|
+
# OGC_TYPE_MAP remains as the key_value polymorphic_map.
|
|
60
|
+
|
|
61
|
+
# Parse an OGC identifier string into an identifier object.
|
|
62
|
+
# @param identifier [String] The OGC identifier string to parse
|
|
63
|
+
# @return [Identifier] The document identifier object
|
|
64
|
+
# @raise [Pubid::Errors::InvalidInputError]
|
|
65
|
+
# If the input exceeds the maximum length
|
|
66
|
+
# @raise [Pubid::Errors::ParseError] If parsing fails
|
|
67
|
+
def self.parse(identifier)
|
|
68
|
+
unless identifier.is_a?(String)
|
|
69
|
+
raise Pubid::Errors::InvalidInputError,
|
|
70
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
74
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
Builder.build(Parser.parse(identifier))
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
module Identifiers
|
|
6
|
+
# The sole OGC identifier type. An OGC document is numbered
|
|
7
|
+
# `<yy>-<nnn>[<revision>]` with no publisher token in the printed form.
|
|
8
|
+
class Document < Identifier
|
|
9
|
+
TYPED_STAGES = [
|
|
10
|
+
Pubid::Components::TypedStage.new(
|
|
11
|
+
code: :ogc,
|
|
12
|
+
stage_code: :published,
|
|
13
|
+
type_code: :ogc,
|
|
14
|
+
abbr: ["OGC"],
|
|
15
|
+
name: "OGC Document",
|
|
16
|
+
harmonized_stages: [],
|
|
17
|
+
),
|
|
18
|
+
].freeze
|
|
19
|
+
|
|
20
|
+
def self.type
|
|
21
|
+
{ key: :ogc, web: :document, title: "OGC Document", short: "OGC" }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Ogc
|
|
7
|
+
# Parslet grammar for OGC identifiers.
|
|
8
|
+
#
|
|
9
|
+
# Recognizes `<yy>-<nnn>` optionally followed by a revision suffix that
|
|
10
|
+
# begins with a letter (r/c/a/R…) and may carry a trailing letter
|
|
11
|
+
# (e.g. "r3a"). An optional leading "OGC" publisher token is accepted for
|
|
12
|
+
# leniency, though the canonical printed form omits it.
|
|
13
|
+
#
|
|
14
|
+
# Examples: "25-023", "24-032r1", "01-009a", "04-095c1", "OGC 24-032r1".
|
|
15
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
16
|
+
rule(:space) { match["\\s"].repeat(1) }
|
|
17
|
+
rule(:digits) { match["0-9"].repeat(1) }
|
|
18
|
+
|
|
19
|
+
# Optional leading publisher token, e.g. "OGC " — consumed, not captured.
|
|
20
|
+
rule(:publisher) { (str("OGC") >> space).maybe }
|
|
21
|
+
|
|
22
|
+
# Revision suffix: a run of letters/digits that starts after the numeric
|
|
23
|
+
# part (which greedily consumes all digits, so the suffix begins with a
|
|
24
|
+
# separator letter). Kept as a single token for the builder to normalize.
|
|
25
|
+
rule(:revision) { match["A-Za-z0-9"].repeat(1).as(:revision) }
|
|
26
|
+
|
|
27
|
+
rule(:identifier) do
|
|
28
|
+
publisher >>
|
|
29
|
+
digits.as(:year) >> str("-") >> digits.as(:number) >>
|
|
30
|
+
revision.maybe >> space.maybe
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
root(:identifier)
|
|
34
|
+
|
|
35
|
+
def self.parse(input)
|
|
36
|
+
new.parse(input)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
# Human-readable renderer for OGC identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces the canonical printed form, e.g.:
|
|
8
|
+
# "24-032r1"
|
|
9
|
+
# "01-009a"
|
|
10
|
+
# "OGC 24-032r1" (only when with_publisher: true)
|
|
11
|
+
#
|
|
12
|
+
# Registered as the `:human` format in the OGC format registry and invoked
|
|
13
|
+
# via `render(format: :human)`.
|
|
14
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
15
|
+
PUBLISHER = "OGC"
|
|
16
|
+
|
|
17
|
+
def render(**_opts)
|
|
18
|
+
id = @id
|
|
19
|
+
result = +""
|
|
20
|
+
result << "#{PUBLISHER} " if with_publisher?(id)
|
|
21
|
+
result << "#{id.year}-#{id.number}"
|
|
22
|
+
result << id.revision.to_s if id.revision
|
|
23
|
+
result
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def with_publisher?(id)
|
|
29
|
+
id.respond_to?(:with_publisher) && id.with_publisher == true
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
# Emits `urn:ogc:<year>:<number>[:<revision>]`, e.g. `urn:ogc:24:032:r1`.
|
|
6
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
7
|
+
def generate
|
|
8
|
+
parts = ["urn", "ogc", identifier.year.to_s, identifier.number.to_s]
|
|
9
|
+
parts << identifier.revision.to_s if identifier.revision
|
|
10
|
+
parts.join(":")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
# Parses OGC URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits: `urn:ogc:<year>:<number>[:<revision>]`.
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# - urn:ogc:25:023 → 25-023
|
|
11
|
+
# - urn:ogc:24:032:r1 → 24-032r1
|
|
12
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
13
|
+
def parse_urn(urn)
|
|
14
|
+
body = strip_namespace(urn)
|
|
15
|
+
year, number, revision = split_parts(body)
|
|
16
|
+
text = "#{year}-#{number}"
|
|
17
|
+
text += revision.to_s if revision
|
|
18
|
+
flavor_parse(text)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/pubid/ogc.rb
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# OGC identifiers are digit-leading (`25-023`) and carry no publisher token
|
|
8
|
+
# in the printed form. Per the PREFIXES inclusion policy, bare numeric
|
|
9
|
+
# patterns are NOT listed (they would make cross-flavor routing ambiguous).
|
|
10
|
+
# Instead the sole entry is the publisher token "OGC", which relaton uses to
|
|
11
|
+
# route a reference to this flavor even though it is not literally present
|
|
12
|
+
# in the id string.
|
|
13
|
+
PREFIXES = ["OGC"].freeze
|
|
14
|
+
|
|
15
|
+
autoload :Builder, "#{__dir__}/ogc/builder"
|
|
16
|
+
autoload :Identifier, "#{__dir__}/ogc/identifier"
|
|
17
|
+
autoload :Identifiers, "#{__dir__}/ogc/identifiers"
|
|
18
|
+
autoload :Parser, "#{__dir__}/ogc/parser"
|
|
19
|
+
autoload :Renderer, "#{__dir__}/ogc/renderer"
|
|
20
|
+
autoload :UrnGenerator, "#{__dir__}/ogc/urn_generator"
|
|
21
|
+
autoload :UrnParser, "#{__dir__}/ogc/urn_parser"
|
|
22
|
+
|
|
23
|
+
# Parse an OGC identifier string
|
|
24
|
+
def self.parse(identifier)
|
|
25
|
+
Identifier.parse(identifier)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
29
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
30
|
+
Identifier.format_registry.register(:human, renderer: Ogc::Renderer)
|
|
31
|
+
|
|
32
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
33
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
34
|
+
def self.identifier_types
|
|
35
|
+
@identifier_types ||= Identifiers.constants
|
|
36
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
37
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
38
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Build typed stage index from identifier types
|
|
42
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
43
|
+
def self.all_typed_stages
|
|
44
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
45
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
46
|
+
klass.const_get(:TYPED_STAGES)
|
|
47
|
+
else
|
|
48
|
+
[]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Lookup: type code -> identifier class
|
|
54
|
+
# @param code [String, Symbol] the type key to find
|
|
55
|
+
# @return [Class, nil] the matching identifier class
|
|
56
|
+
def self.locate_type(code)
|
|
57
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Lookup: abbreviation -> typed stage
|
|
61
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
62
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
63
|
+
def self.locate_stage(abbr)
|
|
64
|
+
abbr_str = abbr.to_s.upcase
|
|
65
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Register OGC flavor with the registry
|
|
71
|
+
Pubid::Registry.register(:ogc, Pubid::Ogc)
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Oiml
|
|
5
|
+
class Builder
|
|
6
|
+
# Type to identifier class mapping (MECE)
|
|
7
|
+
TYPE_CLASS_MAP = {
|
|
8
|
+
"B" => "BasicPublication",
|
|
9
|
+
"Bulletin" => "Bulletin",
|
|
10
|
+
"D" => "Document",
|
|
11
|
+
"E" => "ExpertReport",
|
|
12
|
+
"G" => "Guide",
|
|
13
|
+
"R" => "Recommendation",
|
|
14
|
+
"S" => "SeminarReport",
|
|
15
|
+
"V" => "Vocabulary",
|
|
16
|
+
}.freeze
|
|
17
|
+
|
|
18
|
+
def build(parsed_hash)
|
|
19
|
+
# Check for short amendment format (has amd_marker)
|
|
20
|
+
if parsed_hash[:amd_marker]
|
|
21
|
+
return build_short_amendment(parsed_hash)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Check for supplements first (have base)
|
|
25
|
+
if parsed_hash[:base]
|
|
26
|
+
return build_supplement(parsed_hash)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Build base document
|
|
30
|
+
build_base_document(parsed_hash)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def build_short_amendment(parsed_hash)
|
|
36
|
+
# Build base identifier from the code and type
|
|
37
|
+
base_hash = {
|
|
38
|
+
publisher: parsed_hash[:publisher],
|
|
39
|
+
type: parsed_hash[:type],
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Copy number/part/subpart from base_code
|
|
43
|
+
if parsed_hash[:base_code]
|
|
44
|
+
base_hash[:number] = parsed_hash[:base_code][:number]
|
|
45
|
+
if parsed_hash[:base_code][:part]
|
|
46
|
+
base_hash[:part] =
|
|
47
|
+
parsed_hash[:base_code][:part]
|
|
48
|
+
end
|
|
49
|
+
if parsed_hash[:base_code][:subpart]
|
|
50
|
+
base_hash[:subpart] =
|
|
51
|
+
parsed_hash[:base_code][:subpart]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Build the base document
|
|
56
|
+
base = build_base_document(base_hash)
|
|
57
|
+
|
|
58
|
+
# Create amendment
|
|
59
|
+
amendment = Identifiers::Amendment.new
|
|
60
|
+
amendment.base = base
|
|
61
|
+
|
|
62
|
+
# Extract year from edition_format if present, otherwise from year directly
|
|
63
|
+
year_value = if parsed_hash[:edition_format].is_a?(Hash)
|
|
64
|
+
parsed_hash[:edition_format][:year]
|
|
65
|
+
else
|
|
66
|
+
parsed_hash[:year]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
amendment.year = year_value.to_s if year_value
|
|
70
|
+
amendment.language = extract_language(parsed_hash[:language]) if parsed_hash[:language]
|
|
71
|
+
|
|
72
|
+
# Track if amendment itself was parsed with Edition format
|
|
73
|
+
if parsed_hash[:edition_format]
|
|
74
|
+
amendment.parsed_format = "long"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
amendment
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def build_supplement(parsed_hash)
|
|
81
|
+
marker = parsed_hash[:trailing_marker].to_s if parsed_hash[:trailing_marker]
|
|
82
|
+
plus_marker = parsed_hash[:plus_marker].to_s if parsed_hash[:plus_marker]
|
|
83
|
+
|
|
84
|
+
# Determine supplement type. The trailing word ("Amendment"/"Errata")
|
|
85
|
+
# selects the class; the concrete class then carries the word via
|
|
86
|
+
# #supplement_type, so only the `trailing` flag needs storing.
|
|
87
|
+
supplement_class = if parsed_hash[:annex_letter] || parsed_hash[:annex_marker]
|
|
88
|
+
Identifiers::Annex
|
|
89
|
+
elsif marker == "Errata" || plus_marker == "Errata"
|
|
90
|
+
Identifiers::Errata
|
|
91
|
+
else
|
|
92
|
+
Identifiers::Amendment
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
supplement = supplement_class.new
|
|
96
|
+
supplement.trailing = true if marker
|
|
97
|
+
supplement.joined = true if plus_marker
|
|
98
|
+
|
|
99
|
+
# Recursively parse base identifier
|
|
100
|
+
if parsed_hash[:base]
|
|
101
|
+
supplement.base = build(parsed_hash[:base])
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Extract year from edition_format if present, otherwise from year directly
|
|
105
|
+
year_value = if parsed_hash[:edition_format].is_a?(Hash)
|
|
106
|
+
parsed_hash[:edition_format][:year]
|
|
107
|
+
else
|
|
108
|
+
parsed_hash[:year]
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Set supplement-specific attributes
|
|
112
|
+
supplement.year = year_value.to_s if year_value
|
|
113
|
+
supplement.language = extract_language(parsed_hash[:language]) if parsed_hash[:language]
|
|
114
|
+
supplement.letter = parsed_hash[:annex_letter].to_s if parsed_hash[:annex_letter]
|
|
115
|
+
|
|
116
|
+
# Annex with no year of its own but a dated base ("R 60:2017 Annexes"):
|
|
117
|
+
# the year belongs to the base and must render glued to it.
|
|
118
|
+
if supplement.is_a?(Identifiers::Annex) && !year_value &&
|
|
119
|
+
supplement.base&.date
|
|
120
|
+
supplement.year_on_base = true
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Track if supplement itself was parsed with Edition format
|
|
124
|
+
if parsed_hash[:edition_format]
|
|
125
|
+
supplement.parsed_format = "long"
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
supplement
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def build_base_document(parsed_hash)
|
|
132
|
+
# Determine identifier class from type
|
|
133
|
+
type = parsed_hash[:type].to_s
|
|
134
|
+
class_name = TYPE_CLASS_MAP[type] || "Recommendation" # Default to R
|
|
135
|
+
identifier_class = Identifiers.const_get(class_name)
|
|
136
|
+
|
|
137
|
+
identifier = identifier_class.new
|
|
138
|
+
|
|
139
|
+
# Handle code (number-part-subpart-suffix) specially
|
|
140
|
+
if parsed_hash[:number] || parsed_hash[:part] || parsed_hash[:subpart] || parsed_hash[:code_suffix]
|
|
141
|
+
code_attrs = {}
|
|
142
|
+
if parsed_hash[:number]
|
|
143
|
+
code_attrs[:number] =
|
|
144
|
+
parsed_hash[:number].to_s
|
|
145
|
+
end
|
|
146
|
+
code_attrs[:part] = parsed_hash[:part].to_s if parsed_hash[:part]
|
|
147
|
+
if parsed_hash[:subpart]
|
|
148
|
+
code_attrs[:subpart] =
|
|
149
|
+
parsed_hash[:subpart].to_s
|
|
150
|
+
end
|
|
151
|
+
if parsed_hash[:code_suffix]
|
|
152
|
+
code_attrs[:suffix] = parsed_hash[:code_suffix].to_s
|
|
153
|
+
code_attrs[:space_suffix] = true if parsed_hash.key?(:space_suffix)
|
|
154
|
+
end
|
|
155
|
+
# The code fields are flat index columns on the leaf (see
|
|
156
|
+
# Identifiers::CodeNumber) — `number` is what relaton-index keys on —
|
|
157
|
+
# so they are assigned individually rather than as a Code object.
|
|
158
|
+
# Bulletin has no code columns and never reaches this branch.
|
|
159
|
+
code_attrs.each { |name, value| identifier.public_send(:"#{name}=", value) }
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Handle other attributes
|
|
163
|
+
identifier.publisher = parsed_hash[:publisher].to_s if parsed_hash[:publisher]
|
|
164
|
+
|
|
165
|
+
# Handle edition attribute
|
|
166
|
+
identifier.edition = parsed_hash[:edition].to_s if parsed_hash[:edition]
|
|
167
|
+
|
|
168
|
+
# Handle year -> date conversion
|
|
169
|
+
# Year could be in edition_format hash or directly
|
|
170
|
+
year_value = nil
|
|
171
|
+
if parsed_hash[:edition_format].is_a?(Hash)
|
|
172
|
+
year_value = parsed_hash[:edition_format][:year]
|
|
173
|
+
# Also extract edition if present
|
|
174
|
+
identifier.edition = parsed_hash[:edition_format][:edition].to_s if parsed_hash[:edition_format][:edition]
|
|
175
|
+
elsif parsed_hash[:year]
|
|
176
|
+
year_value = parsed_hash[:year]
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
if year_value
|
|
180
|
+
identifier.date = Pubid::Components::Date.new(year: year_value.to_s)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Bulletin-specific locator fields. The structured form captures
|
|
184
|
+
# issue/sequence directly; the citation form captures volume/issue/
|
|
185
|
+
# article_id, which we decode to the same (year, issue, sequence)
|
|
186
|
+
# tuple. Year comes from either the date rule (structured) or the
|
|
187
|
+
# article_id (citation).
|
|
188
|
+
if identifier.is_a?(Identifiers::Bulletin)
|
|
189
|
+
apply_bulletin_locator(identifier, parsed_hash)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Determine parsed format for round-trip fidelity
|
|
193
|
+
# If edition_format was captured, it means "Edition" text was present
|
|
194
|
+
identifier.parsed_format = if parsed_hash[:edition_format]
|
|
195
|
+
"long"
|
|
196
|
+
elsif parsed_hash[:space_before_lang]
|
|
197
|
+
"short_with_space"
|
|
198
|
+
elsif parsed_hash[:article_id]
|
|
199
|
+
# Bulletin citation form — preserve on
|
|
200
|
+
# the identifier so default to_s gives
|
|
201
|
+
# back the citation string verbatim.
|
|
202
|
+
"citation"
|
|
203
|
+
else
|
|
204
|
+
"short"
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Handle stage attributes
|
|
208
|
+
identifier.stage = parsed_hash[:stage].to_s if parsed_hash[:stage]
|
|
209
|
+
identifier.iteration = parsed_hash[:iteration].to_s if parsed_hash[:iteration]
|
|
210
|
+
|
|
211
|
+
# Handle language
|
|
212
|
+
identifier.language = extract_language(parsed_hash[:language]) if parsed_hash[:language]
|
|
213
|
+
|
|
214
|
+
identifier
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Populate issue/sequence on a Bulletin from either parse shape.
|
|
218
|
+
# Structured: :issue and :sequence captured directly as zero-padded
|
|
219
|
+
# strings. Citation: :volume_roman, :issue_arabic, :article_id —
|
|
220
|
+
# decode the 8-digit article_id to recover year+issue+sequence.
|
|
221
|
+
#
|
|
222
|
+
# For the citation form, the parsed roman volume is cross-checked
|
|
223
|
+
# against the year decoded from the article_id; a mismatch warns but
|
|
224
|
+
# does not raise (the article_id is the source of truth — the roman
|
|
225
|
+
# volume is redundant display).
|
|
226
|
+
def apply_bulletin_locator(identifier, parsed_hash)
|
|
227
|
+
if parsed_hash[:article_id]
|
|
228
|
+
article_id = parsed_hash[:article_id].to_s
|
|
229
|
+
identifier.date ||= Pubid::Components::Date.new
|
|
230
|
+
identifier.date.year = article_id[0, 4]
|
|
231
|
+
identifier.issue = article_id[4, 2]
|
|
232
|
+
identifier.sequence = article_id[6, 2]
|
|
233
|
+
warn_on_volume_mismatch(identifier, parsed_hash[:volume_roman])
|
|
234
|
+
return
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
identifier.issue = parsed_hash[:issue].to_s if parsed_hash[:issue]
|
|
238
|
+
identifier.sequence = parsed_hash[:sequence].to_s if parsed_hash[:sequence]
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
# Citation form carries the volume in two places: spelled out as a
|
|
242
|
+
# roman numeral ("LXVII") and encoded in the 8-digit article_id
|
|
243
|
+
# (year+issue+sequence, where year - 1959 = volume). They should
|
|
244
|
+
# agree; if they don't, the input was malformed. Warn loudly so the
|
|
245
|
+
# user sees the discrepancy, but continue using the article_id
|
|
246
|
+
# (deterministic) rather than the roman (possibly mistyped).
|
|
247
|
+
def warn_on_volume_mismatch(identifier, parsed_volume_roman)
|
|
248
|
+
return unless parsed_volume_roman && identifier.date&.year
|
|
249
|
+
|
|
250
|
+
declared = parsed_volume_roman.to_s
|
|
251
|
+
computed = Identifiers::Bulletin.to_roman(identifier.date.year.to_i -
|
|
252
|
+
Identifiers::Bulletin::BASE_YEAR_OFFSET)
|
|
253
|
+
return if declared == computed
|
|
254
|
+
|
|
255
|
+
warn "OIML Bulletin citation volume mismatch: parsed '#{declared}' " \
|
|
256
|
+
"but article_id year #{identifier.date.year} implies '#{computed}'"
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def extract_language(lang_data)
|
|
260
|
+
# Handle both direct string and nested hash from parser
|
|
261
|
+
case lang_data
|
|
262
|
+
when Hash
|
|
263
|
+
lang_data[:language].to_s
|
|
264
|
+
else
|
|
265
|
+
lang_data.to_s
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Oiml
|
|
5
|
+
module Components
|
|
6
|
+
# Code component for OIML identifiers.
|
|
7
|
+
#
|
|
8
|
+
# Stays independent of Pubid::Components::Code because OIML uses
|
|
9
|
+
# +number+ as the primary field (shared Code uses +value+). The
|
|
10
|
+
# shape is otherwise compatible; a future rename of +number+ →
|
|
11
|
+
# +value+ would let this become a subclass.
|
|
12
|
+
class Code < Lutaml::Model::Serializable
|
|
13
|
+
attribute :number, :string
|
|
14
|
+
attribute :part, :string
|
|
15
|
+
attribute :subpart, :string
|
|
16
|
+
# Free-form trailing suffix glued to the code, e.g. "sup", "A",
|
|
17
|
+
# "erratum", "GUM 1", "ISO3930". Preserved verbatim for round-trip.
|
|
18
|
+
attribute :suffix, :string
|
|
19
|
+
# When true the suffix is space-separated ("D 1 Brochure") rather than
|
|
20
|
+
# the default dash ("R 60-sup").
|
|
21
|
+
attribute :space_suffix, :boolean, default: false
|
|
22
|
+
|
|
23
|
+
def to_s
|
|
24
|
+
result = number.to_s
|
|
25
|
+
result += "-#{part}" if part
|
|
26
|
+
result += "-#{subpart}" if subpart
|
|
27
|
+
result += "#{space_suffix ? ' ' : '-'}#{suffix}" if suffix
|
|
28
|
+
result
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def render(context: nil)
|
|
32
|
+
to_s
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|