pubid 1.15.21 → 2.0.0.alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.adoc +2044 -53
- data/archived-gems/pubid-ccsds/update_codes.yaml +1 -0
- data/archived-gems/pubid-iec/stages.yaml +129 -0
- data/archived-gems/pubid-iec/update_codes.yaml +67 -0
- data/archived-gems/pubid-ieee/update_codes.yaml +104 -0
- data/archived-gems/pubid-iso/stages.yaml +106 -0
- data/archived-gems/pubid-iso/update_codes.yaml +4 -0
- data/archived-gems/pubid-itu/i18n.yaml +13 -0
- data/archived-gems/pubid-itu/series.yaml +42 -0
- data/archived-gems/pubid-nist/publishers.yaml +6 -0
- data/archived-gems/pubid-nist/series.yaml +121 -0
- data/archived-gems/pubid-nist/stages.yaml +16 -0
- data/archived-gems/pubid-nist/update_codes.yaml +93 -0
- data/archived-gems/pubid-plateau/update_codes.yaml +6 -0
- data/data/bipm/update_codes.yaml +9 -0
- data/data/ccsds/update_codes.yaml +1 -0
- data/data/iec/update_codes.yaml +70 -0
- data/data/ieee/update_codes.yaml +210 -0
- data/data/iso/update_codes.yaml +21 -0
- data/data/nist/series.yaml +155 -0
- data/data/nist/update_codes.yaml +122 -0
- data/data/plateau/update_codes.yaml +6 -0
- data/lib/pubid/adobe/builder.rb +52 -0
- data/lib/pubid/adobe/identifier.rb +47 -0
- data/lib/pubid/adobe/identifiers/publication.rb +31 -0
- data/lib/pubid/adobe/identifiers/tech_note.rb +32 -0
- data/lib/pubid/adobe/identifiers.rb +10 -0
- data/lib/pubid/adobe/parser.rb +136 -0
- data/lib/pubid/adobe/renderer.rb +39 -0
- data/lib/pubid/adobe/urn_generator.rb +42 -0
- data/lib/pubid/adobe/urn_parser.rb +69 -0
- data/lib/pubid/adobe.rb +60 -0
- data/lib/pubid/amca/builder.rb +176 -0
- data/lib/pubid/amca/identifier.rb +4 -0
- data/lib/pubid/amca/identifiers/base.rb +92 -0
- data/lib/pubid/amca/identifiers/interpretation.rb +38 -0
- data/lib/pubid/amca/identifiers/publication.rb +34 -0
- data/lib/pubid/amca/identifiers/standard.rb +20 -0
- data/lib/pubid/amca/identifiers.rb +11 -0
- data/lib/pubid/amca/parser.rb +153 -0
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +10 -0
- data/lib/pubid/amca/urn_generator.rb +51 -0
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +73 -0
- data/lib/pubid/ansi/builder.rb +54 -0
- data/lib/pubid/ansi/identifier.rb +31 -0
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +13 -0
- data/lib/pubid/ansi/identifiers/standard.rb +15 -0
- data/lib/pubid/ansi/identifiers.rb +11 -0
- data/lib/pubid/ansi/parser.rb +91 -0
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +16 -0
- data/lib/pubid/ansi/urn_generator.rb +41 -0
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +68 -0
- data/lib/pubid/api/builder.rb +58 -0
- data/lib/pubid/api/components/code.rb +9 -0
- data/lib/pubid/api/identifier.rb +42 -0
- data/lib/pubid/api/identifiers/base.rb +12 -0
- data/lib/pubid/api/identifiers/bulletin.rb +13 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +13 -0
- data/lib/pubid/api/identifiers/mpms.rb +26 -0
- data/lib/pubid/api/identifiers/publication.rb +13 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +13 -0
- data/lib/pubid/api/identifiers/specification.rb +13 -0
- data/lib/pubid/api/identifiers/standard.rb +13 -0
- data/lib/pubid/api/identifiers/technical_report.rb +13 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +11 -0
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/parser.rb +140 -0
- data/lib/pubid/api/renderer.rb +98 -0
- data/lib/pubid/api/single_identifier.rb +24 -0
- data/lib/pubid/api/urn_generator.rb +23 -0
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +68 -0
- data/lib/pubid/ashrae/builder.rb +519 -0
- data/lib/pubid/ashrae/identifier.rb +8 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +42 -0
- data/lib/pubid/ashrae/identifiers/addendum.rb +44 -0
- data/lib/pubid/ashrae/identifiers/base.rb +119 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +43 -0
- data/lib/pubid/ashrae/identifiers/errata.rb +39 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +41 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +45 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +41 -0
- data/lib/pubid/ashrae/identifiers.rb +15 -0
- data/lib/pubid/ashrae/parser.rb +748 -0
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +10 -0
- data/lib/pubid/ashrae/supplement_identifier.rb +38 -0
- data/lib/pubid/ashrae/urn_generator.rb +57 -0
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +77 -0
- data/lib/pubid/asme/builder.rb +162 -0
- data/lib/pubid/asme/components/code.rb +26 -0
- data/lib/pubid/asme/identifier.rb +24 -0
- data/lib/pubid/asme/identifiers/base.rb +10 -0
- data/lib/pubid/asme/identifiers/standard.rb +96 -0
- data/lib/pubid/asme/identifiers.rb +10 -0
- data/lib/pubid/asme/parser.rb +308 -0
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/single_identifier.rb +38 -0
- data/lib/pubid/asme/urn_generator.rb +133 -0
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +67 -0
- data/lib/pubid/astm/builder.rb +166 -0
- data/lib/pubid/astm/components/code.rb +42 -0
- data/lib/pubid/astm/components.rb +9 -0
- data/lib/pubid/astm/identifier.rb +24 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +28 -0
- data/lib/pubid/astm/identifiers/base.rb +13 -0
- data/lib/pubid/astm/identifiers/code_number.rb +81 -0
- data/lib/pubid/astm/identifiers/data_series.rb +13 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +65 -0
- data/lib/pubid/astm/identifiers/manual.rb +23 -0
- data/lib/pubid/astm/identifiers/monograph.rb +13 -0
- data/lib/pubid/astm/identifiers/research_report.rb +21 -0
- data/lib/pubid/astm/identifiers/standard.rb +23 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +12 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +12 -0
- data/lib/pubid/astm/identifiers.rb +19 -0
- data/lib/pubid/astm/parser.rb +244 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +47 -0
- data/lib/pubid/astm/urn_generator.rb +101 -0
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +55 -0
- data/lib/pubid/bipm/builder.rb +163 -0
- data/lib/pubid/bipm/identifier.rb +285 -0
- data/lib/pubid/bipm/identifiers/committee_document.rb +36 -0
- data/lib/pubid/bipm/identifiers/guide.rb +35 -0
- data/lib/pubid/bipm/identifiers/meeting.rb +53 -0
- data/lib/pubid/bipm/identifiers/mep.rb +33 -0
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +48 -0
- data/lib/pubid/bipm/identifiers/si_brochure.rb +33 -0
- data/lib/pubid/bipm/identifiers.rb +15 -0
- data/lib/pubid/bipm/parser.rb +237 -0
- data/lib/pubid/bipm/renderer.rb +118 -0
- data/lib/pubid/bipm/urn_generator.rb +58 -0
- data/lib/pubid/bipm/urn_parser.rb +60 -0
- data/lib/pubid/bipm.rb +91 -0
- data/lib/pubid/bsi/builder.rb +1495 -0
- data/lib/pubid/bsi/components/code.rb +11 -0
- data/lib/pubid/bsi/components/date.rb +11 -0
- data/lib/pubid/bsi/components/publisher.rb +11 -0
- data/lib/pubid/bsi/components/type.rb +11 -0
- data/lib/pubid/bsi/identifier.rb +6 -0
- data/lib/pubid/bsi/identifiers/addendum_document.rb +30 -0
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +67 -0
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +51 -0
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +65 -0
- data/lib/pubid/bsi/identifiers/amendment.rb +48 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +21 -0
- data/lib/pubid/bsi/identifiers/british_standard.rb +34 -0
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +40 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +44 -0
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +84 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +44 -0
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +33 -0
- data/lib/pubid/bsi/identifiers/disc.rb +27 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +27 -0
- data/lib/pubid/bsi/identifiers/electronic_book.rb +16 -0
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +36 -0
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +35 -0
- data/lib/pubid/bsi/identifiers/flex.rb +30 -0
- data/lib/pubid/bsi/identifiers/handbook.rb +23 -0
- data/lib/pubid/bsi/identifiers/index.rb +30 -0
- data/lib/pubid/bsi/identifiers/method.rb +35 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +48 -0
- data/lib/pubid/bsi/identifiers/practice_guide.rb +21 -0
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +27 -0
- data/lib/pubid/bsi/identifiers/published_document.rb +27 -0
- data/lib/pubid/bsi/identifiers/section.rb +32 -0
- data/lib/pubid/bsi/identifiers/set.rb +40 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/supplement_document.rb +29 -0
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +35 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +34 -0
- data/lib/pubid/bsi/identifiers/test_method.rb +35 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +37 -0
- data/lib/pubid/bsi/identifiers.rb +51 -0
- data/lib/pubid/bsi/model.rb +196 -0
- data/lib/pubid/bsi/parser.rb +673 -0
- data/lib/pubid/bsi/renderer.rb +1064 -0
- data/lib/pubid/bsi/single_identifier.rb +141 -0
- data/lib/pubid/bsi/urn_generator.rb +92 -0
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +282 -0
- data/lib/pubid/builder/base.rb +187 -0
- data/lib/pubid/bundled_identifier.rb +134 -0
- data/lib/pubid/calconnect/builder.rb +38 -0
- data/lib/pubid/calconnect/identifier.rb +121 -0
- data/lib/pubid/calconnect/identifiers/standard.rb +29 -0
- data/lib/pubid/calconnect/identifiers.rb +9 -0
- data/lib/pubid/calconnect/parser.rb +54 -0
- data/lib/pubid/calconnect/renderer.rb +36 -0
- data/lib/pubid/calconnect/urn_generator.rb +33 -0
- data/lib/pubid/calconnect/urn_parser.rb +34 -0
- data/lib/pubid/calconnect.rb +82 -0
- data/lib/pubid/ccsds/builder.rb +57 -0
- data/lib/pubid/ccsds/identifier.rb +76 -0
- data/lib/pubid/ccsds/identifiers/base.rb +41 -0
- data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +40 -0
- data/lib/pubid/ccsds/identifiers.rb +10 -0
- data/lib/pubid/ccsds/parser.rb +73 -0
- data/lib/pubid/ccsds/single_identifier.rb +77 -0
- data/lib/pubid/ccsds/supplement_identifier.rb +37 -0
- data/lib/pubid/ccsds/urn_generator.rb +115 -0
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +64 -0
- data/lib/pubid/cen_cenelec/builder.rb +362 -0
- data/lib/pubid/cen_cenelec/identifier.rb +38 -0
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +45 -0
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +19 -0
- data/lib/pubid/cen_cenelec/identifiers/base.rb +34 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +40 -0
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +20 -0
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +99 -0
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +50 -0
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +18 -0
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +36 -0
- data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
- data/lib/pubid/cen_cenelec/parser.rb +144 -0
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +49 -0
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +47 -0
- data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +208 -0
- data/lib/pubid/cie/builder.rb +524 -0
- data/lib/pubid/cie/components/language.rb +58 -0
- data/lib/pubid/cie/identifier.rb +33 -0
- data/lib/pubid/cie/identifiers/bundle.rb +50 -0
- data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
- data/lib/pubid/cie/identifiers/conference.rb +37 -0
- data/lib/pubid/cie/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/cie/identifiers/dual_published.rb +41 -0
- data/lib/pubid/cie/identifiers/identical.rb +64 -0
- data/lib/pubid/cie/identifiers/joint_published.rb +52 -0
- data/lib/pubid/cie/identifiers/proceedings.rb +41 -0
- data/lib/pubid/cie/identifiers/standard.rb +93 -0
- data/lib/pubid/cie/identifiers/supplement.rb +47 -0
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +24 -0
- data/lib/pubid/cie/identifiers.rb +19 -0
- data/lib/pubid/cie/parser.rb +396 -0
- data/lib/pubid/cie/single_identifier.rb +69 -0
- data/lib/pubid/cie/supplement_identifier.rb +39 -0
- data/lib/pubid/cie/urn_generator.rb +126 -0
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +83 -0
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +47 -0
- data/lib/pubid/components/date.rb +72 -0
- data/lib/pubid/components/edition.rb +35 -0
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +39 -0
- data/lib/pubid/components/locality.rb +19 -0
- data/lib/pubid/components/publisher.rb +39 -0
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +45 -0
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +48 -0
- data/lib/pubid/components/typed_stage.rb +58 -0
- data/lib/pubid/components.rb +19 -0
- data/lib/pubid/core/pattern_doc_generator.rb +272 -0
- data/lib/pubid/core/update_codes.rb +98 -0
- data/lib/pubid/core.rb +8 -0
- data/lib/pubid/csa/builder.rb +671 -0
- data/lib/pubid/csa/components/code.rb +9 -0
- data/lib/pubid/csa/components.rb +9 -0
- data/lib/pubid/csa/composite_identifier.rb +38 -0
- data/lib/pubid/csa/identifier.rb +570 -0
- data/lib/pubid/csa/identifiers/base.rb +10 -0
- data/lib/pubid/csa/identifiers/bundled.rb +141 -0
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
- data/lib/pubid/csa/identifiers/cec.rb +66 -0
- data/lib/pubid/csa/identifiers/combined.rb +158 -0
- data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
- data/lib/pubid/csa/identifiers/package.rb +65 -0
- data/lib/pubid/csa/identifiers/series.rb +23 -0
- data/lib/pubid/csa/identifiers/standard.rb +10 -0
- data/lib/pubid/csa/identifiers.rb +17 -0
- data/lib/pubid/csa/parser.rb +449 -0
- data/lib/pubid/csa/renderer.rb +300 -0
- data/lib/pubid/csa/single_identifier.rb +119 -0
- data/lib/pubid/csa/urn_generator.rb +87 -0
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa/wrapper_identifier.rb +64 -0
- data/lib/pubid/csa.rb +80 -0
- data/lib/pubid/doi/builder.rb +18 -0
- data/lib/pubid/doi/identifier.rb +49 -0
- data/lib/pubid/doi/identifiers/resource.rb +30 -0
- data/lib/pubid/doi/identifiers.rb +9 -0
- data/lib/pubid/doi/parser.rb +52 -0
- data/lib/pubid/doi/renderer.rb +13 -0
- data/lib/pubid/doi.rb +55 -0
- data/lib/pubid/easc/builder.rb +55 -0
- data/lib/pubid/easc/identifier.rb +59 -0
- data/lib/pubid/easc/identifiers/pmg.rb +20 -0
- data/lib/pubid/easc/identifiers/rmg.rb +19 -0
- data/lib/pubid/easc/identifiers.rb +10 -0
- data/lib/pubid/easc/parser.rb +88 -0
- data/lib/pubid/easc/renderer.rb +48 -0
- data/lib/pubid/easc/urn_generator.rb +46 -0
- data/lib/pubid/easc/urn_parser.rb +57 -0
- data/lib/pubid/easc.rb +52 -0
- data/lib/pubid/ecma/builder.rb +45 -0
- data/lib/pubid/ecma/identifier.rb +147 -0
- data/lib/pubid/ecma/identifiers/memento.rb +30 -0
- data/lib/pubid/ecma/identifiers/standard.rb +31 -0
- data/lib/pubid/ecma/identifiers/technical_report.rb +31 -0
- data/lib/pubid/ecma/identifiers.rb +11 -0
- data/lib/pubid/ecma/parser.rb +76 -0
- data/lib/pubid/ecma/renderer.rb +67 -0
- data/lib/pubid/ecma/urn_generator.rb +46 -0
- data/lib/pubid/ecma/urn_parser.rb +51 -0
- data/lib/pubid/ecma.rb +67 -0
- data/lib/pubid/errors.rb +79 -0
- data/lib/pubid/etsi/builder.rb +142 -0
- data/lib/pubid/etsi/components/code.rb +43 -0
- data/lib/pubid/etsi/components/version.rb +32 -0
- data/lib/pubid/etsi/components.rb +10 -0
- data/lib/pubid/etsi/identifier.rb +4 -0
- data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
- data/lib/pubid/etsi/identifiers/base.rb +74 -0
- data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +222 -0
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +123 -0
- data/lib/pubid/etsi/identifiers.rb +13 -0
- data/lib/pubid/etsi/parser.rb +139 -0
- data/lib/pubid/etsi/renderer.rb +48 -0
- data/lib/pubid/etsi/urn_generator.rb +76 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +71 -0
- data/lib/pubid/export/auditor.rb +89 -0
- data/lib/pubid/export/exporter.rb +33 -0
- data/lib/pubid/export/flavor_exporter.rb +250 -0
- data/lib/pubid/export/result.rb +97 -0
- data/lib/pubid/export.rb +12 -0
- data/lib/pubid/format_detector.rb +16 -0
- data/lib/pubid/format_registry.rb +42 -0
- data/lib/pubid/gb/builder.rb +45 -0
- data/lib/pubid/gb/identifier.rb +67 -0
- data/lib/pubid/gb/identifiers/standard.rb +34 -0
- data/lib/pubid/gb/identifiers.rb +9 -0
- data/lib/pubid/gb/parser.rb +63 -0
- data/lib/pubid/gb/renderer.rb +35 -0
- data/lib/pubid/gb.rb +87 -0
- data/lib/pubid/gost/builder.rb +148 -0
- data/lib/pubid/gost/identifier.rb +47 -0
- data/lib/pubid/gost/identifiers/foreign_reference.rb +25 -0
- data/lib/pubid/gost/identifiers/harmonized.rb +39 -0
- data/lib/pubid/gost/identifiers/identical_adoption.rb +39 -0
- data/lib/pubid/gost/identifiers/interstate_standard.rb +20 -0
- data/lib/pubid/gost/identifiers/national_standard.rb +19 -0
- data/lib/pubid/gost/identifiers.rb +13 -0
- data/lib/pubid/gost/parser.rb +105 -0
- data/lib/pubid/gost/renderer.rb +48 -0
- data/lib/pubid/gost/urn_generator.rb +46 -0
- data/lib/pubid/gost/urn_parser.rb +52 -0
- data/lib/pubid/gost.rb +49 -0
- data/lib/pubid/iala/builder.rb +102 -0
- data/lib/pubid/iala/identifier.rb +90 -0
- data/lib/pubid/iala/identifiers/advice.rb +15 -0
- data/lib/pubid/iala/identifiers/annex.rb +57 -0
- data/lib/pubid/iala/identifiers/general_assembly.rb +19 -0
- data/lib/pubid/iala/identifiers/guideline.rb +17 -0
- data/lib/pubid/iala/identifiers/letter.rb +16 -0
- data/lib/pubid/iala/identifiers/manual.rb +18 -0
- data/lib/pubid/iala/identifiers/model_course.rb +17 -0
- data/lib/pubid/iala/identifiers/recommendation.rb +17 -0
- data/lib/pubid/iala/identifiers/report.rb +16 -0
- data/lib/pubid/iala/identifiers/resolution.rb +16 -0
- data/lib/pubid/iala/identifiers/standard.rb +17 -0
- data/lib/pubid/iala/identifiers.rb +19 -0
- data/lib/pubid/iala/parser.rb +138 -0
- data/lib/pubid/iala/renderer.rb +36 -0
- data/lib/pubid/iala/urn_generator.rb +49 -0
- data/lib/pubid/iala/urn_parser.rb +67 -0
- data/lib/pubid/iala.rb +71 -0
- data/lib/pubid/iana/builder.rb +22 -0
- data/lib/pubid/iana/identifier.rb +140 -0
- data/lib/pubid/iana/identifiers/registry.rb +69 -0
- data/lib/pubid/iana/identifiers.rb +9 -0
- data/lib/pubid/iana/parser.rb +38 -0
- data/lib/pubid/iana/renderer.rb +32 -0
- data/lib/pubid/iana/urn_generator.rb +19 -0
- data/lib/pubid/iana/urn_parser.rb +24 -0
- data/lib/pubid/iana.rb +69 -0
- data/lib/pubid/identifier.rb +1118 -0
- data/lib/pubid/identifier_metadata.rb +148 -0
- data/lib/pubid/idf/builder.rb +82 -0
- data/lib/pubid/idf/identifier.rb +79 -0
- data/lib/pubid/idf/identifiers/amendment.rb +28 -0
- data/lib/pubid/idf/identifiers/corrigendum.rb +28 -0
- data/lib/pubid/idf/identifiers/international_standard.rb +124 -0
- data/lib/pubid/idf/identifiers/reviewed_method.rb +101 -0
- data/lib/pubid/idf/identifiers.rb +13 -0
- data/lib/pubid/idf/parser.rb +144 -0
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/single_identifier.rb +19 -0
- data/lib/pubid/idf/supplement_identifier.rb +35 -0
- data/lib/pubid/idf/urn_generator.rb +49 -0
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +89 -0
- data/lib/pubid/iec/builder.rb +458 -0
- data/lib/pubid/iec/components/code.rb +36 -0
- data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
- data/lib/pubid/iec/components/publisher.rb +35 -0
- data/lib/pubid/iec/components/sheet.rb +32 -0
- data/lib/pubid/iec/components/trf_info.rb +38 -0
- data/lib/pubid/iec/components/vap_suffix.rb +41 -0
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +341 -0
- data/lib/pubid/iec/identifiers/amendment.rb +97 -0
- data/lib/pubid/iec/identifiers/base.rb +54 -0
- data/lib/pubid/iec/identifiers/component_specification.rb +29 -0
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +28 -0
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +85 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +93 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +148 -0
- data/lib/pubid/iec/identifiers/guide.rb +86 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +162 -0
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +103 -0
- data/lib/pubid/iec/identifiers/operational_document.rb +29 -0
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +88 -0
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +68 -0
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +30 -0
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +29 -0
- data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +114 -0
- data/lib/pubid/iec/identifiers/technical_specification.rb +114 -0
- data/lib/pubid/iec/identifiers/technology_report.rb +28 -0
- data/lib/pubid/iec/identifiers/test_report_form.rb +35 -0
- data/lib/pubid/iec/identifiers/vap_identifier.rb +76 -0
- data/lib/pubid/iec/identifiers/white_paper.rb +29 -0
- data/lib/pubid/iec/identifiers/working_document.rb +62 -0
- data/lib/pubid/iec/identifiers.rb +31 -0
- data/lib/pubid/iec/parser.rb +443 -0
- data/lib/pubid/iec/renderer.rb +267 -0
- data/lib/pubid/iec/rendering_style.rb +113 -0
- data/lib/pubid/iec/single_identifier.rb +72 -0
- data/lib/pubid/iec/supplement_identifier.rb +178 -0
- data/lib/pubid/iec/urn_generator.rb +245 -0
- data/lib/pubid/iec/urn_parser.rb +128 -0
- data/lib/pubid/iec.rb +64 -0
- data/lib/pubid/ieee/aiee/builder.rb +85 -0
- data/lib/pubid/ieee/aiee/identifier.rb +89 -0
- data/lib/pubid/ieee/aiee/parser.rb +130 -0
- data/lib/pubid/ieee/aiee.rb +11 -0
- data/lib/pubid/ieee/builder.rb +1554 -0
- data/lib/pubid/ieee/compaction.rb +121 -0
- data/lib/pubid/ieee/components/code.rb +110 -0
- data/lib/pubid/ieee/components/draft.rb +147 -0
- data/lib/pubid/ieee/components/relationship.rb +13 -0
- data/lib/pubid/ieee/components/typed_stage.rb +100 -0
- data/lib/pubid/ieee/identifier.rb +5 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +81 -0
- data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
- data/lib/pubid/ieee/identifiers/base.rb +384 -0
- data/lib/pubid/ieee/identifiers/code_number.rb +82 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +29 -0
- data/lib/pubid/ieee/identifiers/corrigendum.rb +40 -0
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +62 -0
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +14 -0
- data/lib/pubid/ieee/identifiers/dual_published.rb +79 -0
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +115 -0
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +48 -0
- data/lib/pubid/ieee/identifiers/joint_development.rb +223 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +85 -0
- data/lib/pubid/ieee/identifiers/nesc/base.rb +127 -0
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +43 -0
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +43 -0
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +35 -0
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +41 -0
- data/lib/pubid/ieee/identifiers/nesc.rb +16 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +14 -0
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +49 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +26 -0
- data/lib/pubid/ieee/identifiers/si_standard.rb +38 -0
- data/lib/pubid/ieee/identifiers/standard.rb +44 -0
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +42 -0
- data/lib/pubid/ieee/identifiers.rb +34 -0
- data/lib/pubid/ieee/ire/builder.rb +62 -0
- data/lib/pubid/ieee/ire/identifier.rb +73 -0
- data/lib/pubid/ieee/ire/parser.rb +91 -0
- data/lib/pubid/ieee/ire.rb +11 -0
- data/lib/pubid/ieee/nesc/builder.rb +114 -0
- data/lib/pubid/ieee/nesc/parser.rb +155 -0
- data/lib/pubid/ieee/nesc.rb +10 -0
- data/lib/pubid/ieee/parser.rb +1644 -0
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +408 -0
- data/lib/pubid/ieee/typed_stages.rb +183 -0
- data/lib/pubid/ieee/urn_generator.rb +215 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +163 -0
- data/lib/pubid/ieee_debug.rb +30 -0
- data/lib/pubid/ietf/builder.rb +78 -0
- data/lib/pubid/ietf/identifier.rb +5 -0
- data/lib/pubid/ietf/identifiers/base.rb +72 -0
- data/lib/pubid/ietf/identifiers/bcp.rb +36 -0
- data/lib/pubid/ietf/identifiers/fyi.rb +36 -0
- data/lib/pubid/ietf/identifiers/internet_draft.rb +45 -0
- data/lib/pubid/ietf/identifiers/rfc.rb +27 -0
- data/lib/pubid/ietf/identifiers/serialization.rb +51 -0
- data/lib/pubid/ietf/identifiers/std.rb +36 -0
- data/lib/pubid/ietf/identifiers.rb +14 -0
- data/lib/pubid/ietf/parser.rb +61 -0
- data/lib/pubid/ietf/renderer.rb +64 -0
- data/lib/pubid/ietf/urn_generator.rb +37 -0
- data/lib/pubid/ietf/urn_parser.rb +43 -0
- data/lib/pubid/ietf.rb +85 -0
- data/lib/pubid/iho/builder.rb +37 -0
- data/lib/pubid/iho/identifier.rb +7 -0
- data/lib/pubid/iho/identifiers/base.rb +75 -0
- data/lib/pubid/iho/identifiers/bibliographic.rb +16 -0
- data/lib/pubid/iho/identifiers/circular_letter.rb +15 -0
- data/lib/pubid/iho/identifiers/miscellaneous.rb +16 -0
- data/lib/pubid/iho/identifiers/publication.rb +15 -0
- data/lib/pubid/iho/identifiers/standard.rb +15 -0
- data/lib/pubid/iho/identifiers.rb +13 -0
- data/lib/pubid/iho/parser.rb +68 -0
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +29 -0
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +77 -0
- data/lib/pubid/isbn/builder.rb +44 -0
- data/lib/pubid/isbn/check_digit.rb +53 -0
- data/lib/pubid/isbn/identifier.rb +81 -0
- data/lib/pubid/isbn/identifiers/book.rb +30 -0
- data/lib/pubid/isbn/identifiers.rb +9 -0
- data/lib/pubid/isbn/parser.rb +45 -0
- data/lib/pubid/isbn/renderer.rb +16 -0
- data/lib/pubid/isbn.rb +52 -0
- data/lib/pubid/iso/builder.rb +316 -0
- data/lib/pubid/iso/bundled_identifier.rb +138 -0
- data/lib/pubid/iso/combined_identifier.rb +24 -0
- data/lib/pubid/iso/components/code.rb +24 -0
- data/lib/pubid/iso/components/publisher.rb +62 -0
- data/lib/pubid/iso/components.rb +10 -0
- data/lib/pubid/iso/format_resolver.rb +45 -0
- data/lib/pubid/iso/identifier.rb +318 -0
- data/lib/pubid/iso/identifiers/addendum.rb +107 -0
- data/lib/pubid/iso/identifiers/amendment.rb +132 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
- data/lib/pubid/iso/identifiers/data.rb +75 -0
- data/lib/pubid/iso/identifiers/directives.rb +65 -0
- data/lib/pubid/iso/identifiers/directives_supplement.rb +148 -0
- data/lib/pubid/iso/identifiers/extract.rb +30 -0
- data/lib/pubid/iso/identifiers/guide.rb +99 -0
- data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +95 -0
- data/lib/pubid/iso/identifiers/pas.rb +93 -0
- data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
- data/lib/pubid/iso/identifiers/supplement.rb +95 -0
- data/lib/pubid/iso/identifiers/tc_document.rb +137 -0
- data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
- data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
- data/lib/pubid/iso/identifiers.rb +32 -0
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +534 -0
- data/lib/pubid/iso/rendering_style.rb +120 -0
- data/lib/pubid/iso/single_identifier.rb +60 -0
- data/lib/pubid/iso/supplement_identifier.rb +53 -0
- data/lib/pubid/iso/urn_generator.rb +313 -0
- data/lib/pubid/iso/urn_parser.rb +442 -0
- data/lib/pubid/iso/utilities.rb +86 -0
- data/lib/pubid/iso.rb +236 -0
- data/lib/pubid/itu/builder.rb +360 -0
- data/lib/pubid/itu/components/code.rb +84 -0
- data/lib/pubid/itu/components/designation.rb +35 -0
- data/lib/pubid/itu/components/sector.rb +46 -0
- data/lib/pubid/itu/components/series.rb +25 -0
- data/lib/pubid/itu/components.rb +12 -0
- data/lib/pubid/itu/i18n.rb +9 -0
- data/lib/pubid/itu/i18n.yaml +30 -0
- data/lib/pubid/itu/identifier.rb +4 -0
- data/lib/pubid/itu/identifiers/addendum.rb +15 -0
- data/lib/pubid/itu/identifiers/amendment.rb +19 -0
- data/lib/pubid/itu/identifiers/annex.rb +83 -0
- data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +87 -0
- data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +92 -0
- data/lib/pubid/itu/identifiers/base.rb +482 -0
- data/lib/pubid/itu/identifiers/combined_identifier.rb +121 -0
- data/lib/pubid/itu/identifiers/corrigendum.rb +35 -0
- data/lib/pubid/itu/identifiers/errata.rb +15 -0
- data/lib/pubid/itu/identifiers/handbook.rb +38 -0
- data/lib/pubid/itu/identifiers/question.rb +63 -0
- data/lib/pubid/itu/identifiers/recommendation.rb +15 -0
- data/lib/pubid/itu/identifiers/report.rb +39 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
- data/lib/pubid/itu/identifiers/standard_serialization.rb +58 -0
- data/lib/pubid/itu/identifiers/supplement.rb +149 -0
- data/lib/pubid/itu/identifiers.rb +25 -0
- data/lib/pubid/itu/model.rb +111 -0
- data/lib/pubid/itu/parser.rb +679 -0
- data/lib/pubid/itu/urn_generator.rb +135 -0
- data/lib/pubid/itu/urn_parser.rb +31 -0
- data/lib/pubid/itu.rb +78 -0
- data/lib/pubid/jcgm/builder.rb +106 -0
- data/lib/pubid/jcgm/components/publisher.rb +20 -0
- data/lib/pubid/jcgm/components.rb +9 -0
- data/lib/pubid/jcgm/identifier.rb +21 -0
- data/lib/pubid/jcgm/identifiers/amendment.rb +24 -0
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +39 -0
- data/lib/pubid/jcgm/identifiers/meeting.rb +47 -0
- data/lib/pubid/jcgm/identifiers.rb +13 -0
- data/lib/pubid/jcgm/parser.rb +151 -0
- data/lib/pubid/jcgm/renderer.rb +89 -0
- data/lib/pubid/jcgm/single_identifier.rb +118 -0
- data/lib/pubid/jcgm/supplement_identifier.rb +51 -0
- data/lib/pubid/jcgm/urn_generator.rb +116 -0
- data/lib/pubid/jcgm/urn_parser.rb +177 -0
- data/lib/pubid/jcgm.rb +86 -0
- data/lib/pubid/jis/builder.rb +116 -0
- data/lib/pubid/jis/identifier.rb +194 -0
- data/lib/pubid/jis/identifiers/amendment.rb +16 -0
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/explanation.rb +22 -0
- data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +28 -0
- data/lib/pubid/jis/identifiers/technical_report.rb +32 -0
- data/lib/pubid/jis/identifiers/technical_specification.rb +32 -0
- data/lib/pubid/jis/identifiers.rb +17 -0
- data/lib/pubid/jis/parser.rb +135 -0
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +31 -0
- data/lib/pubid/jis/supplement_identifier.rb +50 -0
- data/lib/pubid/jis/urn_generator.rb +25 -0
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +69 -0
- data/lib/pubid/lutaml/no_store_registration.rb +30 -0
- data/lib/pubid/nist/builder.rb +481 -0
- data/lib/pubid/nist/caster.rb +1234 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +293 -0
- data/lib/pubid/nist/components/code.rb +27 -0
- data/lib/pubid/nist/components/edition.rb +134 -0
- data/lib/pubid/nist/components/issue_number.rb +28 -0
- data/lib/pubid/nist/components/part.rb +77 -0
- data/lib/pubid/nist/components/stage.rb +53 -0
- data/lib/pubid/nist/components/supplement.rb +191 -0
- data/lib/pubid/nist/components/translation.rb +42 -0
- data/lib/pubid/nist/components/update.rb +103 -0
- data/lib/pubid/nist/components/version.rb +35 -0
- data/lib/pubid/nist/components/volume.rb +32 -0
- data/lib/pubid/nist/components.rb +18 -0
- data/lib/pubid/nist/configuration.rb +87 -0
- data/lib/pubid/nist/identifier.rb +8 -0
- data/lib/pubid/nist/identifiers/base.rb +744 -0
- data/lib/pubid/nist/identifiers/circular.rb +80 -0
- data/lib/pubid/nist/identifiers/circular_supplement.rb +60 -0
- data/lib/pubid/nist/identifiers/commercial_standard.rb +42 -0
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +58 -0
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +69 -0
- data/lib/pubid/nist/identifiers/crpl_report.rb +138 -0
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +95 -0
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +36 -0
- data/lib/pubid/nist/identifiers/handbook.rb +58 -0
- data/lib/pubid/nist/identifiers/internal_report.rb +64 -0
- data/lib/pubid/nist/identifiers/letter_circular.rb +46 -0
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +74 -0
- data/lib/pubid/nist/identifiers/monograph.rb +80 -0
- data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
- data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
- data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
- data/lib/pubid/nist/identifiers/report.rb +77 -0
- data/lib/pubid/nist/identifiers/special_publication.rb +46 -0
- data/lib/pubid/nist/identifiers/technical_note.rb +91 -0
- data/lib/pubid/nist/identifiers.rb +33 -0
- data/lib/pubid/nist/parser.rb +752 -0
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +443 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +149 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +57 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +84 -0
- data/lib/pubid/nist/urn_generator.rb +133 -0
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +138 -0
- data/lib/pubid/oasis/builder.rb +79 -0
- data/lib/pubid/oasis/identifier.rb +160 -0
- data/lib/pubid/oasis/identifiers/standard.rb +29 -0
- data/lib/pubid/oasis/identifiers.rb +9 -0
- data/lib/pubid/oasis/parser.rb +34 -0
- data/lib/pubid/oasis/renderer.rb +29 -0
- data/lib/pubid/oasis/urn_generator.rb +25 -0
- data/lib/pubid/oasis/urn_parser.rb +22 -0
- data/lib/pubid/oasis.rb +79 -0
- data/lib/pubid/ogc/builder.rb +33 -0
- data/lib/pubid/ogc/identifier.rb +81 -0
- data/lib/pubid/ogc/identifiers/document.rb +26 -0
- data/lib/pubid/ogc/identifiers.rb +10 -0
- data/lib/pubid/ogc/parser.rb +40 -0
- data/lib/pubid/ogc/renderer.rb +33 -0
- data/lib/pubid/ogc/urn_generator.rb +14 -0
- data/lib/pubid/ogc/urn_parser.rb +22 -0
- data/lib/pubid/ogc.rb +71 -0
- data/lib/pubid/oiml/builder.rb +270 -0
- data/lib/pubid/oiml/components/code.rb +37 -0
- data/lib/pubid/oiml/components.rb +9 -0
- data/lib/pubid/oiml/identifier.rb +64 -0
- data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
- data/lib/pubid/oiml/identifiers/annex.rb +29 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +15 -0
- data/lib/pubid/oiml/identifiers/bulletin.rb +137 -0
- data/lib/pubid/oiml/identifiers/code_number.rb +90 -0
- data/lib/pubid/oiml/identifiers/document.rb +15 -0
- data/lib/pubid/oiml/identifiers/errata.rb +15 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +15 -0
- data/lib/pubid/oiml/identifiers/guide.rb +15 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +15 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +15 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +15 -0
- data/lib/pubid/oiml/identifiers.rb +20 -0
- data/lib/pubid/oiml/parser.rb +274 -0
- data/lib/pubid/oiml/renderer.rb +232 -0
- data/lib/pubid/oiml/single_identifier.rb +113 -0
- data/lib/pubid/oiml/supplement_identifier.rb +88 -0
- data/lib/pubid/oiml/urn_generator.rb +78 -0
- data/lib/pubid/oiml/urn_parser.rb +39 -0
- data/lib/pubid/oiml.rb +81 -0
- data/lib/pubid/omg/builder.rb +19 -0
- data/lib/pubid/omg/identifier.rb +47 -0
- data/lib/pubid/omg/identifiers/specification.rb +32 -0
- data/lib/pubid/omg/identifiers.rb +9 -0
- data/lib/pubid/omg/parser.rb +40 -0
- data/lib/pubid/omg/renderer.rb +19 -0
- data/lib/pubid/omg.rb +51 -0
- data/lib/pubid/parser/common_parse_methods.rb +13 -0
- data/lib/pubid/parser/common_parse_rules.rb +56 -0
- data/lib/pubid/parser/grammar.rb +74 -0
- data/lib/pubid/parser.rb +9 -0
- data/lib/pubid/parsers/base.rb +11 -0
- data/lib/pubid/parsers/mr_string.rb +206 -0
- data/lib/pubid/plateau/builder.rb +54 -0
- data/lib/pubid/plateau/identifier.rb +4 -0
- data/lib/pubid/plateau/identifiers/annex.rb +16 -0
- data/lib/pubid/plateau/identifiers/base.rb +55 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +28 -0
- data/lib/pubid/plateau/identifiers/technical_report.rb +16 -0
- data/lib/pubid/plateau/identifiers.rb +11 -0
- data/lib/pubid/plateau/parser.rb +73 -0
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +68 -0
- data/lib/pubid/plateau/urn_generator.rb +29 -0
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +82 -0
- data/lib/pubid/prefixes_support.rb +51 -0
- data/lib/pubid/renderers/annotator.rb +233 -0
- data/lib/pubid/renderers/base.rb +66 -0
- data/lib/pubid/renderers/directives_renderer.rb +75 -0
- data/lib/pubid/renderers/guide_renderer.rb +26 -0
- data/lib/pubid/renderers/human_readable.rb +83 -0
- data/lib/pubid/renderers/iwa_renderer.rb +20 -0
- data/lib/pubid/renderers/mr_string.rb +64 -0
- data/lib/pubid/renderers/supplement_renderer.rb +36 -0
- data/lib/pubid/renderers/urn.rb +11 -0
- data/lib/pubid/renderers.rb +15 -0
- data/lib/pubid/rendering/context.rb +168 -0
- data/lib/pubid/rendering/date.rb +27 -0
- data/lib/pubid/rendering/language.rb +21 -0
- data/lib/pubid/rendering/numbering.rb +42 -0
- data/lib/pubid/rendering/publisher.rb +25 -0
- data/lib/pubid/rendering/stage.rb +38 -0
- data/lib/pubid/rendering/supplement.rb +46 -0
- data/lib/pubid/rendering.rb +13 -0
- data/lib/pubid/sae/builder.rb +32 -0
- data/lib/pubid/sae/components/code.rb +9 -0
- data/lib/pubid/sae/components/date.rb +27 -0
- data/lib/pubid/sae/components/type.rb +23 -0
- data/lib/pubid/sae/components.rb +11 -0
- data/lib/pubid/sae/identifier.rb +4 -0
- data/lib/pubid/sae/identifiers/base.rb +47 -0
- data/lib/pubid/sae/identifiers.rb +8 -0
- data/lib/pubid/sae/parser.rb +55 -0
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +30 -0
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +66 -0
- data/lib/pubid/tgpp/builder.rb +41 -0
- data/lib/pubid/tgpp/identifier.rb +107 -0
- data/lib/pubid/tgpp/identifiers/technical_report.rb +32 -0
- data/lib/pubid/tgpp/identifiers/technical_specification.rb +33 -0
- data/lib/pubid/tgpp/identifiers.rb +11 -0
- data/lib/pubid/tgpp/parser.rb +78 -0
- data/lib/pubid/tgpp/renderer.rb +52 -0
- data/lib/pubid/tgpp/urn_generator.rb +39 -0
- data/lib/pubid/tgpp/urn_parser.rb +30 -0
- data/lib/pubid/tgpp.rb +83 -0
- data/lib/pubid/type_resolver.rb +59 -0
- data/lib/pubid/un/builder.rb +42 -0
- data/lib/pubid/un/identifier.rb +40 -0
- data/lib/pubid/un/identifiers/document.rb +24 -0
- data/lib/pubid/un/identifiers.rb +9 -0
- data/lib/pubid/un/parser.rb +25 -0
- data/lib/pubid/un/renderer.rb +11 -0
- data/lib/pubid/un.rb +46 -0
- data/lib/pubid/urn_generator/base.rb +110 -0
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +16 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/utils/string_normalizer.rb +196 -0
- data/lib/pubid/utils.rb +7 -0
- data/lib/pubid/version.rb +3 -1
- data/lib/pubid/w3c/builder.rb +55 -0
- data/lib/pubid/w3c/identifier.rb +130 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +31 -0
- data/lib/pubid/w3c/identifiers/draft_note.rb +31 -0
- data/lib/pubid/w3c/identifiers/note.rb +30 -0
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/standard.rb +12 -0
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/working_draft.rb +30 -0
- data/lib/pubid/w3c/identifiers.rb +25 -0
- data/lib/pubid/w3c/parser.rb +43 -0
- data/lib/pubid/w3c/renderer.rb +35 -0
- data/lib/pubid/w3c/urn_generator.rb +18 -0
- data/lib/pubid/w3c/urn_parser.rb +36 -0
- data/lib/pubid/w3c.rb +67 -0
- data/lib/pubid/xsf/builder.rb +17 -0
- data/lib/pubid/xsf/identifier.rb +66 -0
- data/lib/pubid/xsf/identifiers/xep.rb +31 -0
- data/lib/pubid/xsf/identifiers.rb +9 -0
- data/lib/pubid/xsf/parser.rb +25 -0
- data/lib/pubid/xsf/renderer.rb +23 -0
- data/lib/pubid/xsf/urn_generator.rb +13 -0
- data/lib/pubid/xsf/urn_parser.rb +18 -0
- data/lib/pubid/xsf.rb +81 -0
- data/lib/pubid.rb +551 -13
- data/lib/tasks/docs.rake +37 -0
- data/lib/tasks/export.rake +39 -0
- data/lib/tasks/website-data.json +7546 -0
- metadata +875 -171
- data/lib/pubid/registry.rb +0 -30
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
# Serialization compaction for IEEE hashes — a recursive transform hooked
|
|
6
|
+
# into Ieee::Identifier#to_hash (collapse) and .from_hash (expand). Two
|
|
7
|
+
# compactions, both provably lossless and nested-safe (they descend into a
|
|
8
|
+
# Corrigendum `base` too):
|
|
9
|
+
#
|
|
10
|
+
# 1. **typed_stage -> `stage` scalar.** The multi-field `typed_stage` object
|
|
11
|
+
# becomes a single `stage` key holding its canonical abbreviation,
|
|
12
|
+
# rebuilt from the TYPED_STAGES registry. The abbreviation keys the
|
|
13
|
+
# registry uniquely, and the collapse fires only when the registry's
|
|
14
|
+
# reconstruction is byte-identical to the serialized sub-hash — an
|
|
15
|
+
# unrecognised / non-matching stage is left as the full object (fails
|
|
16
|
+
# closed).
|
|
17
|
+
#
|
|
18
|
+
# 2. **`draft` slash strip.** `Components::Draft#to_s` renders `"/D3"`; the
|
|
19
|
+
# leading `/` is boilerplate, so the serialized form is `"D3"`. No expand
|
|
20
|
+
# step is needed — `Draft.parse` already accepts the slashless form and
|
|
21
|
+
# reproduces `"/D3"` (verified across the whole corpus), so from_hash and
|
|
22
|
+
# rendering are unchanged.
|
|
23
|
+
#
|
|
24
|
+
# A recursive hash transform (rather than lutaml attributes) is deliberate:
|
|
25
|
+
# `stage` collides with the inherited `Components::Stage` attribute name (a
|
|
26
|
+
# redefinition would reintroduce the multi-flavor nondeterminism we hit with
|
|
27
|
+
# `number`), and only a whole-hash walk reaches a nested Corrigendum `base`,
|
|
28
|
+
# which a per-object `to_hash` override cannot (the nested-serialization
|
|
29
|
+
# wall). The runtime `typed_stage`/`draft_obj` objects are untouched.
|
|
30
|
+
module Compaction
|
|
31
|
+
module_function
|
|
32
|
+
|
|
33
|
+
# abbr => canonical serialized typed_stage sub-hash, mirroring what the
|
|
34
|
+
# parent serializer + canonicalizer emit (nils dropped, and a default
|
|
35
|
+
# `project_status: false` dropped). Memoized.
|
|
36
|
+
def sub_hash_for(abbr)
|
|
37
|
+
(@sub_hash_for ||= build_sub_hash_map)[abbr]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def build_sub_hash_map
|
|
41
|
+
TypedStages::TYPED_STAGES.to_h { |ts| [ts.abbr.first, entry_sub_hash(ts)] }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# NB: this must list every Components::TypedStage attribute. If a field is
|
|
45
|
+
# added there but not here, the collapse guard fails closed — affected
|
|
46
|
+
# stages stay full objects (still lossless) but stop compacting; extend
|
|
47
|
+
# this list to keep them compact.
|
|
48
|
+
def entry_sub_hash(typed_stage)
|
|
49
|
+
{
|
|
50
|
+
"abbr" => typed_stage.abbr,
|
|
51
|
+
"stage_code" => typed_stage.stage_code,
|
|
52
|
+
"type_code" => typed_stage.type_code,
|
|
53
|
+
"iso_stage_equivalent" => typed_stage.iso_stage_equivalent,
|
|
54
|
+
"ieee_draft_equivalent" => typed_stage.ieee_draft_equivalent,
|
|
55
|
+
"approval_status" => typed_stage.approval_status,
|
|
56
|
+
"project_status" => typed_stage.project_status || nil,
|
|
57
|
+
}.compact
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Recursively compact every hash in the tree: collapse a reproducible
|
|
61
|
+
# `typed_stage` to a `stage` scalar and strip the leading `/` off `draft`.
|
|
62
|
+
def collapse(node)
|
|
63
|
+
collapse_hash(node) if node.is_a?(::Hash)
|
|
64
|
+
node.each { |v| collapse(v) } if node.is_a?(::Array)
|
|
65
|
+
node
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def collapse_hash(node)
|
|
69
|
+
collapse_stage(node)
|
|
70
|
+
draft = node["draft"]
|
|
71
|
+
node["draft"] = draft.delete_prefix("/") if draft.is_a?(::String)
|
|
72
|
+
node.each_value { |v| collapse(v) }
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Collapse only when the registry rebuilds the exact same sub-hash, so no
|
|
76
|
+
# information is ever lost.
|
|
77
|
+
def collapse_stage(node)
|
|
78
|
+
ts = node["typed_stage"]
|
|
79
|
+
abbr = ts["abbr"]&.first if ts.is_a?(::Hash)
|
|
80
|
+
return unless abbr && sub_hash_for(abbr) == ts
|
|
81
|
+
|
|
82
|
+
node.delete("typed_stage")
|
|
83
|
+
node["stage"] = abbr
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Inverse of {collapse} for `stage`: replace a recognised `stage` scalar
|
|
87
|
+
# with its registry typed_stage sub-hash so lutaml rebuilds the component
|
|
88
|
+
# (nested bases included). `draft` needs no expansion — Draft.parse
|
|
89
|
+
# accepts the slashless form. An unrecognised value is left alone.
|
|
90
|
+
def expand(node)
|
|
91
|
+
expand_hash(node) if node.is_a?(::Hash)
|
|
92
|
+
node.each { |v| expand(v) } if node.is_a?(::Array)
|
|
93
|
+
node
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def expand_hash(node)
|
|
97
|
+
key = stage_key(node)
|
|
98
|
+
sub = sub_hash_for(node[key].to_s) if key
|
|
99
|
+
if sub
|
|
100
|
+
node.delete(key)
|
|
101
|
+
node["typed_stage"] = deep_dup(sub)
|
|
102
|
+
end
|
|
103
|
+
node.each_value { |v| expand(v) }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def stage_key(node)
|
|
107
|
+
return :stage if node.key?(:stage)
|
|
108
|
+
|
|
109
|
+
"stage" if node.key?("stage")
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def deep_dup(node)
|
|
113
|
+
case node
|
|
114
|
+
when ::Hash then node.transform_values { |v| deep_dup(v) }
|
|
115
|
+
when ::Array then node.map { |v| deep_dup(v) }
|
|
116
|
+
else node
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
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
|
+
#
|
|
15
|
+
# Stays independent of Pubid::Components::Code because IEEE tracks
|
|
16
|
+
# +original_separator+ to round-trip dot vs dash notation, and uses
|
|
17
|
+
# +number+ rather than +value+.
|
|
18
|
+
class Code < Lutaml::Model::Serializable
|
|
19
|
+
attribute :prefix, :string # C, P for some identifiers
|
|
20
|
+
attribute :number, :string # Main number (802, 1234, etc.)
|
|
21
|
+
attribute :parts, :string, collection: true # Array of part strings
|
|
22
|
+
attribute :original_separator, :string # Original separator (. or -) from parsing
|
|
23
|
+
|
|
24
|
+
def initialize(prefix: nil, number: nil, parts: nil,
|
|
25
|
+
original_separator: nil)
|
|
26
|
+
super()
|
|
27
|
+
self.prefix = prefix
|
|
28
|
+
self.number = number
|
|
29
|
+
self.parts = parts || []
|
|
30
|
+
self.original_separator = original_separator
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Parse code string into components
|
|
34
|
+
def self.parse(code_str)
|
|
35
|
+
return nil if code_str.nil? || code_str.empty?
|
|
36
|
+
|
|
37
|
+
# Extract prefix if present (C, P)
|
|
38
|
+
prefix_match = code_str.match(/^([A-Z])/)
|
|
39
|
+
prefix = prefix_match ? prefix_match[1] : nil
|
|
40
|
+
|
|
41
|
+
# Remove prefix for number parsing
|
|
42
|
+
remainder = prefix ? code_str[prefix.length..] : code_str
|
|
43
|
+
|
|
44
|
+
# Detect the separator used
|
|
45
|
+
separator = nil
|
|
46
|
+
if remainder.include?(".")
|
|
47
|
+
separator = "."
|
|
48
|
+
elsif remainder.include?("-")
|
|
49
|
+
separator = "-"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Split by dots or dashes to get number and parts
|
|
53
|
+
components = remainder.split(/[.-]/)
|
|
54
|
+
number = components.shift
|
|
55
|
+
|
|
56
|
+
new(
|
|
57
|
+
prefix: prefix,
|
|
58
|
+
number: number,
|
|
59
|
+
parts: components.empty? ? nil : components,
|
|
60
|
+
original_separator: separator,
|
|
61
|
+
)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def to_s
|
|
65
|
+
result = ""
|
|
66
|
+
result += prefix if prefix
|
|
67
|
+
result += number if number # Guard against nil number (e.g., "ANSI X")
|
|
68
|
+
|
|
69
|
+
if parts && !parts.empty?
|
|
70
|
+
# Use original separator if available
|
|
71
|
+
if original_separator
|
|
72
|
+
separator = original_separator
|
|
73
|
+
elsif prefix == "P" || (!prefix && parts.first && parts.first.length > 3)
|
|
74
|
+
# Fallback to heuristics when original separator unknown
|
|
75
|
+
# Determine separator based on prefix and pattern:
|
|
76
|
+
# - Letter prefix (C, etc.) codes use dots: C37.111
|
|
77
|
+
# - P-prefix codes typically use dashes: P11073-10404
|
|
78
|
+
# - Pure numeric codes with 5+ digits use dashes: 61523-4 (IEC style)
|
|
79
|
+
# - Traditional IEEE codes like 802.11 use dots
|
|
80
|
+
#
|
|
81
|
+
# Heuristic:
|
|
82
|
+
# 1. P-prefix or long part (>3 chars) → dash
|
|
83
|
+
# 2. Letter prefix (except P) → dot
|
|
84
|
+
# 3. Long number (5+ digits) → dash (IEC pattern)
|
|
85
|
+
# 4. Default → dot (traditional IEEE)
|
|
86
|
+
separator = "-"
|
|
87
|
+
elsif prefix && prefix != "P"
|
|
88
|
+
separator = "."
|
|
89
|
+
elsif !prefix && number && number.length >= 5
|
|
90
|
+
separator = "-"
|
|
91
|
+
else
|
|
92
|
+
# Default to dot for traditional IEEE codes like 802.11
|
|
93
|
+
separator = "."
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
parts.each do |part|
|
|
97
|
+
result += separator + part
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
result
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def render(context: nil)
|
|
105
|
+
to_s
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
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
|
+
# Month names as an alternation, longest-first so "September" wins over
|
|
46
|
+
# "Sep"; each may carry a trailing period ("Sept."). Used to split a
|
|
47
|
+
# rendered draft's trailing date back out.
|
|
48
|
+
MONTH_ALTERNATION =
|
|
49
|
+
MONTH_NAMES.keys.sort_by { |m| -m.length }
|
|
50
|
+
.map { |m| "#{Regexp.escape(m)}\\.?" }.join("|").freeze
|
|
51
|
+
private_constant :MONTH_ALTERNATION
|
|
52
|
+
|
|
53
|
+
DATE_SUFFIX =
|
|
54
|
+
/(?:(, | )(#{MONTH_ALTERNATION})(?: (\d{1,2}))?(?:, | )| )((?:19|20)\d{2}[a-z]{0,2})\z/
|
|
55
|
+
private_constant :DATE_SUFFIX
|
|
56
|
+
|
|
57
|
+
# Parse a rendered draft such as "/D3", "/D3.4", "/D7 Jul 2019", or a
|
|
58
|
+
# bare "D5"/"5" back into a Draft. This is the exact inverse of #to_s:
|
|
59
|
+
# `Draft.parse(d.to_s).to_s == d.to_s` must hold, because the identifier
|
|
60
|
+
# stores the draft as its rendered string and rebuilds the object with
|
|
61
|
+
# this method after `from_hash` (a mismatch breaks `to_hash` round-trip).
|
|
62
|
+
# @param value [String, Draft] the value to coerce
|
|
63
|
+
# @return [Draft]
|
|
64
|
+
def self.parse(value)
|
|
65
|
+
return value if value.is_a?(Draft)
|
|
66
|
+
|
|
67
|
+
body = strip_prefix(value.to_s)
|
|
68
|
+
version, month, day, year, comma = split_date(body)
|
|
69
|
+
draft = new(version: version, month: month, day: day, year: year)
|
|
70
|
+
draft.comma_before_month = comma
|
|
71
|
+
draft
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Remove the leading "/D" (or a bare leading "D"/"/") that #to_s emits,
|
|
75
|
+
# leaving the version and any trailing date.
|
|
76
|
+
def self.strip_prefix(str)
|
|
77
|
+
return str[2..] if str.start_with?("/D")
|
|
78
|
+
return str[1..] if str.start_with?("/")
|
|
79
|
+
return str[1..] if str.start_with?("D") && str.length > 1
|
|
80
|
+
|
|
81
|
+
str
|
|
82
|
+
end
|
|
83
|
+
private_class_method :strip_prefix
|
|
84
|
+
|
|
85
|
+
# Split a trailing rendered date off the version, so the version stays
|
|
86
|
+
# clean (the SI/PSI renderer reads `draft_obj.version` directly). Returns
|
|
87
|
+
# [version, month, day, year, comma_before_month].
|
|
88
|
+
def self.split_date(body)
|
|
89
|
+
m = body.match(DATE_SUFFIX)
|
|
90
|
+
return [body, nil, nil, nil, false] unless m
|
|
91
|
+
|
|
92
|
+
version = body[0...m.begin(0)]
|
|
93
|
+
# The leading group is nil for the month-less " YEAR" form.
|
|
94
|
+
comma = m[1] == ", "
|
|
95
|
+
[version, m[2], m[3], m[4], comma]
|
|
96
|
+
end
|
|
97
|
+
private_class_method :split_date
|
|
98
|
+
|
|
99
|
+
# Convert month name to numeric value
|
|
100
|
+
def convert_month(month_name)
|
|
101
|
+
return nil unless month_name
|
|
102
|
+
|
|
103
|
+
MONTH_NAMES[month_name] || month_name
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Access the numeric month value
|
|
107
|
+
def numeric_month
|
|
108
|
+
month
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def to_s
|
|
112
|
+
result = "/D#{version}"
|
|
113
|
+
result += ".#{revision}" if revision
|
|
114
|
+
|
|
115
|
+
if year
|
|
116
|
+
# Use original month format to preserve abbreviated vs full names
|
|
117
|
+
display_month = original_month
|
|
118
|
+
|
|
119
|
+
if display_month
|
|
120
|
+
# Use comma_before_month flag if set, otherwise detect from month format
|
|
121
|
+
use_comma_before = if defined?(@comma_before_month) && !@comma_before_month.nil?
|
|
122
|
+
@comma_before_month
|
|
123
|
+
else
|
|
124
|
+
# Default: Full month names have comma, abbreviated don't
|
|
125
|
+
display_month.length > 4 && display_month != "Sept"
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
result += use_comma_before ? ", #{display_month}" : " #{display_month}"
|
|
129
|
+
result += " #{day}" if day
|
|
130
|
+
|
|
131
|
+
# Abbreviated months: " Year", Full months: ", Year"
|
|
132
|
+
result += if display_month.length <= 4 || display_month == "Sept"
|
|
133
|
+
" #{year}"
|
|
134
|
+
else
|
|
135
|
+
", #{year}"
|
|
136
|
+
end
|
|
137
|
+
else
|
|
138
|
+
result += " #{year}"
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
result
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# IEEE's Relationship component is now the shared Pubid::Components::Relationship.
|
|
4
|
+
# This subclass exists so existing references (Pubid::Ieee::Components::Relationship,
|
|
5
|
+
# the VALID_TYPES constants, etc.) continue to resolve without rewriting every
|
|
6
|
+
# call site.
|
|
7
|
+
module Pubid
|
|
8
|
+
module Ieee
|
|
9
|
+
module Components
|
|
10
|
+
class Relationship < ::Pubid::Components::Relationship; end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
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,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Pubid::Ieee::Identifier is the IEEE base class (a real Pubid::Identifier
|
|
4
|
+
# subclass); IEEE builds its identifiers as instances of it directly. Its body and `.parse` live in
|
|
5
|
+
# identifiers/base.rb. This file just ensures it is loaded.
|
|
@@ -0,0 +1,81 @@
|
|
|
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 < Identifier
|
|
11
|
+
# IEEE's identifier for this adopted standard.
|
|
12
|
+
#
|
|
13
|
+
# Typed as the cross-flavor base `::Pubid::Identifier` (not the
|
|
14
|
+
# IEEE-only `Identifier`) so serialization never rejects a cross-flavor
|
|
15
|
+
# value. lutaml enforces the declared attribute type; `polymorphic:
|
|
16
|
+
# true` permits only *subclasses* of it, and a `Pubid::Ansi::…` /
|
|
17
|
+
# `Pubid::Iec::…` object is not a subclass of `Pubid::Ieee::Identifier`.
|
|
18
|
+
# The cross-flavor child carries its own `_type`, so `from_hash` routes
|
|
19
|
+
# it back via `TypeResolver`.
|
|
20
|
+
attribute :ieee_identifier, ::Pubid::Identifier, polymorphic: true
|
|
21
|
+
|
|
22
|
+
# Original identifiers from ANSI/ASME/ISO/IEC/etc (array for multi-part
|
|
23
|
+
# adoptions). Cross-flavor by design: an `IEEE Std <n> (ANSI <m>)`
|
|
24
|
+
# adoption stores a `Pubid::Ansi::…` object here. See `ieee_identifier`
|
|
25
|
+
# above for why this must be `::Pubid::Identifier`, not IEEE-only.
|
|
26
|
+
attribute :adopted_identifiers, ::Pubid::Identifier, polymorphic: true,
|
|
27
|
+
collection: true
|
|
28
|
+
|
|
29
|
+
def publisher
|
|
30
|
+
ieee_identifier&.publisher || "IEEE"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# An adoption names one document by two designations and carries no
|
|
34
|
+
# number of its own, so `root.number` — the key relaton-index sorts and
|
|
35
|
+
# bsearches on — was "". Walk to the IEEE designation, which is the one
|
|
36
|
+
# IEEE files the document under, and which is also the source of truth
|
|
37
|
+
# for `publisher` above.
|
|
38
|
+
def root
|
|
39
|
+
ieee_identifier ? ieee_identifier.root : self
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# The document number must reach the URN and the MR slug too, not only
|
|
43
|
+
# `#root` — the project rule that an identity-bearing marker reaches
|
|
44
|
+
# every identity surface. `UrnGenerator#code_component` and the base
|
|
45
|
+
# `mr_number_with_part` both read `code_obj`, which a wrapper does not
|
|
46
|
+
# have, so all 66 adoptions collapsed onto 5 URNs and 5 slugs — and
|
|
47
|
+
# `to_slug` is an output FILENAME, so that is 66 documents overwriting
|
|
48
|
+
# each other. Delegate to the IEEE designation, as `#root` does.
|
|
49
|
+
#
|
|
50
|
+
# `code_obj` is a plain attr_accessor on the base, not a lutaml
|
|
51
|
+
# attribute, so overriding it as a method is safe here.
|
|
52
|
+
def code_obj
|
|
53
|
+
ieee_identifier&.code_obj
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Likewise the year: without it "AIEE No 15-1944" and "AIEE No 15-1959"
|
|
57
|
+
# — two different documents — produced the same slug "aiee.std.15".
|
|
58
|
+
# This is the `mr_year` HOOK, not a `#year` method: `year` is a lutaml
|
|
59
|
+
# attribute on the base, and a method of that name would shadow the
|
|
60
|
+
# generated accessor (the CLAUDE.md landmine).
|
|
61
|
+
def mr_year
|
|
62
|
+
(year || ieee_identifier&.year)&.to_s
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# `publisher` is *derived* from `ieee_identifier` (the serialized source
|
|
66
|
+
# of truth), so it must not be serialized. Emitting it breaks the
|
|
67
|
+
# canonical round-trip: the derived value is default-omitted on the parse
|
|
68
|
+
# path (publisher unset), but re-emitted after from_hash materializes the
|
|
69
|
+
# attribute default (the override then returns ieee_identifier.publisher,
|
|
70
|
+
# e.g. "AIEE", not the "IEEE" default). Drop it — ieee_identifier rebuilds
|
|
71
|
+
# it. (AdoptedStandard is always a top-level wrapper, never nested, so a
|
|
72
|
+
# to_hash-level drop is sufficient — same as JointDevelopment.)
|
|
73
|
+
def to_hash(*args)
|
|
74
|
+
hash = super
|
|
75
|
+
hash.delete("publisher") if hash.is_a?(::Hash)
|
|
76
|
+
hash
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Amendment identifier for IEEE standards
|
|
7
|
+
# Represents additions/changes to a published standard
|
|
8
|
+
# Example: IEEE Std 802.3-2018/Amd 4-2020
|
|
9
|
+
class Amendment < SupplementIdentifier
|
|
10
|
+
# The amendment's own ordinal (`number`) and `year` — uniform names,
|
|
11
|
+
# not `amd_number`/`amd_year`. `number` is a plain string redefining the
|
|
12
|
+
# inherited Components::Code (leaf-safe, like the standards); `year` is
|
|
13
|
+
# the inherited base :string. `root.number` still returns the *base*
|
|
14
|
+
# document number, so the index key is unaffected. Mirrors Corrigendum.
|
|
15
|
+
attribute :number, :string
|
|
16
|
+
# `year` inherited from the base.
|
|
17
|
+
|
|
18
|
+
# TYPED_STAGES for amendment
|
|
19
|
+
# Amendment uses "Amd" abbreviation
|
|
20
|
+
TYPED_STAGES = [
|
|
21
|
+
Components::TypedStage.new(
|
|
22
|
+
abbr: ["Amd"],
|
|
23
|
+
type_code: "amendment",
|
|
24
|
+
stage_code: "published",
|
|
25
|
+
),
|
|
26
|
+
].freeze
|
|
27
|
+
|
|
28
|
+
# MR supplement suffix: `amd.{number}.{year}` (e.g. "/amd.4.2020").
|
|
29
|
+
# The MrString renderer recurses into `base` and appends this so the
|
|
30
|
+
# full IEEE amendment round-trips losslessly (mirrors Corrigendum).
|
|
31
|
+
def mr_supplement_suffix
|
|
32
|
+
segments = ["amd"]
|
|
33
|
+
segments << number.to_s if number
|
|
34
|
+
segments << year.to_s if year
|
|
35
|
+
segments.join(".")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|