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/iso.rb
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Iso
|
|
7
|
+
extend Pubid::PrefixesSupport
|
|
8
|
+
|
|
9
|
+
# Sole ISO publisher token. Joint / co-publication forms (ISO/IEC, IEC/ISO,
|
|
10
|
+
# ISO/IEC/IEEE) are contributed symmetrically via Pubid::JOINT_PREFIXES.
|
|
11
|
+
PREFIXES = ["ISO"].freeze
|
|
12
|
+
|
|
13
|
+
autoload :Builder, "#{__dir__}/iso/builder"
|
|
14
|
+
autoload :BundledIdentifier, "#{__dir__}/iso/bundled_identifier"
|
|
15
|
+
autoload :CombinedIdentifier, "#{__dir__}/iso/combined_identifier"
|
|
16
|
+
autoload :Components, "#{__dir__}/iso/components"
|
|
17
|
+
autoload :FormatResolver, "#{__dir__}/iso/format_resolver"
|
|
18
|
+
autoload :Identifier, "#{__dir__}/iso/identifier"
|
|
19
|
+
autoload :Identifiers, "#{__dir__}/iso/identifiers"
|
|
20
|
+
autoload :Normalizer, "#{__dir__}/iso/normalizer"
|
|
21
|
+
autoload :Parser, "#{__dir__}/iso/parser"
|
|
22
|
+
autoload :RenderingStyle, "#{__dir__}/iso/rendering_style"
|
|
23
|
+
autoload :SingleIdentifier, "#{__dir__}/iso/single_identifier"
|
|
24
|
+
autoload :SupplementIdentifier, "#{__dir__}/iso/supplement_identifier"
|
|
25
|
+
autoload :UrnGenerator, "#{__dir__}/iso/urn_generator"
|
|
26
|
+
autoload :UrnParser, "#{__dir__}/iso/urn_parser"
|
|
27
|
+
autoload :Utilities, "#{__dir__}/iso/utilities"
|
|
28
|
+
|
|
29
|
+
# Parse an ISO identifier string
|
|
30
|
+
# @param identifier [String] the identifier string to parse
|
|
31
|
+
# @param format [Symbol] :auto, :human, :mr_string, or :urn
|
|
32
|
+
# @return [Identifier] the parsed identifier
|
|
33
|
+
def self.parse(identifier, format: :auto)
|
|
34
|
+
unless identifier.is_a?(String)
|
|
35
|
+
raise Pubid::Errors::InvalidInputError,
|
|
36
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
40
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
format = Pubid::FormatDetector.detect(identifier) if format == :auto
|
|
44
|
+
|
|
45
|
+
case format
|
|
46
|
+
when :urn
|
|
47
|
+
UrnParser.parse(identifier)
|
|
48
|
+
when :mr_string
|
|
49
|
+
Pubid::Parsers::MrString.parse(identifier)
|
|
50
|
+
else
|
|
51
|
+
Normalizer.apply(identifier)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Build an ISO identifier from attributes.
|
|
56
|
+
#
|
|
57
|
+
# This is the public seam: callers in other flavors should never reach
|
|
58
|
+
# into `Pubid::Iso::Identifiers::*` or `Pubid::Iso::Components::*`
|
|
59
|
+
# directly — go through this method so the internal class registry can
|
|
60
|
+
# change without breaking callers.
|
|
61
|
+
#
|
|
62
|
+
# Accepts either raw values (Strings/Integers) or pre-built components.
|
|
63
|
+
# Raw values are wrapped in the appropriate ISO component internally.
|
|
64
|
+
#
|
|
65
|
+
# @param type [Symbol] the type key (e.g. :is, :tr, :ts, :guide)
|
|
66
|
+
# @param publisher [String, Pubid::Iso::Components::Publisher] primary publisher
|
|
67
|
+
# @param copublishers [Array<String>, Array<Pubid::Components::Publisher>]
|
|
68
|
+
# @param number [String, Integer, Pubid::Iso::Components::Code]
|
|
69
|
+
# @param year [String, Integer, Pubid::Components::Date, nil]
|
|
70
|
+
# @param attrs [Hash] additional identifier attributes
|
|
71
|
+
# @return [Pubid::Iso::Identifier]
|
|
72
|
+
def self.build(type:, publisher: nil, copublishers: nil, number: nil,
|
|
73
|
+
year: nil, **attrs)
|
|
74
|
+
klass = locate_type(type) || raise(ArgumentError, "unknown ISO type: #{type.inspect}")
|
|
75
|
+
|
|
76
|
+
copub_list = Array(copublishers)
|
|
77
|
+
attrs[:publisher] = build_publisher(publisher, copub_list) if publisher || copub_list.any?
|
|
78
|
+
attrs[:copublishers] = build_copublishers(copub_list) if copub_list.any?
|
|
79
|
+
attrs[:number] = build_code(number) if number
|
|
80
|
+
attrs[:date] = build_date(year) if year
|
|
81
|
+
|
|
82
|
+
klass.new(attrs)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# @!visibility private
|
|
86
|
+
def self.build_publisher(value, copublishers = [])
|
|
87
|
+
return value if value.is_a?(Components::Publisher) && copublishers.empty?
|
|
88
|
+
|
|
89
|
+
copub_strings = copublishers.map { |cp| cp.is_a?(Components::Publisher) ? cp.publisher : cp.to_s }
|
|
90
|
+
Components::Publisher.new(
|
|
91
|
+
publisher: value.is_a?(Components::Publisher) ? value.publisher : value.to_s,
|
|
92
|
+
copublisher: copub_strings,
|
|
93
|
+
)
|
|
94
|
+
end
|
|
95
|
+
private_class_method :build_publisher
|
|
96
|
+
|
|
97
|
+
# @!visibility private
|
|
98
|
+
def self.build_copublishers(list)
|
|
99
|
+
Array(list).map do |cp|
|
|
100
|
+
next cp if cp.is_a?(Components::Publisher)
|
|
101
|
+
|
|
102
|
+
Components::Publisher.new(publisher: cp.to_s)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
private_class_method :build_copublishers
|
|
106
|
+
|
|
107
|
+
# @!visibility private
|
|
108
|
+
def self.build_code(value)
|
|
109
|
+
return value if value.is_a?(Components::Code)
|
|
110
|
+
|
|
111
|
+
Components::Code.new(value: value.to_s)
|
|
112
|
+
end
|
|
113
|
+
private_class_method :build_code
|
|
114
|
+
|
|
115
|
+
# @!visibility private
|
|
116
|
+
def self.build_date(value)
|
|
117
|
+
return value if value.is_a?(::Pubid::Components::Date)
|
|
118
|
+
|
|
119
|
+
::Pubid::Components::Date.new(year: value.to_s)
|
|
120
|
+
end
|
|
121
|
+
private_class_method :build_date
|
|
122
|
+
|
|
123
|
+
# Parse an ISO URN string
|
|
124
|
+
# @param urn [String] the URN string to parse
|
|
125
|
+
# @return [Identifier] the parsed identifier
|
|
126
|
+
# @raise [Errors::ParseError] if URN is invalid
|
|
127
|
+
def self.parse_urn(urn)
|
|
128
|
+
UrnParser.parse(urn)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Build an ISO identifier from a Parslet parse-tree hash (used by other
|
|
132
|
+
# flavors when parsing joint identifiers, e.g. IEC's `IEC … | ISO …` form).
|
|
133
|
+
#
|
|
134
|
+
# This is the public seam: callers should never reach into
|
|
135
|
+
# `Pubid::Iso::Builder` directly.
|
|
136
|
+
#
|
|
137
|
+
# @param hash [Hash] parse tree for an ISO identifier
|
|
138
|
+
# @return [Pubid::Iso::Identifier]
|
|
139
|
+
def self.build_from_parse(hash)
|
|
140
|
+
builder.build(hash)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Return the named Parslet rule atom from the ISO parser, for embedding in
|
|
144
|
+
# another flavor's grammar (e.g. IEC joint identifiers).
|
|
145
|
+
#
|
|
146
|
+
# This is the public seam: callers should never instantiate
|
|
147
|
+
# `Pubid::Iso::Parser` directly.
|
|
148
|
+
#
|
|
149
|
+
# @param rule_name [Symbol] the parser rule to expose
|
|
150
|
+
# @return [Parslet::Atoms::Base]
|
|
151
|
+
def self.joint_grammar_atom(rule_name)
|
|
152
|
+
parser.public_send(rule_name)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
156
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
157
|
+
def self.identifier_types
|
|
158
|
+
@identifier_types ||= Identifiers.constants
|
|
159
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
160
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
161
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Build typed stage index from identifier types
|
|
165
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
166
|
+
def self.all_typed_stages
|
|
167
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
168
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
169
|
+
klass.const_get(:TYPED_STAGES)
|
|
170
|
+
else
|
|
171
|
+
[]
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Memoized builder instance used by Normalizer / URN parser
|
|
177
|
+
# @return [Pubid::Iso::Builder]
|
|
178
|
+
def self.builder
|
|
179
|
+
@builder ||= Builder.new
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Memoized parser instance used by Normalizer
|
|
183
|
+
# @return [Pubid::Iso::Parser]
|
|
184
|
+
def self.parser
|
|
185
|
+
@parser ||= Parser.new
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Lookup: type code -> identifier class
|
|
189
|
+
# @param code [String, Symbol] the type key to find
|
|
190
|
+
# @return [Class, nil] the matching identifier class
|
|
191
|
+
def self.locate_type(code)
|
|
192
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Lookup: abbreviation -> typed stage
|
|
196
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
197
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
198
|
+
def self.locate_stage(abbr)
|
|
199
|
+
abbr_str = abbr.to_s.upcase
|
|
200
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Lookup: stage code -> typed stage
|
|
204
|
+
# @param stage_code [String, Symbol]
|
|
205
|
+
# @return [Pubid::Components::TypedStage, nil]
|
|
206
|
+
def self.locate_stage_by_stage_code(stage_code)
|
|
207
|
+
stage_code_sym = stage_code.to_sym
|
|
208
|
+
all_typed_stages.find { |s| s.stage_code.to_sym == stage_code_sym }
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Lookup: per-typed-stage code -> typed stage
|
|
212
|
+
# @param code [String, Symbol]
|
|
213
|
+
# @return [Pubid::Components::TypedStage, nil]
|
|
214
|
+
def self.locate_stage_by_code(code)
|
|
215
|
+
code_sym = code.to_sym
|
|
216
|
+
all_typed_stages.find { |s| s.code&.to_sym == code_sym }
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Lookup: harmonized stage code -> typed stage
|
|
220
|
+
# @param harmonized_code [String]
|
|
221
|
+
# @return [Pubid::Components::TypedStage, nil]
|
|
222
|
+
def self.locate_stage_by_harmonized_code(harmonized_code)
|
|
223
|
+
harmonized_str = harmonized_code.to_s
|
|
224
|
+
all_typed_stages.find { |s| s.harmonized_stages&.include?(harmonized_str) }
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# Default typed stage used when no type_with_stage is present
|
|
228
|
+
# (e.g., the bare International Standard published stage)
|
|
229
|
+
# @return [Pubid::Components::TypedStage]
|
|
230
|
+
def self.default_typed_stage
|
|
231
|
+
locate_stage("") || all_typed_stages.first
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
Pubid::Registry.register(:iso, Pubid::Iso)
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Itu
|
|
5
|
+
class Builder
|
|
6
|
+
def self.build(parsed_data)
|
|
7
|
+
new.build(parsed_data)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def build(data)
|
|
11
|
+
# "Annex to ..." identifier — wraps a Special Publication base
|
|
12
|
+
if data[:annex_to]
|
|
13
|
+
return build_annex(data[:annex_to])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Common-text twin ("| ISO/IEC ..." suffix) — extract before building
|
|
17
|
+
# the base ITU identifier, then attach to whichever class the base
|
|
18
|
+
# resolves to.
|
|
19
|
+
twin = parse_common_text_twin(data.delete(:common_text_twin))
|
|
20
|
+
|
|
21
|
+
# Labelled annex of a Recommendation — "ITU-T A.23 Annex A (06/2014)".
|
|
22
|
+
# The annexed document is the :base subtree; :year/:month at this level
|
|
23
|
+
# are the annex's own date, not the base's.
|
|
24
|
+
if data[:annex_number]
|
|
25
|
+
annex = build_annex_of_recommendation(data)
|
|
26
|
+
annex.common_text_twin = twin if twin
|
|
27
|
+
return annex
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Labelled appendix of a Recommendation — "ITU-T G.101 App. I
|
|
31
|
+
# (05/2000)". Same shape as the annex above.
|
|
32
|
+
if data[:appendix_number]
|
|
33
|
+
appendix = build_appendix_of_recommendation(data)
|
|
34
|
+
appendix.common_text_twin = twin if twin
|
|
35
|
+
return appendix
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Operational Bulletin (Special Publication) — series == "OB" or
|
|
39
|
+
# legacy long form ("Operational Bulletin No. ...").
|
|
40
|
+
# The series_dash guard keeps a series-code "ITU-T OB-1" out of this
|
|
41
|
+
# branch, which would drop the dash and render it "ITU OB No. 1".
|
|
42
|
+
# Belt-and-braces: `series_code_body` already refuses "OB" + dash, so
|
|
43
|
+
# nothing reaches here with both set — the guard documents that coupling
|
|
44
|
+
# so removing the parser's `absent?` fails loudly rather than silently
|
|
45
|
+
# rerouting.
|
|
46
|
+
if (data[:series].to_s == "OB" && data[:series_dash].nil?) ||
|
|
47
|
+
data[:_op_bull]
|
|
48
|
+
sp = build_special_publication(data)
|
|
49
|
+
sp.common_text_twin = twin if twin && sp
|
|
50
|
+
return sp
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Check if this is a supplement identifier
|
|
54
|
+
if data[:supplement_type]
|
|
55
|
+
supp = build_supplement(data)
|
|
56
|
+
supp.common_text_twin = twin if twin && supp
|
|
57
|
+
return supp
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Handbook — "ITU-R 42.HDB"
|
|
61
|
+
if data[:handbook_marker]
|
|
62
|
+
return build_handbook(data)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Question — numeric ("ITU-R 234-1/7:") or letter-series
|
|
66
|
+
# ("ITU-R P.3/BL/7"). Both carry a :study_group marker.
|
|
67
|
+
if data[:study_group]
|
|
68
|
+
return build_question(data)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Build basic recommendation or combined identifier
|
|
72
|
+
sector = Components::Sector.new(sector: data[:sector].to_s)
|
|
73
|
+
series = Components::Series.new(series: data[:series].to_s) if data[:series]
|
|
74
|
+
code = build_code(data) if data[:number]
|
|
75
|
+
date = build_date(data) if data[:year]
|
|
76
|
+
|
|
77
|
+
# Combined (joint) recommendation — one or more additional
|
|
78
|
+
# "/SERIES.CODE" designations after the primary (e.g. "G.780/Y.1351",
|
|
79
|
+
# "G.780/Y.1351/Z.1362"). The primary stays on the base series/code.
|
|
80
|
+
if data[:combined]
|
|
81
|
+
return Identifiers::CombinedIdentifier.new(
|
|
82
|
+
sector: sector,
|
|
83
|
+
series: series,
|
|
84
|
+
code: code,
|
|
85
|
+
combined: build_designations(data[:combined]),
|
|
86
|
+
date: date,
|
|
87
|
+
version: data[:version]&.to_s,
|
|
88
|
+
# with_series offers these slots on either side of
|
|
89
|
+
# combined_suffixes, so a joint id can carry them too; not
|
|
90
|
+
# forwarding them let "ITU-T H.350/X.1 attachment" compare equal to
|
|
91
|
+
# the un-attached document.
|
|
92
|
+
series_word: !data[:series_word].nil?,
|
|
93
|
+
series_dash: !data[:series_dash].nil?,
|
|
94
|
+
attachment: !data[:attachment].nil?,
|
|
95
|
+
range_end: data[:range_end]&.to_s,
|
|
96
|
+
language: data[:language]&.to_s,
|
|
97
|
+
common_text_twin: twin,
|
|
98
|
+
)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# A Report ("Report ITU-R BT.2020-1") is shaped exactly like a
|
|
102
|
+
# Recommendation — only the leading word, captured as :report_marker,
|
|
103
|
+
# tells the two apart, and it has to, because the two series number
|
|
104
|
+
# independently and the same series/number is two real documents.
|
|
105
|
+
klass = data[:report_marker] ? Identifiers::Report : Identifiers::Recommendation
|
|
106
|
+
|
|
107
|
+
klass.new(
|
|
108
|
+
sector: sector,
|
|
109
|
+
series: series,
|
|
110
|
+
code: code,
|
|
111
|
+
date: date,
|
|
112
|
+
version: data[:version]&.to_s,
|
|
113
|
+
series_word: !data[:series_word].nil?,
|
|
114
|
+
series_dash: !data[:series_dash].nil?,
|
|
115
|
+
attachment: !data[:attachment].nil?,
|
|
116
|
+
range_end: data[:range_end]&.to_s,
|
|
117
|
+
language: data[:language]&.to_s,
|
|
118
|
+
common_text_twin: twin,
|
|
119
|
+
)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Parse the common-text twin string ("| ISO/IEC 13818-1:2022") into
|
|
123
|
+
# the appropriate flavor's identifier object. Returns nil if the twin
|
|
124
|
+
# is empty or unparseable.
|
|
125
|
+
def parse_common_text_twin(twin_raw)
|
|
126
|
+
return nil if twin_raw.nil?
|
|
127
|
+
|
|
128
|
+
twin_str = twin_raw.to_s.strip
|
|
129
|
+
# Strip a leading pipe if the parser captured it
|
|
130
|
+
twin_str = twin_str.sub(/\A\s*\|\s*/, "")
|
|
131
|
+
return nil if twin_str.empty?
|
|
132
|
+
|
|
133
|
+
case twin_str
|
|
134
|
+
when /\AISO\/IEC\b/, /\AISO\b/
|
|
135
|
+
Pubid::Iso.parse(twin_str)
|
|
136
|
+
when /\AIEC\b/
|
|
137
|
+
Pubid::Iec.parse(twin_str)
|
|
138
|
+
end
|
|
139
|
+
rescue StandardError
|
|
140
|
+
# If the twin doesn't parse as a known flavor, leave it as nil
|
|
141
|
+
# rather than blowing up the whole parse — the ITU half is still
|
|
142
|
+
# usable on its own.
|
|
143
|
+
nil
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Build Special Publication (OB). Sector is silently dropped — OB is a
|
|
147
|
+
# cross-bureau publication and `Identifier` rejects sector+OB
|
|
148
|
+
# in its constructor.
|
|
149
|
+
def build_special_publication(data)
|
|
150
|
+
Identifiers::SpecialPublication.new(
|
|
151
|
+
series: Components::Series.new(series: "OB"),
|
|
152
|
+
code: data[:number] ? build_code(data) : nil,
|
|
153
|
+
date: data[:year] ? build_date(data) : nil,
|
|
154
|
+
language: data[:language]&.to_s,
|
|
155
|
+
)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Build "Annex to ..." identifier. The inner data is the Special
|
|
159
|
+
# Publication; the annex inherits its language.
|
|
160
|
+
def build_annex(inner_data)
|
|
161
|
+
base = build_special_publication(inner_data)
|
|
162
|
+
Identifiers::Annex.new(
|
|
163
|
+
base: base,
|
|
164
|
+
language: inner_data[:language]&.to_s,
|
|
165
|
+
)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Build a labelled annex of a Recommendation. sector/series/code are
|
|
169
|
+
# deliberately NOT copied from the base: they are not serialized on the
|
|
170
|
+
# wrapper, so copies would make a from_hash-rebuilt annex differ from the
|
|
171
|
+
# parsed one.
|
|
172
|
+
def build_annex_of_recommendation(data)
|
|
173
|
+
Identifiers::AnnexOfRecommendation.new(
|
|
174
|
+
base: build(data[:base]),
|
|
175
|
+
number: data[:annex_number].to_s,
|
|
176
|
+
date: data[:year] ? build_date(data) : nil,
|
|
177
|
+
language: data[:language]&.to_s,
|
|
178
|
+
)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Build a labelled appendix of a Recommendation. Like the annex above,
|
|
182
|
+
# sector/series/code are deliberately NOT copied from the base — they are
|
|
183
|
+
# not serialized on the wrapper, so copies would make a from_hash-rebuilt
|
|
184
|
+
# appendix differ from the parsed one.
|
|
185
|
+
def build_appendix_of_recommendation(data)
|
|
186
|
+
Identifiers::AppendixOfRecommendation.new(
|
|
187
|
+
base: build(data[:base]),
|
|
188
|
+
number: data[:appendix_number].to_s,
|
|
189
|
+
material: data[:appendix_material]&.to_s,
|
|
190
|
+
date: data[:year] ? build_date(data) : nil,
|
|
191
|
+
language: data[:language]&.to_s,
|
|
192
|
+
)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# Build Handbook ("ITU-R 42.HDB").
|
|
196
|
+
def build_handbook(data)
|
|
197
|
+
Identifiers::Handbook.new(
|
|
198
|
+
sector: Components::Sector.new(sector: data[:sector].to_s),
|
|
199
|
+
code: build_code(data),
|
|
200
|
+
date: data[:year] ? build_date(data) : nil,
|
|
201
|
+
)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Build Question (numeric or letter-series).
|
|
205
|
+
def build_question(data)
|
|
206
|
+
series = if data[:series]
|
|
207
|
+
Components::Series.new(series: data[:series].to_s)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
Identifiers::Question.new(
|
|
211
|
+
sector: Components::Sector.new(sector: data[:sector].to_s),
|
|
212
|
+
series: series,
|
|
213
|
+
code: build_code(data),
|
|
214
|
+
study_group: data[:study_group].to_s,
|
|
215
|
+
has_bl: !data[:has_bl].nil?,
|
|
216
|
+
bracketed: !data[:bracketed].nil?,
|
|
217
|
+
has_colon: !data[:question_colon].nil?,
|
|
218
|
+
)
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def build_supplement(data)
|
|
222
|
+
# Build the base identifier first
|
|
223
|
+
base = build(data[:base]) if data[:base]
|
|
224
|
+
|
|
225
|
+
# Determine supplement type
|
|
226
|
+
supplement_type = data[:supplement_type].to_s.gsub(".", "")
|
|
227
|
+
klass = case supplement_type
|
|
228
|
+
when "Amd"
|
|
229
|
+
Identifiers::Amendment
|
|
230
|
+
when "Add"
|
|
231
|
+
Identifiers::Addendum
|
|
232
|
+
when "Cor"
|
|
233
|
+
Identifiers::Corrigendum
|
|
234
|
+
when "Err"
|
|
235
|
+
Identifiers::Errata
|
|
236
|
+
when "Suppl"
|
|
237
|
+
Identifiers::Supplement
|
|
238
|
+
else
|
|
239
|
+
# Previously fell through to a nil class and died with
|
|
240
|
+
# "undefined method 'new' for nil" one frame later. Any token
|
|
241
|
+
# added to Parser#supplement_type without a class here should
|
|
242
|
+
# say so.
|
|
243
|
+
raise ArgumentError,
|
|
244
|
+
"Unknown ITU supplement type: " \
|
|
245
|
+
"#{data[:supplement_type].inspect}"
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# Build supplement date (separate from base date)
|
|
249
|
+
supplement_date = if data[:supplement_year]
|
|
250
|
+
Pubid::Components::Date.new(
|
|
251
|
+
year: data[:supplement_year].to_s,
|
|
252
|
+
month: data[:supplement_month]&.to_s,
|
|
253
|
+
)
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# Sector/series are copied from the base when it has them; the fallback
|
|
257
|
+
# to this level's own tokens is guarded because an annex base keeps
|
|
258
|
+
# sector/series/code on *its* base, leaving all three nil here while the
|
|
259
|
+
# supplement level carries no sector token of its own.
|
|
260
|
+
# An annex base keeps sector/series/code on *its* base, so reach through
|
|
261
|
+
# it via #root; otherwise a supplement of an annex would carry none of
|
|
262
|
+
# them and its MR string would collapse to a bare "itu.<date>".
|
|
263
|
+
base_identity = base&.sector ? base : base&.root
|
|
264
|
+
sector = base_identity&.sector ||
|
|
265
|
+
(Components::Sector.new(sector: data[:sector].to_s) if data[:sector])
|
|
266
|
+
series = base_identity&.series ||
|
|
267
|
+
(Components::Series.new(series: data[:series].to_s) if data[:series])
|
|
268
|
+
|
|
269
|
+
attrs = {
|
|
270
|
+
sector: sector,
|
|
271
|
+
series: series,
|
|
272
|
+
code: base_identity&.code,
|
|
273
|
+
base: base,
|
|
274
|
+
number: data[:supplement_number].to_s,
|
|
275
|
+
# The marker is the captured space, so its ABSENCE is the flag.
|
|
276
|
+
number_glued: data[:supplement_space].nil?,
|
|
277
|
+
slash_joined: !data[:supplement_slash].nil?,
|
|
278
|
+
date: supplement_date,
|
|
279
|
+
language: data[:language]&.to_s,
|
|
280
|
+
}
|
|
281
|
+
# The "series" word rides on the supplement for the base-less,
|
|
282
|
+
# series-only form; with a base it is the base's, and renders from
|
|
283
|
+
# there. It is copied up anyway (like sector/series/code above) so the
|
|
284
|
+
# supplement's own MR slug stays distinct — `render_supplement` and the
|
|
285
|
+
# base-nil-guarded key_value/== only consult it when base is nil, so
|
|
286
|
+
# the copy is render- and serialization-neutral.
|
|
287
|
+
attrs[:series_word] = if base
|
|
288
|
+
!!base_identity&.series_word
|
|
289
|
+
else
|
|
290
|
+
!data[:series_word].nil?
|
|
291
|
+
end
|
|
292
|
+
attrs[:technical] = true if data[:technical] &&
|
|
293
|
+
klass == Identifiers::Corrigendum
|
|
294
|
+
|
|
295
|
+
klass.new(**attrs)
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
private
|
|
299
|
+
|
|
300
|
+
# Build the additional designations of a combined recommendation from the
|
|
301
|
+
# repeated parse subtrees (each `{ designation: { series:, number:, … } }`).
|
|
302
|
+
def build_designations(combined_data)
|
|
303
|
+
Array(combined_data).map do |element|
|
|
304
|
+
d = element[:designation] || element
|
|
305
|
+
Components::Designation.new(
|
|
306
|
+
series: Components::Series.new(series: d[:series].to_s),
|
|
307
|
+
code: Components::Code.new(
|
|
308
|
+
number: d[:number].to_s,
|
|
309
|
+
series_suffix: d[:series_suffix]&.to_s,
|
|
310
|
+
series_suffix_spaced: !d[:series_suffix_spaced].nil?,
|
|
311
|
+
subseries: d[:subseries]&.to_s,
|
|
312
|
+
parts: extract_parts(d[:parts]),
|
|
313
|
+
qualifier: d[:qualifier]&.to_s,
|
|
314
|
+
qualifier_glued: !d[:qualifier].nil? && d[:qualifier_spaced].nil?,
|
|
315
|
+
),
|
|
316
|
+
)
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
def build_code(data)
|
|
321
|
+
Components::Code.new(
|
|
322
|
+
imp_marker: data[:imp_marker]&.to_s,
|
|
323
|
+
number: data[:number].to_s,
|
|
324
|
+
series_suffix: data[:series_suffix]&.to_s,
|
|
325
|
+
# The marker is the captured separating space, so its presence is
|
|
326
|
+
# the flag for the edition word and its ABSENCE is the flag for the
|
|
327
|
+
# qualifier letter (whose majority spelling is spaced).
|
|
328
|
+
series_suffix_spaced: !data[:series_suffix_spaced].nil?,
|
|
329
|
+
subseries: data[:subseries]&.to_s,
|
|
330
|
+
parts: extract_parts(data[:parts]),
|
|
331
|
+
qualifier: data[:qualifier]&.to_s,
|
|
332
|
+
qualifier_glued: !data[:qualifier].nil? &&
|
|
333
|
+
data[:qualifier_spaced].nil?,
|
|
334
|
+
)
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
def build_date(data)
|
|
338
|
+
Pubid::Components::Date.new(
|
|
339
|
+
year: data[:year].to_s,
|
|
340
|
+
month: data[:month]&.to_s,
|
|
341
|
+
)
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
def extract_parts(parts_data)
|
|
345
|
+
return [] unless parts_data
|
|
346
|
+
|
|
347
|
+
parts = []
|
|
348
|
+
if parts_data.is_a?(Array)
|
|
349
|
+
parts_data.each do |part_hash|
|
|
350
|
+
parts << part_hash[:part].to_s if part_hash[:part]
|
|
351
|
+
end
|
|
352
|
+
elsif parts_data.is_a?(Hash) && parts_data[:part]
|
|
353
|
+
parts << parts_data[:part].to_s
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
parts
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
end
|
|
360
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Itu
|
|
7
|
+
module Components
|
|
8
|
+
# ITU Code component
|
|
9
|
+
# Format: [Imp]NUMBER[SUFFIX][.SUBSERIES][-PART]
|
|
10
|
+
# Examples: 1234, 1234.5, 1234-1, 1234.5-2, 50bis, 8bis, Imp712, ImpOSI
|
|
11
|
+
#
|
|
12
|
+
# The optional "Imp" marker identifies an Implementers' Guide for the
|
|
13
|
+
# series (e.g. G.Imp712, X.ImpOSI); the NUMBER that follows may be
|
|
14
|
+
# digits or a short letter string.
|
|
15
|
+
#
|
|
16
|
+
# SUFFIX is the edition marker "bis" / "ter" / "quater" attached
|
|
17
|
+
# directly to the number (e.g. X.50bis, V.8bis).
|
|
18
|
+
#
|
|
19
|
+
# Stays independent of Pubid::Components::Code because ITU uses
|
|
20
|
+
# +subseries+ (dot-separated, flavor-specific) and +parts+
|
|
21
|
+
# (dash-separated).
|
|
22
|
+
class Code < Lutaml::Model::Serializable
|
|
23
|
+
attribute :imp_marker, :string
|
|
24
|
+
attribute :number, :string
|
|
25
|
+
attribute :series_suffix, :string
|
|
26
|
+
# ITU prints the edition word both glued ("X.50bis") and space-
|
|
27
|
+
# separated ("E.250 bis"). The word itself is stored without the space,
|
|
28
|
+
# so `series_suffix` stays a clean, whitespace-free value to compare and
|
|
29
|
+
# index on; the spacing is this rendering-only flag. Named for the
|
|
30
|
+
# rarer-in-code form so the `false` default stays out of `to_hash`.
|
|
31
|
+
attribute :series_suffix_spaced, :boolean, default: -> { false }
|
|
32
|
+
attribute :subseries, :string
|
|
33
|
+
attribute :parts, :string, collection: true, default: []
|
|
34
|
+
# A single trailing letter distinguishing variants of one
|
|
35
|
+
# Recommendation: "D.200 R" (old D-series tariff recommendations),
|
|
36
|
+
# "Q.2931 B", "R.38 A", the glued "D.502R" and the lowercase
|
|
37
|
+
# "I.256.2a". Spaced is the majority spelling, so the glued one is the
|
|
38
|
+
# flag.
|
|
39
|
+
attribute :qualifier, :string
|
|
40
|
+
attribute :qualifier_glued, :boolean, default: -> { false }
|
|
41
|
+
|
|
42
|
+
# Segment order mirrors the grammar exactly — a GLUED suffix is
|
|
43
|
+
# captured inside `standard_code` (the edition word before the
|
|
44
|
+
# subseries, the qualifier after the parts), while a SPACED one is
|
|
45
|
+
# captured afterwards by `code_suffixes`. Rendering the edition word
|
|
46
|
+
# unconditionally first would print "Q.11a bis" back as "Q.11 bisa".
|
|
47
|
+
def to_s
|
|
48
|
+
result = "#{imp_marker}#{number}"
|
|
49
|
+
result += series_suffix.to_s if series_suffix && !series_suffix_spaced
|
|
50
|
+
result += ".#{subseries}" if subseries
|
|
51
|
+
result += parts.map { |p| "-#{p}" }.join if parts&.any?
|
|
52
|
+
result += qualifier.to_s if qualifier && qualifier_glued
|
|
53
|
+
result += " #{series_suffix}" if series_suffix && series_suffix_spaced
|
|
54
|
+
result += " #{qualifier}" if qualifier && !qualifier_glued
|
|
55
|
+
result
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Space-free rendering for URN and MR use: the print form may separate
|
|
59
|
+
# the edition word or the qualifier letter with a space ("E.250 bis",
|
|
60
|
+
# "D.200 R"), which is not admissible inside a URN segment. Removing
|
|
61
|
+
# the space keeps "D.200" and "D.200 R" on distinct URNs, which
|
|
62
|
+
# dropping the suffix would not.
|
|
63
|
+
def compact_s
|
|
64
|
+
to_s.delete(" ")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def render(context: nil)
|
|
68
|
+
to_s
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ==(other)
|
|
72
|
+
return false unless other.is_a?(Code)
|
|
73
|
+
|
|
74
|
+
imp_marker == other.imp_marker &&
|
|
75
|
+
number == other.number &&
|
|
76
|
+
series_suffix == other.series_suffix &&
|
|
77
|
+
subseries == other.subseries &&
|
|
78
|
+
parts == other.parts &&
|
|
79
|
+
qualifier == other.qualifier
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|