pubid 1.15.19 → 2.0.0.pre.alpha.2
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 +89 -0
- data/data/plateau/update_codes.yaml +6 -0
- data/lib/pubid/amca/builder.rb +176 -0
- data/lib/pubid/amca/identifier.rb +57 -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 +55 -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 +68 -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 +57 -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 +61 -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 +92 -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 +87 -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 +84 -0
- data/lib/pubid/ccsds/identifiers/base.rb +89 -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 +77 -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 +52 -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 +71 -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/factory.rb +50 -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 +59 -0
- data/lib/pubid/components.rb +16 -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 +513 -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 +57 -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 +242 -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 +129 -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 +458 -0
- data/lib/pubid/iec/components/code.rb +60 -0
- data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
- data/lib/pubid/iec/components/publisher.rb +36 -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 +256 -0
- data/lib/pubid/iec/identifiers/amendment.rb +94 -0
- data/lib/pubid/iec/identifiers/base.rb +82 -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 +82 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +94 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +137 -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 +62 -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 +73 -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 +417 -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 +79 -0
- data/lib/pubid/iec/urn_parser.rb +90 -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 +54 -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 +61 -0
- data/lib/pubid/iho/identifiers/base.rb +41 -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 +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 +309 -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 +330 -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 +512 -0
- data/lib/pubid/iso/rendering_style.rb +120 -0
- data/lib/pubid/iso/scheme.rb +193 -0
- data/lib/pubid/iso/single_identifier.rb +64 -0
- data/lib/pubid/iso/supplement_identifier.rb +27 -0
- data/lib/pubid/iso/urn_generator.rb +426 -0
- data/lib/pubid/iso/urn_parser.rb +437 -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 +118 -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 +54 -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 +61 -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 +2269 -0
- data/lib/pubid/nist/components/code.rb +38 -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/publisher.rb +24 -0
- data/lib/pubid/nist/components/stage.rb +53 -0
- data/lib/pubid/nist/components/supplement.rb +188 -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/identifier.rb +62 -0
- data/lib/pubid/nist/identifiers/base.rb +578 -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 +132 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +104 -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 +67 -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 +1117 -0
- data/lib/pubid/nist/scheme.rb +199 -0
- data/lib/pubid/nist/supplement_identifier.rb +67 -0
- data/lib/pubid/nist/urn_generator.rb +133 -0
- data/lib/pubid/nist.rb +37 -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 +61 -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/identifier.rb +57 -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 +26 -0
- data/lib/pubid/renderers/base.rb +53 -0
- data/lib/pubid/renderers/directives_renderer.rb +61 -0
- data/lib/pubid/renderers/guide_renderer.rb +24 -0
- data/lib/pubid/renderers/human_readable.rb +70 -0
- data/lib/pubid/renderers/iwa_renderer.rb +20 -0
- data/lib/pubid/renderers/mr_string.rb +16 -0
- data/lib/pubid/renderers/supplement_renderer.rb +36 -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 +159 -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 +37 -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 +219 -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 +616 -171
- data/lib/pubid/registry.rb +0 -30
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Iso
|
|
5
|
+
# Generates RFC 5141-bis compliant URNs from ISO identifiers
|
|
6
|
+
#
|
|
7
|
+
# RFC 5141-bis extensions implemented:
|
|
8
|
+
# - Explicit language specification (explicit > implicit)
|
|
9
|
+
# - Extended copublisher syntax (dynamic combinations)
|
|
10
|
+
# - Extended document types (DIR, DIR-SUP, IWA-SUP)
|
|
11
|
+
# - Typed stage codes (WD, CD, DIS, FDIS, PDAM, etc.)
|
|
12
|
+
# - Supplement chain ordering semantics
|
|
13
|
+
# - Bundled identifier syntax
|
|
14
|
+
class UrnGenerator
|
|
15
|
+
# Stage code mapping for RFC 5141-bis typed stages
|
|
16
|
+
# Maps TypedStage stage_code to URN stage abbreviation
|
|
17
|
+
TYPED_STAGE_MAP = {
|
|
18
|
+
wd: "WD", # Working Draft
|
|
19
|
+
wds: "WDS", # Working Draft Study
|
|
20
|
+
cd: "CD", # Committee Draft
|
|
21
|
+
cdv: "CDV", # Committee Draft for Vote
|
|
22
|
+
dis: "DIS", # Draft International Standard
|
|
23
|
+
fdis: "FDIS", # Final Draft International Standard
|
|
24
|
+
pdam: "PDAM", # Proposed Draft Amendment
|
|
25
|
+
dam: "DAM", # Draft Amendment
|
|
26
|
+
fdamd: "FDAM", # Final Draft Amendment (note: stage_code is fdamd)
|
|
27
|
+
dcor: "DCOR", # Draft Corrigendum
|
|
28
|
+
fdcor: "FDCOR", # Final Draft Corrigendum
|
|
29
|
+
cdts: "CDTS", # Committee Draft Technical Specification
|
|
30
|
+
dts: "DTS", # Draft Technical Specification
|
|
31
|
+
fdts: "FDTS", # Final Draft Technical Specification
|
|
32
|
+
}.freeze
|
|
33
|
+
|
|
34
|
+
# Document type mapping for RFC 5141-bis extended types
|
|
35
|
+
TYPE_CODE_MAP = {
|
|
36
|
+
dir: "dir", # Directive
|
|
37
|
+
dir_sup: "dir-sup", # Directive Supplement
|
|
38
|
+
iwa_sup: "iwa-sup", # IWA Supplement
|
|
39
|
+
}.freeze
|
|
40
|
+
|
|
41
|
+
attr_reader :identifier
|
|
42
|
+
|
|
43
|
+
# Initialize URN generator
|
|
44
|
+
#
|
|
45
|
+
# @param identifier [Identifier] The ISO identifier to generate URN for
|
|
46
|
+
def initialize(identifier)
|
|
47
|
+
@identifier = identifier
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Generate complete URN string
|
|
51
|
+
#
|
|
52
|
+
# @return [String] The URN in format urn:iso:std:...
|
|
53
|
+
def generate
|
|
54
|
+
if identifier.is_a?(SupplementIdentifier)
|
|
55
|
+
generate_supplement_urn
|
|
56
|
+
else
|
|
57
|
+
generate_base_urn
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
protected
|
|
62
|
+
|
|
63
|
+
# Generate URN for base identifier (SingleIdentifier)
|
|
64
|
+
def generate_base_urn
|
|
65
|
+
parts = ["urn", "iso", "std"]
|
|
66
|
+
|
|
67
|
+
# Publisher (lowercase, hyphen-separated)
|
|
68
|
+
parts << originator_component
|
|
69
|
+
|
|
70
|
+
# Type (for non-IS types like TR, TS, Guide)
|
|
71
|
+
type_comp = type_component
|
|
72
|
+
parts << type_comp if type_comp
|
|
73
|
+
|
|
74
|
+
# Number
|
|
75
|
+
parts << identifier.number.value if identifier.number
|
|
76
|
+
|
|
77
|
+
# Part (with colon-dash prefix)
|
|
78
|
+
part_comp = part_component
|
|
79
|
+
parts << part_comp if part_comp
|
|
80
|
+
|
|
81
|
+
# Stage (only for non-published documents); an all-parts series
|
|
82
|
+
# reference carries no specific stage.
|
|
83
|
+
stage_comp = stage_component
|
|
84
|
+
parts << stage_comp if stage_comp && !identifier.all_parts
|
|
85
|
+
|
|
86
|
+
# Year (for published documents and when edition is present)
|
|
87
|
+
year_comp = year_component
|
|
88
|
+
parts << year_comp if year_comp
|
|
89
|
+
|
|
90
|
+
# Edition
|
|
91
|
+
edition_comp = edition_component
|
|
92
|
+
parts << edition_comp if edition_comp
|
|
93
|
+
|
|
94
|
+
# Language (RFC 5141-bis: explicit specification)
|
|
95
|
+
lang_comp = language_component
|
|
96
|
+
parts << lang_comp if lang_comp
|
|
97
|
+
|
|
98
|
+
# Series suffix for all-parts identifiers (compact, no padding)
|
|
99
|
+
parts << "ser" if identifier.all_parts
|
|
100
|
+
|
|
101
|
+
parts.join(":")
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Generate URN for supplement identifier
|
|
105
|
+
# Handles multi-level supplements by walking up the chain
|
|
106
|
+
def generate_supplement_urn
|
|
107
|
+
# Walk up supplement chain to collect all supplements
|
|
108
|
+
current = identifier
|
|
109
|
+
supplement_chain = []
|
|
110
|
+
|
|
111
|
+
while current.is_a?(SupplementIdentifier)
|
|
112
|
+
supplement_chain.unshift(current) # Add to front (reverse order)
|
|
113
|
+
current = current.base_identifier
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Now 'current' is the base document (not a supplement)
|
|
117
|
+
base_id = current
|
|
118
|
+
|
|
119
|
+
# Build URN from base identifier
|
|
120
|
+
parts = ["urn", "iso", "std"]
|
|
121
|
+
|
|
122
|
+
if base_id
|
|
123
|
+
base_gen = self.class.new(base_id)
|
|
124
|
+
|
|
125
|
+
# Publisher
|
|
126
|
+
parts << base_gen.originator_component
|
|
127
|
+
|
|
128
|
+
# Type (for non-IS types like TR, TS, Guide)
|
|
129
|
+
type_comp = base_gen.type_component
|
|
130
|
+
parts << type_comp if type_comp
|
|
131
|
+
|
|
132
|
+
# Number
|
|
133
|
+
parts << base_id.number.value if base_id.number
|
|
134
|
+
|
|
135
|
+
# Part
|
|
136
|
+
part_comp = base_gen.part_component
|
|
137
|
+
parts << part_comp if part_comp
|
|
138
|
+
|
|
139
|
+
# Collect ALL editions (base + supplements) and add them here
|
|
140
|
+
# This ensures editions come before all supplement chains
|
|
141
|
+
all_editions = []
|
|
142
|
+
|
|
143
|
+
# Base edition first
|
|
144
|
+
edition_comp = base_gen.edition_component
|
|
145
|
+
all_editions << edition_comp if edition_comp
|
|
146
|
+
|
|
147
|
+
# Then supplement editions
|
|
148
|
+
supplement_chain.each do |supp|
|
|
149
|
+
if supp.edition&.number
|
|
150
|
+
all_editions << "ed-#{supp.edition.number}"
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Add all editions to parts
|
|
155
|
+
parts.concat(all_editions)
|
|
156
|
+
|
|
157
|
+
# Base stage logic:
|
|
158
|
+
# - Include if base is proposal stage (10.xx) and supplement has different stage
|
|
159
|
+
# - Don't include if base is approval/publication stage (50.xx, 60.xx)
|
|
160
|
+
# - Don't include if supplement has same stage as base
|
|
161
|
+
base_stage_comp = base_gen.stage_component
|
|
162
|
+
if base_stage_comp
|
|
163
|
+
# Check if any supplement has a stage
|
|
164
|
+
supplement_stages = supplement_chain.filter_map do |supp|
|
|
165
|
+
supp_gen = self.class.new(supp)
|
|
166
|
+
supp_gen.stage_component
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Only include base stage if:
|
|
170
|
+
# 1. No supplements have a stage, OR
|
|
171
|
+
# 2. Base is proposal stage (starts with "stage-10.") AND supplements don't duplicate it
|
|
172
|
+
if supplement_stages.empty?
|
|
173
|
+
parts << base_stage_comp
|
|
174
|
+
elsif base_stage_comp.start_with?("stage-10.") && !supplement_stages.include?(base_stage_comp)
|
|
175
|
+
parts << base_stage_comp
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Base language (if present)
|
|
180
|
+
if base_id.languages&.any?
|
|
181
|
+
lang_comp = base_id.languages.map(&:code).join(",")
|
|
182
|
+
parts << lang_comp
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Now flatten all supplements in order
|
|
187
|
+
supplement_chain.each do |supp|
|
|
188
|
+
supp_gen = self.class.new(supp)
|
|
189
|
+
|
|
190
|
+
# Supplement stage (for draft supplements)
|
|
191
|
+
# Note: editions are added at base level, not here
|
|
192
|
+
stage_comp = supp_gen.stage_component
|
|
193
|
+
parts << stage_comp if stage_comp
|
|
194
|
+
|
|
195
|
+
# Supplement type code (amd, cor, sup)
|
|
196
|
+
suppl_type = supp_gen.supplement_type_component
|
|
197
|
+
parts << suppl_type if suppl_type
|
|
198
|
+
|
|
199
|
+
# Year and version (following RFC 5141-bis supplement semantics)
|
|
200
|
+
if supp.date
|
|
201
|
+
# With date: year:vN
|
|
202
|
+
parts << supp.date.year.to_s
|
|
203
|
+
|
|
204
|
+
# Version with "v" prefix
|
|
205
|
+
# Amendments/Corrigenda keep iteration, generic Supplements don't
|
|
206
|
+
if supp.number
|
|
207
|
+
if supp.stage_iteration && !supp.is_a?(Pubid::Iso::Identifiers::Supplement)
|
|
208
|
+
parts << "v#{supp.number.value}.#{supp.stage_iteration.value}"
|
|
209
|
+
else
|
|
210
|
+
parts << "v#{supp.number.value}"
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
else
|
|
214
|
+
# Without date: N:v1 (number directly, then "v1")
|
|
215
|
+
if supp.number
|
|
216
|
+
parts << supp.number.value
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Always add "v1" when no date
|
|
220
|
+
# Amendments/Corrigenda keep iteration, generic Supplements don't
|
|
221
|
+
if supp.stage_iteration && !supp.is_a?(Pubid::Iso::Identifiers::Supplement)
|
|
222
|
+
parts << "v1.#{supp.stage_iteration.value}"
|
|
223
|
+
else
|
|
224
|
+
parts << "v1"
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
# Supplement language (RFC 5141-bis: explicit specification)
|
|
229
|
+
if supp.languages&.any?
|
|
230
|
+
lang_comp = supp.languages.map(&:code).join(",")
|
|
231
|
+
parts << lang_comp
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Series suffix for all-parts identifiers (compact, no padding)
|
|
236
|
+
parts << "ser" if identifier.all_parts
|
|
237
|
+
|
|
238
|
+
parts.join(":")
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
# Generate originator component (publisher with copublishers)
|
|
242
|
+
# RFC 5141-bis: supports dynamic copublisher combinations
|
|
243
|
+
def originator_component
|
|
244
|
+
# For identifiers like IWA that don't render publisher, default to "iso"
|
|
245
|
+
return "iso" unless identifier.publisher
|
|
246
|
+
|
|
247
|
+
copubs = identifier.copublishers || []
|
|
248
|
+
|
|
249
|
+
# Collect all publishers in order
|
|
250
|
+
publishers = [identifier.publisher] + copubs
|
|
251
|
+
|
|
252
|
+
# Convert to lowercase and join with hyphen
|
|
253
|
+
# Keep original order (not alphabetical) for backward compatibility
|
|
254
|
+
publishers.map(&:body).map(&:downcase).join("-")
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# Generate type component
|
|
258
|
+
# RFC 5141-bis: supports extended document types (dir, dir-sup, iwa-sup)
|
|
259
|
+
def type_component
|
|
260
|
+
return nil unless identifier.typed_stage
|
|
261
|
+
|
|
262
|
+
type_code = identifier.typed_stage.type_code
|
|
263
|
+
# International Standard is default (skip it)
|
|
264
|
+
return nil if !type_code || type_code.to_s == "is"
|
|
265
|
+
|
|
266
|
+
# Check for extended type codes first (RFC 5141-bis)
|
|
267
|
+
type_code_sym = type_code.to_sym
|
|
268
|
+
extended_type = TYPE_CODE_MAP[type_code_sym]
|
|
269
|
+
return extended_type if extended_type
|
|
270
|
+
|
|
271
|
+
# Use urn_type_code override if available (e.g., Recommendation uses 'r')
|
|
272
|
+
urn_override = identifier.urn_type_code
|
|
273
|
+
return urn_override if urn_override
|
|
274
|
+
|
|
275
|
+
# Default: use type_code as-is (already a string)
|
|
276
|
+
type_code.to_s
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
# Generate part component
|
|
280
|
+
def part_component
|
|
281
|
+
return nil unless identifier.part
|
|
282
|
+
|
|
283
|
+
result = "-#{identifier.part.value}"
|
|
284
|
+
result += "-#{identifier.subpart.value}" if identifier.subpart
|
|
285
|
+
result
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
# Generate stage component
|
|
289
|
+
# RFC 5141-bis: supports typed stage codes (WD, CD, DIS, FDIS, etc.)
|
|
290
|
+
def stage_component
|
|
291
|
+
return nil unless identifier.typed_stage
|
|
292
|
+
|
|
293
|
+
stage_code = identifier.typed_stage.stage_code
|
|
294
|
+
return nil if !stage_code || stage_code == :published
|
|
295
|
+
|
|
296
|
+
# Try combined stage+type code first (e.g., "cdts" for CD+TS)
|
|
297
|
+
# This handles typed stages where stage_code differs from the full typed stage code
|
|
298
|
+
combined_key = nil
|
|
299
|
+
if identifier.typed_stage.type_code &&
|
|
300
|
+
identifier.typed_stage.type_code != "is" &&
|
|
301
|
+
identifier.typed_stage.type_code.to_s != ""
|
|
302
|
+
combined_key = :"#{stage_code}#{identifier.typed_stage.type_code}"
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
stage_abbr = if combined_key && TYPED_STAGE_MAP.key?(combined_key)
|
|
306
|
+
TYPED_STAGE_MAP[combined_key]
|
|
307
|
+
elsif TYPED_STAGE_MAP.key?(stage_code.to_sym)
|
|
308
|
+
TYPED_STAGE_MAP[stage_code.to_sym]
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
if stage_abbr
|
|
312
|
+
|
|
313
|
+
# Add iteration if present (no 'v' prefix for iterations)
|
|
314
|
+
if identifier.stage_iteration
|
|
315
|
+
return "#{stage_abbr}.#{identifier.stage_iteration.value}"
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
return stage_abbr
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
# Fallback: use harmonized stage codes for unmapped stages
|
|
322
|
+
# This handles stages like PWI, NP, AWI, PRF that don't have typed abbreviations
|
|
323
|
+
harmonized_codes = identifier.typed_stage.harmonized_stages
|
|
324
|
+
return nil unless harmonized_codes&.any?
|
|
325
|
+
|
|
326
|
+
# Use first harmonized code from the array
|
|
327
|
+
harmonized_code = harmonized_codes.first
|
|
328
|
+
|
|
329
|
+
# Skip published documents (60.00, 60.60) EXCEPT for PRF (Proof) stage
|
|
330
|
+
# PRF is at 60.00 but should still be included in URNs
|
|
331
|
+
if harmonized_code.start_with?("60.") && stage_code.to_s != "prf"
|
|
332
|
+
return nil
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
# Format as stage-XX.XX
|
|
336
|
+
# An iterated PRF (Proof) stage (e.g. "PRF TR 17716.2") renders as the
|
|
337
|
+
# symbolic "draft" stage in the URN rather than its harmonized numeric
|
|
338
|
+
# code; a plain PRF without an iteration keeps the harmonized code.
|
|
339
|
+
stage_part = if stage_code.to_s == "prf" && identifier.stage_iteration
|
|
340
|
+
"stage-draft"
|
|
341
|
+
else
|
|
342
|
+
"stage-#{harmonized_code}"
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
# For base identifiers (not supplements), include iteration in stage code
|
|
346
|
+
# For supplements, iteration goes in the version part (v1.2)
|
|
347
|
+
if identifier.stage_iteration && !identifier.is_a?(SupplementIdentifier)
|
|
348
|
+
stage_part += ".v#{identifier.stage_iteration.value}"
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
stage_part
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
# Generate edition component
|
|
355
|
+
def edition_component
|
|
356
|
+
return nil unless identifier.edition&.number
|
|
357
|
+
|
|
358
|
+
"ed-#{identifier.edition.number}"
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
# Generate year component
|
|
362
|
+
def year_component
|
|
363
|
+
return nil unless identifier.date&.year
|
|
364
|
+
|
|
365
|
+
# ISO base identifiers (SingleIdentifier) use undated URN format (no year)
|
|
366
|
+
# Supplements include their own year in the supplement section
|
|
367
|
+
return nil if identifier.is_a?(Pubid::Iso::SingleIdentifier)
|
|
368
|
+
|
|
369
|
+
identifier.date.year.to_s
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
# Generate language component
|
|
373
|
+
# RFC 5141-bis: explicit specification guidance (explicit > implicit)
|
|
374
|
+
# URN spec: all values in lowercase
|
|
375
|
+
def language_component
|
|
376
|
+
return nil unless identifier.languages&.any?
|
|
377
|
+
|
|
378
|
+
identifier.languages.map(&:code).map(&:downcase).join(",")
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
# Generate supplement type component
|
|
382
|
+
def supplement_type_component
|
|
383
|
+
return nil unless identifier.typed_stage
|
|
384
|
+
|
|
385
|
+
urn_override = identifier.urn_supplement_type
|
|
386
|
+
return urn_override if urn_override
|
|
387
|
+
|
|
388
|
+
identifier.typed_stage.type_code.to_s
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
# Generate supplement year/version components
|
|
392
|
+
# Returns array of parts to be joined with ":"
|
|
393
|
+
def supplement_year_version_components
|
|
394
|
+
parts = []
|
|
395
|
+
|
|
396
|
+
if identifier.date
|
|
397
|
+
# With year: year:version
|
|
398
|
+
parts << identifier.date.year.to_s
|
|
399
|
+
|
|
400
|
+
# Version number with "v" prefix
|
|
401
|
+
if identifier.number
|
|
402
|
+
parts << if identifier.stage_iteration
|
|
403
|
+
"v#{identifier.number.value}.#{identifier.stage_iteration.value}"
|
|
404
|
+
else
|
|
405
|
+
"v#{identifier.number.value}"
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
else
|
|
409
|
+
# Without year: number directly or "v1"
|
|
410
|
+
if identifier.number
|
|
411
|
+
parts << identifier.number.value
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
# Version with iteration if present
|
|
415
|
+
parts << if identifier.stage_iteration
|
|
416
|
+
"v1.#{identifier.stage_iteration.value}"
|
|
417
|
+
else
|
|
418
|
+
"v1"
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
parts
|
|
423
|
+
end
|
|
424
|
+
end
|
|
425
|
+
end
|
|
426
|
+
end
|