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,245 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Iec
|
|
5
|
+
# Generates IEC URNs in the positional format used as ground truth by
|
|
6
|
+
# relaton-data-iec:
|
|
7
|
+
#
|
|
8
|
+
# urn:iec:std:{authority}:{number}[-{part}[-{subpart}]]
|
|
9
|
+
# :{date}:{stage-or-type}:{deliverable}:{language}{adjuncts}
|
|
10
|
+
#
|
|
11
|
+
# e.g. +urn:iec:std:iec:60050-102:2007:::+. Absent trailing slots are
|
|
12
|
+
# emitted as empty fields. The all-parts series URN is the one exception:
|
|
13
|
+
# a bare series omits the language slot (8 fields).
|
|
14
|
+
#
|
|
15
|
+
# This used to be a port of relaton-iec's +code_to_urn+, which regex-scraped
|
|
16
|
+
# +identifier.to_s+. Three defects followed from reading the printed form:
|
|
17
|
+
# the stage was folded into the authority slot (+urn:iec:std:iec-np:...+),
|
|
18
|
+
# the edition was never emitted, and the regex was unanchored, so any type
|
|
19
|
+
# token outside its hard-coded list consumed the publisher instead
|
|
20
|
+
# (+IEC/DTS 62271-1+ became +urn:iec:std:dts:62271-1::::+, and every
|
|
21
|
+
# +IECEE TRF ...+ keyed +urn:iec:std:trf:...+). The generator now reads the
|
|
22
|
+
# identifier's own components. The slot ORDER is unchanged, because the
|
|
23
|
+
# published corpus uses it. See issue #360 item 4.
|
|
24
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
25
|
+
URN_CONTEXT = Rendering::RenderingContext.urn.freeze
|
|
26
|
+
private_constant :URN_CONTEXT
|
|
27
|
+
|
|
28
|
+
# Type codes that occupy the type slot. `is` and `trf` render empty
|
|
29
|
+
# there, as they always have. `tec` and `wp` never appear in the corpus
|
|
30
|
+
# but the legacy grammar accepted them, so they stay recognised.
|
|
31
|
+
TYPE_SLOT_CODES = %w[tr ts pas srd guide tec wp].freeze
|
|
32
|
+
|
|
33
|
+
# Deliverable markers occupying the deliverable slot. "ser" reaches this
|
|
34
|
+
# list as a spelled-out VAP code ("IEC 60034:2026 SER"), which is not the
|
|
35
|
+
# same thing as the `all_parts` series form handled below.
|
|
36
|
+
DELIVERABLES = %w[cmv csv exv prv rlv ser].freeze
|
|
37
|
+
|
|
38
|
+
# Supplement classes that contribute an adjunct, and the token each one
|
|
39
|
+
# writes into it.
|
|
40
|
+
ADJUNCT_TOKENS = {
|
|
41
|
+
"Amendment" => "amd",
|
|
42
|
+
"Corrigendum" => "cor",
|
|
43
|
+
"InterpretationSheet" => "ish",
|
|
44
|
+
}.freeze
|
|
45
|
+
|
|
46
|
+
def generate
|
|
47
|
+
doc = document
|
|
48
|
+
return nil if doc.nil?
|
|
49
|
+
|
|
50
|
+
num = number_segment(doc)
|
|
51
|
+
return nil if num.nil? || num.empty?
|
|
52
|
+
|
|
53
|
+
slots = ["urn", "iec", "std", authority(doc), num,
|
|
54
|
+
date_slot(doc), stage_or_type_slot(doc), deliverable_slot]
|
|
55
|
+
adjuncts = adjunct_slots(identifier)
|
|
56
|
+
language = language_slot
|
|
57
|
+
slots << language unless bare_series?(slots, adjuncts, language)
|
|
58
|
+
|
|
59
|
+
(slots + adjuncts).join(":").downcase
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
# The document the URN names: the origin standard, with every amendment,
|
|
65
|
+
# corrigendum, consolidation, VAP and fragment layer peeled off. Those
|
|
66
|
+
# layers are what the adjunct and deliverable slots record.
|
|
67
|
+
#
|
|
68
|
+
# A CISPR test report form carries no number of its own — the document it
|
|
69
|
+
# reports on sits in `cispr_identifier`, and that is what the URN has
|
|
70
|
+
# always named.
|
|
71
|
+
def document
|
|
72
|
+
doc = identifier.respond_to?(:root) ? identifier.root : identifier
|
|
73
|
+
return doc if doc.nil? || number_segment(doc)
|
|
74
|
+
|
|
75
|
+
maybe_of(doc, :cispr_identifier) || doc
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# A publisher body may carry a space ("IEC CA", "IECQ CS", "IECQ OD").
|
|
79
|
+
# The published corpus records only the last token for those
|
|
80
|
+
# (+urn:iec:std:ca:01:2017:::+), which is what the old whitespace-
|
|
81
|
+
# splitting regex produced. Keeping that spelling is what keeps those
|
|
82
|
+
# rows byte-identical; correcting it to "iec-ca" would need a data
|
|
83
|
+
# migration first.
|
|
84
|
+
def authority(doc)
|
|
85
|
+
publishers = [doc.publisher] + Array(doc.copublishers)
|
|
86
|
+
publishers.compact.map { |p| p.body.to_s.split(/\s+/).last.to_s }
|
|
87
|
+
.reject(&:empty?).join("-")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def number_segment(doc)
|
|
91
|
+
return nil unless doc.respond_to?(:number) && doc.number
|
|
92
|
+
|
|
93
|
+
segment = [doc.number, maybe_of(doc, :part), maybe_of(doc, :subpart)]
|
|
94
|
+
.compact.map(&:to_s).reject(&:empty?).join("-")
|
|
95
|
+
return nil if segment.empty?
|
|
96
|
+
|
|
97
|
+
# A few document numbers are multi-word ("DIR 1 IEC SUP"). A URN
|
|
98
|
+
# carries no spaces, so they become hyphens.
|
|
99
|
+
segment.gsub(/\s+/, "-")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# `Components::Date#render` under a URN context deliberately drops the
|
|
103
|
+
# month, which is the ISO convention. IEC keeps the precision it was
|
|
104
|
+
# given ("IEC CA 01:2025-10" keys ...:2025-10:...), so this reads the
|
|
105
|
+
# printed form.
|
|
106
|
+
def date_slot(doc)
|
|
107
|
+
maybe_of(doc, :date).to_s
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# The stage slot and the type slot are the same slot, and a draft of a
|
|
111
|
+
# typed document has both. Both are kept, type first
|
|
112
|
+
# ("ts-stage-50.00"), because the harmonized codes are shared across
|
|
113
|
+
# types: dropping the type would make a draft TS, a draft TR and a draft
|
|
114
|
+
# International Standard collide, and `parse_urn` would resolve every one
|
|
115
|
+
# of them to an International Standard.
|
|
116
|
+
def stage_or_type_slot(doc)
|
|
117
|
+
type = type_token(doc)
|
|
118
|
+
stage = stage_token(doc)
|
|
119
|
+
|
|
120
|
+
return type if stage.nil?
|
|
121
|
+
|
|
122
|
+
[type, stage].reject { |t| t.nil? || t.empty? }.join("-")
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def type_token(doc)
|
|
126
|
+
ts = maybe_of(doc, :typed_stage)
|
|
127
|
+
code = ts&.type_code.to_s.downcase
|
|
128
|
+
TYPE_SLOT_CODES.include?(code) ? code : ""
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# nil when the document is published (or carries no stage at all), so the
|
|
132
|
+
# slot keeps holding the bare type token for every published row.
|
|
133
|
+
def stage_token(doc)
|
|
134
|
+
stage = maybe_of(doc, :typed_stage)&.to_stage || maybe_of(doc, :stage)
|
|
135
|
+
harmonized = stage&.harmonized_stages&.first.to_s
|
|
136
|
+
return nil if harmonized.empty?
|
|
137
|
+
return nil if published_stage?(stage)
|
|
138
|
+
|
|
139
|
+
"stage-#{harmonized}"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def published_stage?(stage)
|
|
143
|
+
stage.stage_code.to_s == "published"
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# A deliverable code owns the slot; the edition takes it only when there
|
|
147
|
+
# is none.
|
|
148
|
+
def deliverable_slot
|
|
149
|
+
return "ser" if maybe_of(identifier, :all_parts)
|
|
150
|
+
|
|
151
|
+
vap = vap_codes
|
|
152
|
+
return vap unless vap.empty?
|
|
153
|
+
|
|
154
|
+
edition = maybe_of(identifier, :edition)
|
|
155
|
+
return "" unless edition&.number
|
|
156
|
+
|
|
157
|
+
edition.render(context: URN_CONTEXT).to_s
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# A deliverable sits on the VAP layer, which is not always the outermost
|
|
161
|
+
# one: "IEC 60079-10-1:2020 CMV/COR1:2021" is a corrigendum wrapping the
|
|
162
|
+
# CMV, so the codes have to be looked for down the chain.
|
|
163
|
+
def vap_codes
|
|
164
|
+
codes = find_down(:vap)
|
|
165
|
+
return "" unless codes
|
|
166
|
+
|
|
167
|
+
Array(codes).map { |c| c.to_s.downcase }
|
|
168
|
+
.select { |c| DELIVERABLES.include?(c) }.join("-")
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# First non-empty value of `attribute` from the outermost identifier
|
|
172
|
+
# inwards.
|
|
173
|
+
def find_down(attribute)
|
|
174
|
+
id = identifier
|
|
175
|
+
while id
|
|
176
|
+
value = maybe_of(id, attribute)
|
|
177
|
+
return value unless value.nil? ||
|
|
178
|
+
(value.respond_to?(:empty?) && value.empty?)
|
|
179
|
+
|
|
180
|
+
id = maybe_of(id, :base) ||
|
|
181
|
+
Array(maybe_of(id, :identifiers)).first
|
|
182
|
+
end
|
|
183
|
+
nil
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def language_slot
|
|
187
|
+
langs = maybe_of(identifier, :languages)
|
|
188
|
+
return "" unless langs&.any?
|
|
189
|
+
|
|
190
|
+
langs.map { |l| l.code.to_s }.join("-")
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# A bare, undated, stage- and language-less all-parts series drops the
|
|
194
|
+
# trailing empty language slot, matching the canonical relaton-data-iec
|
|
195
|
+
# form urn:iec:std:iec:80000:::ser. A dated series, or one carrying a
|
|
196
|
+
# stage, keeps the slot.
|
|
197
|
+
def bare_series?(slots, adjuncts, language)
|
|
198
|
+
slots.last == "ser" && slots[5, 2].all? { |s| s.to_s.empty? } &&
|
|
199
|
+
adjuncts.empty? && language.empty?
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Walks the identifier tree for the amendment / corrigendum /
|
|
203
|
+
# interpretation-sheet layers, innermost first. A member of a
|
|
204
|
+
# consolidated identifier carries the "plus" relation marker, which the
|
|
205
|
+
# printed form spells "+".
|
|
206
|
+
def adjunct_slots(id)
|
|
207
|
+
return [] if id.nil?
|
|
208
|
+
|
|
209
|
+
case id.class.name.split("::").last
|
|
210
|
+
when "ConsolidatedIdentifier"
|
|
211
|
+
members = Array(id.identifiers)
|
|
212
|
+
adjunct_slots(members.first) +
|
|
213
|
+
members.drop(1).flat_map { |m| adjunct_fields(m, plus: true) }
|
|
214
|
+
when *ADJUNCT_TOKENS.keys
|
|
215
|
+
adjunct_slots(id.base) + adjunct_fields(id, plus: false)
|
|
216
|
+
else
|
|
217
|
+
adjunct_slots(id.respond_to?(:base) ? id.base : nil)
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def adjunct_fields(id, plus:)
|
|
222
|
+
token = ADJUNCT_TOKENS[id.class.name.split("::").last]
|
|
223
|
+
return adjunct_slots(id.respond_to?(:base) ? id.base : nil) unless token
|
|
224
|
+
|
|
225
|
+
[plus ? "plus" : "", token, id.number.to_s,
|
|
226
|
+
maybe_of(id, :date)&.render(context: URN_CONTEXT).to_s]
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# Not every IEC class declares every attribute, and a wrapper may not
|
|
230
|
+
# declare one its base does. The `respond_to?` guard covers the missing
|
|
231
|
+
# attribute; the rescue covers an attribute that exists but nil-chases
|
|
232
|
+
# while resolving — `SupplementIdentifier#number` runs `ensure_base` and
|
|
233
|
+
# reads through a base that may not be built yet. It is deliberately
|
|
234
|
+
# narrow: a broader rescue would swallow a real bug into a silently
|
|
235
|
+
# empty URN slot instead of failing loudly.
|
|
236
|
+
def maybe_of(id, attribute)
|
|
237
|
+
return nil unless id.respond_to?(attribute)
|
|
238
|
+
|
|
239
|
+
id.public_send(attribute)
|
|
240
|
+
rescue NoMethodError
|
|
241
|
+
nil
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Iec
|
|
5
|
+
# Parses IEC URNs in the legacy positional format (relaton-data-iec ground
|
|
6
|
+
# truth):
|
|
7
|
+
#
|
|
8
|
+
# urn:iec:std:{publisher}:{number}[-{part}]:{date}:{type}:{deliverable}:{language}[:{adjuncts}]
|
|
9
|
+
#
|
|
10
|
+
# Examples:
|
|
11
|
+
# - urn:iec:std:iec:60050:2011:::
|
|
12
|
+
# - urn:iec:std:iec:62547:2013:tr:: (type after date)
|
|
13
|
+
# - urn:iec:std:iec:60050-102:2007:::::amd:1:2017
|
|
14
|
+
# - urn:iec:std:iec:60034-16-3:1996:ts::fr (deliverable empty, language fr)
|
|
15
|
+
# - urn:iec:std:iec:80000:::ser (all-parts series)
|
|
16
|
+
#
|
|
17
|
+
# This is a port of relaton-iec's +urn_to_code+: the positional fields are
|
|
18
|
+
# reassembled into a code string which is then run through the text parser
|
|
19
|
+
# (+Identifier.parse+), so there is a single source of truth for building
|
|
20
|
+
# the identifier object.
|
|
21
|
+
class UrnParser
|
|
22
|
+
# Parse IEC URN string
|
|
23
|
+
# @param urn [String] URN string to parse
|
|
24
|
+
# @return [Identifier] parsed identifier
|
|
25
|
+
def self.parse(urn)
|
|
26
|
+
new.parse_urn(urn)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Parse URN string into identifier
|
|
30
|
+
# @param urn [String] URN string
|
|
31
|
+
# @return [Identifier] parsed identifier
|
|
32
|
+
def parse_urn(urn)
|
|
33
|
+
unless urn.start_with?("urn:iec:std:")
|
|
34
|
+
raise Pubid::UrnParser::Errors::ParseError, "Invalid IEC URN: #{urn}"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
code, lang, all_parts = urn_to_code(urn)
|
|
38
|
+
unless code
|
|
39
|
+
raise Pubid::UrnParser::Errors::ParseError,
|
|
40
|
+
"Invalid IEC URN: #{urn}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
id = Pubid::Iec::Identifier.parse(code)
|
|
44
|
+
id.all_parts = true if all_parts && id.class.attributes.key?(:all_parts)
|
|
45
|
+
# The language slot joins codes with a hyphen ("en-fr"). Building one
|
|
46
|
+
# Language from the whole field gave a single bogus language that
|
|
47
|
+
# rendered as "(en-fr)".
|
|
48
|
+
if lang && !lang.empty? && id.class.attributes.key?(:languages)
|
|
49
|
+
id.languages = lang.split("-").map do |code|
|
|
50
|
+
::Pubid::Components::Language.new(code: code)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
id
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
# Port of Relaton::Iec.urn_to_code. Reassembles the positional URN fields
|
|
59
|
+
# into a text code string. Returns [code, language, all_parts].
|
|
60
|
+
def urn_to_code(urn)
|
|
61
|
+
fields = urn.upcase.split(":")
|
|
62
|
+
return if fields.size < 5
|
|
63
|
+
|
|
64
|
+
head, num, date, type, deliv, lang = fields[3, 8]
|
|
65
|
+
all_parts = false
|
|
66
|
+
|
|
67
|
+
code = head.gsub("-", "/")
|
|
68
|
+
type_code = type_slot_to_code(type)
|
|
69
|
+
code += " #{type_code}" unless type_code.empty?
|
|
70
|
+
code += " #{num}"
|
|
71
|
+
code += ":#{date}" unless date.nil? || date.empty?
|
|
72
|
+
code += adjunct_to_code(fields[9..])
|
|
73
|
+
|
|
74
|
+
# "ser" marks an all-parts series rather than a deliverable suffix; it
|
|
75
|
+
# is signalled out-of-band (the code built from a series URN carries no
|
|
76
|
+
# part or date, so to_s renders "IEC NNNN (all parts)").
|
|
77
|
+
if deliv&.casecmp("SER")&.zero?
|
|
78
|
+
all_parts = true
|
|
79
|
+
elsif (edition = edition_slot_to_code(deliv))
|
|
80
|
+
code += " #{edition}"
|
|
81
|
+
elsif deliv && !deliv.empty?
|
|
82
|
+
code += " #{deliv}"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
[code, lang&.downcase, all_parts]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# The type slot holds either the legacy type token ("TS"), a stage
|
|
89
|
+
# ("STAGE-10.20"), or both ("TS-STAGE-50.00"). A stage is written back as
|
|
90
|
+
# the abbreviation the grammar accepts, resolved from the registry by
|
|
91
|
+
# type code and harmonized code — so the round trip is exact in both
|
|
92
|
+
# directions. See issue #360 item 4.
|
|
93
|
+
def type_slot_to_code(type)
|
|
94
|
+
return "" if type.nil? || type.empty?
|
|
95
|
+
|
|
96
|
+
match = /\A(?:([A-Z]+)-)?STAGE-([\d.]+)\z/.match(type)
|
|
97
|
+
return type unless match
|
|
98
|
+
|
|
99
|
+
type_code = (match[1] || "IS").downcase
|
|
100
|
+
stage = Pubid::Iec.all_typed_stages.find do |s|
|
|
101
|
+
s.type_code.to_s == type_code &&
|
|
102
|
+
s.harmonized_stages&.first.to_s == match[2]
|
|
103
|
+
end
|
|
104
|
+
return "" unless stage
|
|
105
|
+
|
|
106
|
+
stage.abbr.first.to_s
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# "ED-7" in the deliverable slot is an edition, not a deliverable code.
|
|
110
|
+
def edition_slot_to_code(deliv)
|
|
111
|
+
match = /\AED-(.+)\z/.match(deliv.to_s)
|
|
112
|
+
match && "ED#{match[1]}"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Port of Relaton::Iec.ajanct_to_code — recursively rebuilds amd/cor/ish
|
|
116
|
+
# adjuncts from (relation, type, number, date) quartets. A "PLUS"
|
|
117
|
+
# relation token (the consolidated "+" marker) yields "+"; otherwise "/".
|
|
118
|
+
def adjunct_to_code(fields)
|
|
119
|
+
return "" if fields.nil? || fields.empty?
|
|
120
|
+
|
|
121
|
+
rel, type, num, date = fields[0..3]
|
|
122
|
+
code = (rel.empty? ? "/" : "+") + type + num
|
|
123
|
+
code += ":#{date}" unless date.nil? || date.empty?
|
|
124
|
+
code + adjunct_to_code(fields[4..])
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
data/lib/pubid/iec.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Iec
|
|
5
|
+
autoload :Components, "#{__dir__}/iec/components"
|
|
6
|
+
|
|
7
|
+
extend Pubid::PrefixesSupport
|
|
8
|
+
|
|
9
|
+
# Sourced from the parser's publisher list (Components::Publisher::PUBLISHERS)
|
|
10
|
+
# minus the joint "ISO/IEC", which is contributed symmetrically via
|
|
11
|
+
# Pubid::JOINT_PREFIXES (along with IEC/ISO and ISO/IEC/IEEE).
|
|
12
|
+
PREFIXES = (Components::Publisher::PUBLISHERS.keys - ["ISO/IEC"]).freeze
|
|
13
|
+
|
|
14
|
+
autoload :Identifier, "#{__dir__}/iec/identifier"
|
|
15
|
+
autoload :Identifiers, "#{__dir__}/iec/identifiers"
|
|
16
|
+
autoload :SingleIdentifier, "#{__dir__}/iec/single_identifier"
|
|
17
|
+
autoload :SupplementIdentifier, "#{__dir__}/iec/supplement_identifier"
|
|
18
|
+
autoload :Parser, "#{__dir__}/iec/parser"
|
|
19
|
+
autoload :Builder, "#{__dir__}/iec/builder"
|
|
20
|
+
autoload :UrnParser, "#{__dir__}/iec/urn_parser"
|
|
21
|
+
autoload :UrnGenerator, "#{__dir__}/iec/urn_generator"
|
|
22
|
+
autoload :RenderingStyle, "#{__dir__}/iec/rendering_style"
|
|
23
|
+
autoload :Renderer, "#{__dir__}/iec/renderer"
|
|
24
|
+
|
|
25
|
+
def self.parse(identifier_string)
|
|
26
|
+
Identifier.parse(identifier_string)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.parse_urn(urn)
|
|
30
|
+
UrnParser.parse(urn)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
34
|
+
Identifier.format_registry.register(:human, renderer: Iec::Renderer)
|
|
35
|
+
|
|
36
|
+
def self.identifier_types
|
|
37
|
+
@identifier_types ||= Identifiers.constants
|
|
38
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
39
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
40
|
+
.select { |c| begin; c.type.is_a?(Hash); rescue NotImplementedError; false; end }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.all_typed_stages
|
|
44
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
45
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
46
|
+
klass.const_get(:TYPED_STAGES)
|
|
47
|
+
else
|
|
48
|
+
[]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.locate_type(code)
|
|
54
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.locate_stage(abbr)
|
|
58
|
+
abbr_str = abbr.to_s.upcase
|
|
59
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
Pubid::Registry.register(:iec, Pubid::Iec)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Aiee
|
|
6
|
+
# Builder for AIEE identifiers
|
|
7
|
+
class Builder
|
|
8
|
+
def build(parsed)
|
|
9
|
+
attributes = {}
|
|
10
|
+
|
|
11
|
+
# Extract and normalize publisher
|
|
12
|
+
# All AIEE variants (AIEE, A.I.E.E., A. I. E. E., IEEE-AIEE) normalize to "AIEE"
|
|
13
|
+
attributes[:publisher] = "AIEE"
|
|
14
|
+
|
|
15
|
+
# Extract and normalize type
|
|
16
|
+
type_str = extract_value(parsed[:type])
|
|
17
|
+
# Normalize compound types like "Standard No." to "No"
|
|
18
|
+
# Also normalize "Standard No" (without dot) to "No"
|
|
19
|
+
attributes[:type] = if type_str&.start_with?("Standard")
|
|
20
|
+
"No"
|
|
21
|
+
else
|
|
22
|
+
type_str
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Extract code
|
|
26
|
+
code_str = extract_number(parsed[:number])
|
|
27
|
+
if code_str
|
|
28
|
+
attributes[:code] = Components::Code.parse(code_str)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Extract year (convert to string for consistency)
|
|
32
|
+
year_str = extract_value(parsed[:year])
|
|
33
|
+
attributes[:year] = year_str&.to_s
|
|
34
|
+
|
|
35
|
+
# Extract month
|
|
36
|
+
month_str = extract_value(parsed[:month])
|
|
37
|
+
attributes[:month] = month_str if month_str
|
|
38
|
+
|
|
39
|
+
# Extract the long-form date separator ("," or ".") for rendering.
|
|
40
|
+
# Named `date_separator` on the identifier to avoid colliding with the
|
|
41
|
+
# CodeNumber code-part `separator`.
|
|
42
|
+
separator_str = extract_value(parsed[:separator])
|
|
43
|
+
attributes[:date_separator] = separator_str if separator_str
|
|
44
|
+
|
|
45
|
+
# Set original format based on parsed data
|
|
46
|
+
attributes[:original_format] = if separator_str || month_str
|
|
47
|
+
"long"
|
|
48
|
+
else
|
|
49
|
+
"short"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Create identifier
|
|
53
|
+
Identifier.new(**attributes)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
# Extract the number, flattening a "431 (105)" main-number/parenthetical
|
|
59
|
+
# subtree into a plain string. Without this, a Hash node leaks its raw
|
|
60
|
+
# Parslet inspect form (e.g. `{main_number: "431"@8, ...}`) into `to_s`.
|
|
61
|
+
def extract_number(value)
|
|
62
|
+
return extract_value(value) unless value.is_a?(Hash)
|
|
63
|
+
|
|
64
|
+
main = extract_value(value[:main_number])
|
|
65
|
+
paren = value[:parenthetical]
|
|
66
|
+
alt = paren.is_a?(Hash) ? extract_value(paren[:alt_number]) : nil
|
|
67
|
+
alt ? "#{main} (#{alt})" : main
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def extract_value(value)
|
|
71
|
+
return nil if value.nil?
|
|
72
|
+
return nil if value.is_a?(Array) && value.empty?
|
|
73
|
+
|
|
74
|
+
if value.is_a?(Array)
|
|
75
|
+
joined = value.join
|
|
76
|
+
return joined.length.positive? ? joined : nil
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
str_value = value.to_s.strip
|
|
80
|
+
str_value.length.positive? ? str_value : nil
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Aiee
|
|
6
|
+
# AIEE identifiers (American Institute of Electrical Engineers: 1884-1963).
|
|
7
|
+
#
|
|
8
|
+
# Reparented onto Pubid::Ieee::Identifier + the CodeNumber mixin so AIEE
|
|
9
|
+
# shares the flat split-column serialization (number/prefix/parts/
|
|
10
|
+
# separator), a polymorphic `_type`, `#root`, and from_hash routing with
|
|
11
|
+
# every other IEEE type. Previously it descended from bare
|
|
12
|
+
# Lutaml::Model::Serializable and serialized a nested `code` object with no
|
|
13
|
+
# `_type`, so Pubid::Ieee::Identifier.from_hash could not route back to
|
|
14
|
+
# this class and dropped the code entirely — every AIEE row failed the
|
|
15
|
+
# relaton index-v2 round-trip gate and had a nil `root.number`.
|
|
16
|
+
#
|
|
17
|
+
# The date long-form separator is named `date_separator` (not `separator`)
|
|
18
|
+
# to avoid colliding with the CodeNumber code-part `separator`.
|
|
19
|
+
class Identifier < Pubid::Ieee::Identifier
|
|
20
|
+
include Pubid::Ieee::Identifiers::CodeNumber
|
|
21
|
+
|
|
22
|
+
attribute :publisher, :string, default: -> { "AIEE" }
|
|
23
|
+
# AIEE carries no implicit type keyword, so override the base's "Std"
|
|
24
|
+
# default (else "AIEE 11-1937" would render as "AIEE Std 11-1937").
|
|
25
|
+
attribute :type, :string, default: -> {}
|
|
26
|
+
attribute :date_separator, :string # "," or "." for long-form dates
|
|
27
|
+
attribute :original_format, :string # "short"/"long" (preserves parsed format)
|
|
28
|
+
|
|
29
|
+
# A distinct polymorphic name so from_hash routes to AIEE. The derived
|
|
30
|
+
# default (last name segment "Identifier") would be
|
|
31
|
+
# "pubid:ieee:identifier", colliding with the base class.
|
|
32
|
+
def self.polymorphic_name
|
|
33
|
+
"pubid:ieee:aiee"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Parse AIEE identifier string
|
|
37
|
+
def self.parse(input)
|
|
38
|
+
parsed = Parser.new.parse(input)
|
|
39
|
+
Builder.new.build(parsed)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def to_s(date_format: nil, trademark: false, **opts)
|
|
43
|
+
result = [publisher]
|
|
44
|
+
result << type if type
|
|
45
|
+
result << code.to_s if code
|
|
46
|
+
|
|
47
|
+
base = result.join(" ")
|
|
48
|
+
|
|
49
|
+
# IEEE attaches the mark to the number, before the date suffix
|
|
50
|
+
# ("AIEE No 13™-1930").
|
|
51
|
+
if trademark
|
|
52
|
+
base += Pubid::Ieee.trademark_symbol_for(code_obj&.number,
|
|
53
|
+
code_obj&.prefix,
|
|
54
|
+
publishers: [publisher])
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Priority: explicit parameter > original_format > format auto-detect
|
|
58
|
+
format = date_format&.to_s || original_format
|
|
59
|
+
format ||= month || date_separator ? "long" : "short"
|
|
60
|
+
|
|
61
|
+
if year
|
|
62
|
+
case format
|
|
63
|
+
when "short", :short
|
|
64
|
+
base += "-#{year}"
|
|
65
|
+
when "long", :long
|
|
66
|
+
sep = date_separator || "," # Default to comma for long form
|
|
67
|
+
base += "#{sep} #{"#{month} " if month}#{year}"
|
|
68
|
+
else
|
|
69
|
+
base += if date_separator
|
|
70
|
+
"#{date_separator} #{"#{month} " if month}#{year}"
|
|
71
|
+
elsif month
|
|
72
|
+
", #{month} #{year}"
|
|
73
|
+
else
|
|
74
|
+
"-#{year}"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# The descriptive relationships narrative is deliberately kept out of
|
|
80
|
+
# to_s (an identifier string must stay bounded — it is used as a
|
|
81
|
+
# document number/filename downstream). It stays reachable on
|
|
82
|
+
# `relationships`.
|
|
83
|
+
|
|
84
|
+
annotate_plain_render(base, **opts)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|