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,187 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Builder
|
|
5
|
+
# Base class for all flavor-specific builders.
|
|
6
|
+
#
|
|
7
|
+
# Provides the shared build loop that converts parsed data into identifier
|
|
8
|
+
# objects. Flavors subclass and override:
|
|
9
|
+
# - +select_class(data)+ to dispatch by data shape (default returns
|
|
10
|
+
# +default_identifier_class+).
|
|
11
|
+
# - +cast(key, value)+ to transform raw parsed values into components.
|
|
12
|
+
# - +handle_key(identifier, key, value)+ for non-attribute side effects.
|
|
13
|
+
#
|
|
14
|
+
# The build loop:
|
|
15
|
+
# 1. Flattens array-of-hashes input (from Parslet transforms)
|
|
16
|
+
# 2. Asks +select_class(data)+ for the identifier class
|
|
17
|
+
# 3. Iterates each key-value pair
|
|
18
|
+
# 4. Calls +cast(key, value)+ to convert raw values to component objects
|
|
19
|
+
# 5. Assigns the result to the identifier via setter
|
|
20
|
+
# 6. Silently skips unknown attributes
|
|
21
|
+
class Base
|
|
22
|
+
attr_reader :identifier
|
|
23
|
+
|
|
24
|
+
def initialize(identifier_class = nil)
|
|
25
|
+
@identifier_class = identifier_class
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def build(data)
|
|
29
|
+
data = flatten_array(data) if data.is_a?(Array)
|
|
30
|
+
identifier_class = @identifier_class || select_class(data)
|
|
31
|
+
identifier = identifier_class.new
|
|
32
|
+
assign_attributes(identifier, data)
|
|
33
|
+
identifier
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
# Override in subclasses to dispatch to a specific identifier class
|
|
39
|
+
# based on the shape of the parsed data (type code, supplement marker,
|
|
40
|
+
# etc.). Defaults to +default_identifier_class+.
|
|
41
|
+
def select_class(_data)
|
|
42
|
+
default_identifier_class
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Override in subclasses to convert raw parsed values to component objects.
|
|
46
|
+
# Return a Hash to assign multiple attributes, or a single value.
|
|
47
|
+
# Return nil to skip the assignment.
|
|
48
|
+
def cast(_key, value)
|
|
49
|
+
value
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def default_identifier_class
|
|
53
|
+
raise NotImplementedError,
|
|
54
|
+
"#{self.class} must implement default_identifier_class"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def flatten_array(data)
|
|
58
|
+
data.each_with_object({}) do |h, acc|
|
|
59
|
+
acc.merge!(h)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def assign_attributes(identifier, data)
|
|
64
|
+
attrs = identifier.class.attributes
|
|
65
|
+
data.each_pair do |key, value|
|
|
66
|
+
realized = cast(key.to_sym, value)
|
|
67
|
+
next if realized.nil?
|
|
68
|
+
|
|
69
|
+
next if handle_key(identifier, key, realized)
|
|
70
|
+
|
|
71
|
+
if realized.is_a?(Hash)
|
|
72
|
+
realized.each_pair do |k, v|
|
|
73
|
+
setter = "#{k}="
|
|
74
|
+
identifier.public_send(setter, v) if attrs.key?(k.to_sym)
|
|
75
|
+
end
|
|
76
|
+
else
|
|
77
|
+
setter = "#{key}="
|
|
78
|
+
identifier.public_send(setter, realized) if attrs.key?(key.to_sym)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def handle_key(_identifier, _key, _value)
|
|
84
|
+
false
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
LANG_CHAR_MAP = {
|
|
88
|
+
"R" => "ru",
|
|
89
|
+
"F" => "fr",
|
|
90
|
+
"E" => "en",
|
|
91
|
+
"A" => "ar",
|
|
92
|
+
"S" => "es",
|
|
93
|
+
"D" => "de",
|
|
94
|
+
}.freeze
|
|
95
|
+
|
|
96
|
+
ROMAN_MAP = {
|
|
97
|
+
"I" => 1, "V" => 5, "X" => 10,
|
|
98
|
+
"L" => 50, "C" => 100, "D" => 500, "M" => 1000
|
|
99
|
+
}.freeze
|
|
100
|
+
|
|
101
|
+
def locate_typed_stage(typed_stage_string)
|
|
102
|
+
raise NotImplementedError,
|
|
103
|
+
"#{self.class} must implement locate_typed_stage " \
|
|
104
|
+
"(rely on the flavor module's locate_stage method)"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def convert_roman_to_integer(roman_numeral)
|
|
108
|
+
return roman_numeral unless roman_numeral.to_s.match?(/^[IVXLCDM]+$/i)
|
|
109
|
+
|
|
110
|
+
result = 0
|
|
111
|
+
prev_value = 0
|
|
112
|
+
|
|
113
|
+
roman_numeral.to_s.upcase.chars.reverse.each do |char|
|
|
114
|
+
value = ROMAN_MAP[char]
|
|
115
|
+
if value < prev_value
|
|
116
|
+
result -= value
|
|
117
|
+
else
|
|
118
|
+
result += value
|
|
119
|
+
end
|
|
120
|
+
prev_value = value
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
result.to_s
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def parse_date(value)
|
|
127
|
+
value = value.to_s
|
|
128
|
+
if value.match?(/^\d{4}(-\d{2}){0,2}$/)
|
|
129
|
+
year, month, day = value.split("-")
|
|
130
|
+
Pubid::Components::Date.new(year: year,
|
|
131
|
+
month: month || nil,
|
|
132
|
+
day: day || nil)
|
|
133
|
+
elsif value.is_a?(Integer) || (value.is_a?(String) && value.match?(/^\d{4}$/))
|
|
134
|
+
Pubid::Components::Date.new(year: value)
|
|
135
|
+
else
|
|
136
|
+
raise ArgumentError, "Invalid date format: #{value.inspect}"
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Splits a compound document number ("1234", "1234-1", "1234-1-2")
|
|
141
|
+
# into number/part/subpart Code components. Flavor-specific dash/slash
|
|
142
|
+
# normalization lives in +normalize_number_with_part+; legacy year
|
|
143
|
+
# extraction (e.g. ISO "4037-1979") lives in +extract_legacy_year+.
|
|
144
|
+
def parse_number_with_part(value, code_class:)
|
|
145
|
+
normalized = normalize_number_with_part(value)
|
|
146
|
+
parts = normalized.split("-").reject(&:empty?)
|
|
147
|
+
number = parts.shift
|
|
148
|
+
part = parts.shift&.strip
|
|
149
|
+
subpart = parts.any? ? parts.join("-") : nil
|
|
150
|
+
|
|
151
|
+
legacy = extract_legacy_year(number, part, code_class)
|
|
152
|
+
return legacy if legacy
|
|
153
|
+
|
|
154
|
+
part = convert_roman_to_integer(part) if part
|
|
155
|
+
|
|
156
|
+
code_hash = { number: code_class.new(value: number) }
|
|
157
|
+
code_hash[:part] = code_class.new(value: part) if part
|
|
158
|
+
code_hash[:subpart] = code_class.new(value: subpart) if subpart
|
|
159
|
+
code_hash
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Hook: normalize the raw number_with_part string before splitting.
|
|
163
|
+
# Override in subclasses for flavor-specific dash/slash/space handling.
|
|
164
|
+
def normalize_number_with_part(value)
|
|
165
|
+
value.to_s
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Hook: detect a year masquerading as a part (e.g. "4037-1979") and
|
|
169
|
+
# return a number+date hash, or nil to continue normal splitting.
|
|
170
|
+
def extract_legacy_year(_number, _part, _code_class)
|
|
171
|
+
nil
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def parse_languages(value)
|
|
175
|
+
original_value = value.to_s
|
|
176
|
+
normalized_value = original_value.gsub("/", ",")
|
|
177
|
+
normalized_value.split(",").map do |lang|
|
|
178
|
+
lang = lang.strip
|
|
179
|
+
original_lang = lang
|
|
180
|
+
lang = LANG_CHAR_MAP[lang] if lang.length == 1
|
|
181
|
+
Pubid::Components::Language.new(code: lang,
|
|
182
|
+
original_code: original_lang)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
# Identifier that represents a combined bundle of documents using the + operator.
|
|
5
|
+
# Examples:
|
|
6
|
+
# EN 10077-1:2006+AC:2009+AC2:2009
|
|
7
|
+
# ISO/IEC DIR 1 + IEC SUP:2016-05
|
|
8
|
+
# ISO 8601:2019+Amd 1:2024+Cor 1:2025
|
|
9
|
+
#
|
|
10
|
+
# Semantic: Base document combined with amendments/corrigenda that are applied together
|
|
11
|
+
# This is different from:
|
|
12
|
+
# / operator (SupplementIdentifier) - supplement of a document
|
|
13
|
+
# | operator (CombinedIdentifier) - dual-published by multiple organizations
|
|
14
|
+
class BundledIdentifier < Identifier
|
|
15
|
+
attribute :base_document, Identifier, polymorphic: true
|
|
16
|
+
attribute :supplements, Identifier, polymorphic: true, collection: true
|
|
17
|
+
attribute :type, :string, default: -> { "bundled_identifier" }
|
|
18
|
+
|
|
19
|
+
# Delegate common attributes to base_document for easier access
|
|
20
|
+
def publisher
|
|
21
|
+
base_document&.publisher
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def copublishers
|
|
25
|
+
base_document&.copublishers
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def number
|
|
29
|
+
base_document&.number
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def date
|
|
33
|
+
base_document&.date
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def type
|
|
37
|
+
base_document&.type
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def stage
|
|
41
|
+
base_document&.stage
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def typed_stage
|
|
45
|
+
base_document&.typed_stage
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# `**opts` carries render flags this method does not name — `annotated:`
|
|
49
|
+
# above all. Without it the closed keyword list raised
|
|
50
|
+
# `ArgumentError: unknown keyword: :annotated` for every bundled
|
|
51
|
+
# identifier, which is worse than a missing span: a wrapper is exactly the
|
|
52
|
+
# shape a consumer renders.
|
|
53
|
+
def to_s(lang: :en, lang_single: false, with_edition: false, format: nil,
|
|
54
|
+
stage_format_long: nil, with_date: nil, **opts)
|
|
55
|
+
result = base_document.to_s(lang: lang, lang_single: lang_single,
|
|
56
|
+
with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date, **opts)
|
|
57
|
+
|
|
58
|
+
supplements.each do |supplement|
|
|
59
|
+
# ISO DirectivesSupplement always uses " + " (space before)
|
|
60
|
+
# CEN-style supplements (AC, A) without base use "+" (no space before)
|
|
61
|
+
# Other ISO supplements with base use " + " (space before)
|
|
62
|
+
if supplement.class.name&.include?("DirectivesSupplement") ||
|
|
63
|
+
(supplement.class.attributes.key?(:base) && !supplement.base.nil?)
|
|
64
|
+
result += " + #{supplement.to_s(lang: lang, lang_single: lang_single,
|
|
65
|
+
with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date, **opts)}"
|
|
66
|
+
else
|
|
67
|
+
result += "+#{supplement.to_s(lang: lang, lang_single: lang_single,
|
|
68
|
+
with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date, **opts)}"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
result
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Generate URN for bundled identifier
|
|
76
|
+
# Flattens all components into a single URN
|
|
77
|
+
#
|
|
78
|
+
# Example: "ISO/IEC DIR 1:2022 + IEC SUP:2022"
|
|
79
|
+
# → "urn:iso:doc:iso-iec:dir:1:2022:iec:sup:2022"
|
|
80
|
+
def to_urn
|
|
81
|
+
# Start with base document URN components
|
|
82
|
+
parts = base_document.to_urn.split(":")
|
|
83
|
+
|
|
84
|
+
# Add each supplement's components
|
|
85
|
+
supplements.each do |supplement|
|
|
86
|
+
# For DirectivesSupplement: add organization and "sup" (not "dir-sup")
|
|
87
|
+
if supplement.class.name&.include?("DirectivesSupplement")
|
|
88
|
+
# Add organization (e.g., "IEC")
|
|
89
|
+
if supplement.class.attributes.key?(:supplement_publisher) && supplement.supplement_publisher
|
|
90
|
+
parts << supplement.supplement_publisher.body.downcase
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Always add "sup" for DirectivesSupplement (not "dir-sup")
|
|
94
|
+
parts << "sup"
|
|
95
|
+
|
|
96
|
+
# Add year
|
|
97
|
+
parts << supplement.date.year.to_s if supplement.date
|
|
98
|
+
else
|
|
99
|
+
# For other supplements: use typed_stage type_code
|
|
100
|
+
if supplement.typed_stage
|
|
101
|
+
type_code = supplement.typed_stage.type_code
|
|
102
|
+
parts << type_code.to_s unless type_code == :is
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Add supplement date
|
|
106
|
+
if supplement.date
|
|
107
|
+
parts << supplement.date.year.to_s
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Add supplement number if present. `supplement` is polymorphic and
|
|
111
|
+
# `number` is a Components::Code on ::Pubid::Identifier but a plain
|
|
112
|
+
# :string in a growing number of flavors, so read through either.
|
|
113
|
+
if supplement.number
|
|
114
|
+
number = supplement.number
|
|
115
|
+
value = number.respond_to?(:value) ? number.value : number
|
|
116
|
+
parts << "v#{value}"
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
parts.join(":")
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Support comparison for sorting
|
|
125
|
+
def <=>(other)
|
|
126
|
+
return nil unless other.is_a?(BundledIdentifier)
|
|
127
|
+
|
|
128
|
+
base_comparison = base_document.to_s <=> other.base_document.to_s
|
|
129
|
+
return base_comparison unless base_comparison.zero?
|
|
130
|
+
|
|
131
|
+
supplements.map(&:to_s).sort <=> other.supplements.map(&:to_s).sort
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Calconnect
|
|
5
|
+
# Builds a CalConnect identifier object from a Parslet parse tree. There is
|
|
6
|
+
# a single concrete type (Identifiers::Standard), so no type dispatch.
|
|
7
|
+
class Builder
|
|
8
|
+
def self.build(parsed_data)
|
|
9
|
+
new.build(parsed_data)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def build(data)
|
|
13
|
+
Identifiers::Standard.new(
|
|
14
|
+
series: data[:series]&.to_s,
|
|
15
|
+
number: data[:number].to_s,
|
|
16
|
+
date: build_date(data),
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
# Publication date as a Pubid::Components::Date, or nil for a partial
|
|
23
|
+
# reference that omits the trailing ":YYYY" (relaton matches such refs by
|
|
24
|
+
# excluding the date). Digits are kept as strings verbatim (already
|
|
25
|
+
# zero-padded in the source, e.g. "07"/"23"); month/day are nil for the
|
|
26
|
+
# common year-only form.
|
|
27
|
+
def build_date(data)
|
|
28
|
+
return nil if data[:year].nil?
|
|
29
|
+
|
|
30
|
+
::Pubid::Components::Date.new(
|
|
31
|
+
year: data[:year].to_s,
|
|
32
|
+
month: data[:month]&.to_s,
|
|
33
|
+
day: data[:day]&.to_s,
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Calconnect
|
|
5
|
+
# Base class for every CalConnect identifier AND the flavor's parse entry
|
|
6
|
+
# point — mirrors Pubid::Jis::Identifier. Concrete identifiers under
|
|
7
|
+
# Pubid::Calconnect::Identifiers descend from this class, so a parsed
|
|
8
|
+
# CalConnect id is an instance of Pubid::Calconnect::Identifier and
|
|
9
|
+
# relaton-index can pass this class as `pubid_class` for from_hash/to_hash.
|
|
10
|
+
class Identifier < ::Pubid::Identifier
|
|
11
|
+
# `number` is a CalConnect-specific plain string (preserves leading zeros
|
|
12
|
+
# like "0514" and the sub-part separator, "0812-1"/"0707.1"), so it
|
|
13
|
+
# overrides the inherited Components::Code type. The publication date uses
|
|
14
|
+
# the shared Pubid::Components::Date (inherited attribute): `year` is
|
|
15
|
+
# always present, `month`/`day` only for the rare full-date form
|
|
16
|
+
# ("CC/WD 51017:2024-07-23").
|
|
17
|
+
attribute :series, :string # Optional series letter/token (A, WD, DIR, …)
|
|
18
|
+
attribute :number, :string
|
|
19
|
+
attribute :date, ::Pubid::Components::Date
|
|
20
|
+
|
|
21
|
+
# Polymorphic type map for lutaml::Model key_value (de)serialization,
|
|
22
|
+
# mapping the concrete class's polymorphic_name to its class name so a
|
|
23
|
+
# stored hash rebuilds the correct identifier type via from_hash.
|
|
24
|
+
CALCONNECT_TYPE_MAP = {
|
|
25
|
+
"pubid:calconnect:standard" => "Pubid::Calconnect::Identifiers::Standard",
|
|
26
|
+
}.freeze
|
|
27
|
+
|
|
28
|
+
# The date serializes FLAT as year/month/day string keys (nils omitted),
|
|
29
|
+
# mirroring lib/pubid/iso/identifier.rb — not as a nested "date" object —
|
|
30
|
+
# so the index row stays a shallow hash and round-trips exactly.
|
|
31
|
+
key_value do
|
|
32
|
+
map "_type", to: :_type, polymorphic_map: CALCONNECT_TYPE_MAP
|
|
33
|
+
map "series", to: :series
|
|
34
|
+
map "number", to: :number
|
|
35
|
+
map "year", with: { to: :year_to_kv, from: :year_from_kv }
|
|
36
|
+
map "month", with: { to: :month_to_kv, from: :month_from_kv }
|
|
37
|
+
map "day", with: { to: :day_to_kv, from: :day_from_kv }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Publisher is always "CC". A plain constant (not a `publisher` method) so
|
|
41
|
+
# it doesn't shadow the inherited lutaml `publisher` attribute, which
|
|
42
|
+
# would otherwise fail serialization type validation.
|
|
43
|
+
PUBLISHER = "CC"
|
|
44
|
+
|
|
45
|
+
attr_reader :with_publisher
|
|
46
|
+
|
|
47
|
+
# Render the publication date, e.g. "2018" or "2024-07-23". Shared by the
|
|
48
|
+
# renderer and the URN generator so they always agree.
|
|
49
|
+
# Pubid::Components::Date#to_s yields the year alone, or the zero-padded
|
|
50
|
+
# "YYYY-MM-DD" when month/day are present.
|
|
51
|
+
def date_string
|
|
52
|
+
date&.to_s
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Basic string representation. Delegates to the human renderer. The
|
|
56
|
+
# printed CalConnect id carries the "CC" publisher token by default; pass
|
|
57
|
+
# with_publisher: false to drop it (and the series slash).
|
|
58
|
+
def to_s(**opts)
|
|
59
|
+
render(format: :human, **opts)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Capture the with_publisher flag on EVERY render call (default true), so
|
|
63
|
+
# it can never leak across calls. The base `render` only forwards
|
|
64
|
+
# `:with_edition` to the renderer, so the flag is threaded via this
|
|
65
|
+
# per-call instance write (the renderer reads `id.with_publisher`).
|
|
66
|
+
def render(format: :human, with_publisher: true, **opts)
|
|
67
|
+
@with_publisher = with_publisher
|
|
68
|
+
super(format: format, **opts)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# --- date serialized flat as year/month/day (mirrors ISO) ---
|
|
72
|
+
def year_to_kv(model, doc)
|
|
73
|
+
emit_date_part(doc, "year", model.date&.year)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def month_to_kv(model, doc)
|
|
77
|
+
emit_date_part(doc, "month", model.date&.month)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def day_to_kv(model, doc)
|
|
81
|
+
emit_date_part(doc, "day", model.date&.day)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def year_from_kv(model, value) = date_for(model).year = value.to_s
|
|
85
|
+
def month_from_kv(model, value) = date_for(model).month = value.to_s
|
|
86
|
+
def day_from_kv(model, value) = date_for(model).day = value.to_s
|
|
87
|
+
|
|
88
|
+
def emit_date_part(doc, key, val)
|
|
89
|
+
return if val.nil? || val.to_s.empty?
|
|
90
|
+
|
|
91
|
+
doc.add_child(Lutaml::KeyValue::DataModel::Element.new(key, val.to_s))
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def date_for(model)
|
|
95
|
+
model.date ||= ::Pubid::Components::Date.new
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# from_hash is the shared polymorphic dispatch on Pubid::Identifier.
|
|
99
|
+
# CALCONNECT_TYPE_MAP remains as the key_value polymorphic_map.
|
|
100
|
+
|
|
101
|
+
# Parse a CalConnect identifier string into an identifier object.
|
|
102
|
+
# @param identifier [String] The CalConnect identifier string to parse
|
|
103
|
+
# @return [Identifier] The appropriate identifier object
|
|
104
|
+
# @raise [Pubid::Errors::InvalidInputError]
|
|
105
|
+
# If the input exceeds the maximum length
|
|
106
|
+
# @raise [Pubid::Errors::ParseError] If parsing fails
|
|
107
|
+
def self.parse(identifier)
|
|
108
|
+
unless identifier.is_a?(String)
|
|
109
|
+
raise Pubid::Errors::InvalidInputError,
|
|
110
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
114
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
Builder.build(Parser.parse(identifier))
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Calconnect
|
|
5
|
+
module Identifiers
|
|
6
|
+
# The sole CalConnect document type. Its polymorphic_name resolves
|
|
7
|
+
# automatically to "pubid:calconnect:standard".
|
|
8
|
+
class Standard < Identifier
|
|
9
|
+
TYPED_STAGES = [
|
|
10
|
+
Pubid::Components::TypedStage.new(
|
|
11
|
+
code: :pubcc,
|
|
12
|
+
stage_code: :published,
|
|
13
|
+
type_code: :cc,
|
|
14
|
+
abbr: ["CC"],
|
|
15
|
+
name: "CalConnect Standard",
|
|
16
|
+
harmonized_stages: [],
|
|
17
|
+
),
|
|
18
|
+
].freeze
|
|
19
|
+
|
|
20
|
+
def self.type
|
|
21
|
+
{ key: :cc,
|
|
22
|
+
web: :standard,
|
|
23
|
+
title: "CalConnect Standard",
|
|
24
|
+
short: "CC" }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Calconnect
|
|
7
|
+
# Parslet grammar for CalConnect identifiers.
|
|
8
|
+
#
|
|
9
|
+
# Shape: CC[/<series>] <number>:<date>
|
|
10
|
+
# CC 18011:2018
|
|
11
|
+
# CC/DIR 10006:2019
|
|
12
|
+
# CC/Adv 0707.1:2007 (dot sub-part)
|
|
13
|
+
# CC/A 0812-1:2008 (dash sub-part)
|
|
14
|
+
# CC/WD 51017:2024-07-23 (full ISO date)
|
|
15
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
16
|
+
rule(:digit) { match["0-9"] }
|
|
17
|
+
rule(:digits) { digit.repeat(1) }
|
|
18
|
+
|
|
19
|
+
# Publisher token
|
|
20
|
+
rule(:publisher) { str("CC") }
|
|
21
|
+
|
|
22
|
+
# Series token — an open [A-Za-z]+ set (A, WD, R, S, CD, DIR, Adv, FDS, …)
|
|
23
|
+
rule(:series) { match["A-Za-z"].repeat(1).as(:series) }
|
|
24
|
+
|
|
25
|
+
# Number — digits, preserving leading zeros, with at most one dot- or
|
|
26
|
+
# dash-delimited sub-part ("0707.1", "0812-1"). Kept as a string.
|
|
27
|
+
rule(:number) do
|
|
28
|
+
(digits >> ((str(".") | str("-")) >> digits).maybe).as(:number)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Date after the colon: a year, optionally a full "YYYY-MM-DD". The colon
|
|
32
|
+
# hard-delimits number from date, and month+day only appear together, so
|
|
33
|
+
# the split is unambiguous.
|
|
34
|
+
rule(:date) do
|
|
35
|
+
digits.as(:year) >>
|
|
36
|
+
(str("-") >> digits.as(:month) >> str("-") >> digits.as(:day)).maybe
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
rule(:identifier) do
|
|
40
|
+
publisher >>
|
|
41
|
+
(str("/") >> series).maybe >>
|
|
42
|
+
str(" ") >>
|
|
43
|
+
number >>
|
|
44
|
+
(str(":") >> date).maybe
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
rule(:root) { identifier }
|
|
48
|
+
|
|
49
|
+
def self.parse(input)
|
|
50
|
+
new.parse(input)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Calconnect
|
|
5
|
+
# Human-readable renderer for CalConnect identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces the canonical printed form, e.g.:
|
|
8
|
+
# "CC 18011:2018"
|
|
9
|
+
# "CC/DIR 10006:2019"
|
|
10
|
+
# "CC/WD 51017:2024-07-23"
|
|
11
|
+
# "DIR 10006:2019" (only when with_publisher: false)
|
|
12
|
+
#
|
|
13
|
+
# Registered as the `:human` format in the CalConnect format registry and
|
|
14
|
+
# invoked via `render(format: :human)`.
|
|
15
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
16
|
+
PUBLISHER = "CC"
|
|
17
|
+
|
|
18
|
+
def render(**_opts)
|
|
19
|
+
id = @id
|
|
20
|
+
prefix = if with_publisher?(id)
|
|
21
|
+
id.series ? "#{PUBLISHER}/#{id.series} " : "#{PUBLISHER} "
|
|
22
|
+
else
|
|
23
|
+
id.series ? "#{id.series} " : ""
|
|
24
|
+
end
|
|
25
|
+
date = id.date_string
|
|
26
|
+
"#{prefix}#{id.number}#{":#{date}" if date}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def with_publisher?(id)
|
|
32
|
+
id.respond_to?(:with_publisher) && id.with_publisher != false
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Calconnect
|
|
5
|
+
# Emits CalConnect URNs of the form
|
|
6
|
+
# urn:calconnect[:<series>]:<number>:<date>
|
|
7
|
+
# e.g. "urn:calconnect:DIR:10006:2019", "urn:calconnect:18011:2018",
|
|
8
|
+
# "urn:calconnect:WD:51017:2024-07-23".
|
|
9
|
+
#
|
|
10
|
+
# The series keeps its printed case (JIS keeps its code case likewise) so a
|
|
11
|
+
# URN reconstructs the human form losslessly — mirror in urn_parser.rb.
|
|
12
|
+
#
|
|
13
|
+
# NOTE: a *partial* (date-less) reference has NO round-trippable URN form.
|
|
14
|
+
# Both `series` and `date` are optional, and UrnParser reads the trailing
|
|
15
|
+
# segments positionally, so a date-less URN like "urn:calconnect:11001"
|
|
16
|
+
# (or "urn:calconnect:DIR:10006") is ambiguous with a series-less dated URN
|
|
17
|
+
# and does not parse back. Partial refs are matched by pubid `#exclude`,
|
|
18
|
+
# not by URN, so this generator simply omits the missing segment rather
|
|
19
|
+
# than emitting an empty ":" — callers must not rely on URN round-trip for
|
|
20
|
+
# a partial id.
|
|
21
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
22
|
+
def generate
|
|
23
|
+
# series and date_string are nil for a series-less or partial
|
|
24
|
+
# (date-less) id; compact drops them so no empty ":" segment appears.
|
|
25
|
+
parts = [
|
|
26
|
+
"urn", "calconnect",
|
|
27
|
+
identifier.series, identifier.number.to_s, identifier.date_string
|
|
28
|
+
]
|
|
29
|
+
parts.compact.join(":")
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Calconnect
|
|
5
|
+
# Parses CalConnect URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits: urn:calconnect[:<series>]:<number>:<date>
|
|
8
|
+
# urn:calconnect:18011:2018 → CC 18011:2018
|
|
9
|
+
# urn:calconnect:DIR:10006:2019 → CC/DIR 10006:2019
|
|
10
|
+
# urn:calconnect:WD:51017:2024-07-23 → CC/WD 51017:2024-07-23
|
|
11
|
+
#
|
|
12
|
+
# The date segment (year or full "YYYY-MM-DD") never contains a colon, so
|
|
13
|
+
# it is a single trailing part; the number precedes it, and an optional
|
|
14
|
+
# series precedes the number.
|
|
15
|
+
#
|
|
16
|
+
# This positional pop assumes a *dated* URN (the form UrnGenerator emits for
|
|
17
|
+
# a full id). A partial (date-less) reference has no round-trippable URN —
|
|
18
|
+
# see UrnGenerator — so this parser is only guaranteed for URNs produced
|
|
19
|
+
# from a full id; a date-less URN misaligns the pops and will not parse.
|
|
20
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
21
|
+
def parse_urn(urn)
|
|
22
|
+
parts = split_parts(strip_namespace(urn))
|
|
23
|
+
date = parts.pop
|
|
24
|
+
number = parts.pop
|
|
25
|
+
series = parts.pop
|
|
26
|
+
|
|
27
|
+
text = +"CC"
|
|
28
|
+
text << "/#{series}" if series
|
|
29
|
+
text << " #{number}:#{date}"
|
|
30
|
+
flavor_parse(text)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|