pubid 1.15.17 → 2.0.0.pre.alpha.1
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 +2041 -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/ccsds/update_codes.yaml +1 -0
- data/data/iec/update_codes.yaml +67 -0
- data/data/ieee/update_codes.yaml +104 -0
- data/data/iso/update_codes.yaml +21 -0
- data/data/nist/update_codes.yaml +87 -0
- data/data/plateau/update_codes.yaml +6 -0
- data/lib/pubid/amca/builder.rb +176 -0
- data/lib/pubid/amca/identifier.rb +18 -0
- data/lib/pubid/amca/identifiers/base.rb +64 -0
- data/lib/pubid/amca/identifiers/interpretation.rb +51 -0
- data/lib/pubid/amca/identifiers/publication.rb +47 -0
- data/lib/pubid/amca/identifiers/standard.rb +22 -0
- data/lib/pubid/amca/identifiers.rb +12 -0
- data/lib/pubid/amca/parser.rb +153 -0
- data/lib/pubid/amca/scheme.rb +16 -0
- data/lib/pubid/amca/single_identifier.rb +33 -0
- data/lib/pubid/amca/urn_generator.rb +50 -0
- data/lib/pubid/amca.rb +26 -0
- data/lib/pubid/ansi/builder.rb +52 -0
- data/lib/pubid/ansi/identifier.rb +13 -0
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +12 -0
- data/lib/pubid/ansi/identifiers/standard.rb +16 -0
- data/lib/pubid/ansi/identifiers.rb +11 -0
- data/lib/pubid/ansi/parser.rb +91 -0
- data/lib/pubid/ansi/scheme.rb +15 -0
- data/lib/pubid/ansi/single_identifier.rb +45 -0
- data/lib/pubid/ansi/urn_generator.rb +76 -0
- data/lib/pubid/ansi.rb +27 -0
- data/lib/pubid/api/builder.rb +85 -0
- data/lib/pubid/api/components/code.rb +9 -0
- data/lib/pubid/api/identifier.rb +21 -0
- data/lib/pubid/api/identifiers/base.rb +24 -0
- data/lib/pubid/api/identifiers/bulletin.rb +15 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +15 -0
- data/lib/pubid/api/identifiers/mpms.rb +44 -0
- data/lib/pubid/api/identifiers/publication.rb +15 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +15 -0
- data/lib/pubid/api/identifiers/specification.rb +15 -0
- data/lib/pubid/api/identifiers/standard.rb +15 -0
- data/lib/pubid/api/identifiers/technical_report.rb +15 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +27 -0
- data/lib/pubid/api/parser.rb +140 -0
- data/lib/pubid/api/scheme.rb +66 -0
- data/lib/pubid/api/single_identifier.rb +46 -0
- data/lib/pubid/api/urn_generator.rb +41 -0
- data/lib/pubid/api.rb +17 -0
- data/lib/pubid/ashrae/builder.rb +498 -0
- data/lib/pubid/ashrae/identifier.rb +18 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +46 -0
- data/lib/pubid/ashrae/identifiers/addendum.rb +55 -0
- data/lib/pubid/ashrae/identifiers/base.rb +23 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +51 -0
- data/lib/pubid/ashrae/identifiers/errata.rb +40 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +38 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +39 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +38 -0
- data/lib/pubid/ashrae/identifiers.rb +16 -0
- data/lib/pubid/ashrae/parser.rb +724 -0
- data/lib/pubid/ashrae/scheme.rb +53 -0
- data/lib/pubid/ashrae/single_identifier.rb +23 -0
- data/lib/pubid/ashrae/supplement_identifier.rb +23 -0
- data/lib/pubid/ashrae/urn_generator.rb +59 -0
- data/lib/pubid/ashrae.rb +21 -0
- data/lib/pubid/asme/builder.rb +153 -0
- data/lib/pubid/asme/components/code.rb +18 -0
- data/lib/pubid/asme/identifier.rb +15 -0
- data/lib/pubid/asme/identifiers/base.rb +70 -0
- data/lib/pubid/asme/identifiers/standard.rb +12 -0
- data/lib/pubid/asme/identifiers.rb +10 -0
- data/lib/pubid/asme/parser.rb +308 -0
- data/lib/pubid/asme/scheme.rb +37 -0
- data/lib/pubid/asme/single_identifier.rb +29 -0
- data/lib/pubid/asme/urn_generator.rb +133 -0
- data/lib/pubid/asme.rb +21 -0
- data/lib/pubid/astm/builder.rb +159 -0
- data/lib/pubid/astm/components/code.rb +33 -0
- data/lib/pubid/astm/identifier.rb +15 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +21 -0
- data/lib/pubid/astm/identifiers/base.rb +13 -0
- data/lib/pubid/astm/identifiers/data_series.rb +25 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +74 -0
- data/lib/pubid/astm/identifiers/manual.rb +40 -0
- data/lib/pubid/astm/identifiers/monograph.rb +25 -0
- data/lib/pubid/astm/identifiers/research_report.rb +18 -0
- data/lib/pubid/astm/identifiers/standard.rb +52 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +23 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +21 -0
- data/lib/pubid/astm/parser.rb +244 -0
- data/lib/pubid/astm/scheme.rb +55 -0
- data/lib/pubid/astm/single_identifier.rb +25 -0
- data/lib/pubid/astm/urn_generator.rb +99 -0
- data/lib/pubid/astm.rb +38 -0
- data/lib/pubid/bsi/builder.rb +1483 -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 +27 -0
- data/lib/pubid/bsi/identifiers/addendum_document.rb +64 -0
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +95 -0
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +82 -0
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +118 -0
- data/lib/pubid/bsi/identifiers/amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/base.rb +11 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +27 -0
- data/lib/pubid/bsi/identifiers/british_standard.rb +33 -0
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +114 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +51 -0
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +152 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +28 -0
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +69 -0
- data/lib/pubid/bsi/identifiers/disc.rb +56 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +71 -0
- data/lib/pubid/bsi/identifiers/electronic_book.rb +52 -0
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +47 -0
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +82 -0
- data/lib/pubid/bsi/identifiers/flex.rb +61 -0
- data/lib/pubid/bsi/identifiers/handbook.rb +39 -0
- data/lib/pubid/bsi/identifiers/index.rb +62 -0
- data/lib/pubid/bsi/identifiers/method.rb +76 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +73 -0
- data/lib/pubid/bsi/identifiers/practice_guide.rb +27 -0
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +79 -0
- data/lib/pubid/bsi/identifiers/published_document.rb +79 -0
- data/lib/pubid/bsi/identifiers/section.rb +62 -0
- data/lib/pubid/bsi/identifiers/set.rb +46 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/supplement_document.rb +51 -0
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +81 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +79 -0
- data/lib/pubid/bsi/identifiers/test_method.rb +67 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +52 -0
- data/lib/pubid/bsi/identifiers.rb +52 -0
- data/lib/pubid/bsi/model.rb +196 -0
- data/lib/pubid/bsi/parser.rb +659 -0
- data/lib/pubid/bsi/scheme.rb +243 -0
- data/lib/pubid/bsi/single_identifier.rb +129 -0
- data/lib/pubid/bsi/urn_generator.rb +84 -0
- data/lib/pubid/bsi.rb +32 -0
- data/lib/pubid/builder/base.rb +138 -0
- data/lib/pubid/bundled_identifier.rb +126 -0
- data/lib/pubid/ccsds/builder.rb +56 -0
- data/lib/pubid/ccsds/identifier.rb +16 -0
- data/lib/pubid/ccsds/identifiers/base.rb +78 -0
- data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +39 -0
- data/lib/pubid/ccsds/identifiers.rb +10 -0
- data/lib/pubid/ccsds/parser.rb +71 -0
- data/lib/pubid/ccsds/scheme.rb +57 -0
- data/lib/pubid/ccsds/single_identifier.rb +74 -0
- data/lib/pubid/ccsds/supplement_identifier.rb +33 -0
- data/lib/pubid/ccsds/urn_generator.rb +115 -0
- data/lib/pubid/ccsds.rb +21 -0
- data/lib/pubid/cen_cenelec/builder.rb +330 -0
- data/lib/pubid/cen_cenelec/identifier.rb +15 -0
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +40 -0
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/base.rb +75 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +61 -0
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +35 -0
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +41 -0
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +37 -0
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +22 -0
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +35 -0
- data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
- data/lib/pubid/cen_cenelec/parser.rb +144 -0
- data/lib/pubid/cen_cenelec/scheme.rb +164 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +130 -0
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +48 -0
- data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
- data/lib/pubid/cen_cenelec.rb +21 -0
- data/lib/pubid/cie/builder.rb +399 -0
- data/lib/pubid/cie/components/code.rb +72 -0
- data/lib/pubid/cie/components/language.rb +58 -0
- data/lib/pubid/cie/identifier.rb +18 -0
- data/lib/pubid/cie/identifiers/bundle.rb +20 -0
- data/lib/pubid/cie/identifiers/conference.rb +32 -0
- data/lib/pubid/cie/identifiers/corrigendum.rb +40 -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/standard.rb +58 -0
- data/lib/pubid/cie/identifiers/supplement.rb +45 -0
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +20 -0
- data/lib/pubid/cie/identifiers.rb +17 -0
- data/lib/pubid/cie/parser.rb +347 -0
- data/lib/pubid/cie/scheme.rb +64 -0
- data/lib/pubid/cie/single_identifier.rb +30 -0
- data/lib/pubid/cie/supplement_identifier.rb +26 -0
- data/lib/pubid/cie/urn_generator.rb +123 -0
- data/lib/pubid/cie.rb +28 -0
- data/lib/pubid/components/code.rb +33 -0
- data/lib/pubid/components/date.rb +49 -0
- data/lib/pubid/components/edition.rb +32 -0
- data/lib/pubid/components/language.rb +37 -0
- data/lib/pubid/components/locality.rb +10 -0
- data/lib/pubid/components/publisher.rb +36 -0
- data/lib/pubid/components/stage.rb +54 -0
- data/lib/pubid/components/type.rb +58 -0
- data/lib/pubid/components/typed_stage.rb +55 -0
- data/lib/pubid/components.rb +15 -0
- data/lib/pubid/core/pattern_doc_generator.rb +272 -0
- data/lib/pubid/core/update_codes.rb +77 -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 +27 -0
- data/lib/pubid/csa/identifier.rb +457 -0
- data/lib/pubid/csa/identifiers/base.rb +133 -0
- data/lib/pubid/csa/identifiers/bundled.rb +125 -0
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
- data/lib/pubid/csa/identifiers/cec.rb +129 -0
- data/lib/pubid/csa/identifiers/combined.rb +130 -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 +127 -0
- data/lib/pubid/csa/identifiers/standard.rb +10 -0
- data/lib/pubid/csa/identifiers.rb +17 -0
- data/lib/pubid/csa/parser.rb +445 -0
- data/lib/pubid/csa/scheme.rb +44 -0
- data/lib/pubid/csa/single_identifier.rb +30 -0
- data/lib/pubid/csa/urn_generator.rb +80 -0
- data/lib/pubid/csa/wrapper_identifier.rb +31 -0
- data/lib/pubid/csa.rb +25 -0
- data/lib/pubid/etsi/builder.rb +133 -0
- data/lib/pubid/etsi/components/code.rb +42 -0
- data/lib/pubid/etsi/components/version.rb +37 -0
- data/lib/pubid/etsi/components.rb +10 -0
- data/lib/pubid/etsi/identifier.rb +14 -0
- data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
- data/lib/pubid/etsi/identifiers/base.rb +38 -0
- data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +19 -0
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +91 -0
- data/lib/pubid/etsi/identifiers.rb +14 -0
- data/lib/pubid/etsi/parser.rb +133 -0
- data/lib/pubid/etsi/scheme.rb +42 -0
- data/lib/pubid/etsi/urn_generator.rb +76 -0
- data/lib/pubid/etsi.rb +21 -0
- data/lib/pubid/export/auditor.rb +89 -0
- data/lib/pubid/export/data_class_exporter.rb +59 -0
- data/lib/pubid/export/exporter.rb +74 -0
- data/lib/pubid/export/flavor_exporter.rb +402 -0
- data/lib/pubid/export/ieee_exporter.rb +78 -0
- data/lib/pubid/export/itu_exporter.rb +66 -0
- data/lib/pubid/export/nist_exporter.rb +64 -0
- data/lib/pubid/export/registry_exporter.rb +90 -0
- data/lib/pubid/export/result.rb +97 -0
- data/lib/pubid/export/scheme_exporter.rb +70 -0
- data/lib/pubid/export.rb +18 -0
- data/lib/pubid/format_detector.rb +16 -0
- data/lib/pubid/format_registry.rb +42 -0
- data/lib/pubid/identifier.rb +235 -0
- data/lib/pubid/identifier_metadata.rb +148 -0
- data/lib/pubid/identifier_registry.rb +198 -0
- data/lib/pubid/idf/builder.rb +82 -0
- data/lib/pubid/idf/identifier.rb +69 -0
- data/lib/pubid/idf/identifiers/amendment.rb +27 -0
- data/lib/pubid/idf/identifiers/corrigendum.rb +27 -0
- data/lib/pubid/idf/identifiers/international_standard.rb +123 -0
- data/lib/pubid/idf/identifiers/reviewed_method.rb +100 -0
- data/lib/pubid/idf/identifiers.rb +13 -0
- data/lib/pubid/idf/parser.rb +143 -0
- data/lib/pubid/idf/scheme.rb +61 -0
- data/lib/pubid/idf/single_identifier.rb +19 -0
- data/lib/pubid/idf/supplement_identifier.rb +43 -0
- data/lib/pubid/idf/urn_generator.rb +84 -0
- data/lib/pubid/idf.rb +25 -0
- data/lib/pubid/iec/builder.rb +457 -0
- data/lib/pubid/iec/components/code.rb +59 -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/identifier.rb +21 -0
- data/lib/pubid/iec/identifiers/amendment.rb +94 -0
- data/lib/pubid/iec/identifiers/base.rb +78 -0
- data/lib/pubid/iec/identifiers/component_specification.rb +39 -0
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +39 -0
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +86 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +94 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +141 -0
- data/lib/pubid/iec/identifiers/guide.rb +104 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +147 -0
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +104 -0
- data/lib/pubid/iec/identifiers/operational_document.rb +39 -0
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +101 -0
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +66 -0
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +40 -0
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +40 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +132 -0
- data/lib/pubid/iec/identifiers/technical_specification.rb +132 -0
- data/lib/pubid/iec/identifiers/technology_report.rb +39 -0
- data/lib/pubid/iec/identifiers/test_report_form.rb +78 -0
- data/lib/pubid/iec/identifiers/vap_identifier.rb +77 -0
- data/lib/pubid/iec/identifiers/white_paper.rb +39 -0
- data/lib/pubid/iec/identifiers/working_document.rb +96 -0
- data/lib/pubid/iec/parser.rb +412 -0
- data/lib/pubid/iec/rendering_style.rb +113 -0
- data/lib/pubid/iec/scheme.rb +71 -0
- data/lib/pubid/iec/single_identifier.rb +80 -0
- data/lib/pubid/iec/supplement_identifier.rb +161 -0
- data/lib/pubid/iec/urn_generator.rb +193 -0
- data/lib/pubid/iec/urn_parser.rb +289 -0
- data/lib/pubid/iec.rb +85 -0
- data/lib/pubid/ieee/aiee/builder.rb +71 -0
- data/lib/pubid/ieee/aiee/identifier.rb +105 -0
- data/lib/pubid/ieee/aiee/parser.rb +130 -0
- data/lib/pubid/ieee/aiee.rb +11 -0
- data/lib/pubid/ieee/builder.rb +1237 -0
- data/lib/pubid/ieee/components/code.rb +102 -0
- data/lib/pubid/ieee/components/draft.rb +93 -0
- data/lib/pubid/ieee/components/relationship.rb +157 -0
- data/lib/pubid/ieee/components/typed_stage.rb +100 -0
- data/lib/pubid/ieee/identifier.rb +13 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +33 -0
- data/lib/pubid/ieee/identifiers/base.rb +591 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +35 -0
- data/lib/pubid/ieee/identifiers/corrigendum.rb +37 -0
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +51 -0
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +18 -0
- data/lib/pubid/ieee/identifiers/dual_published.rb +28 -0
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +27 -0
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +34 -0
- data/lib/pubid/ieee/identifiers/joint_development.rb +172 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +51 -0
- data/lib/pubid/ieee/identifiers/nesc/base.rb +56 -0
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +28 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +26 -0
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +26 -0
- data/lib/pubid/ieee/identifiers/nesc.rb +15 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +20 -0
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +26 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +33 -0
- data/lib/pubid/ieee/identifiers/si_standard.rb +73 -0
- data/lib/pubid/ieee/identifiers/standard.rb +41 -0
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +23 -0
- data/lib/pubid/ieee/identifiers.rb +33 -0
- data/lib/pubid/ieee/ire/builder.rb +61 -0
- data/lib/pubid/ieee/ire/identifier.rb +58 -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 +101 -0
- data/lib/pubid/ieee/nesc/parser.rb +154 -0
- data/lib/pubid/ieee/nesc.rb +10 -0
- data/lib/pubid/ieee/parser.rb +1226 -0
- data/lib/pubid/ieee/scheme.rb +90 -0
- data/lib/pubid/ieee/typed_stages.rb +172 -0
- data/lib/pubid/ieee/urn_generator.rb +188 -0
- data/lib/pubid/ieee.rb +32 -0
- data/lib/pubid/ieee_debug.rb +31 -0
- data/lib/pubid/iho/builder.rb +37 -0
- data/lib/pubid/iho/identifier.rb +19 -0
- data/lib/pubid/iho/identifiers/base.rb +41 -0
- data/lib/pubid/iho/identifiers/bibliographic.rb +20 -0
- data/lib/pubid/iho/identifiers/circular_letter.rb +19 -0
- data/lib/pubid/iho/identifiers/miscellaneous.rb +20 -0
- data/lib/pubid/iho/identifiers/publication.rb +19 -0
- data/lib/pubid/iho/identifiers/standard.rb +19 -0
- data/lib/pubid/iho/identifiers.rb +14 -0
- data/lib/pubid/iho/parser.rb +68 -0
- data/lib/pubid/iho/scheme.rb +29 -0
- data/lib/pubid/iho/urn_generator.rb +29 -0
- data/lib/pubid/iho.rb +21 -0
- data/lib/pubid/iso/builder.rb +305 -0
- data/lib/pubid/iso/bundled_identifier.rb +85 -0
- data/lib/pubid/iso/combined_identifier.rb +22 -0
- data/lib/pubid/iso/components/code.rb +36 -0
- data/lib/pubid/iso/components/publisher.rb +60 -0
- data/lib/pubid/iso/components.rb +12 -0
- data/lib/pubid/iso/format_resolver.rb +45 -0
- data/lib/pubid/iso/identifier.rb +69 -0
- data/lib/pubid/iso/identifiers/addendum.rb +104 -0
- data/lib/pubid/iso/identifiers/amendment.rb +128 -0
- data/lib/pubid/iso/identifiers/base.rb +115 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
- data/lib/pubid/iso/identifiers/data.rb +76 -0
- data/lib/pubid/iso/identifiers/directives.rb +59 -0
- data/lib/pubid/iso/identifiers/directives_supplement.rb +119 -0
- data/lib/pubid/iso/identifiers/extract.rb +30 -0
- data/lib/pubid/iso/identifiers/guide.rb +100 -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 +89 -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 +87 -0
- data/lib/pubid/iso/identifiers/tc_document.rb +108 -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 +33 -0
- data/lib/pubid/iso/parser.rb +510 -0
- data/lib/pubid/iso/rendering_style.rb +120 -0
- data/lib/pubid/iso/scheme.rb +187 -0
- data/lib/pubid/iso/single_identifier.rb +61 -0
- data/lib/pubid/iso/supplement_identifier.rb +27 -0
- data/lib/pubid/iso/urn_generator.rb +412 -0
- data/lib/pubid/iso/urn_parser.rb +423 -0
- data/lib/pubid/iso/utilities.rb +86 -0
- data/lib/pubid/iso.rb +50 -0
- data/lib/pubid/itu/builder.rb +171 -0
- data/lib/pubid/itu/components/code.rb +39 -0
- data/lib/pubid/itu/components/sector.rb +35 -0
- data/lib/pubid/itu/components/series.rb +29 -0
- data/lib/pubid/itu/i18n.rb +9 -0
- data/lib/pubid/itu/i18n.yaml +30 -0
- data/lib/pubid/itu/identifier.rb +53 -0
- data/lib/pubid/itu/identifiers/amendment.rb +43 -0
- data/lib/pubid/itu/identifiers/annex.rb +74 -0
- data/lib/pubid/itu/identifiers/base.rb +154 -0
- data/lib/pubid/itu/identifiers/combined_identifier.rb +47 -0
- data/lib/pubid/itu/identifiers/corrigendum.rb +44 -0
- data/lib/pubid/itu/identifiers/recommendation.rb +16 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
- data/lib/pubid/itu/identifiers/supplement.rb +46 -0
- data/lib/pubid/itu/identifiers.rb +16 -0
- data/lib/pubid/itu/model.rb +111 -0
- data/lib/pubid/itu/parser.rb +225 -0
- data/lib/pubid/itu/scheme.rb +174 -0
- data/lib/pubid/itu/urn_generator.rb +105 -0
- data/lib/pubid/itu.rb +22 -0
- data/lib/pubid/jcgm/builder.rb +88 -0
- data/lib/pubid/jcgm/components/publisher.rb +20 -0
- data/lib/pubid/jcgm/components.rb +9 -0
- data/lib/pubid/jcgm/identifier.rb +11 -0
- data/lib/pubid/jcgm/identifiers/amendment.rb +35 -0
- data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +51 -0
- data/lib/pubid/jcgm/identifiers.rb +11 -0
- data/lib/pubid/jcgm/parser.rb +84 -0
- data/lib/pubid/jcgm/scheme.rb +60 -0
- data/lib/pubid/jcgm/single_identifier.rb +48 -0
- data/lib/pubid/jcgm/supplement_identifier.rb +16 -0
- data/lib/pubid/jcgm/urn_generator.rb +110 -0
- data/lib/pubid/jcgm.rb +31 -0
- data/lib/pubid/jis/builder.rb +124 -0
- data/lib/pubid/jis/components/code.rb +59 -0
- data/lib/pubid/jis/components.rb +9 -0
- data/lib/pubid/jis/identifier.rb +18 -0
- data/lib/pubid/jis/identifiers/amendment.rb +16 -0
- data/lib/pubid/jis/identifiers/base.rb +72 -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 +27 -0
- data/lib/pubid/jis/identifiers/technical_report.rb +31 -0
- data/lib/pubid/jis/identifiers/technical_specification.rb +31 -0
- data/lib/pubid/jis/identifiers.rb +17 -0
- data/lib/pubid/jis/parser.rb +109 -0
- data/lib/pubid/jis/scheme.rb +49 -0
- data/lib/pubid/jis/single_identifier.rb +37 -0
- data/lib/pubid/jis/supplement_identifier.rb +47 -0
- data/lib/pubid/jis/urn_generator.rb +25 -0
- data/lib/pubid/jis.rb +23 -0
- data/lib/pubid/lutaml/no_store_registration.rb +30 -0
- data/lib/pubid/nist/builder.rb +2100 -0
- data/lib/pubid/nist/components/code.rb +38 -0
- data/lib/pubid/nist/components/edition.rb +118 -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/publisher.rb +24 -0
- data/lib/pubid/nist/components/stage.rb +53 -0
- data/lib/pubid/nist/components/supplement.rb +121 -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 +19 -0
- data/lib/pubid/nist/configuration.rb +77 -0
- data/lib/pubid/nist/identifiers/base.rb +499 -0
- data/lib/pubid/nist/identifiers/circular.rb +68 -0
- data/lib/pubid/nist/identifiers/circular_supplement.rb +50 -0
- data/lib/pubid/nist/identifiers/commercial_standard.rb +41 -0
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +56 -0
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +56 -0
- data/lib/pubid/nist/identifiers/crpl_report.rb +135 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +94 -0
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +35 -0
- data/lib/pubid/nist/identifiers/handbook.rb +50 -0
- data/lib/pubid/nist/identifiers/internal_report.rb +56 -0
- data/lib/pubid/nist/identifiers/letter_circular.rb +45 -0
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +65 -0
- data/lib/pubid/nist/identifiers/monograph.rb +69 -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 +68 -0
- data/lib/pubid/nist/identifiers/special_publication.rb +36 -0
- data/lib/pubid/nist/identifiers/technical_note.rb +90 -0
- data/lib/pubid/nist/identifiers.rb +33 -0
- data/lib/pubid/nist/parser.rb +1084 -0
- data/lib/pubid/nist/scheme.rb +199 -0
- data/lib/pubid/nist/supplement_identifier.rb +83 -0
- data/lib/pubid/nist/urn_generator.rb +127 -0
- data/lib/pubid/nist.rb +36 -0
- data/lib/pubid/oiml/builder.rb +189 -0
- data/lib/pubid/oiml/components/code.rb +20 -0
- data/lib/pubid/oiml/components.rb +9 -0
- data/lib/pubid/oiml/identifier.rb +11 -0
- data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
- data/lib/pubid/oiml/identifiers/annex.rb +62 -0
- data/lib/pubid/oiml/identifiers/base.rb +36 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +13 -0
- data/lib/pubid/oiml/identifiers/document.rb +13 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +13 -0
- data/lib/pubid/oiml/identifiers/guide.rb +13 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +13 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +13 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +13 -0
- data/lib/pubid/oiml/identifiers.rb +18 -0
- data/lib/pubid/oiml/parser.rb +173 -0
- data/lib/pubid/oiml/scheme.rb +46 -0
- data/lib/pubid/oiml/single_identifier.rb +90 -0
- data/lib/pubid/oiml/supplement_identifier.rb +43 -0
- data/lib/pubid/oiml/urn_generator.rb +64 -0
- data/lib/pubid/oiml.rb +26 -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.rb +8 -0
- data/lib/pubid/parsers/base.rb +11 -0
- data/lib/pubid/parsers/mr_string.rb +93 -0
- data/lib/pubid/plateau/builder.rb +50 -0
- data/lib/pubid/plateau/identifiers/annex.rb +16 -0
- data/lib/pubid/plateau/identifiers/base.rb +51 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +34 -0
- data/lib/pubid/plateau/identifiers/technical_report.rb +20 -0
- data/lib/pubid/plateau/identifiers.rb +12 -0
- data/lib/pubid/plateau/parser.rb +63 -0
- data/lib/pubid/plateau/scheme.rb +45 -0
- data/lib/pubid/plateau/supplement_identifier.rb +72 -0
- data/lib/pubid/plateau/urn_generator.rb +29 -0
- data/lib/pubid/plateau.rb +25 -0
- data/lib/pubid/renderers/base.rb +19 -0
- data/lib/pubid/renderers/directives_renderer.rb +62 -0
- data/lib/pubid/renderers/guide_renderer.rb +20 -0
- data/lib/pubid/renderers/human_readable.rb +58 -0
- data/lib/pubid/renderers/iwa_renderer.rb +16 -0
- data/lib/pubid/renderers/mr_string.rb +16 -0
- data/lib/pubid/renderers/supplement_renderer.rb +33 -0
- data/lib/pubid/renderers/urn.rb +11 -0
- data/lib/pubid/renderers.rb +14 -0
- data/lib/pubid/rendering/base.rb +73 -0
- data/lib/pubid/rendering/common.rb +211 -0
- data/lib/pubid/rendering/context.rb +156 -0
- data/lib/pubid/rendering/date.rb +27 -0
- data/lib/pubid/rendering/format.rb +25 -0
- data/lib/pubid/rendering/language.rb +21 -0
- data/lib/pubid/rendering/numbering.rb +24 -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 +16 -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 +19 -0
- data/lib/pubid/sae/components/type.rb +19 -0
- data/lib/pubid/sae/components.rb +11 -0
- data/lib/pubid/sae/identifier.rb +14 -0
- data/lib/pubid/sae/identifiers/base.rb +42 -0
- data/lib/pubid/sae/identifiers.rb +9 -0
- data/lib/pubid/sae/parser.rb +55 -0
- data/lib/pubid/sae/scheme.rb +47 -0
- data/lib/pubid/sae/urn_generator.rb +38 -0
- data/lib/pubid/sae.rb +19 -0
- data/lib/pubid/scheme.rb +207 -0
- data/lib/pubid/urn_generator/base.rb +110 -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.rb +137 -13
- data/lib/tasks/docs.rake +37 -0
- data/lib/tasks/export.rake +38 -0
- data/lib/tasks/website-data.json +7488 -0
- metadata +613 -171
- data/lib/pubid/registry.rb +0 -30
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../components/date"
|
|
4
|
+
require_relative "components/sector"
|
|
5
|
+
require_relative "components/series"
|
|
6
|
+
require_relative "components/code"
|
|
7
|
+
require_relative "identifiers/recommendation"
|
|
8
|
+
require_relative "identifiers/combined_identifier"
|
|
9
|
+
require_relative "identifiers/supplement"
|
|
10
|
+
require_relative "identifiers/amendment"
|
|
11
|
+
require_relative "identifiers/corrigendum"
|
|
12
|
+
require_relative "identifiers/special_publication"
|
|
13
|
+
require_relative "identifiers/annex"
|
|
14
|
+
|
|
15
|
+
module Pubid
|
|
16
|
+
module Itu
|
|
17
|
+
class Builder
|
|
18
|
+
def self.build(parsed_data)
|
|
19
|
+
new.build(parsed_data)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def build(data)
|
|
23
|
+
# "Annex to ..." identifier — wraps a Special Publication base
|
|
24
|
+
if data[:annex_to]
|
|
25
|
+
return build_annex(data[:annex_to])
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Operational Bulletin (Special Publication) — series == "OB" or
|
|
29
|
+
# legacy long form ("Operational Bulletin No. ...").
|
|
30
|
+
if data[:series].to_s == "OB" || data[:_op_bull]
|
|
31
|
+
return build_special_publication(data)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Check if this is a supplement identifier
|
|
35
|
+
if data[:supplement_type]
|
|
36
|
+
return build_supplement(data)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Build basic recommendation or combined identifier
|
|
40
|
+
sector = Components::Sector.new(sector: data[:sector].to_s)
|
|
41
|
+
series = Components::Series.new(series: data[:series].to_s) if data[:series]
|
|
42
|
+
code = build_code(data) if data[:number]
|
|
43
|
+
date = build_date(data) if data[:year]
|
|
44
|
+
|
|
45
|
+
# Check if this is a combined identifier (has combined_series and combined_number)
|
|
46
|
+
if data[:combined_series] || data[:combined_number]
|
|
47
|
+
if data[:combined_series]
|
|
48
|
+
combined_series = Components::Series.new(
|
|
49
|
+
series: data[:combined_series][:series].to_s,
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
if data[:combined_number]
|
|
54
|
+
combined_code = Components::Code.new(
|
|
55
|
+
number: data[:combined_number].to_s,
|
|
56
|
+
subseries: data[:combined_subseries]&.to_s,
|
|
57
|
+
parts: extract_parts(data[:combined_parts]),
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
return Identifiers::CombinedIdentifier.new(
|
|
62
|
+
sector: sector,
|
|
63
|
+
series: series,
|
|
64
|
+
code: code,
|
|
65
|
+
combined_series: combined_series,
|
|
66
|
+
combined_code: combined_code,
|
|
67
|
+
date: date,
|
|
68
|
+
language: data[:language]&.to_s,
|
|
69
|
+
)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
Identifiers::Recommendation.new(
|
|
73
|
+
sector: sector,
|
|
74
|
+
series: series,
|
|
75
|
+
code: code,
|
|
76
|
+
date: date,
|
|
77
|
+
language: data[:language]&.to_s,
|
|
78
|
+
)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Build Special Publication (OB). Sector is silently dropped — OB is a
|
|
82
|
+
# cross-bureau publication and `Identifiers::Base` rejects sector+OB
|
|
83
|
+
# in its constructor.
|
|
84
|
+
def build_special_publication(data)
|
|
85
|
+
Identifiers::SpecialPublication.new(
|
|
86
|
+
series: Components::Series.new(series: "OB"),
|
|
87
|
+
code: data[:number] ? build_code(data) : nil,
|
|
88
|
+
date: data[:year] ? build_date(data) : nil,
|
|
89
|
+
language: data[:language]&.to_s,
|
|
90
|
+
)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Build "Annex to ..." identifier. The inner data is the Special
|
|
94
|
+
# Publication; the annex inherits its language.
|
|
95
|
+
def build_annex(inner_data)
|
|
96
|
+
base = build_special_publication(inner_data)
|
|
97
|
+
Identifiers::Annex.new(
|
|
98
|
+
base: base,
|
|
99
|
+
language: inner_data[:language]&.to_s,
|
|
100
|
+
)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def build_supplement(data)
|
|
104
|
+
# Build the base identifier first
|
|
105
|
+
base = build(data[:base]) if data[:base]
|
|
106
|
+
|
|
107
|
+
# Determine supplement type
|
|
108
|
+
supplement_type = data[:supplement_type].to_s.gsub(".", "")
|
|
109
|
+
klass = case supplement_type
|
|
110
|
+
when "Amd"
|
|
111
|
+
Identifiers::Amendment
|
|
112
|
+
when "Cor"
|
|
113
|
+
Identifiers::Corrigendum
|
|
114
|
+
when "Suppl"
|
|
115
|
+
Identifiers::Supplement
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Build supplement date (separate from base date)
|
|
119
|
+
supplement_date = if data[:supplement_year]
|
|
120
|
+
Pubid::Components::Date.new(
|
|
121
|
+
year: data[:supplement_year].to_s,
|
|
122
|
+
month: data[:supplement_month]&.to_s,
|
|
123
|
+
)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Build supplement with extracted components
|
|
127
|
+
klass.new(
|
|
128
|
+
sector: base&.sector || Components::Sector.new(sector: data[:sector].to_s),
|
|
129
|
+
series: base&.series || (data[:series] ? Components::Series.new(series: data[:series].to_s) : nil),
|
|
130
|
+
code: base&.code,
|
|
131
|
+
base: base,
|
|
132
|
+
number: data[:supplement_number].to_s,
|
|
133
|
+
date: supplement_date,
|
|
134
|
+
language: data[:language]&.to_s,
|
|
135
|
+
)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
private
|
|
139
|
+
|
|
140
|
+
def build_code(data)
|
|
141
|
+
Components::Code.new(
|
|
142
|
+
number: data[:number].to_s,
|
|
143
|
+
subseries: data[:subseries]&.to_s,
|
|
144
|
+
parts: extract_parts(data[:parts]),
|
|
145
|
+
)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def build_date(data)
|
|
149
|
+
Pubid::Components::Date.new(
|
|
150
|
+
year: data[:year].to_s,
|
|
151
|
+
month: data[:month]&.to_s,
|
|
152
|
+
)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def extract_parts(parts_data)
|
|
156
|
+
return [] unless parts_data
|
|
157
|
+
|
|
158
|
+
parts = []
|
|
159
|
+
if parts_data.is_a?(Array)
|
|
160
|
+
parts_data.each do |part_hash|
|
|
161
|
+
parts << part_hash[:part].to_s if part_hash[:part]
|
|
162
|
+
end
|
|
163
|
+
elsif parts_data.is_a?(Hash) && parts_data[:part]
|
|
164
|
+
parts << parts_data[:part].to_s
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
parts
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
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: NUMBER[.SUBSERIES][-PART]
|
|
10
|
+
# Examples: 1234, 1234.5, 1234-1, 1234.5-2
|
|
11
|
+
class Code < Lutaml::Model::Serializable
|
|
12
|
+
attribute :number, :string
|
|
13
|
+
attribute :subseries, :string
|
|
14
|
+
attribute :parts, :string, collection: true
|
|
15
|
+
|
|
16
|
+
def initialize(number:, subseries: nil, parts: nil)
|
|
17
|
+
@number = number
|
|
18
|
+
@subseries = subseries
|
|
19
|
+
@parts = parts || []
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_s
|
|
23
|
+
result = number.to_s
|
|
24
|
+
result += ".#{subseries}" if subseries
|
|
25
|
+
result += parts.map { |p| "-#{p}" }.join if parts&.any?
|
|
26
|
+
result
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def ==(other)
|
|
30
|
+
return false unless other.is_a?(Code)
|
|
31
|
+
|
|
32
|
+
number == other.number &&
|
|
33
|
+
subseries == other.subseries &&
|
|
34
|
+
parts == other.parts
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Itu
|
|
7
|
+
module Components
|
|
8
|
+
# ITU Sector component
|
|
9
|
+
# Values: R (Radio), T (Telecommunications), D (Development)
|
|
10
|
+
class Sector < Lutaml::Model::Serializable
|
|
11
|
+
attribute :sector, :string # R, T, or D
|
|
12
|
+
|
|
13
|
+
VALID_SECTORS = %w[R T D].freeze
|
|
14
|
+
|
|
15
|
+
def initialize(sector:)
|
|
16
|
+
unless VALID_SECTORS.include?(sector.to_s.upcase)
|
|
17
|
+
raise ArgumentError, "Invalid sector: #{sector}. Must be R, T, or D"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
@sector = sector.to_s.upcase
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def to_s
|
|
24
|
+
sector
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def ==(other)
|
|
28
|
+
return false unless other.is_a?(Sector)
|
|
29
|
+
|
|
30
|
+
sector == other.sector
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Itu
|
|
7
|
+
module Components
|
|
8
|
+
# ITU Series component
|
|
9
|
+
# Examples: BO, V, X, A, etc.
|
|
10
|
+
class Series < Lutaml::Model::Serializable
|
|
11
|
+
attribute :series, :string # e.g., BO, V, X, R, SG1, OB
|
|
12
|
+
|
|
13
|
+
def initialize(series:)
|
|
14
|
+
@series = series
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def to_s
|
|
18
|
+
series
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def ==(other)
|
|
22
|
+
return false unless other.is_a?(Series)
|
|
23
|
+
|
|
24
|
+
series == other.series
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Translations for ITU identifier rendering.
|
|
2
|
+
#
|
|
3
|
+
# Ported from v1 monorepo gems/pubid-itu/i18n.yaml — only the sections
|
|
4
|
+
# required by the "Annex to ITU OB" feature are populated here. The
|
|
5
|
+
# `type`/`publisher` sections used by the v1 recommendation renderer are
|
|
6
|
+
# intentionally omitted on v2: the v2 rendering pipeline does not yet wire
|
|
7
|
+
# them up (a separate effort).
|
|
8
|
+
|
|
9
|
+
# Translation of the "Annex to" prefix used when an annex has no number
|
|
10
|
+
# (i.e. the document IS the annex of a Special Publication, not a sub-annex).
|
|
11
|
+
# For Arabic the value is positioned as a postfix instead of a prefix.
|
|
12
|
+
# Languages with an annex_long entry below (fr/es/ru/zh) intentionally have
|
|
13
|
+
# no entry here — they use the long-form template for short rendering too,
|
|
14
|
+
# so French short matches French long etc. This avoids mixing the English
|
|
15
|
+
# "OB" abbreviation with localized text; ITU itself uses the localized
|
|
16
|
+
# abbreviation (e.g. "BE" in French/Spanish).
|
|
17
|
+
# German is not an official ITU language so no long template exists.
|
|
18
|
+
annex_to:
|
|
19
|
+
ar: "ملحق"
|
|
20
|
+
de: Anhang zum
|
|
21
|
+
|
|
22
|
+
# Long-form (title-style) templates for "Annex to ..." identifiers.
|
|
23
|
+
# Used both for to_s(format: :long) and for short rendering when no
|
|
24
|
+
# annex_to entry exists for the language.
|
|
25
|
+
annex_long:
|
|
26
|
+
fr: "Annexe au BE de l'UIT %{number}"
|
|
27
|
+
es: "Anexo al BE de la UIT N.º %{number}"
|
|
28
|
+
ar: "ملحق ابلنشرة التشغيلية رقم %{number}"
|
|
29
|
+
ru: "Приложение к ОБ МСЭ %{number}"
|
|
30
|
+
zh: "国际电联操作公报附件 第 %{number} 期"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "parser"
|
|
4
|
+
require_relative "builder"
|
|
5
|
+
require_relative "identifiers"
|
|
6
|
+
require_relative "components/sector"
|
|
7
|
+
require_relative "components/series"
|
|
8
|
+
require_relative "components/code"
|
|
9
|
+
|
|
10
|
+
module Pubid
|
|
11
|
+
module Itu
|
|
12
|
+
module Identifier
|
|
13
|
+
def self.parse(identifier)
|
|
14
|
+
parsed = Parser.parse(identifier)
|
|
15
|
+
Builder.build(parsed)
|
|
16
|
+
rescue Parslet::ParseFailed => e
|
|
17
|
+
raise "Failed to parse ITU identifier '#{identifier}': #{e.message}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Factory mirroring v1's Pubid::Itu::Identifier.create API. The v1 form
|
|
21
|
+
# accepts a `type:` discriminator plus attribute kwargs; this v2
|
|
22
|
+
# implementation supports the subset needed by metanorma-itu PR #497:
|
|
23
|
+
# * type: :annex — builds Identifiers::Annex
|
|
24
|
+
# * series: "OB" (with no type:) — builds Identifiers::SpecialPublication
|
|
25
|
+
def self.create(type: nil, **kwargs)
|
|
26
|
+
case type
|
|
27
|
+
when :annex
|
|
28
|
+
Identifiers::Annex.new(**kwargs)
|
|
29
|
+
when nil
|
|
30
|
+
if kwargs[:series].to_s == "OB"
|
|
31
|
+
create_special_publication(**kwargs)
|
|
32
|
+
else
|
|
33
|
+
raise ArgumentError,
|
|
34
|
+
"Identifier.create without :type requires series: 'OB'"
|
|
35
|
+
end
|
|
36
|
+
else
|
|
37
|
+
raise ArgumentError,
|
|
38
|
+
"Unsupported type for Identifier.create: #{type.inspect}"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.create_special_publication(number:, series: "OB", date: nil,
|
|
43
|
+
language: nil)
|
|
44
|
+
Identifiers::SpecialPublication.new(
|
|
45
|
+
series: Components::Series.new(series: series.to_s),
|
|
46
|
+
code: Components::Code.new(number: number.to_s),
|
|
47
|
+
date: date,
|
|
48
|
+
language: language&.to_s,
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "supplement"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Itu
|
|
7
|
+
module Identifiers
|
|
8
|
+
# Amendment identifier (Amd)
|
|
9
|
+
# Pattern: "ITU-T G.989 Amd 1", "ITU-T G.780/Y.1351 Amd 1 (2004)"
|
|
10
|
+
class Amendment < Supplement
|
|
11
|
+
def to_s
|
|
12
|
+
result = base ? base.to_s : "#{publisher}-#{sector}"
|
|
13
|
+
|
|
14
|
+
# Add series if no base
|
|
15
|
+
if !base && series
|
|
16
|
+
result += " #{series}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
result += " Amd #{number}"
|
|
20
|
+
|
|
21
|
+
# Add date if present
|
|
22
|
+
if date
|
|
23
|
+
result += if date.month
|
|
24
|
+
" (#{date.month}/#{date.year})"
|
|
25
|
+
else
|
|
26
|
+
" (#{date.year})"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
result
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def ==(other)
|
|
34
|
+
return false unless other.is_a?(Amendment)
|
|
35
|
+
|
|
36
|
+
base == other.base &&
|
|
37
|
+
number == other.number &&
|
|
38
|
+
date == other.date
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Itu
|
|
7
|
+
module Identifiers
|
|
8
|
+
# "Annex to ..." identifier — the document IS the annex of a Special
|
|
9
|
+
# Publication (e.g. an annex to ITU OB), not a sub-annex with a number.
|
|
10
|
+
#
|
|
11
|
+
# Three rendering forms (per v1 PR #38):
|
|
12
|
+
# * default (no i18n_lang): English structural, "Annex to ITU OB No. 1000"
|
|
13
|
+
# * short with i18n_lang: structural translation using `annex_to`
|
|
14
|
+
# * long with i18n_lang + format: :long: per-language `annex_long` template
|
|
15
|
+
# Languages without an `annex_to` entry (fr/es/ru/zh) use the long
|
|
16
|
+
# template for the short form too.
|
|
17
|
+
class Annex < Base
|
|
18
|
+
attribute :base, Base, polymorphic: true
|
|
19
|
+
|
|
20
|
+
def to_urn
|
|
21
|
+
# Annex URN: append :annex to the inner identifier's URN.
|
|
22
|
+
base_urn = base&.to_urn
|
|
23
|
+
return "urn:itu:annex" unless base_urn
|
|
24
|
+
|
|
25
|
+
"#{base_urn}:annex"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def render_base(**opts)
|
|
29
|
+
lang = opts[:i18n_lang]&.to_s
|
|
30
|
+
long_template = lang && Pubid::Itu::I18N["annex_long"]&.fetch(lang,
|
|
31
|
+
nil)
|
|
32
|
+
|
|
33
|
+
if opts[:format] == :long && long_template
|
|
34
|
+
return long_template % { number: base_number }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
annex_translation = lang && Pubid::Itu::I18N["annex_to"]&.fetch(lang,
|
|
38
|
+
nil)
|
|
39
|
+
|
|
40
|
+
if annex_translation
|
|
41
|
+
base_str = base_render(**opts)
|
|
42
|
+
return "#{base_str} #{annex_translation}" if lang == "ar"
|
|
43
|
+
|
|
44
|
+
return "#{annex_translation} #{base_str}"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
if long_template
|
|
48
|
+
return long_template % { number: base_number }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
"Annex to #{base_render(**opts)}"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def ==(other)
|
|
55
|
+
return false unless other.is_a?(Annex)
|
|
56
|
+
|
|
57
|
+
base == other.base && language == other.language
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
def base_render(**opts)
|
|
63
|
+
base&.render_base(**opts) || ""
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def base_number
|
|
67
|
+
return code&.number if code
|
|
68
|
+
|
|
69
|
+
base&.code&.number
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../../components/date"
|
|
4
|
+
require_relative "../components/sector"
|
|
5
|
+
require_relative "../components/series"
|
|
6
|
+
require_relative "../components/code"
|
|
7
|
+
require_relative "../i18n"
|
|
8
|
+
|
|
9
|
+
module Pubid
|
|
10
|
+
module Itu
|
|
11
|
+
module Identifiers
|
|
12
|
+
# Base class for all ITU identifiers
|
|
13
|
+
class Base < Pubid::Identifier
|
|
14
|
+
# Long-form ↔ ITU single-letter language code map. The parser produces
|
|
15
|
+
# single-letter codes (E/F/S/R/A/C); API callers (e.g. metanorma-itu)
|
|
16
|
+
# pass long-form (en/fr/es/ru/ar/zh). Storage is normalized to the
|
|
17
|
+
# single-letter form. Languages with no canonical letter (e.g. "de")
|
|
18
|
+
# pass through unchanged and produce no trailing suffix.
|
|
19
|
+
LANGUAGES = {
|
|
20
|
+
"fr" => "F", "es" => "S", "ru" => "R",
|
|
21
|
+
"ar" => "A", "zh" => "C", "en" => "E",
|
|
22
|
+
"F" => "F", "S" => "S", "R" => "R",
|
|
23
|
+
"A" => "A", "C" => "C", "E" => "E"
|
|
24
|
+
}.freeze
|
|
25
|
+
|
|
26
|
+
attribute :sector, Pubid::Itu::Components::Sector
|
|
27
|
+
attribute :series, Pubid::Itu::Components::Series
|
|
28
|
+
attribute :code, Pubid::Itu::Components::Code
|
|
29
|
+
attribute :date, Pubid::Components::Date
|
|
30
|
+
attribute :language, :string
|
|
31
|
+
|
|
32
|
+
def initialize(**kwargs)
|
|
33
|
+
if kwargs[:language]
|
|
34
|
+
kwargs = kwargs.merge(language: normalize_language(kwargs[:language]))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
super
|
|
38
|
+
|
|
39
|
+
validate_ob_no_sector!
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Generate URN for this identifier
|
|
43
|
+
#
|
|
44
|
+
# @return [String] URN representation
|
|
45
|
+
|
|
46
|
+
# Override base_hash to handle ITU-specific attributes
|
|
47
|
+
def base_hash
|
|
48
|
+
hash = super
|
|
49
|
+
# ITU Series has a 'series' attribute, not 'number'
|
|
50
|
+
if hash[:series].is_a?(Hash) && series
|
|
51
|
+
hash[:series] = series.series
|
|
52
|
+
end
|
|
53
|
+
# Add sector (ITU-specific, has a 'sector' attribute)
|
|
54
|
+
hash[:sector] = sector.sector if sector
|
|
55
|
+
hash
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def publisher
|
|
59
|
+
"ITU"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Render identifier as a string.
|
|
63
|
+
#
|
|
64
|
+
# @param i18n_lang [Symbol, String] language for identifier text
|
|
65
|
+
# translation (e.g. :fr renders "Annex to" as "Annexe au"). Distinct
|
|
66
|
+
# from the identifier's `language` attribute, which is the document's
|
|
67
|
+
# own language and produces the trailing suffix like "-F".
|
|
68
|
+
# @param language [Symbol, String] deprecated alias for i18n_lang.
|
|
69
|
+
# @param format [Symbol] :long for title-style rendering of supported
|
|
70
|
+
# identifiers, otherwise the default short form.
|
|
71
|
+
def to_s(**opts)
|
|
72
|
+
opts = self.class.normalize_to_s_opts(opts)
|
|
73
|
+
render_base(**opts) + render_language_suffix
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def render_base(**_opts)
|
|
77
|
+
result = "#{publisher}-#{sector}"
|
|
78
|
+
|
|
79
|
+
# Add series and code
|
|
80
|
+
result += if series
|
|
81
|
+
" #{series}.#{code}"
|
|
82
|
+
else
|
|
83
|
+
" #{code}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Add date if present
|
|
87
|
+
if date
|
|
88
|
+
result += if date.month
|
|
89
|
+
" (#{date.month}/#{date.year})"
|
|
90
|
+
else
|
|
91
|
+
" (#{date.year})"
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
result
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def render_language_suffix
|
|
99
|
+
return "" unless language
|
|
100
|
+
# Only render canonical single-letter ITU language codes
|
|
101
|
+
# (e.g. "F", "S"). Languages with no mapping (e.g. "de") get
|
|
102
|
+
# no suffix — matches v1 PR #38 render_language behavior.
|
|
103
|
+
return "" unless LANGUAGES.value?(language)
|
|
104
|
+
|
|
105
|
+
"-#{language}"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Translate `language:` opt to `i18n_lang:` opt. v1 PR #38 introduced
|
|
109
|
+
# `i18n_lang:` to disambiguate "rendering language" from the document
|
|
110
|
+
# language attribute; `language:` remains a deprecated alias.
|
|
111
|
+
def self.normalize_to_s_opts(opts)
|
|
112
|
+
opts = opts.dup
|
|
113
|
+
if opts.key?(:language) && !opts.key?(:i18n_lang)
|
|
114
|
+
opts[:i18n_lang] = opts.delete(:language)
|
|
115
|
+
else
|
|
116
|
+
opts.delete(:language)
|
|
117
|
+
end
|
|
118
|
+
opts
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def ==(other)
|
|
122
|
+
return false unless other.is_a?(Base)
|
|
123
|
+
|
|
124
|
+
sector == other.sector &&
|
|
125
|
+
series == other.series &&
|
|
126
|
+
code == other.code &&
|
|
127
|
+
date == other.date &&
|
|
128
|
+
language == other.language
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
private
|
|
132
|
+
|
|
133
|
+
def normalize_language(value)
|
|
134
|
+
str = value.to_s
|
|
135
|
+
LANGUAGES[str] || str
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# OB (Operational Bulletin) is a cross-bureau ITU publication and
|
|
139
|
+
# must not have a sector. Direct construction with both raises;
|
|
140
|
+
# the parser silently drops sector for legacy strings like
|
|
141
|
+
# "ITU-T OB.X" (handled in Builder).
|
|
142
|
+
def validate_ob_no_sector!
|
|
143
|
+
return unless series&.series == "OB"
|
|
144
|
+
return if sector.nil?
|
|
145
|
+
return if sector.is_a?(Components::Sector) && (sector.sector.nil? || sector.sector.to_s.empty?)
|
|
146
|
+
|
|
147
|
+
raise ArgumentError,
|
|
148
|
+
"OB (Operational Bulletin) is a cross-bureau ITU publication; " \
|
|
149
|
+
"sector must not be set"
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Itu
|
|
7
|
+
module Identifiers
|
|
8
|
+
# Combined identifier for dual-series recommendations
|
|
9
|
+
# Format: ITU-T G.780/Y.1351
|
|
10
|
+
# Example: ITU-T G.780/Y.1351 (2004)
|
|
11
|
+
class CombinedIdentifier < Base
|
|
12
|
+
attribute :combined_series, Pubid::Itu::Components::Series
|
|
13
|
+
attribute :combined_code, Pubid::Itu::Components::Code
|
|
14
|
+
|
|
15
|
+
def to_s
|
|
16
|
+
result = "#{publisher}-#{sector}"
|
|
17
|
+
|
|
18
|
+
# Add primary series and code
|
|
19
|
+
result += if series
|
|
20
|
+
" #{series}.#{code}"
|
|
21
|
+
else
|
|
22
|
+
" #{code}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Add combined series and code
|
|
26
|
+
if combined_series && combined_code
|
|
27
|
+
result += "/#{combined_series}.#{combined_code}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Add date if present
|
|
31
|
+
if date
|
|
32
|
+
result += if date.month
|
|
33
|
+
" (#{date.month}/#{date.year})"
|
|
34
|
+
else
|
|
35
|
+
" (#{date.year})"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Add language
|
|
40
|
+
result += "-#{language}" if language
|
|
41
|
+
|
|
42
|
+
result
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|