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
data/lib/pubid/errors.rb
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
# Every failure pubid raises.
|
|
7
|
+
#
|
|
8
|
+
# The three classes below have three different superclasses, chosen so that
|
|
9
|
+
# code written against the old contract keeps working: relaton-cli rescues
|
|
10
|
+
# `Parslet::ParseFailed`, and the input guards have always raised
|
|
11
|
+
# `ArgumentError`. What unifies them is the marker module
|
|
12
|
+
# {Pubid::Errors::Error}, which every one of them includes, so a caller that
|
|
13
|
+
# wants "pubid could not do this" writes one rescue:
|
|
14
|
+
#
|
|
15
|
+
# begin
|
|
16
|
+
# Pubid::Iso.parse(reference)
|
|
17
|
+
# rescue Pubid::Errors::Error => e
|
|
18
|
+
# warn e.message
|
|
19
|
+
# end
|
|
20
|
+
#
|
|
21
|
+
# A URN failure deliberately does not inherit `Parslet::ParseFailed`: no
|
|
22
|
+
# grammar runs, so there is no parse failure to report.
|
|
23
|
+
module Errors
|
|
24
|
+
# Marker module included by every pubid error. Rescue this to catch all
|
|
25
|
+
# of them, whatever their superclass.
|
|
26
|
+
module Error; end
|
|
27
|
+
|
|
28
|
+
# A printed identifier could not be turned into an identifier object.
|
|
29
|
+
#
|
|
30
|
+
# Raised for a grammar rejection, and also for the few flavors that reject
|
|
31
|
+
# an input before the grammar runs (a CSA comment line, a bad ISBN check
|
|
32
|
+
# digit). Those synthetic failures carry no parslet cause, so
|
|
33
|
+
# {#parse_failure_cause} is nillable — check it before calling
|
|
34
|
+
# `ascii_tree` on it.
|
|
35
|
+
#
|
|
36
|
+
# v1's `Pubid::Core::Errors::ParseError` flattened the cause into the
|
|
37
|
+
# message and threw the object away. This one keeps it.
|
|
38
|
+
class ParseError < ::Parslet::ParseFailed
|
|
39
|
+
include Error
|
|
40
|
+
|
|
41
|
+
# The string that could not be parsed, when it is known.
|
|
42
|
+
# @return [String, nil]
|
|
43
|
+
attr_reader :input
|
|
44
|
+
|
|
45
|
+
# The flavor whose grammar rejected the input, lowercased ("iso").
|
|
46
|
+
#
|
|
47
|
+
# This is the flavor that actually ran, which is not always the one the
|
|
48
|
+
# caller named: `Pubid::Iso.parse("ITU-T G.711")` routes through the
|
|
49
|
+
# MR-string parser into ITU, and reports "itu".
|
|
50
|
+
# @return [String, nil]
|
|
51
|
+
attr_reader :flavor
|
|
52
|
+
|
|
53
|
+
# @param message [String]
|
|
54
|
+
# @param parse_failure_cause [Parslet::Cause, nil] parslet's structured
|
|
55
|
+
# cause, nil for a failure raised without running a grammar
|
|
56
|
+
# @param input [String, nil]
|
|
57
|
+
# @param flavor [String, nil]
|
|
58
|
+
def initialize(message, parse_failure_cause = nil, input: nil,
|
|
59
|
+
flavor: nil)
|
|
60
|
+
super(message, parse_failure_cause)
|
|
61
|
+
@input = input
|
|
62
|
+
@flavor = flavor
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# A URN could not be turned into an identifier object.
|
|
67
|
+
class UrnParseError < ::StandardError
|
|
68
|
+
include Error
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# The input was not a String, or was longer than {Pubid::MAX_INPUT_LENGTH}.
|
|
72
|
+
#
|
|
73
|
+
# Inherits `ArgumentError` because that is what the guards have always
|
|
74
|
+
# raised, and because the input is wrong in kind rather than unparseable.
|
|
75
|
+
class InvalidInputError < ::ArgumentError
|
|
76
|
+
include Error
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Etsi
|
|
5
|
+
class Builder
|
|
6
|
+
def self.build(parsed_data)
|
|
7
|
+
new.build(parsed_data)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def build(data)
|
|
11
|
+
# Check if supplements are present
|
|
12
|
+
if data[:supplements]
|
|
13
|
+
build_with_supplements(data)
|
|
14
|
+
else
|
|
15
|
+
build_etsi_standard(data)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def build_with_supplements(data)
|
|
22
|
+
# Build base identifier first (without supplements)
|
|
23
|
+
base_data = data.dup
|
|
24
|
+
base_data.delete(:supplements)
|
|
25
|
+
base = build_etsi_standard(base_data)
|
|
26
|
+
|
|
27
|
+
# Process supplements - create supplement objects wrapping the base
|
|
28
|
+
supplements_array = data[:supplements]
|
|
29
|
+
supplements_array = [supplements_array] unless supplements_array.is_a?(Array)
|
|
30
|
+
|
|
31
|
+
# Build supplements recursively - each wraps the previous
|
|
32
|
+
supplements_array.reduce(base) do |current_base, supp|
|
|
33
|
+
if supp[:amendment]
|
|
34
|
+
Identifiers::Amendment.new(
|
|
35
|
+
base: current_base,
|
|
36
|
+
number: supp[:amendment][:number].to_i,
|
|
37
|
+
)
|
|
38
|
+
elsif supp[:corrigendum]
|
|
39
|
+
Identifiers::Corrigendum.new(
|
|
40
|
+
base: current_base,
|
|
41
|
+
number: supp[:corrigendum][:number].to_i,
|
|
42
|
+
)
|
|
43
|
+
else
|
|
44
|
+
current_base # Skip unknown supplement types
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def build_etsi_standard(data)
|
|
50
|
+
# Build components
|
|
51
|
+
code = build_code(data)
|
|
52
|
+
version = build_version(data)
|
|
53
|
+
date = build_date(data)
|
|
54
|
+
|
|
55
|
+
# The code fields are stored as flat index columns on the leaf (see
|
|
56
|
+
# EtsiStandard) — `number` is what relaton-index keys on — so the Code
|
|
57
|
+
# object built above is unpacked rather than assigned.
|
|
58
|
+
Identifiers::EtsiStandard.new(
|
|
59
|
+
type: data[:type].to_s,
|
|
60
|
+
number: code.number,
|
|
61
|
+
minor: code.minor,
|
|
62
|
+
parts: code.parts || [],
|
|
63
|
+
version: version,
|
|
64
|
+
date: date,
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def build_code(data)
|
|
69
|
+
number_data = data[:number]
|
|
70
|
+
|
|
71
|
+
# Extract number string based on format
|
|
72
|
+
number = if number_data.is_a?(Hash)
|
|
73
|
+
# Captured format
|
|
74
|
+
if number_data[:gsm_prefix]
|
|
75
|
+
# GSM with space: "GSM 11.14"
|
|
76
|
+
"GSM #{number_data[:main]}.#{number_data[:sub]}"
|
|
77
|
+
elsif number_data[:main] && number_data[:sub]
|
|
78
|
+
# Dotted format: "11.40"
|
|
79
|
+
"#{number_data[:main]}.#{number_data[:sub]}"
|
|
80
|
+
elsif number_data[:prefix1]
|
|
81
|
+
# Complex format: "ABC 123" or "ABC-DEF 123"
|
|
82
|
+
prefix = number_data[:prefix1].to_s
|
|
83
|
+
prefix += "-#{number_data[:prefix2]}" if number_data[:prefix2]
|
|
84
|
+
"#{prefix} #{number_data[:num]}"
|
|
85
|
+
else
|
|
86
|
+
# Simple with capture
|
|
87
|
+
number_data[:num].to_s
|
|
88
|
+
end
|
|
89
|
+
else
|
|
90
|
+
number_data.to_s
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
parts = extract_parts(data[:parts])
|
|
94
|
+
|
|
95
|
+
Components::Code.new(
|
|
96
|
+
number: number,
|
|
97
|
+
minor: data[:minor]&.to_s,
|
|
98
|
+
parts: parts,
|
|
99
|
+
)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def build_version(data)
|
|
103
|
+
# Handle both version and edition. A partial reference omits both, in
|
|
104
|
+
# which case version is left nil (not defaulted) so exclude/matches?
|
|
105
|
+
# treat it as a wildcard.
|
|
106
|
+
if data[:version]
|
|
107
|
+
Components::Version.new(version: data[:version].to_s,
|
|
108
|
+
is_edition: false)
|
|
109
|
+
elsif data[:edition]
|
|
110
|
+
Components::Version.new(version: data[:edition].to_s,
|
|
111
|
+
is_edition: true)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def build_date(data)
|
|
116
|
+
# A partial reference omits the date; leave it nil rather than building
|
|
117
|
+
# an empty Date, so the canonical to_hash drops it entirely.
|
|
118
|
+
return nil unless data[:year]
|
|
119
|
+
|
|
120
|
+
Pubid::Components::Date.new(
|
|
121
|
+
year: data[:year].to_s,
|
|
122
|
+
month: data[:month].to_s,
|
|
123
|
+
)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def extract_parts(parts_data)
|
|
127
|
+
return [] unless parts_data
|
|
128
|
+
|
|
129
|
+
parts = []
|
|
130
|
+
if parts_data.is_a?(Array)
|
|
131
|
+
parts_data.each do |part_hash|
|
|
132
|
+
parts << part_hash[:part].to_s if part_hash[:part]
|
|
133
|
+
end
|
|
134
|
+
elsif parts_data.is_a?(Hash) && parts_data[:part]
|
|
135
|
+
parts << parts_data[:part].to_s
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
parts
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Etsi
|
|
7
|
+
module Components
|
|
8
|
+
# Represents an ETSI code with complex number formats
|
|
9
|
+
# Handles three variants:
|
|
10
|
+
# Simple: 012, 123, 456
|
|
11
|
+
# GSM: GSM 02.01, 02.01
|
|
12
|
+
# Complex: ABC 123, ABC-DEF 123
|
|
13
|
+
#
|
|
14
|
+
# Stays independent of Pubid::Components::Code because ETSI uses
|
|
15
|
+
# +minor+ (a flavor-specific sub-number) plus +parts+.
|
|
16
|
+
class Code < Lutaml::Model::Serializable
|
|
17
|
+
attribute :number, :string # Main number
|
|
18
|
+
attribute :minor, :string # Optional minor part
|
|
19
|
+
attribute :parts, :string, collection: true, default: [] # Parts array
|
|
20
|
+
|
|
21
|
+
# Render code with space for minor and dash-separated parts
|
|
22
|
+
def to_s
|
|
23
|
+
result = number.to_s
|
|
24
|
+
result += " #{minor}" if minor
|
|
25
|
+
result += parts.map { |p| "-#{p}" }.join if parts&.any?
|
|
26
|
+
result
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def render(context: nil)
|
|
30
|
+
to_s
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def ==(other)
|
|
34
|
+
return false unless other.is_a?(Code)
|
|
35
|
+
|
|
36
|
+
number == other.number &&
|
|
37
|
+
minor == other.minor &&
|
|
38
|
+
parts == other.parts
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Etsi
|
|
7
|
+
module Components
|
|
8
|
+
# Represents an ETSI version string
|
|
9
|
+
# Format: V1.2.3, V2.0.0, or ed.1
|
|
10
|
+
class Version < Lutaml::Model::Serializable
|
|
11
|
+
attribute :version, :string # e.g., "1.1.1", "2.0.0", "1"
|
|
12
|
+
attribute :is_edition, :boolean, default: -> {
|
|
13
|
+
false
|
|
14
|
+
} # true for ed.N format
|
|
15
|
+
|
|
16
|
+
def to_s
|
|
17
|
+
if is_edition
|
|
18
|
+
"ed.#{version}"
|
|
19
|
+
else
|
|
20
|
+
"V#{version}"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def ==(other)
|
|
25
|
+
return false unless other.is_a?(Version)
|
|
26
|
+
|
|
27
|
+
version == other.version && is_edition == other.is_edition
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Etsi
|
|
5
|
+
# Base class for all ETSI identifiers. Canonical name Pubid::Etsi::Identifier;
|
|
6
|
+
# every concrete ETSI identifier descends from it.
|
|
7
|
+
class Identifier < ::Pubid::Identifier
|
|
8
|
+
# Let Parslet::ParseFailed propagate on a bad reference (matching ISO), so
|
|
9
|
+
# relaton-cli's `rescue Parslet::ParseFailed` fetch handler catches it
|
|
10
|
+
# instead of a bare RuntimeError.
|
|
11
|
+
def self.parse(identifier)
|
|
12
|
+
unless identifier.is_a?(String)
|
|
13
|
+
raise Pubid::Errors::InvalidInputError,
|
|
14
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
18
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
parsed = Parser.parse(identifier)
|
|
22
|
+
Builder.build(parsed)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
attribute :type, :string
|
|
26
|
+
attribute :version, Pubid::Etsi::Components::Version
|
|
27
|
+
attribute :date, Pubid::Components::Date
|
|
28
|
+
# Stored as a plain string (always "ETSI") so it round-trips through
|
|
29
|
+
# to_hash/from_hash. Was previously a `def publisher` method, which made
|
|
30
|
+
# lutaml serialize a String against the Components::Publisher attribute and
|
|
31
|
+
# raise on to_hash.
|
|
32
|
+
attribute :publisher, :string, default: -> { "ETSI" }
|
|
33
|
+
|
|
34
|
+
def ==(other)
|
|
35
|
+
return false unless other.is_a?(Pubid::Etsi::Identifier)
|
|
36
|
+
|
|
37
|
+
type == other.type &&
|
|
38
|
+
code == other.code &&
|
|
39
|
+
version == other.version &&
|
|
40
|
+
date == other.date
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# The document code is composed from the split index columns declared on
|
|
44
|
+
# EtsiStandard (`number`/`minor`/`parts`). Returning nil here keeps `==`
|
|
45
|
+
# and the URN generator total for the abstract base and for a supplement
|
|
46
|
+
# whose own base is missing; EtsiStandard composes the real value and
|
|
47
|
+
# SupplementIdentifier delegates to its base.
|
|
48
|
+
def code
|
|
49
|
+
nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# `parts` is a plain collection attribute on the leaf, so the base
|
|
53
|
+
# #exclude reaches it directly and nils it. It must come back as an EMPTY
|
|
54
|
+
# ARRAY instead: a part-less reference parses with `parts` defaulting to
|
|
55
|
+
# [], so a nil here would make `==` — and therefore #matches? — fail
|
|
56
|
+
# against exactly the reference this exclusion exists to match. Same
|
|
57
|
+
# "reset the whole cluster" rule recorded for CSA's year and IEEE's
|
|
58
|
+
# year/month/day in CLAUDE.md.
|
|
59
|
+
#
|
|
60
|
+
# This also covers supplements: the base #exclude recurses into the
|
|
61
|
+
# nested `base` identifier through exclude_from_nested, which re-enters
|
|
62
|
+
# this method on the inner EtsiStandard.
|
|
63
|
+
def exclude(*args)
|
|
64
|
+
result = super
|
|
65
|
+
part_keys = args & %i[part parts]
|
|
66
|
+
if !part_keys.empty? && result.respond_to?(:parts=)
|
|
67
|
+
result.parts = []
|
|
68
|
+
end
|
|
69
|
+
result
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Etsi
|
|
5
|
+
module Identifiers
|
|
6
|
+
# ETSI Corrigendum
|
|
7
|
+
# Format: {base}/C{number}
|
|
8
|
+
class Corrigendum < SupplementIdentifier
|
|
9
|
+
def supplement_notation
|
|
10
|
+
"C#{number}"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Etsi
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Single class for all ETSI standard types
|
|
7
|
+
# Type is passed as parameter: EN, ES, EG, TS, ETR, ETS, I-ETS, TBR,
|
|
8
|
+
# TCRTR, NET, GR, GS, SR, TR, GTS
|
|
9
|
+
# Format: ETSI TYPE CODE VERSION (DATE)
|
|
10
|
+
# Examples:
|
|
11
|
+
# ETSI GS ZSM 012 V1.1.1 (2022-12)
|
|
12
|
+
# ETSI GR ZSM 009-3 V1.1.1 (2023-08)
|
|
13
|
+
# ETSI GTS GSM 02.01 V5.5.0 (1999-01)
|
|
14
|
+
class EtsiStandard < Identifier
|
|
15
|
+
# Type is stored in @type attribute from Identifier
|
|
16
|
+
# All rendering handled by Identifier class
|
|
17
|
+
|
|
18
|
+
# --- Index columns -------------------------------------------------
|
|
19
|
+
#
|
|
20
|
+
# relaton-index sorts and bsearches every row on `id.root.number.to_s`,
|
|
21
|
+
# so the document number must be reachable as `number`. ETSI used to
|
|
22
|
+
# keep it inside an Etsi::Components::Code under a `code` attribute,
|
|
23
|
+
# leaving the inherited `number` nil and every index row keyed "".
|
|
24
|
+
#
|
|
25
|
+
# The three Code fields are now plain sibling attributes, which is the
|
|
26
|
+
# shape the serialized hash ALREADY had — the converters below merely
|
|
27
|
+
# read them directly instead of reaching through `code`, so the wire
|
|
28
|
+
# format is byte-identical and relaton-data-etsi's published index-v2
|
|
29
|
+
# needs no regeneration.
|
|
30
|
+
#
|
|
31
|
+
# `number` holds the BARE number ("300 175"), never the part, so all
|
|
32
|
+
# parts of a document share one index bucket and a part-less reference
|
|
33
|
+
# finds them all — the IEEE/ISO semantics documented in CLAUDE.md.
|
|
34
|
+
#
|
|
35
|
+
# LANDMINE: these redeclare attributes inherited from ::Pubid::Identifier
|
|
36
|
+
# (`number` is a Components::Code there, and Etsi::Components::Code is
|
|
37
|
+
# NOT a subclass of it). That resolves nondeterministically under
|
|
38
|
+
# multi-flavor load when declared on a class others inherit from, so it
|
|
39
|
+
# is confined to this LEAF — EtsiStandard has no subclasses, while the
|
|
40
|
+
# shared Pubid::Etsi::Identifier is also SupplementIdentifier's parent
|
|
41
|
+
# and must stay untouched. spec/pubid/etsi/root_number_spec.rb carries
|
|
42
|
+
# the tripwire and is only meaningful under the full `rake` suite.
|
|
43
|
+
attribute :number, :string
|
|
44
|
+
attribute :minor, :string
|
|
45
|
+
attribute :parts, :string, collection: true, default: -> { [] }
|
|
46
|
+
|
|
47
|
+
# Compact serialization (mirrors ISO/JCGM/OIML): the code fields are
|
|
48
|
+
# bare scalars (`number`, a `parts` array and, rarely, a `minor`);
|
|
49
|
+
# Version flattens to a scalar `version` string with an `is_edition`
|
|
50
|
+
# boolean flag (omitted when false); Date flattens to top-level
|
|
51
|
+
# year/month/day. The constant `publisher` ("ETSI") is intentionally
|
|
52
|
+
# NOT mapped — it is reconstructed on load from its attribute default,
|
|
53
|
+
# keeping the hash compact.
|
|
54
|
+
#
|
|
55
|
+
# This block lives on EtsiStandard (a leaf) rather than the shared Identifier:
|
|
56
|
+
# SupplementIdentifier is a sibling that DELEGATES type/code/version and
|
|
57
|
+
# date to its inner `base`, so a block on Identifier would be inherited-and-
|
|
58
|
+
# merged by the supplement and re-emit every delegated field at the top.
|
|
59
|
+
key_value do
|
|
60
|
+
map "_type", to: :_type
|
|
61
|
+
map "type", to: :type
|
|
62
|
+
map "number", to: :number
|
|
63
|
+
map "parts", to: :parts
|
|
64
|
+
map "minor", to: :minor
|
|
65
|
+
map "version", with: { to: :version_to_kv, from: :version_from_kv }
|
|
66
|
+
map "is_edition", with: { to: :edition_to_kv, from: :edition_from_kv }
|
|
67
|
+
map "year", with: { to: :year_to_kv, from: :year_from_kv }
|
|
68
|
+
map "month", with: { to: :month_to_kv, from: :month_from_kv }
|
|
69
|
+
map "day", with: { to: :day_to_kv, from: :day_from_kv }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# The composed document code, rebuilt on demand from the split columns
|
|
73
|
+
# so the renderer, the URN generator and #== keep one place to ask for
|
|
74
|
+
# the printed form ("300 175-1"). Deliberately NOT an attribute and NOT
|
|
75
|
+
# memoised: `number`/`parts` are writable (the base #exclude rebuilds
|
|
76
|
+
# through them), so a cached Code would go stale.
|
|
77
|
+
#
|
|
78
|
+
# nil when there is no number, preserving the old nil-`code` semantics
|
|
79
|
+
# the URN generator branches on.
|
|
80
|
+
def code
|
|
81
|
+
return nil if number.nil?
|
|
82
|
+
|
|
83
|
+
Pubid::Etsi::Components::Code.new(
|
|
84
|
+
number: number,
|
|
85
|
+
minor: minor,
|
|
86
|
+
parts: parts || [],
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# MR slug number segment.
|
|
91
|
+
#
|
|
92
|
+
# The base hook reads the inherited `number` and `part`; ETSI kept
|
|
93
|
+
# neither, so before the index columns landed every ETSI slug was just
|
|
94
|
+
# `etsi.<date>` — 454 distinct slugs for 24,724 documents, and
|
|
95
|
+
# `to_slug` is what consumers use as an output FILENAME.
|
|
96
|
+
#
|
|
97
|
+
# Two things the base hook cannot do for ETSI:
|
|
98
|
+
# * the parts live in the `parts` collection, not the inherited
|
|
99
|
+
# scalar `part`, so they must be appended here or every part of a
|
|
100
|
+
# document collapses onto one slug;
|
|
101
|
+
# * an ETSI number legitimately contains a SPACE ("300 175", "GSM
|
|
102
|
+
# 02.01"), which is outside the [a-z0-9.-] charset Renderers::MrString
|
|
103
|
+
# documents and guarantees. Sanitize BY CHARSET rather than by an
|
|
104
|
+
# enumerated escape list (the BIPM `mr_slug` precedent in
|
|
105
|
+
# CLAUDE.md), so a character added later cannot reach a filename.
|
|
106
|
+
# `minor` is included because it is identity-bearing everywhere else —
|
|
107
|
+
# Code#== compares it, Code#to_s renders it and the URN carries it — so
|
|
108
|
+
# omitting it here would let two distinct documents share one filename.
|
|
109
|
+
# No fixture populates it today; it is in the grammar, so it is here.
|
|
110
|
+
def mr_number_with_part
|
|
111
|
+
return nil if number.nil?
|
|
112
|
+
|
|
113
|
+
mr_sanitize([number, minor, *Array(parts)].compact.join("-"))
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# ETSI's identity is type + code + version + date (see
|
|
117
|
+
# Pubid::Etsi::Identifier#==), so all four must reach the slug —
|
|
118
|
+
# CLAUDE.md's rule that an identity-bearing marker has to appear on
|
|
119
|
+
# every identity surface, not just in `==`. The base hooks find
|
|
120
|
+
# neither: `mr_type` reads `typed_stage` (ETSI has none) and
|
|
121
|
+
# `mr_edition` reads `edition.number` (ETSI models the edition as
|
|
122
|
+
# `version`). Without these, "ETSI EN 300 729 V6.1.1 (2000-04)",
|
|
123
|
+
# "…V7.1.1 (2000-04)" and "ETSI ETS 300 729 ed.2 (2000-04)" all share
|
|
124
|
+
# one slug — i.e. one output filename.
|
|
125
|
+
def mr_type
|
|
126
|
+
type&.to_s&.downcase
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def mr_edition
|
|
130
|
+
mr_sanitize(version&.version)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Segment sanitizer. Renderers::MrString joins SEGMENTS with ".", so a
|
|
134
|
+
# dot inside one would break that structure — hence "." is replaced
|
|
135
|
+
# here even though it is inside the renderer's overall charset (the
|
|
136
|
+
# BIPM `bipm.si-brochure.9e-v3-01.e` precedent in CLAUDE.md). Filtering
|
|
137
|
+
# by charset rather than by an enumerated escape list keeps a character
|
|
138
|
+
# introduced later from leaking into a filename.
|
|
139
|
+
#
|
|
140
|
+
# Public purely to keep this file's surface flat, next to the
|
|
141
|
+
# lutaml-invoked converters below — it has no external callers and
|
|
142
|
+
# would work as well private.
|
|
143
|
+
#
|
|
144
|
+
# The emptiness check is on the OUTPUT, not just the input: a value
|
|
145
|
+
# made entirely of characters outside the charset collapses to "-" and
|
|
146
|
+
# then to "", and an empty string is truthy in Ruby, so it would reach
|
|
147
|
+
# Renderers::MrString as a blank segment and produce a double dot in
|
|
148
|
+
# the joined slug. Unreachable from today's grammar, which only feeds
|
|
149
|
+
# digit/alnum captures here — but not structurally prevented.
|
|
150
|
+
def mr_sanitize(value)
|
|
151
|
+
return nil if value.nil? || value.to_s.empty?
|
|
152
|
+
|
|
153
|
+
sanitized = value.to_s.downcase
|
|
154
|
+
.gsub(/[^a-z0-9-]+/, "-").gsub(/\A-+|-+\z/, "")
|
|
155
|
+
sanitized.empty? ? nil : sanitized
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# --- Version flattened to scalar version + is_edition flag ---
|
|
159
|
+
def version_to_kv(model, doc)
|
|
160
|
+
emit_kv(doc, "version", model.version&.version)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def version_from_kv(model, value)
|
|
164
|
+
version_for(model).version = value.to_s
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def edition_to_kv(model, doc)
|
|
168
|
+
return unless model.version&.is_edition
|
|
169
|
+
|
|
170
|
+
doc.add_child(
|
|
171
|
+
Lutaml::KeyValue::DataModel::Element.new("is_edition", true),
|
|
172
|
+
)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def edition_from_kv(model, value)
|
|
176
|
+
version_for(model).is_edition = value
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# --- Date flattened to top-level year/month/day scalars ---
|
|
180
|
+
def year_to_kv(model, doc)
|
|
181
|
+
emit_kv(doc, "year", model.date&.year)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def month_to_kv(model, doc)
|
|
185
|
+
emit_kv(doc, "month", model.date&.month)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def day_to_kv(model, doc)
|
|
189
|
+
emit_kv(doc, "day", model.date&.day)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def year_from_kv(model, value)
|
|
193
|
+
date_for(model).year = value.to_s
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def month_from_kv(model, value)
|
|
197
|
+
date_for(model).month = value.to_s
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def day_from_kv(model, value)
|
|
201
|
+
date_for(model).day = value.to_s
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def emit_kv(doc, key, value)
|
|
205
|
+
return if value.nil? || value.to_s.empty?
|
|
206
|
+
|
|
207
|
+
doc.add_child(
|
|
208
|
+
Lutaml::KeyValue::DataModel::Element.new(key, value.to_s),
|
|
209
|
+
)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def version_for(model)
|
|
213
|
+
model.version ||= Pubid::Etsi::Components::Version.new
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def date_for(model)
|
|
217
|
+
model.date ||= Pubid::Components::Date.new
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|