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,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Ieee
|
|
7
|
+
module Components
|
|
8
|
+
# IEEE document code (number with parts/subparts)
|
|
9
|
+
# Handles formats like:
|
|
10
|
+
# 802 - simple numbers
|
|
11
|
+
# 802.15.4 - dotted parts
|
|
12
|
+
# C57.12.00 - prefix with parts
|
|
13
|
+
# 11073-10404 - dashed parts
|
|
14
|
+
class Code < Lutaml::Model::Serializable
|
|
15
|
+
attribute :prefix, :string # C, P for some identifiers
|
|
16
|
+
attribute :number, :string # Main number (802, 1234, etc.)
|
|
17
|
+
attribute :parts, :string, collection: true # Array of part strings
|
|
18
|
+
attribute :original_separator, :string # Original separator (. or -) from parsing
|
|
19
|
+
|
|
20
|
+
def initialize(prefix: nil, number: nil, parts: nil,
|
|
21
|
+
original_separator: nil)
|
|
22
|
+
super()
|
|
23
|
+
self.prefix = prefix
|
|
24
|
+
self.number = number
|
|
25
|
+
self.parts = parts || []
|
|
26
|
+
self.original_separator = original_separator
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Parse code string into components
|
|
30
|
+
def self.parse(code_str)
|
|
31
|
+
return nil if code_str.nil? || code_str.empty?
|
|
32
|
+
|
|
33
|
+
# Extract prefix if present (C, P)
|
|
34
|
+
prefix_match = code_str.match(/^([A-Z])/)
|
|
35
|
+
prefix = prefix_match ? prefix_match[1] : nil
|
|
36
|
+
|
|
37
|
+
# Remove prefix for number parsing
|
|
38
|
+
remainder = prefix ? code_str[prefix.length..] : code_str
|
|
39
|
+
|
|
40
|
+
# Detect the separator used
|
|
41
|
+
separator = nil
|
|
42
|
+
if remainder.include?(".")
|
|
43
|
+
separator = "."
|
|
44
|
+
elsif remainder.include?("-")
|
|
45
|
+
separator = "-"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Split by dots or dashes to get number and parts
|
|
49
|
+
components = remainder.split(/[.-]/)
|
|
50
|
+
number = components.shift
|
|
51
|
+
|
|
52
|
+
new(
|
|
53
|
+
prefix: prefix,
|
|
54
|
+
number: number,
|
|
55
|
+
parts: components.empty? ? nil : components,
|
|
56
|
+
original_separator: separator,
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def to_s
|
|
61
|
+
result = ""
|
|
62
|
+
result += prefix if prefix
|
|
63
|
+
result += number if number # Guard against nil number (e.g., "ANSI X")
|
|
64
|
+
|
|
65
|
+
if parts && !parts.empty?
|
|
66
|
+
# Use original separator if available
|
|
67
|
+
if original_separator
|
|
68
|
+
separator = original_separator
|
|
69
|
+
elsif prefix == "P" || (!prefix && parts.first && parts.first.length > 3)
|
|
70
|
+
# Fallback to heuristics when original separator unknown
|
|
71
|
+
# Determine separator based on prefix and pattern:
|
|
72
|
+
# - Letter prefix (C, etc.) codes use dots: C37.111
|
|
73
|
+
# - P-prefix codes typically use dashes: P11073-10404
|
|
74
|
+
# - Pure numeric codes with 5+ digits use dashes: 61523-4 (IEC style)
|
|
75
|
+
# - Traditional IEEE codes like 802.11 use dots
|
|
76
|
+
#
|
|
77
|
+
# Heuristic:
|
|
78
|
+
# 1. P-prefix or long part (>3 chars) → dash
|
|
79
|
+
# 2. Letter prefix (except P) → dot
|
|
80
|
+
# 3. Long number (5+ digits) → dash (IEC pattern)
|
|
81
|
+
# 4. Default → dot (traditional IEEE)
|
|
82
|
+
separator = "-"
|
|
83
|
+
elsif prefix && prefix != "P"
|
|
84
|
+
separator = "."
|
|
85
|
+
elsif !prefix && number && number.length >= 5
|
|
86
|
+
separator = "-"
|
|
87
|
+
else
|
|
88
|
+
# Default to dot for traditional IEEE codes like 802.11
|
|
89
|
+
separator = "."
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
parts.each do |part|
|
|
93
|
+
result += separator + part
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
result
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Ieee
|
|
7
|
+
module Components
|
|
8
|
+
# IEEE draft version
|
|
9
|
+
# Handles formats like:
|
|
10
|
+
# /D5 - version only
|
|
11
|
+
# /D3.4 - version with revision
|
|
12
|
+
# /D7, July 2019 - with date
|
|
13
|
+
class Draft < Lutaml::Model::Serializable
|
|
14
|
+
attribute :version, :string # D5, D3, etc.
|
|
15
|
+
attribute :revision, :string # .4, .2 in D3.4
|
|
16
|
+
attribute :year, :string
|
|
17
|
+
attribute :month, :string
|
|
18
|
+
attribute :day, :string
|
|
19
|
+
attribute :original_month, :string # Store original month format
|
|
20
|
+
attribute :comma_before_month, :boolean, default: -> {
|
|
21
|
+
false
|
|
22
|
+
} # Track if comma was in input
|
|
23
|
+
|
|
24
|
+
# Month name to number mapping
|
|
25
|
+
MONTH_NAMES = {
|
|
26
|
+
"January" => "1", "February" => "2", "March" => "3", "April" => "4",
|
|
27
|
+
"May" => "5", "June" => "6", "July" => "7", "August" => "8",
|
|
28
|
+
"September" => "9", "October" => "10", "November" => "11", "December" => "12",
|
|
29
|
+
"Jan" => "1", "Feb" => "2", "Mar" => "3", "Apr" => "4",
|
|
30
|
+
"Jun" => "6", "Jul" => "7", "Aug" => "8", "Sep" => "9", "Sept" => "9",
|
|
31
|
+
"Oct" => "10", "Nov" => "11", "Dec" => "12"
|
|
32
|
+
}.freeze
|
|
33
|
+
|
|
34
|
+
def initialize(version: nil, revision: nil, year: nil, month: nil,
|
|
35
|
+
day: nil)
|
|
36
|
+
super()
|
|
37
|
+
self.version = version
|
|
38
|
+
self.revision = revision
|
|
39
|
+
self.year = year
|
|
40
|
+
self.original_month = month # Store original format
|
|
41
|
+
self.month = convert_month(month)
|
|
42
|
+
self.day = day
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Convert month name to numeric value
|
|
46
|
+
def convert_month(month_name)
|
|
47
|
+
return nil unless month_name
|
|
48
|
+
|
|
49
|
+
MONTH_NAMES[month_name] || month_name
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Access the numeric month value
|
|
53
|
+
def numeric_month
|
|
54
|
+
month
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def to_s
|
|
58
|
+
result = "/D#{version}"
|
|
59
|
+
result += ".#{revision}" if revision
|
|
60
|
+
|
|
61
|
+
if year
|
|
62
|
+
# Use original month format to preserve abbreviated vs full names
|
|
63
|
+
display_month = original_month
|
|
64
|
+
|
|
65
|
+
if display_month
|
|
66
|
+
# Use comma_before_month flag if set, otherwise detect from month format
|
|
67
|
+
use_comma_before = if defined?(@comma_before_month) && !@comma_before_month.nil?
|
|
68
|
+
@comma_before_month
|
|
69
|
+
else
|
|
70
|
+
# Default: Full month names have comma, abbreviated don't
|
|
71
|
+
display_month.length > 4 && display_month != "Sept"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
result += use_comma_before ? ", #{display_month}" : " #{display_month}"
|
|
75
|
+
result += " #{day}" if day
|
|
76
|
+
|
|
77
|
+
# Abbreviated months: " Year", Full months: ", Year"
|
|
78
|
+
result += if display_month.length <= 4 || display_month == "Sept"
|
|
79
|
+
" #{year}"
|
|
80
|
+
else
|
|
81
|
+
", #{year}"
|
|
82
|
+
end
|
|
83
|
+
else
|
|
84
|
+
result += " #{year}"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
result
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Ieee
|
|
7
|
+
module Components
|
|
8
|
+
# Represents a relationship between IEEE identifiers
|
|
9
|
+
# E.g., "Revision of IEEE Std X, Y" or "incorporates A, B, C"
|
|
10
|
+
#
|
|
11
|
+
# Relationships capture metadata about how identifiers relate to each other:
|
|
12
|
+
# - Revision relationships (one standard revises another)
|
|
13
|
+
# - Amendment relationships (amendments to base standards)
|
|
14
|
+
# - Incorporation relationships (one standard incorporates others)
|
|
15
|
+
# - Adoption relationships (adopting external standards)
|
|
16
|
+
#
|
|
17
|
+
# Example usage:
|
|
18
|
+
# relationship = Relationship.new(
|
|
19
|
+
# relationship_type: Relationship::REVISION_OF,
|
|
20
|
+
# related_identifiers: [Base.parse("IEEE Std 802.11-2012")]
|
|
21
|
+
# )
|
|
22
|
+
# relationship.to_s # => "Revision of IEEE Std 802.11-2012"
|
|
23
|
+
class Relationship < Lutaml::Model::Serializable
|
|
24
|
+
# Relationship type constants
|
|
25
|
+
REVISION_OF = "revision_of"
|
|
26
|
+
AMENDMENT_TO = "amendment_to"
|
|
27
|
+
CORRIGENDUM_TO = "corrigendum_to"
|
|
28
|
+
INCORPORATES = "incorporates"
|
|
29
|
+
INCORPORATING = "incorporating" # Synonym for incorporates
|
|
30
|
+
ADOPTION_OF = "adoption_of"
|
|
31
|
+
SUPPLEMENT_TO = "supplement_to"
|
|
32
|
+
DRAFT_AMENDMENT_TO = "draft_amendment_to"
|
|
33
|
+
DRAFT_REVISION_OF = "draft_revision_of"
|
|
34
|
+
REAFFIRMATION_OF = "reaffirmation_of"
|
|
35
|
+
REDESIGNATION_OF = "redesignation_of"
|
|
36
|
+
SUPERSEDES = "supersedes"
|
|
37
|
+
PREVIOUSLY_DESIGNATED_AS = "previously_designated_as"
|
|
38
|
+
INCLUDES = "includes" # NEW Session 171: For "Includes IEEE Std X" pattern
|
|
39
|
+
|
|
40
|
+
# All valid relationship types
|
|
41
|
+
VALID_TYPES = [
|
|
42
|
+
REVISION_OF,
|
|
43
|
+
AMENDMENT_TO,
|
|
44
|
+
CORRIGENDUM_TO,
|
|
45
|
+
INCORPORATES,
|
|
46
|
+
INCORPORATING,
|
|
47
|
+
ADOPTION_OF,
|
|
48
|
+
SUPPLEMENT_TO,
|
|
49
|
+
DRAFT_AMENDMENT_TO,
|
|
50
|
+
DRAFT_REVISION_OF,
|
|
51
|
+
REAFFIRMATION_OF,
|
|
52
|
+
REDESIGNATION_OF,
|
|
53
|
+
SUPERSEDES,
|
|
54
|
+
PREVIOUSLY_DESIGNATED_AS,
|
|
55
|
+
INCLUDES, # NEW Session 171
|
|
56
|
+
].freeze
|
|
57
|
+
|
|
58
|
+
# Attributes
|
|
59
|
+
attribute :relationship_type, :string
|
|
60
|
+
|
|
61
|
+
# Use regular Ruby attributes to avoid circular dependency
|
|
62
|
+
# related_identifiers: Array of Base identifiers
|
|
63
|
+
# intermediate_amendments: Array of Base identifiers (for "as amended by" clause)
|
|
64
|
+
attr_accessor :related_identifiers, :intermediate_amendments,
|
|
65
|
+
:approved_amendments_flag
|
|
66
|
+
|
|
67
|
+
# Validation
|
|
68
|
+
def initialize(**args)
|
|
69
|
+
# Extract our non-Lutaml attributes before calling super
|
|
70
|
+
@related_identifiers = args.delete(:related_identifiers)
|
|
71
|
+
@intermediate_amendments = args.delete(:intermediate_amendments)
|
|
72
|
+
@approved_amendments_flag = args.delete(:approved_amendments_flag)
|
|
73
|
+
|
|
74
|
+
# Let Lutaml handle relationship_type
|
|
75
|
+
super
|
|
76
|
+
|
|
77
|
+
# Normalize INCORPORATING to INCORPORATES for consistent rendering
|
|
78
|
+
if relationship_type == INCORPORATING
|
|
79
|
+
self.relationship_type = INCORPORATES
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Validate after initialization
|
|
83
|
+
validate_relationship_type if relationship_type
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def validate_relationship_type
|
|
87
|
+
unless VALID_TYPES.include?(relationship_type)
|
|
88
|
+
raise ArgumentError, "Invalid relationship type: #{relationship_type}. " \
|
|
89
|
+
"Valid types: #{VALID_TYPES.join(', ')}"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Rendering
|
|
94
|
+
def to_s
|
|
95
|
+
return "" if related_identifiers.nil? || related_identifiers.empty?
|
|
96
|
+
|
|
97
|
+
# Format: "Relationship Type IEEE Std X, IEEE Std Y, and IEEE Std Z"
|
|
98
|
+
prefix = format_relationship_prefix
|
|
99
|
+
ids = format_identifier_list(related_identifiers)
|
|
100
|
+
|
|
101
|
+
# Add intermediate amendments if present (for "as amended by" clause)
|
|
102
|
+
if intermediate_amendments && !intermediate_amendments.empty?
|
|
103
|
+
amendments = format_identifier_list(intermediate_amendments)
|
|
104
|
+
"#{prefix} #{ids} as amended by #{amendments}"
|
|
105
|
+
elsif approved_amendments_flag
|
|
106
|
+
# "and its approved amendments" clause (no specific list)
|
|
107
|
+
"#{prefix} #{ids} and its approved amendments"
|
|
108
|
+
else
|
|
109
|
+
"#{prefix} #{ids}"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
private
|
|
114
|
+
|
|
115
|
+
# Get the human-readable prefix for the relationship type
|
|
116
|
+
def format_relationship_prefix
|
|
117
|
+
case relationship_type
|
|
118
|
+
when REVISION_OF then "Revision of"
|
|
119
|
+
when AMENDMENT_TO then "Amendment to"
|
|
120
|
+
when CORRIGENDUM_TO then "Corrigendum to"
|
|
121
|
+
when INCORPORATES, INCORPORATING then "incorporates"
|
|
122
|
+
when ADOPTION_OF then "Adoption of"
|
|
123
|
+
when SUPPLEMENT_TO then "Supplement to"
|
|
124
|
+
when DRAFT_AMENDMENT_TO then "Draft Amendment to"
|
|
125
|
+
when DRAFT_REVISION_OF then "Draft Revision of"
|
|
126
|
+
when REAFFIRMATION_OF then "Reaffirmation of"
|
|
127
|
+
when REDESIGNATION_OF then "Redesignation of"
|
|
128
|
+
when SUPERSEDES then "Supersedes"
|
|
129
|
+
when PREVIOUSLY_DESIGNATED_AS then "Previously designated as"
|
|
130
|
+
when INCLUDES then "Includes" # NEW Session 171
|
|
131
|
+
else relationship_type
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Format a list of identifiers using proper English grammar:
|
|
136
|
+
# - Single: "IEEE Std X"
|
|
137
|
+
# - Two: "IEEE Std X and IEEE Std Y"
|
|
138
|
+
# - Three+: "IEEE Std X, IEEE Std Y, and IEEE Std Z"
|
|
139
|
+
def format_identifier_list(identifiers)
|
|
140
|
+
return "" if identifiers.nil? || identifiers.empty?
|
|
141
|
+
|
|
142
|
+
case identifiers.length
|
|
143
|
+
when 1
|
|
144
|
+
identifiers.first.to_s
|
|
145
|
+
when 2
|
|
146
|
+
"#{identifiers.first} and #{identifiers.last}"
|
|
147
|
+
else
|
|
148
|
+
# X, Y, and Z format (Oxford comma)
|
|
149
|
+
last = identifiers.last
|
|
150
|
+
others = identifiers[0..-2]
|
|
151
|
+
"#{others.join(', ')}, and #{last}"
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Ieee
|
|
7
|
+
module Components
|
|
8
|
+
# TypedStage combines type and stage information for IEEE identifiers
|
|
9
|
+
# Following the proven ISO/IEC/CEN/BSI pattern
|
|
10
|
+
#
|
|
11
|
+
# IEEE has unique requirements:
|
|
12
|
+
# - Draft stages (D1-D9) with different approval levels
|
|
13
|
+
# - "P" (Project) prefix for drafts only
|
|
14
|
+
# - ISO stage equivalents for joint development (ISO/IEC/IEEE)
|
|
15
|
+
# - Bidirectional format conversion capability
|
|
16
|
+
#
|
|
17
|
+
# Key IEEE stage distinctions:
|
|
18
|
+
# - Unapproved Draft: Working drafts (D1-D6)
|
|
19
|
+
# - Approved Draft: Board-approved but unpublished (D7-D9)
|
|
20
|
+
# - Published: Final standards (no P prefix)
|
|
21
|
+
class TypedStage < Lutaml::Model::Serializable
|
|
22
|
+
# All recognized abbreviations for this stage
|
|
23
|
+
# First in array is canonical abbreviation
|
|
24
|
+
attribute :abbr, :string, collection: true
|
|
25
|
+
|
|
26
|
+
# IEEE-specific stage code
|
|
27
|
+
# Values: published, working_draft, committee_draft, draft_standard,
|
|
28
|
+
# final_draft, preliminary, new_proposal
|
|
29
|
+
attribute :stage_code, :string
|
|
30
|
+
|
|
31
|
+
# Document type code
|
|
32
|
+
# Values: standard, draft
|
|
33
|
+
attribute :type_code, :string
|
|
34
|
+
|
|
35
|
+
# ISO stage equivalent for joint development (optional)
|
|
36
|
+
# Values: PWI, NP, WD, CD, DIS, FDIS, or nil
|
|
37
|
+
attribute :iso_stage_equivalent, :string
|
|
38
|
+
|
|
39
|
+
# IEEE draft notation equivalent (optional)
|
|
40
|
+
# Values: D1, D2-D3, D4-D6, D7-D9, P, or nil
|
|
41
|
+
attribute :ieee_draft_equivalent, :string
|
|
42
|
+
|
|
43
|
+
# Approval status
|
|
44
|
+
# Values: unapproved, approved, published
|
|
45
|
+
attribute :approval_status, :string
|
|
46
|
+
|
|
47
|
+
# Whether "P" (Project) prefix applies
|
|
48
|
+
# true for all draft stages, false for published
|
|
49
|
+
attribute :project_status, :boolean, default: -> { false }
|
|
50
|
+
|
|
51
|
+
# Convert to IEEE format representation
|
|
52
|
+
# @return [String] IEEE format abbreviation
|
|
53
|
+
def to_ieee_format
|
|
54
|
+
return abbr.first unless project_status
|
|
55
|
+
|
|
56
|
+
ieee_draft_equivalent || "P"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Convert to ISO format representation
|
|
60
|
+
# @return [String] ISO format stage code
|
|
61
|
+
def to_iso_format
|
|
62
|
+
iso_stage_equivalent || abbr.first
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Get canonical abbreviation (first in list)
|
|
66
|
+
# @return [String] canonical abbreviation
|
|
67
|
+
def canonical_abbreviation
|
|
68
|
+
abbr.first
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Check if this is a draft stage
|
|
72
|
+
# @return [Boolean] true if draft, false if published
|
|
73
|
+
def draft?
|
|
74
|
+
project_status || approval_status != "published"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Check if board-approved
|
|
78
|
+
# @return [Boolean] true if approved or published
|
|
79
|
+
def approved?
|
|
80
|
+
["approved", "published"].include?(approval_status)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Get display name for stage
|
|
84
|
+
# @return [String] human-readable stage name
|
|
85
|
+
def name
|
|
86
|
+
case stage_code
|
|
87
|
+
when "published" then "Published Standard"
|
|
88
|
+
when "working_draft" then "Working Draft"
|
|
89
|
+
when "committee_draft" then "Committee Draft"
|
|
90
|
+
when "draft_standard" then "Draft Standard"
|
|
91
|
+
when "final_draft" then "Final Draft"
|
|
92
|
+
when "preliminary" then "Preliminary Work Item"
|
|
93
|
+
when "new_proposal" then "New Work Item Proposal"
|
|
94
|
+
else stage_code.to_s.split("_").map(&:capitalize).join(" ")
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Identifier
|
|
6
|
+
class << self
|
|
7
|
+
def parse(input)
|
|
8
|
+
Identifiers::Base.parse(input)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Factory mirroring pubid 1.x's `Pubid::Ieee::Identifier.create` API.
|
|
12
|
+
# Dispatches via {Pubid::Ieee::Scheme.locate_identifier_klass_by_type_code}.
|
|
13
|
+
# Default subclass (no `type:`) is Identifiers::Standard — the
|
|
14
|
+
# canonical class produced by parsing typical IEEE identifiers.
|
|
15
|
+
def create(type: nil, **opts)
|
|
16
|
+
klass = type ?
|
|
17
|
+
Scheme.locate_identifier_klass_by_type_code(type) :
|
|
18
|
+
Identifiers::Standard
|
|
19
|
+
attrs = coerce_create_attrs(opts)
|
|
20
|
+
# ProjectDraftIdentifier renders the "P" prefix from typed_stage,
|
|
21
|
+
# not from `type`. Set both so the output matches a parsed form.
|
|
22
|
+
if klass == Identifiers::ProjectDraftIdentifier
|
|
23
|
+
attrs[:type] = "P"
|
|
24
|
+
attrs[:typed_stage] ||= Scheme.locate_typed_stage_by_abbr("P")
|
|
25
|
+
end
|
|
26
|
+
klass.new(**attrs)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def coerce_create_attrs(opts)
|
|
32
|
+
attrs = {}
|
|
33
|
+
attrs[:publisher] = opts[:publisher].to_s if opts[:publisher]
|
|
34
|
+
if opts[:copublisher]
|
|
35
|
+
attrs[:copublisher] =
|
|
36
|
+
Array(opts[:copublisher]).map(&:to_s)
|
|
37
|
+
end
|
|
38
|
+
# :code or :number alias
|
|
39
|
+
if (v = opts[:code] || opts[:number])
|
|
40
|
+
attrs[:code] = v.to_s
|
|
41
|
+
end
|
|
42
|
+
%i[year edition month day draft_status].each do |k|
|
|
43
|
+
v = opts[k]
|
|
44
|
+
attrs[k] = v.to_s unless v.nil?
|
|
45
|
+
end
|
|
46
|
+
attrs[:redline] = opts[:redline] if opts.key?(:redline)
|
|
47
|
+
# TODO(create-shim): amendments/corrigenda/revision_of/incorporates
|
|
48
|
+
# are nested Base relations; not yet wired through.
|
|
49
|
+
attrs
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Adopted Standard Identifier
|
|
7
|
+
# IEEE's adoption of another organization's standard
|
|
8
|
+
# Example: "IEEE Standard No 18-1968 (ANSI C55.1-1968)"
|
|
9
|
+
# This means IEEE adopted ANSI's standard C55.1-1968 as their Std No 18-1968
|
|
10
|
+
class AdoptedStandard < Base
|
|
11
|
+
# IEEE's identifier for this adopted standard
|
|
12
|
+
attribute :ieee_identifier, Base, polymorphic: true
|
|
13
|
+
|
|
14
|
+
# Original identifiers from ANSI/ISO/IEC/etc (array for multi-part adoptions)
|
|
15
|
+
attribute :adopted_identifiers, Base, polymorphic: true,
|
|
16
|
+
collection: true
|
|
17
|
+
|
|
18
|
+
def to_s
|
|
19
|
+
result = ieee_identifier.to_s
|
|
20
|
+
if adopted_identifiers && !adopted_identifiers.empty?
|
|
21
|
+
adopted_strs = adopted_identifiers.map(&:to_s)
|
|
22
|
+
result += " (#{adopted_strs.join(' and ')})"
|
|
23
|
+
end
|
|
24
|
+
result
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def publisher
|
|
28
|
+
ieee_identifier&.publisher || "IEEE"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|