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,482 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Itu
|
|
5
|
+
# Base class for all ITU identifiers. Canonical name Pubid::Itu::Identifier.
|
|
6
|
+
class Identifier < ::Pubid::Identifier
|
|
7
|
+
# Parse an ITU identifier string into an identifier object.
|
|
8
|
+
def self.parse(identifier)
|
|
9
|
+
unless identifier.is_a?(String)
|
|
10
|
+
raise Pubid::Errors::InvalidInputError,
|
|
11
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
15
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
parsed = Parser.parse(normalize_whitespace(identifier))
|
|
19
|
+
Builder.build(parsed)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# ITU's own listings occasionally carry a doubled space
|
|
23
|
+
# ("ITU-T D.271 (10/2016)"). Whitespace is never significant in an ITU
|
|
24
|
+
# identifier, so collapse runs of it rather than teaching every rule to
|
|
25
|
+
# tolerate them. Any string over the shared input-length guard is left
|
|
26
|
+
# untouched: `self.parse` above rejects it before this point, and the
|
|
27
|
+
# guard exists precisely to keep long inputs away from regexes. (This
|
|
28
|
+
# note used to credit `Pubid.parse` with the rejection, which was wrong
|
|
29
|
+
# in both directions — `Pubid.parse` never routes a human-readable ITU
|
|
30
|
+
# string to a flavor, and ITU carried no raising guard of its own until
|
|
31
|
+
# one was added to `self.parse`, so an over-long string did reach here.)
|
|
32
|
+
def self.normalize_whitespace(identifier)
|
|
33
|
+
return identifier unless identifier.is_a?(String)
|
|
34
|
+
return identifier if identifier.length > ::Pubid::MAX_INPUT_LENGTH
|
|
35
|
+
|
|
36
|
+
identifier.gsub(/[[:space:]]+/, " ").strip
|
|
37
|
+
end
|
|
38
|
+
private_class_method :normalize_whitespace
|
|
39
|
+
|
|
40
|
+
# Long-form ↔ ITU single-letter language code map. The parser produces
|
|
41
|
+
# single-letter codes (E/F/S/R/A/C); API callers (e.g. metanorma-itu)
|
|
42
|
+
# pass long-form (en/fr/es/ru/ar/zh). Storage is normalized to the
|
|
43
|
+
# single-letter form. Languages with no canonical letter (e.g. "de")
|
|
44
|
+
# pass through unchanged and produce no trailing suffix.
|
|
45
|
+
LANGUAGES = {
|
|
46
|
+
"fr" => "F", "es" => "S", "ru" => "R",
|
|
47
|
+
"ar" => "A", "zh" => "C", "en" => "E",
|
|
48
|
+
"F" => "F", "S" => "S", "R" => "R",
|
|
49
|
+
"A" => "A", "C" => "C", "E" => "E"
|
|
50
|
+
}.freeze
|
|
51
|
+
|
|
52
|
+
attribute :sector, Pubid::Itu::Components::Sector
|
|
53
|
+
attribute :series, Pubid::Itu::Components::Series
|
|
54
|
+
attribute :code, Pubid::Itu::Components::Code
|
|
55
|
+
attribute :date, Pubid::Components::Date
|
|
56
|
+
attribute :language, :string
|
|
57
|
+
# "(V14)" of "ITU-T H.264 (V14) (08/2021)" — an ITU-T revision marker
|
|
58
|
+
# distinct from the publication date. Declared here (not on the leaves)
|
|
59
|
+
# because `render_base` lives here and the parser feeds it to both plain
|
|
60
|
+
# and combined recommendations, and to the nested base of a supplement.
|
|
61
|
+
# Safe from the number/stage redefinition landmine: ::Pubid::Identifier
|
|
62
|
+
# declares no `version` attribute, so this is a new one, not a retype.
|
|
63
|
+
attribute :version, :string
|
|
64
|
+
# The literal word "series" of "ITU-T E-100 series Suppl. 1" and
|
|
65
|
+
# "ITU-T E.1100 series Suppl. 1" — the document is the series group, not
|
|
66
|
+
# one Recommendation within it. It cannot live inside `series` itself
|
|
67
|
+
# because it also follows a *dotted* code, where folding it into the
|
|
68
|
+
# series token would corrupt the value every index row is keyed on.
|
|
69
|
+
# Named so the common case is the `false` default and stays out of
|
|
70
|
+
# `to_hash`.
|
|
71
|
+
attribute :series_word, :boolean, default: -> { false }
|
|
72
|
+
# A series-code document joins its mnemonic series to its number with a
|
|
73
|
+
# dash rather than a dot ("ITU-T EMC-5", "ITU-T SEC-QKD"). Keeping the
|
|
74
|
+
# two halves split — rather than storing "EMC-5" in `series` — is what
|
|
75
|
+
# keeps `root.number` non-empty for relaton-index. Named for the rare
|
|
76
|
+
# form, so the dotted majority stays out of `to_hash`.
|
|
77
|
+
attribute :series_dash, :boolean, default: -> { false }
|
|
78
|
+
# "ITU-T H.350 attachment (08/2003)" — the machine-readable attachment
|
|
79
|
+
# of a Recommendation, catalogued as its own record.
|
|
80
|
+
attribute :attachment, :boolean, default: -> { false }
|
|
81
|
+
# The upper bound of a Recommendation range published as one document —
|
|
82
|
+
# "ITU-T Q.120-Q.139 (11/1988)", where this holds "Q.139". A plain string
|
|
83
|
+
# rather than a structured designation: five legacy records, and the
|
|
84
|
+
# printed form is the whole of their identity.
|
|
85
|
+
attribute :range_end, :string
|
|
86
|
+
attribute :common_text_twin, ::Pubid::Identifier
|
|
87
|
+
|
|
88
|
+
def initialize(**kwargs)
|
|
89
|
+
if kwargs[:language]
|
|
90
|
+
kwargs = kwargs.merge(language: normalize_language(kwargs[:language]))
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
super
|
|
94
|
+
|
|
95
|
+
validate_ob_no_sector!
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# The document number lives on the `code` component for ITU; surface it at
|
|
99
|
+
# the identifier root so consumers that key on `#number` — e.g.
|
|
100
|
+
# Relaton::Index's sort/bsearch narrowing on `id.root.number.to_s` — work
|
|
101
|
+
# without special-casing ITU. Returns the `code.number` string (e.g.
|
|
102
|
+
# "530"); serialization is unaffected because the flat key_value block
|
|
103
|
+
# maps "number" via `number_to_kv`/`number_from_kv`, which read/write
|
|
104
|
+
# `code.number` directly and never touch the inherited `number` attribute.
|
|
105
|
+
# Supplement/Amendment/Corrigendum/Errata declare their own `:string`
|
|
106
|
+
# `number` (the ordinal), which overrides this reader; their base document
|
|
107
|
+
# number is still reachable via `root.number`.
|
|
108
|
+
def number
|
|
109
|
+
code&.number
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# ITU keeps the document number and its edition/part together inside one
|
|
113
|
+
# Code component (like ETSI, unlike ISO's separate `part` attribute), so a
|
|
114
|
+
# top-level exclude(:part) can't reach the part. Handle it during the
|
|
115
|
+
# nested-exclusion pass: when :part/:parts is excluded, return a copy of
|
|
116
|
+
# the Code with its parts cleared while keeping number/series/subseries.
|
|
117
|
+
# This lets a part-less reference (e.g. `ITU-R P.838`) match every edition
|
|
118
|
+
# (`ITU-R P.838-3`) via matches?(other, ignore: [:parts]). Any non-Code
|
|
119
|
+
# value falls through to super, so nested identifiers (common_text_twin,
|
|
120
|
+
# supplement `base`, combined `Designation`s) still recurse.
|
|
121
|
+
def exclude_from_nested(value, args)
|
|
122
|
+
part_keys = args & %i[part parts]
|
|
123
|
+
if value.is_a?(Pubid::Itu::Components::Code) && !part_keys.empty?
|
|
124
|
+
return Pubid::Itu::Components::Code.new(
|
|
125
|
+
imp_marker: value.imp_marker,
|
|
126
|
+
number: value.number,
|
|
127
|
+
series_suffix: value.series_suffix,
|
|
128
|
+
series_suffix_spaced: value.series_suffix_spaced,
|
|
129
|
+
subseries: value.subseries,
|
|
130
|
+
parts: [],
|
|
131
|
+
qualifier: value.qualifier,
|
|
132
|
+
qualifier_glued: value.qualifier_glued,
|
|
133
|
+
)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
super
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Generate URN for this identifier
|
|
140
|
+
#
|
|
141
|
+
# @return [String] URN representation
|
|
142
|
+
|
|
143
|
+
# ITU encodes identity across `sector` (T/R/CD), `series` (G/H/J…), and
|
|
144
|
+
# `code` (number with optional part), not in the inherited `number`/
|
|
145
|
+
# `typed_stage`. The generic MrString renderer would otherwise drop all
|
|
146
|
+
# three and emit just `ITU`. Losslessness for issue #142 requires the
|
|
147
|
+
# sector letter, series letter, and document number to appear in MR.
|
|
148
|
+
# Lowercased to match the all-lowercase MR convention.
|
|
149
|
+
def mr_publisher
|
|
150
|
+
publisher&.to_s&.downcase
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def mr_type
|
|
154
|
+
sector&.sector&.to_s&.downcase
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def mr_number_with_part
|
|
158
|
+
segments = []
|
|
159
|
+
segments << series&.series&.to_s&.downcase if series&.series
|
|
160
|
+
# The edition word and the qualifier letter are part of the document's
|
|
161
|
+
# identity, so they must reach the slug: without them "D.200" and
|
|
162
|
+
# "D.200 R" — and, worse, "Q.2931 B" and "Q.2931 C" — collapse onto
|
|
163
|
+
# one MR string. They are glued to the number rather than given their
|
|
164
|
+
# own "-" segment so they read as part of it ("x-50bis", "d-200r").
|
|
165
|
+
number = code&.number&.to_s
|
|
166
|
+
if number
|
|
167
|
+
number += code.series_suffix.to_s if code.series_suffix
|
|
168
|
+
number += code.qualifier.to_s.downcase if code.qualifier
|
|
169
|
+
segments << number
|
|
170
|
+
end
|
|
171
|
+
segments << code&.subseries&.to_s if code&.subseries
|
|
172
|
+
segments.concat(code&.parts&.map(&:to_s) || [])
|
|
173
|
+
# Same reasoning as the suffixes above, and as the URN generator: these
|
|
174
|
+
# three distinguish documents that otherwise slug identically.
|
|
175
|
+
segments << "series" if series_word
|
|
176
|
+
segments << "attachment" if attachment
|
|
177
|
+
segments << "to-#{range_end.to_s.downcase.tr('.', '-')}" if range_end
|
|
178
|
+
return nil if segments.empty?
|
|
179
|
+
|
|
180
|
+
segments.join("-")
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Stored as a plain string (always "ITU") so it round-trips through
|
|
184
|
+
# to_hash/from_hash. Was a `def publisher` method, which made lutaml
|
|
185
|
+
# serialize a String against the Components::Publisher attribute.
|
|
186
|
+
attribute :publisher, :string, default: -> { "ITU" }
|
|
187
|
+
|
|
188
|
+
# Render identifier as a string.
|
|
189
|
+
#
|
|
190
|
+
# @param i18n_lang [Symbol, String] language for identifier text
|
|
191
|
+
# translation (e.g. :fr renders "Annex to" as "Annexe au"). Distinct
|
|
192
|
+
# from the identifier's `language` attribute, which is the document's
|
|
193
|
+
# own language and produces the trailing suffix like "-F".
|
|
194
|
+
# @param language [Symbol, String] deprecated alias for i18n_lang.
|
|
195
|
+
# @param format [Symbol] :long for title-style rendering of supported
|
|
196
|
+
# identifiers, otherwise the default short form.
|
|
197
|
+
def to_s(**opts)
|
|
198
|
+
annotated = opts[:annotated]
|
|
199
|
+
opts = self.class.normalize_to_s_opts(opts)
|
|
200
|
+
result = render_base(**opts) + render_language_suffix
|
|
201
|
+
result += " | #{common_text_twin}" if common_text_twin
|
|
202
|
+
# ITU composes its own string rather than going through `render`, so it
|
|
203
|
+
# never reaches the shared annotation hook. Apply it here.
|
|
204
|
+
annotate_plain_render(result, annotated: annotated)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def render_base(**_opts)
|
|
208
|
+
result = "#{publisher}-#{sector}"
|
|
209
|
+
|
|
210
|
+
# Add series and code. A series with no code is a series GROUP
|
|
211
|
+
# ("ITU-T G-100 series"); without this branch it rendered a dangling
|
|
212
|
+
# trailing dot.
|
|
213
|
+
result += if series && code
|
|
214
|
+
" #{series}#{series_dash ? '-' : '.'}#{code}"
|
|
215
|
+
elsif series
|
|
216
|
+
" #{series}"
|
|
217
|
+
else
|
|
218
|
+
" #{code}"
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
result += "-#{range_end}" if range_end
|
|
222
|
+
result += " series" if series_word
|
|
223
|
+
result += " attachment" if attachment
|
|
224
|
+
|
|
225
|
+
# Add version marker if present — always between code and date
|
|
226
|
+
result += " (V#{version})" if version
|
|
227
|
+
|
|
228
|
+
result + render_date_suffix
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# " (MM/YYYY)", or " (YYYY)" when the month is unknown; "" when undated.
|
|
232
|
+
# Shared by every type that prints its date this way (Supplement and its
|
|
233
|
+
# subclasses, CombinedIdentifier, AnnexOfRecommendation). NOT used by
|
|
234
|
+
# SpecialPublication, which zero-pads its month.
|
|
235
|
+
def render_date_suffix
|
|
236
|
+
return "" unless date
|
|
237
|
+
|
|
238
|
+
date.month ? " (#{date.month}/#{date.year})" : " (#{date.year})"
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def render_language_suffix
|
|
242
|
+
return "" unless language
|
|
243
|
+
# Only render canonical single-letter ITU language codes
|
|
244
|
+
# (e.g. "F", "S"). Languages with no mapping (e.g. "de") get
|
|
245
|
+
# no suffix — matches v1 PR #38 render_language behavior.
|
|
246
|
+
return "" unless LANGUAGES.value?(language)
|
|
247
|
+
|
|
248
|
+
"-#{language}"
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
# Translate `language:` opt to `i18n_lang:` opt. v1 PR #38 introduced
|
|
252
|
+
# `i18n_lang:` to disambiguate "rendering language" from the document
|
|
253
|
+
# language attribute; `language:` remains a deprecated alias.
|
|
254
|
+
def self.normalize_to_s_opts(opts)
|
|
255
|
+
opts = opts.dup
|
|
256
|
+
if opts.key?(:language) && !opts.key?(:i18n_lang)
|
|
257
|
+
opts[:i18n_lang] = opts.delete(:language)
|
|
258
|
+
else
|
|
259
|
+
opts.delete(:language)
|
|
260
|
+
end
|
|
261
|
+
opts
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
# Class-strict, like Supplement#== — the ITU *type* is part of the
|
|
265
|
+
# identity, not just the sector/series/number. Report ITU-R BT.2020-1 and
|
|
266
|
+
# Recommendation ITU-R BT.2020-1 are two different, both-current
|
|
267
|
+
# documents; an `is_a?` guard would make them equal (and `#matches?`
|
|
268
|
+
# resolve one to the other). Using `self.class` rather than a hard-coded
|
|
269
|
+
# class keeps the comparison symmetric in both directions, and closes the
|
|
270
|
+
# same one-way holes that existed against CombinedIdentifier and
|
|
271
|
+
# SpecialPublication.
|
|
272
|
+
def ==(other)
|
|
273
|
+
return false unless other.instance_of?(self.class)
|
|
274
|
+
|
|
275
|
+
sector == other.sector &&
|
|
276
|
+
series == other.series &&
|
|
277
|
+
code == other.code &&
|
|
278
|
+
date == other.date &&
|
|
279
|
+
version == other.version &&
|
|
280
|
+
# "the E.1100 series" is not Recommendation E.1100.
|
|
281
|
+
series_word == other.series_word &&
|
|
282
|
+
series_dash == other.series_dash &&
|
|
283
|
+
attachment == other.attachment &&
|
|
284
|
+
range_end == other.range_end &&
|
|
285
|
+
language == other.language &&
|
|
286
|
+
common_text_twin == other.common_text_twin
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# --- Compact flat key_value converters (shared) --------------------
|
|
290
|
+
# Collapse the identity components (Sector/Series/Code/Date) to bare
|
|
291
|
+
# top-level scalars so the serialized hash is flat and index-friendly,
|
|
292
|
+
# mirroring ISO/ETSI/JCGM/OIML. Used by the per-leaf key_value blocks
|
|
293
|
+
# (see StandardSerialization) and by the Supplement/Annex/Combined
|
|
294
|
+
# blocks. `publisher` ("ITU") is intentionally never mapped — it is
|
|
295
|
+
# reconstructed from its attribute default.
|
|
296
|
+
|
|
297
|
+
def sector_to_kv(model, doc)
|
|
298
|
+
emit_kv(doc, "sector", model.sector&.sector)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def sector_from_kv(model, value)
|
|
302
|
+
model.sector = Components::Sector.new(sector: value.to_s)
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def series_to_kv(model, doc)
|
|
306
|
+
emit_kv(doc, "series", model.series&.series)
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def series_from_kv(model, value)
|
|
310
|
+
model.series = Components::Series.new(series: value.to_s)
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
def imp_marker_to_kv(model, doc)
|
|
314
|
+
emit_kv(doc, "imp_marker", model.code&.imp_marker)
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
def imp_marker_from_kv(model, value)
|
|
318
|
+
code_for(model).imp_marker = value.to_s
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def number_to_kv(model, doc)
|
|
322
|
+
emit_kv(doc, "number", model.code&.number)
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
def number_from_kv(model, value)
|
|
326
|
+
code_for(model).number = value.to_s
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
def series_suffix_to_kv(model, doc)
|
|
330
|
+
emit_kv(doc, "series_suffix", model.code&.series_suffix)
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
def series_suffix_from_kv(model, value)
|
|
334
|
+
code_for(model).series_suffix = value.to_s
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
# The three spelling/qualifier fields of Components::Code. The two
|
|
338
|
+
# booleans emit only when true, so no already-published index row gains
|
|
339
|
+
# a key; `qualifier` emits only when present.
|
|
340
|
+
def series_suffix_spaced_to_kv(model, doc)
|
|
341
|
+
return unless model.code&.series_suffix_spaced
|
|
342
|
+
|
|
343
|
+
doc["series_suffix_spaced"] = true
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
def series_suffix_spaced_from_kv(model, value)
|
|
347
|
+
code_for(model).series_suffix_spaced = value
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
def qualifier_to_kv(model, doc)
|
|
351
|
+
emit_kv(doc, "qualifier", model.code&.qualifier)
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def qualifier_from_kv(model, value)
|
|
355
|
+
code_for(model).qualifier = value.to_s
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def qualifier_glued_to_kv(model, doc)
|
|
359
|
+
return unless model.code&.qualifier_glued
|
|
360
|
+
|
|
361
|
+
doc["qualifier_glued"] = true
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
def qualifier_glued_from_kv(model, value)
|
|
365
|
+
code_for(model).qualifier_glued = value
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
def subseries_to_kv(model, doc)
|
|
369
|
+
emit_kv(doc, "subseries", model.code&.subseries)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
def subseries_from_kv(model, value)
|
|
373
|
+
code_for(model).subseries = value.to_s
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
def parts_to_kv(model, doc)
|
|
377
|
+
parts = model.code&.parts
|
|
378
|
+
return if parts.nil? || parts.empty?
|
|
379
|
+
|
|
380
|
+
doc.add_child(
|
|
381
|
+
Lutaml::KeyValue::DataModel::Element.new("parts", parts.map(&:to_s)),
|
|
382
|
+
)
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def parts_from_kv(model, value)
|
|
386
|
+
code_for(model).parts = Array(value).map(&:to_s)
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
def year_to_kv(model, doc)
|
|
390
|
+
emit_kv(doc, "year", model.date&.year)
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
def year_from_kv(model, value)
|
|
394
|
+
date_for(model).year = value.to_s
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
def month_to_kv(model, doc)
|
|
398
|
+
emit_kv(doc, "month", model.date&.month)
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
def month_from_kv(model, value)
|
|
402
|
+
date_for(model).month = value.to_s
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
# Serialize a nested `base` identifier via its own to_hash so it collapses
|
|
406
|
+
# to the compact shape, and re-dispatch through the flavor base on load so
|
|
407
|
+
# `_type` resolves to the concrete subclass (a bare polymorphic cast would
|
|
408
|
+
# rebuild a plain Identifier and lose the subclass). Mirrors ETSI/JCGM.
|
|
409
|
+
def base_to_kv(model, doc)
|
|
410
|
+
return unless model.base
|
|
411
|
+
|
|
412
|
+
doc.add_child(
|
|
413
|
+
Lutaml::KeyValue::DataModel::Element.new("base", model.base.to_hash),
|
|
414
|
+
)
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
def base_from_kv(model, value)
|
|
418
|
+
return unless value
|
|
419
|
+
|
|
420
|
+
model.base = Pubid::Itu::Identifier.from_hash(value)
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
# The common-text twin ("| ISO/IEC 13818-1:2022") is another flavor's
|
|
424
|
+
# identifier (ISO/IEC …); serialize it via its own flat to_hash and
|
|
425
|
+
# reconstruct it cross-flavor through the top-level polymorphic router so
|
|
426
|
+
# its concrete class (and custom mappings) are restored by `_type`.
|
|
427
|
+
def common_text_twin_to_kv(model, doc)
|
|
428
|
+
return unless model.common_text_twin
|
|
429
|
+
|
|
430
|
+
doc.add_child(
|
|
431
|
+
Lutaml::KeyValue::DataModel::Element.new(
|
|
432
|
+
"common_text_twin", model.common_text_twin.to_hash
|
|
433
|
+
),
|
|
434
|
+
)
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
def common_text_twin_from_kv(model, value)
|
|
438
|
+
return unless value
|
|
439
|
+
|
|
440
|
+
model.common_text_twin = ::Pubid::Identifier.from_hash(value)
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
def emit_kv(doc, key, value)
|
|
444
|
+
return if value.nil? || value.to_s.empty?
|
|
445
|
+
|
|
446
|
+
doc.add_child(
|
|
447
|
+
Lutaml::KeyValue::DataModel::Element.new(key, value.to_s),
|
|
448
|
+
)
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
def code_for(model)
|
|
452
|
+
model.code ||= Components::Code.new
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
def date_for(model)
|
|
456
|
+
model.date ||= Pubid::Components::Date.new
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
private
|
|
460
|
+
|
|
461
|
+
def normalize_language(value)
|
|
462
|
+
str = value.to_s
|
|
463
|
+
LANGUAGES[str] || str
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
# OB (Operational Bulletin) is a cross-bureau ITU publication and
|
|
467
|
+
# must not have a sector. Direct construction with both raises;
|
|
468
|
+
# the parser silently drops sector for legacy strings like
|
|
469
|
+
# "ITU-T OB.X" (handled in Builder).
|
|
470
|
+
def validate_ob_no_sector!
|
|
471
|
+
return unless series&.series == "OB"
|
|
472
|
+
return if sector.nil?
|
|
473
|
+
return if sector.is_a?(Components::Sector) && (sector.sector.nil? || sector.sector.to_s.empty?)
|
|
474
|
+
|
|
475
|
+
raise ArgumentError,
|
|
476
|
+
"OB (Operational Bulletin) is a cross-bureau ITU publication; " \
|
|
477
|
+
"sector must not be set"
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
end
|
|
482
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Itu
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Combined (joint) recommendation — a single document published under two
|
|
7
|
+
# or more series/number designations at once.
|
|
8
|
+
# Format: ITU-T G.780/Y.1351 (dual)
|
|
9
|
+
# ITU-T G.780/Y.1351/Z.1362 (triple)
|
|
10
|
+
#
|
|
11
|
+
# The primary designation lives on the base `series`/`code`; every
|
|
12
|
+
# additional designation is a Components::Designation in `combined`
|
|
13
|
+
# (one for a dual form, two+ for triple).
|
|
14
|
+
class CombinedIdentifier < Identifier
|
|
15
|
+
include StandardSerialization
|
|
16
|
+
|
|
17
|
+
attribute :combined, Pubid::Itu::Components::Designation,
|
|
18
|
+
collection: true, default: -> { [] }
|
|
19
|
+
|
|
20
|
+
# Extra map merged on top of StandardSerialization: the additional
|
|
21
|
+
# designations as a flat list of { series, number, subseries?, parts? }.
|
|
22
|
+
key_value do
|
|
23
|
+
map "combined",
|
|
24
|
+
with: { to: :combined_to_kv, from: :combined_from_kv }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def combined_to_kv(model, doc)
|
|
28
|
+
designations = model.combined
|
|
29
|
+
return if designations.nil? || designations.empty?
|
|
30
|
+
|
|
31
|
+
rows = designations.map do |d|
|
|
32
|
+
row = { "series" => d.series&.series.to_s,
|
|
33
|
+
"number" => d.code&.number.to_s }
|
|
34
|
+
row["subseries"] = d.code.subseries.to_s if d.code&.subseries
|
|
35
|
+
row["parts"] = d.code.parts.map(&:to_s) if d.code&.parts&.any?
|
|
36
|
+
# Each emitted only when set, so an ordinary joint designation's
|
|
37
|
+
# row keeps its existing two-key shape.
|
|
38
|
+
if d.code&.series_suffix
|
|
39
|
+
row["series_suffix"] = d.code.series_suffix.to_s
|
|
40
|
+
row["series_suffix_spaced"] = true if d.code.series_suffix_spaced
|
|
41
|
+
end
|
|
42
|
+
if d.code&.qualifier
|
|
43
|
+
row["qualifier"] = d.code.qualifier.to_s
|
|
44
|
+
row["qualifier_glued"] = true if d.code.qualifier_glued
|
|
45
|
+
end
|
|
46
|
+
row
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
doc.add_child(
|
|
50
|
+
Lutaml::KeyValue::DataModel::Element.new("combined", rows),
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def combined_from_kv(model, value)
|
|
55
|
+
model.combined = Array(value).map do |row|
|
|
56
|
+
row = row.transform_keys(&:to_s)
|
|
57
|
+
Components::Designation.new(
|
|
58
|
+
series: Components::Series.new(series: row["series"].to_s),
|
|
59
|
+
code: Components::Code.new(
|
|
60
|
+
number: row["number"].to_s,
|
|
61
|
+
series_suffix: row["series_suffix"]&.to_s,
|
|
62
|
+
series_suffix_spaced: !!row["series_suffix_spaced"],
|
|
63
|
+
subseries: row["subseries"]&.to_s,
|
|
64
|
+
parts: Array(row["parts"]).map(&:to_s),
|
|
65
|
+
qualifier: row["qualifier"]&.to_s,
|
|
66
|
+
qualifier_glued: !!row["qualifier_glued"],
|
|
67
|
+
),
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Rendering hooks into `render_base` (not `to_s`) so that any wrapper
|
|
73
|
+
# composing this identifier — AnnexOfRecommendation, which renders
|
|
74
|
+
# "<base.render_base> Annex <label>" — keeps the co-designations.
|
|
75
|
+
# Overriding `to_s` instead silently dropped the "/Y.1351" half.
|
|
76
|
+
# The inherited `to_s` adds the language suffix and common-text twin.
|
|
77
|
+
def render_base(**_opts)
|
|
78
|
+
result = "#{publisher}-#{sector}"
|
|
79
|
+
|
|
80
|
+
# Add primary series and code
|
|
81
|
+
result += if series
|
|
82
|
+
" #{series}#{series_dash ? '-' : '.'}#{code}"
|
|
83
|
+
else
|
|
84
|
+
" #{code}"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
result += "-#{range_end}" if range_end
|
|
88
|
+
|
|
89
|
+
# Add additional designations
|
|
90
|
+
if combined&.any?
|
|
91
|
+
result += "/#{combined.join('/')}"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
result += " series" if series_word
|
|
95
|
+
result += " attachment" if attachment
|
|
96
|
+
|
|
97
|
+
# Add version marker if present — always between code and date
|
|
98
|
+
result += " (V#{version})" if version
|
|
99
|
+
|
|
100
|
+
result + render_date_suffix
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def ==(other)
|
|
104
|
+
return false unless other.is_a?(CombinedIdentifier)
|
|
105
|
+
|
|
106
|
+
sector == other.sector &&
|
|
107
|
+
series == other.series &&
|
|
108
|
+
code == other.code &&
|
|
109
|
+
combined == other.combined &&
|
|
110
|
+
date == other.date &&
|
|
111
|
+
version == other.version &&
|
|
112
|
+
series_word == other.series_word &&
|
|
113
|
+
series_dash == other.series_dash &&
|
|
114
|
+
attachment == other.attachment &&
|
|
115
|
+
range_end == other.range_end &&
|
|
116
|
+
language == other.language
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Itu
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Corrigendum identifier (Cor.)
|
|
7
|
+
# Pattern: "ITU-T Z.100 (1999) Cor. 1 (10/2001)"
|
|
8
|
+
# Can be corrigendum of annex: "ITU-T G.729 Annex E (1998) Cor. 1 (02/2000)"
|
|
9
|
+
# A "Technical Corrigendum" — ITU's own spelling on 158 relaton-data-itu
|
|
10
|
+
# records ("ITU-T H.222.0 (1995) Technical Cor. 1 (02/1998)"). It is a
|
|
11
|
+
# distinct printed identifier from a plain "Cor. 1", so the qualifier is
|
|
12
|
+
# preserved as a flag and rendered back rather than normalized away.
|
|
13
|
+
# Named for the rarer form, so `false` is stripped from `to_hash` and no
|
|
14
|
+
# existing serialized Corrigendum row gains a key.
|
|
15
|
+
class Corrigendum < Supplement
|
|
16
|
+
attribute :technical, :boolean, default: -> { false }
|
|
17
|
+
|
|
18
|
+
key_value do
|
|
19
|
+
map "technical", to: :technical
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_s(**opts)
|
|
23
|
+
annotate_plain_render(render_supplement(technical ? "Technical Cor." : "Cor."), **opts)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# `super` already enforces instance_of?(self.class), so this only has
|
|
27
|
+
# to add the qualifier — "Cor. 1" and "Technical Cor. 1" of one base
|
|
28
|
+
# are different documents.
|
|
29
|
+
def ==(other)
|
|
30
|
+
super && technical == other.technical
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Itu
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Errata identifier (Err.)
|
|
7
|
+
# Pattern: "ITU-T G.9701 (2014) Err. 1 (07/2016)"
|
|
8
|
+
class Errata < Supplement
|
|
9
|
+
def to_s(**opts)
|
|
10
|
+
annotate_plain_render(render_supplement("Err."), **opts)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Itu
|
|
5
|
+
module Identifiers
|
|
6
|
+
# ITU Handbook
|
|
7
|
+
# Format: ITU-{SECTOR} {NUMBER}.HDB
|
|
8
|
+
# Example: ITU-R 23.HDB
|
|
9
|
+
#
|
|
10
|
+
# Handbooks are companion publications keyed to a study-group number; the
|
|
11
|
+
# printed form is the number followed by the literal ".HDB" marker. There
|
|
12
|
+
# is no series and (in practice) no date.
|
|
13
|
+
class Handbook < Identifier
|
|
14
|
+
include StandardSerialization
|
|
15
|
+
|
|
16
|
+
def render_base(**_opts)
|
|
17
|
+
result = "#{publisher}-#{sector} #{code&.number}.HDB"
|
|
18
|
+
|
|
19
|
+
if date
|
|
20
|
+
result += if date.month
|
|
21
|
+
" (#{date.month}/#{date.year})"
|
|
22
|
+
else
|
|
23
|
+
" (#{date.year})"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
result
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def ==(other)
|
|
31
|
+
return false unless other.is_a?(Handbook)
|
|
32
|
+
|
|
33
|
+
sector == other.sector && code == other.code && date == other.date
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|