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,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ccsds
|
|
5
|
+
# Parses CCSDS URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits: `urn:ccsds:{code}` where the code is the full
|
|
8
|
+
# identifier suffix after "CCSDS " (e.g., "120.0-G-4").
|
|
9
|
+
#
|
|
10
|
+
# Examples:
|
|
11
|
+
# - urn:ccsds:120.0-G-4 → CCSDS 120.0-G-4
|
|
12
|
+
# - urn:ccsds:100.0-G-1-S → CCSDS 100.0-G-1-S
|
|
13
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
14
|
+
def parse_urn(urn)
|
|
15
|
+
body = strip_namespace(urn)
|
|
16
|
+
flavor_parse("CCSDS #{body}")
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/pubid/ccsds.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ccsds
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# Sole CCSDS publisher token (see the parser's `ccsds_prefix` rule).
|
|
8
|
+
PREFIXES = ["CCSDS"].freeze
|
|
9
|
+
|
|
10
|
+
autoload :Builder, "#{__dir__}/ccsds/builder"
|
|
11
|
+
autoload :Identifier, "#{__dir__}/ccsds/identifier"
|
|
12
|
+
autoload :Identifiers, "#{__dir__}/ccsds/identifiers"
|
|
13
|
+
autoload :Parser, "#{__dir__}/ccsds/parser"
|
|
14
|
+
autoload :SingleIdentifier, "#{__dir__}/ccsds/single_identifier"
|
|
15
|
+
autoload :SupplementIdentifier, "#{__dir__}/ccsds/supplement_identifier"
|
|
16
|
+
autoload :UrnGenerator, "#{__dir__}/ccsds/urn_generator"
|
|
17
|
+
autoload :UrnParser, "#{__dir__}/ccsds/urn_parser"
|
|
18
|
+
|
|
19
|
+
def self.parse(identifier)
|
|
20
|
+
Identifier.parse(identifier)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Auto-discover all identifier types from the Identifiers namespace.
|
|
24
|
+
# CCSDS identifier classes extend Lutaml::Model::Serializable directly
|
|
25
|
+
# but do define self.type returning a Hash.
|
|
26
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
27
|
+
def self.identifier_types
|
|
28
|
+
@identifier_types ||= Identifiers.constants
|
|
29
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
30
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
31
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Build typed stage index from identifier types
|
|
35
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
36
|
+
def self.all_typed_stages
|
|
37
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
38
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
39
|
+
klass.const_get(:TYPED_STAGES)
|
|
40
|
+
else
|
|
41
|
+
[]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Lookup: type code -> identifier class
|
|
47
|
+
# @param code [String, Symbol] the type key to find
|
|
48
|
+
# @return [Class, nil] the matching identifier class
|
|
49
|
+
def self.locate_type(code)
|
|
50
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Lookup: abbreviation -> typed stage
|
|
54
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
55
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
56
|
+
def self.locate_stage(abbr)
|
|
57
|
+
abbr_str = abbr.to_s.upcase
|
|
58
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Register Uccsds flavor with the registry
|
|
64
|
+
Pubid::Registry.register(:ccsds, Pubid::Ccsds)
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module CenCenelec
|
|
5
|
+
class Builder < Pubid::Builder::Base
|
|
6
|
+
def self.build(parsed_data)
|
|
7
|
+
new.build(parsed_data)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def build(data)
|
|
11
|
+
data = flatten_array(data) if data.is_a?(Array)
|
|
12
|
+
|
|
13
|
+
# Store data for access in cast method
|
|
14
|
+
@data = data
|
|
15
|
+
|
|
16
|
+
# Check if this is a fragment identifier (AMD + FRAG)
|
|
17
|
+
if data[:fragment_number]
|
|
18
|
+
return build_fragment_identifier(data)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Check if this is an adopted identifier (EN ISO, EN IEC, etc.)
|
|
22
|
+
if data[:adopted_string]
|
|
23
|
+
# Special case: ENV can adopt ISO/IEC standards
|
|
24
|
+
if data[:publisher]&.to_s == "ENV"
|
|
25
|
+
return build_env_adopted_identifier(data)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
return build_adopted_identifier(data)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Check if this is a standalone amendment/corrigendum (slash separator)
|
|
32
|
+
if has_slash_supplements?(data)
|
|
33
|
+
return build_standalone_supplement(data)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Implicit adoption: when an EN has no explicit "IEC" prefix but
|
|
37
|
+
# the number falls in the IEC range (60000-79999), treat it as an
|
|
38
|
+
# adoption of the corresponding IEC standard. The lower ISO-only
|
|
39
|
+
# range (1-59999) is intentionally NOT mapped here — too many
|
|
40
|
+
# existing CEN publications (EN Guide N, EN N as a real CEN-assigned
|
|
41
|
+
# number) would change type. Callers who want explicit adoption
|
|
42
|
+
# can still write "EN ISO 12345".
|
|
43
|
+
# (https://github.com/pubid/pubid/issues/249)
|
|
44
|
+
# Skip when parts are present — they would be lost when we rebuild
|
|
45
|
+
# the identifier from just the base number.
|
|
46
|
+
if data[:publisher]&.to_s == "EN" && !data[:adopted_string] &&
|
|
47
|
+
data[:parts].to_a.empty? &&
|
|
48
|
+
(adopted = build_implicit_adoption(data))
|
|
49
|
+
return adopted
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Extract supplements before building base identifier (only plus/bundled)
|
|
53
|
+
supplements_data = extract_supplements(data)
|
|
54
|
+
|
|
55
|
+
# Determine identifier class using the module's lookup helpers
|
|
56
|
+
identifier = locate_identifier_klass(data).new
|
|
57
|
+
assign_attributes(identifier, data)
|
|
58
|
+
|
|
59
|
+
# Wrap with consolidated if supplements present (plus/bundled only)
|
|
60
|
+
if supplements_data.any?
|
|
61
|
+
wrap_with_consolidated(identifier, supplements_data)
|
|
62
|
+
else
|
|
63
|
+
identifier
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
|
|
69
|
+
def build_fragment_identifier(data)
|
|
70
|
+
# Build base identifier first (without amendment/fragment)
|
|
71
|
+
base_data = data.dup
|
|
72
|
+
base_data.delete(:amendment_number)
|
|
73
|
+
base_data.delete(:fragment_number)
|
|
74
|
+
|
|
75
|
+
base = locate_identifier_klass(base_data).new
|
|
76
|
+
assign_attributes(base, base_data)
|
|
77
|
+
|
|
78
|
+
# Build Amendment identifier wrapping the base
|
|
79
|
+
amendment = Identifiers::Amendment.new(
|
|
80
|
+
base: base,
|
|
81
|
+
amendment_number: data[:amendment_number].to_s,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
# Build Fragment wrapping the amendment
|
|
85
|
+
Identifiers::Fragment.new(
|
|
86
|
+
base: amendment,
|
|
87
|
+
fragment_number: data[:fragment_number].to_s,
|
|
88
|
+
)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def locate_identifier_klass(parsed_hash)
|
|
92
|
+
# Special case: Use adopted_european_norm for adopted identifiers
|
|
93
|
+
return Identifiers::AdoptedEuropeanNorm if parsed_hash[:adopted_string]
|
|
94
|
+
|
|
95
|
+
# Check if publisher is actually a type code (CWA, HD, ES, CR, ENV act as publisher)
|
|
96
|
+
publisher_str = parsed_hash[:publisher].to_s
|
|
97
|
+
if %w[CWA HD ES CR ENV].include?(publisher_str)
|
|
98
|
+
typed_stage = CenCenelec.locate_stage(publisher_str)
|
|
99
|
+
if (klass = CenCenelec.locate_type(typed_stage.type_code))
|
|
100
|
+
return klass
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Use type or stage to determine class via the module's registry
|
|
105
|
+
type_or_stage = parsed_hash[:type_with_stage] || parsed_hash[:type] || parsed_hash[:stage] || ""
|
|
106
|
+
typed_stage = CenCenelec.locate_stage(type_or_stage) || CenCenelec::DEFAULT_TYPED_STAGE
|
|
107
|
+
CenCenelec.locate_type(typed_stage.type_code) || Identifiers::EuropeanNorm
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def cast(type, value)
|
|
111
|
+
case type
|
|
112
|
+
when :type_with_stage
|
|
113
|
+
# Lookup from register
|
|
114
|
+
typed_stage = CenCenelec.locate_stage(value.to_s) || CenCenelec::DEFAULT_TYPED_STAGE
|
|
115
|
+
{
|
|
116
|
+
stage: typed_stage.to_stage,
|
|
117
|
+
type: typed_stage.to_type,
|
|
118
|
+
typed_stage: typed_stage,
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
when :publisher
|
|
122
|
+
Components::Publisher.new(body: value.to_s)
|
|
123
|
+
|
|
124
|
+
when :copublisher
|
|
125
|
+
# Map singular :copublisher to :copublishers array
|
|
126
|
+
{ copublishers: [Components::Publisher.new(body: value.to_s)] }
|
|
127
|
+
|
|
128
|
+
when :copublishers
|
|
129
|
+
# Handle array of copublishers
|
|
130
|
+
Array(value).map do |v|
|
|
131
|
+
Components::Publisher.new(body: v[:copublisher].to_s)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
when :number
|
|
135
|
+
value.to_s
|
|
136
|
+
|
|
137
|
+
when :parts
|
|
138
|
+
# Extract first part, preserve full multi-level part string
|
|
139
|
+
parts_array = Array(value)
|
|
140
|
+
if parts_array.any?
|
|
141
|
+
# Get the part string - it may contain multiple dashes like "5-1-1"
|
|
142
|
+
part_str = parts_array.first[:part].to_s
|
|
143
|
+
|
|
144
|
+
# Store the full part value for multi-level parts
|
|
145
|
+
{ part: part_str }
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
when :part
|
|
149
|
+
value[:part].to_s if value.is_a?(Hash)
|
|
150
|
+
|
|
151
|
+
when :year, :date
|
|
152
|
+
# Check if month is present in the data and include it
|
|
153
|
+
month_val = @data[:month]&.to_s
|
|
154
|
+
date_attrs = { year: value.to_s }
|
|
155
|
+
date_attrs[:month] = month_val if month_val && !month_val.empty?
|
|
156
|
+
{ date: Components::Date.new(**date_attrs) }
|
|
157
|
+
|
|
158
|
+
when :month
|
|
159
|
+
# Month is handled together with year, so skip it here
|
|
160
|
+
nil
|
|
161
|
+
|
|
162
|
+
when :type
|
|
163
|
+
Components::Type.new(abbr: value.to_s)
|
|
164
|
+
|
|
165
|
+
when :stage
|
|
166
|
+
# Lookup stage in TYPED_STAGES register
|
|
167
|
+
typed_stage = CenCenelec.locate_stage(value.to_s) || CenCenelec::DEFAULT_TYPED_STAGE
|
|
168
|
+
{
|
|
169
|
+
stage: typed_stage.to_stage,
|
|
170
|
+
typed_stage: typed_stage,
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
when :edition
|
|
174
|
+
value.to_s
|
|
175
|
+
|
|
176
|
+
when :adopted_string
|
|
177
|
+
# Don't cast here, handled in build_adopted_identifier
|
|
178
|
+
nil
|
|
179
|
+
|
|
180
|
+
when :supplements
|
|
181
|
+
# Handled separately by extract_supplements
|
|
182
|
+
nil
|
|
183
|
+
|
|
184
|
+
else
|
|
185
|
+
value
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def build_adopted_identifier(data)
|
|
190
|
+
# Parse the adopted identifier string with appropriate flavor
|
|
191
|
+
adopted_str = data[:adopted_string]&.to_s&.strip
|
|
192
|
+
return nil unless adopted_str && !adopted_str.empty?
|
|
193
|
+
|
|
194
|
+
adopted_id = if adopted_str.start_with?("ISO/IEC") || adopted_str.include?("ISO/IEC")
|
|
195
|
+
Pubid::Iso.parse(adopted_str)
|
|
196
|
+
elsif adopted_str.start_with?("ISO")
|
|
197
|
+
Pubid::Iso.parse(adopted_str)
|
|
198
|
+
elsif adopted_str.start_with?("IEC")
|
|
199
|
+
Pubid::Iec.parse(adopted_str)
|
|
200
|
+
elsif adopted_str.start_with?("CISPR")
|
|
201
|
+
# CISPR might need specific handling
|
|
202
|
+
nil
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# Build publishers array (EN is default for adoptions)
|
|
206
|
+
publishers = []
|
|
207
|
+
publishers << data[:publisher].to_s if data[:publisher]
|
|
208
|
+
|
|
209
|
+
# Handle copublishers array
|
|
210
|
+
if data[:copublishers]
|
|
211
|
+
Array(data[:copublishers]).each do |copub|
|
|
212
|
+
publishers << copub[:copublisher].to_s
|
|
213
|
+
end
|
|
214
|
+
elsif data[:copublisher]
|
|
215
|
+
publishers << data[:copublisher].to_s
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
publishers = ["EN"] if publishers.empty?
|
|
219
|
+
|
|
220
|
+
Identifiers::AdoptedEuropeanNorm.new(
|
|
221
|
+
publisher: publishers,
|
|
222
|
+
adopted_identifier: adopted_id,
|
|
223
|
+
)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Implicit adoption by number range. Returns an AdoptedEuropeanNorm
|
|
227
|
+
# wrapping the IEC identifier that the EN number implies, or nil if the
|
|
228
|
+
# number doesn't fall in the IEC range. Limited to IEC range only —
|
|
229
|
+
# see the call site comment for why the ISO range is excluded.
|
|
230
|
+
def build_implicit_adoption(data)
|
|
231
|
+
number = data[:number].to_s
|
|
232
|
+
num_str = number.to_s.strip
|
|
233
|
+
return nil unless num_str.match?(/\A\d{1,6}\z/)
|
|
234
|
+
|
|
235
|
+
num = num_str.to_i
|
|
236
|
+
return nil unless (60_000..79_999).cover?(num)
|
|
237
|
+
|
|
238
|
+
Identifiers::AdoptedEuropeanNorm.new(
|
|
239
|
+
publisher: ["EN"],
|
|
240
|
+
adopted_identifier: Pubid::Iec.parse("IEC #{num_str}"),
|
|
241
|
+
)
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def build_env_adopted_identifier(data)
|
|
245
|
+
# Parse the adopted identifier string
|
|
246
|
+
adopted_str = data[:adopted_string]&.to_s&.strip
|
|
247
|
+
return nil unless adopted_str && !adopted_str.empty?
|
|
248
|
+
|
|
249
|
+
adopted_id = if adopted_str.start_with?("ISO/IEC") || adopted_str.include?("ISO/IEC")
|
|
250
|
+
Pubid::Iso.parse(adopted_str)
|
|
251
|
+
elsif adopted_str.start_with?("ISO")
|
|
252
|
+
Pubid::Iso.parse(adopted_str)
|
|
253
|
+
elsif adopted_str.start_with?("IEC")
|
|
254
|
+
Pubid::Iec.parse(adopted_str)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
Identifiers::EuropeanPrestandard.new(
|
|
258
|
+
adopted_identifier: adopted_id,
|
|
259
|
+
)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def wrap_with_consolidated(base, supplements_data)
|
|
263
|
+
supplement_ids = supplements_data.map do |supp|
|
|
264
|
+
if supp[:type] == :amendment
|
|
265
|
+
Identifiers::Amendment.new(
|
|
266
|
+
base: base,
|
|
267
|
+
amendment_number: supp[:number],
|
|
268
|
+
amendment_year: supp[:year]&.to_i,
|
|
269
|
+
)
|
|
270
|
+
else
|
|
271
|
+
corr_attrs = {
|
|
272
|
+
base: base,
|
|
273
|
+
corrigendum_number: supp[:number],
|
|
274
|
+
corrigendum_year: supp[:year]&.to_i,
|
|
275
|
+
}
|
|
276
|
+
corr_attrs[:corrigendum_month] = supp[:month] if supp[:month]
|
|
277
|
+
Identifiers::Corrigendum.new(**corr_attrs)
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
Identifiers::ConsolidatedIdentifier.new(
|
|
282
|
+
identifiers: [base] + supplement_ids,
|
|
283
|
+
)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def extract_supplements(data)
|
|
287
|
+
return [] unless data[:supplements]
|
|
288
|
+
|
|
289
|
+
supps_array = data[:supplements]
|
|
290
|
+
return [] if supps_array.empty?
|
|
291
|
+
|
|
292
|
+
# Only extract supplements with PLUS separator (bundled)
|
|
293
|
+
# Slash-separated supplements are standalone identifiers, not bundled
|
|
294
|
+
supps_array.select do |s|
|
|
295
|
+
supp_data = s.is_a?(Hash) && s[:supplement] ? s[:supplement] : s
|
|
296
|
+
# Only include if it has plus separator
|
|
297
|
+
supp_data[:amd_sep_plus]
|
|
298
|
+
end.map do |s|
|
|
299
|
+
supp_data = s.is_a?(Hash) && s[:supplement] ? s[:supplement] : s
|
|
300
|
+
|
|
301
|
+
# Extract year and month if present
|
|
302
|
+
year_val = (supp_data[:amd_year] || supp_data[:year])&.to_s
|
|
303
|
+
month_val = supp_data[:month]&.to_s
|
|
304
|
+
|
|
305
|
+
{
|
|
306
|
+
type: supp_data[:amd_number] ? :amendment : :corrigendum,
|
|
307
|
+
number: (supp_data[:amd_number] || supp_data[:cor_number])&.to_s,
|
|
308
|
+
year: year_val,
|
|
309
|
+
month: month_val,
|
|
310
|
+
}
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def has_slash_supplements?(data)
|
|
315
|
+
return false unless data[:supplements]
|
|
316
|
+
|
|
317
|
+
supps_array = data[:supplements]
|
|
318
|
+
return false if supps_array.empty?
|
|
319
|
+
|
|
320
|
+
# Check if any supplement has slash separator
|
|
321
|
+
supps_array.any? do |s|
|
|
322
|
+
supp_data = s.is_a?(Hash) && s[:supplement] ? s[:supplement] : s
|
|
323
|
+
supp_data[:amd_sep_slash]
|
|
324
|
+
end
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
def build_standalone_supplement(data)
|
|
328
|
+
# Build base identifier first (without supplements)
|
|
329
|
+
base_data = data.dup
|
|
330
|
+
base_data.delete(:supplements)
|
|
331
|
+
base = locate_identifier_klass(base_data).new
|
|
332
|
+
assign_attributes(base, base_data)
|
|
333
|
+
|
|
334
|
+
# Get the first supplement (slash means only one supplement)
|
|
335
|
+
supp_array = data[:supplements]
|
|
336
|
+
supp_data = supp_array.first
|
|
337
|
+
supp_data = supp_data[:supplement] if supp_data.is_a?(Hash) && supp_data[:supplement]
|
|
338
|
+
|
|
339
|
+
# Build appropriate supplement identifier
|
|
340
|
+
if supp_data[:amd_number]
|
|
341
|
+
Identifiers::Amendment.new(
|
|
342
|
+
base: base,
|
|
343
|
+
amendment_number: supp_data[:amd_number].to_s,
|
|
344
|
+
amendment_year: supp_data[:amd_year]&.to_i,
|
|
345
|
+
)
|
|
346
|
+
else
|
|
347
|
+
corr_attrs = {
|
|
348
|
+
base: base,
|
|
349
|
+
corrigendum_number: supp_data[:cor_number]&.to_s,
|
|
350
|
+
corrigendum_year: (supp_data[:cor_year] || supp_data[:year])&.to_i,
|
|
351
|
+
}
|
|
352
|
+
month_val = supp_data[:month]&.to_s
|
|
353
|
+
if month_val && !month_val.empty?
|
|
354
|
+
corr_attrs[:corrigendum_month] =
|
|
355
|
+
month_val
|
|
356
|
+
end
|
|
357
|
+
Identifiers::Corrigendum.new(**corr_attrs)
|
|
358
|
+
end
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module CenCenelec
|
|
5
|
+
# Common base class for all CEN/CENELEC identifiers. CEN/CENELEC has a split
|
|
6
|
+
# hierarchy — some concrete types descend from Identifiers::Base, others from
|
|
7
|
+
# SingleIdentifier — so this class is the shared parent of BOTH, making every
|
|
8
|
+
# CEN/CENELEC identifier `is_a?(Pubid::CenCenelec::Identifier)` natively (and
|
|
9
|
+
# giving them the shared polymorphic `from_hash`). No facade needed.
|
|
10
|
+
class Identifier < ::Pubid::Identifier
|
|
11
|
+
# `number`/`part`/`subpart` are declared here rather than inherited as a
|
|
12
|
+
# Components::Code: CEN/CENELEC stores a bare string in every one of them.
|
|
13
|
+
# This class is the shared parent of BOTH branches, so one declaration
|
|
14
|
+
# here replaces the three that used to disagree (Identifiers::Base said
|
|
15
|
+
# :string, SingleIdentifier inherited Code, SupplementIdentifier declared
|
|
16
|
+
# Code again). Declaring here is safe because this body lives in one file
|
|
17
|
+
# and is never reopened, so every subclass body opens after it has run
|
|
18
|
+
# (lutaml deep-dups the parent attribute table at class-definition time).
|
|
19
|
+
attribute :number, :string
|
|
20
|
+
attribute :part, :string
|
|
21
|
+
attribute :subpart, :string
|
|
22
|
+
|
|
23
|
+
def self.parse(identifier)
|
|
24
|
+
unless identifier.is_a?(String)
|
|
25
|
+
raise Pubid::Errors::InvalidInputError,
|
|
26
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
30
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
parsed = Parser.parse(identifier)
|
|
34
|
+
Builder.new.build(parsed)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module CenCenelec
|
|
5
|
+
module Identifiers
|
|
6
|
+
# AdoptedEuropeanNorm wraps ISO/IEC identifiers
|
|
7
|
+
# Example: "EN ISO 8601:2019" where ISO 8601:2019 is an ISO identifier object
|
|
8
|
+
class AdoptedEuropeanNorm < EuropeanNorm
|
|
9
|
+
attribute :adopted_identifier, Base, polymorphic: true # ISO/IEC/IEEE object
|
|
10
|
+
|
|
11
|
+
# Override self.type to return nil so that AdoptedEuropeanNorm is NOT
|
|
12
|
+
# registered as a type in CenCenelec.identifier_types. The class is a
|
|
13
|
+
# polymorphic wrapper that wraps an adopted ISO/IEC identifier under an
|
|
14
|
+
# EN publisher; it is constructed explicitly by Builder#build_adopted_identifier,
|
|
15
|
+
# not selected via type-code lookup. Returning nil here prevents
|
|
16
|
+
# identifier_types auto-discovery from shadowing EuropeanNorm (which
|
|
17
|
+
# also reports :en) in CenCenelec.locate_type(:en).
|
|
18
|
+
def self.type
|
|
19
|
+
nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Delegate common methods to adopted identifier
|
|
23
|
+
def number
|
|
24
|
+
adopted_identifier&.number
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def year
|
|
28
|
+
adopted_identifier&.year if adopted_identifier&.methods&.include?(:year)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def date
|
|
32
|
+
adopted_identifier&.date if adopted_identifier&.methods&.include?(:date)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def parts
|
|
36
|
+
adopted_identifier&.parts if adopted_identifier&.methods&.include?(:parts)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def part
|
|
40
|
+
adopted_identifier&.part if adopted_identifier&.methods&.include?(:part)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module CenCenelec
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Amendment Identifier
|
|
7
|
+
# Contains a base identifier plus amendment parameters
|
|
8
|
+
class Amendment < Base
|
|
9
|
+
attribute :base, Base, polymorphic: true
|
|
10
|
+
attribute :amendment_number, :string
|
|
11
|
+
attribute :amendment_year, :integer
|
|
12
|
+
|
|
13
|
+
def publisher
|
|
14
|
+
base&.publisher
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module CenCenelec
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Base CEN identifier (one of two roots; see Pubid::CenCenelec::Identifier).
|
|
7
|
+
# Format: {PUBLISHER} NUMBER[-PART]:YEAR
|
|
8
|
+
class Base < Pubid::CenCenelec::Identifier
|
|
9
|
+
# Generate URN for this identifier
|
|
10
|
+
#
|
|
11
|
+
# @return [String] URN representation
|
|
12
|
+
|
|
13
|
+
attribute :publisher, :string, collection: true # EN, CEN, CLC, etc.
|
|
14
|
+
attribute :type, :string # TR, TS, Guide
|
|
15
|
+
# `number` is inherited as a :string from Pubid::CenCenelec::Identifier;
|
|
16
|
+
# a same-type redeclaration here is the determinism landmine in
|
|
17
|
+
# miniature, and it moves the generated accessor onto this class.
|
|
18
|
+
attribute :parts, :string, collection: true
|
|
19
|
+
attribute :year, :integer
|
|
20
|
+
attribute :stage, :string # prEN, FprEN
|
|
21
|
+
attribute :supplements, :string, collection: true # Amendments and corrigenda
|
|
22
|
+
attribute :adopted_identifier, Base, polymorphic: true # Nested identifier object (ISO, IEC, etc.)
|
|
23
|
+
attribute :edition, :string # Edition number
|
|
24
|
+
|
|
25
|
+
def ==(other)
|
|
26
|
+
return false unless other.is_a?(Base)
|
|
27
|
+
|
|
28
|
+
publisher == other.publisher && number == other.number &&
|
|
29
|
+
parts == other.parts && year == other.year
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module CenCenelec
|
|
7
|
+
module Identifiers
|
|
8
|
+
class CenReport < SingleIdentifier
|
|
9
|
+
attribute :type, Components::Type, default: -> { self.class.type[:key] }
|
|
10
|
+
|
|
11
|
+
TYPED_STAGES = [
|
|
12
|
+
Components::TypedStage.new(
|
|
13
|
+
code: :pubcr,
|
|
14
|
+
stage_code: :published,
|
|
15
|
+
type_code: :cr,
|
|
16
|
+
abbr: ["CR"],
|
|
17
|
+
name: "CEN Report",
|
|
18
|
+
harmonized_stages: %w[60.00 60.60],
|
|
19
|
+
),
|
|
20
|
+
].freeze
|
|
21
|
+
|
|
22
|
+
def self.type
|
|
23
|
+
{ key: :cr,
|
|
24
|
+
web: :cen_report, title: "CEN Report", short: "CR" }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require "lutaml/model"
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Pubid
|
|
5
|
+
module CenCenelec
|
|
6
|
+
module Identifiers
|
|
7
|
+
class CenWorkshopAgreement < SingleIdentifier
|
|
8
|
+
attribute :type, Components::Type, default: -> { self.class.type[:key] }
|
|
9
|
+
|
|
10
|
+
TYPED_STAGES = [
|
|
11
|
+
Components::TypedStage.new(
|
|
12
|
+
code: :pubcwa,
|
|
13
|
+
stage_code: :published,
|
|
14
|
+
type_code: :cwa,
|
|
15
|
+
abbr: ["CWA"],
|
|
16
|
+
name: "CEN Workshop Agreement",
|
|
17
|
+
harmonized_stages: %w[60.00 60.60],
|
|
18
|
+
),
|
|
19
|
+
].freeze
|
|
20
|
+
|
|
21
|
+
def self.type
|
|
22
|
+
{ key: :cwa,
|
|
23
|
+
web: :cen_workshop_agreement, title: "CEN Workshop Agreement", short: "CWA" }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module CenCenelec
|
|
7
|
+
module Identifiers
|
|
8
|
+
class CenelecHarmonizationDocument < SingleIdentifier
|
|
9
|
+
attribute :type, Components::Type, default: -> { self.class.type[:key] }
|
|
10
|
+
|
|
11
|
+
TYPED_STAGES = [
|
|
12
|
+
Components::TypedStage.new(
|
|
13
|
+
code: :pubhd,
|
|
14
|
+
stage_code: :published,
|
|
15
|
+
type_code: :hd,
|
|
16
|
+
abbr: ["HD"],
|
|
17
|
+
name: "CENELEC Harmonization Document",
|
|
18
|
+
harmonized_stages: %w[60.00 60.60],
|
|
19
|
+
),
|
|
20
|
+
].freeze
|
|
21
|
+
|
|
22
|
+
def self.type
|
|
23
|
+
{ key: :hd, title: "CENELEC Harmonization Document", short: "HD" }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|