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,177 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jcgm
|
|
5
|
+
# Parses JCGM URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Identifiers are rebuilt **directly from the URN segments** rather than
|
|
8
|
+
# rendered to a human-readable string and re-parsed (the BIPM UrnParser
|
|
9
|
+
# pattern). Round-tripping through the grammar flattened the segments into
|
|
10
|
+
# one string and silently lost everything the string form could not carry:
|
|
11
|
+
# a GUM guide (`urn:jcgm:gum.6:2020`) raised, and the language and
|
|
12
|
+
# supplement segments were dropped, so a corrigendum read back as the
|
|
13
|
+
# standard it amends — a different document, with no error.
|
|
14
|
+
#
|
|
15
|
+
# Shapes emitted by UrnGenerator, and read back here:
|
|
16
|
+
# urn:jcgm:200:2008 → JCGM 200:2008
|
|
17
|
+
# urn:jcgm:100:2008:en → JCGM 100:2008(E)
|
|
18
|
+
# urn:jcgm:200:2012:en,fr → JCGM 200:2012(E/F)
|
|
19
|
+
# urn:jcgm:GUM → JCGM GUM
|
|
20
|
+
# urn:jcgm:gum.6:2020 → JCGM GUM-6:2020
|
|
21
|
+
# urn:jcgm:200:2008:corrigendum → JCGM 200:2008 Corrigendum
|
|
22
|
+
# urn:jcgm:101:2008:corrigendum:1:2009 → JCGM 101:2008/Cor 1:2009
|
|
23
|
+
# urn:jcgm:100:2008:amendment:1:2023 → JCGM 100:2008/Amd 1:2023
|
|
24
|
+
# urn:jcgm:meeting:17:2012 → JCGM 17th Meeting (2012)
|
|
25
|
+
# urn:jcgm:meeting:11 → JCGM 11st Meeting
|
|
26
|
+
#
|
|
27
|
+
# KNOWN GAP, on the generator side and unchanged here: a full date is
|
|
28
|
+
# rendered as its year alone (`JCGM GUM-1:2022-11-28` →
|
|
29
|
+
# `urn:jcgm:gum.1:2022`), so a URN cannot restore the month and day.
|
|
30
|
+
# Widening it would change already-published URNs.
|
|
31
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
32
|
+
MEETING_MARKER = "meeting"
|
|
33
|
+
|
|
34
|
+
# The GUM-guide number is written "gum.<n>" by UrnGenerator.
|
|
35
|
+
GUM_PREFIX = "gum."
|
|
36
|
+
|
|
37
|
+
# The supplement marker UrnGenerator writes is the typed stage's
|
|
38
|
+
# `type_code`; the abbreviation is what `Jcgm.locate_stage` matches on.
|
|
39
|
+
SUPPLEMENT_ABBRS = {
|
|
40
|
+
"corrigendum" => "Cor",
|
|
41
|
+
"amendment" => "Amd",
|
|
42
|
+
}.freeze
|
|
43
|
+
|
|
44
|
+
MEETING_ABBR = "Meeting"
|
|
45
|
+
|
|
46
|
+
# Mirrors `year_digits` in the shared parser rules.
|
|
47
|
+
YEAR_PATTERN = /\A(?:19|20)\d{2}\z/
|
|
48
|
+
|
|
49
|
+
# A language segment is one or more comma-joined ISO codes.
|
|
50
|
+
LANGUAGES_PATTERN = /\A[a-z]{2}(?:,[a-z]{2})*\z/
|
|
51
|
+
|
|
52
|
+
# Language codes back to the single-letter form the identifier prints;
|
|
53
|
+
# the builder maps the other way when parsing "(E)" / "(E/F)".
|
|
54
|
+
LANGUAGE_LETTERS = Pubid::Builder::Base::LANG_CHAR_MAP.invert.freeze
|
|
55
|
+
|
|
56
|
+
def parse_urn(urn)
|
|
57
|
+
parts = split_parts(strip_namespace(urn))
|
|
58
|
+
return parse_meeting_urn(parts) if parts.first == MEETING_MARKER
|
|
59
|
+
|
|
60
|
+
parse_document_urn(parts)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
# urn:jcgm:meeting:<number>[:<year>] -> Identifiers::Meeting
|
|
66
|
+
#
|
|
67
|
+
# The reconstruction must agree with a parsed identifier attribute for
|
|
68
|
+
# attribute, so `typed_stage` comes from the same registry lookup
|
|
69
|
+
# `Builder#locate_typed_stage` uses. (The attribute default now agrees
|
|
70
|
+
# too — it no longer sets `original_abbr` — so this mirrors the builder
|
|
71
|
+
# for clarity rather than out of necessity.)
|
|
72
|
+
def parse_meeting_urn(parts)
|
|
73
|
+
_, number, year = parts
|
|
74
|
+
|
|
75
|
+
Identifiers::Meeting.new(
|
|
76
|
+
number: meeting_number(number),
|
|
77
|
+
date: urn_date(year),
|
|
78
|
+
typed_stage: Jcgm.locate_stage(MEETING_ABBR),
|
|
79
|
+
)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# A guide, a GUM guide, or a supplement wrapping one of those. The
|
|
83
|
+
# supplement marker splits the segments: everything before it describes
|
|
84
|
+
# the base document, everything after is the supplement's own number and
|
|
85
|
+
# date.
|
|
86
|
+
def parse_document_urn(parts)
|
|
87
|
+
marker_at = parts.index { |segment| SUPPLEMENT_ABBRS.key?(segment) }
|
|
88
|
+
return build_document(parts) unless marker_at
|
|
89
|
+
|
|
90
|
+
build_supplement(
|
|
91
|
+
parts[marker_at],
|
|
92
|
+
build_document(parts[0...marker_at]),
|
|
93
|
+
parts[(marker_at + 1)..] || [],
|
|
94
|
+
)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# The class comes from the same registry the builder uses, so a URN and a
|
|
98
|
+
# parsed reference resolve to one class and one typed_stage.
|
|
99
|
+
def build_supplement(marker, base, tail)
|
|
100
|
+
typed_stage = Jcgm.locate_stage(SUPPLEMENT_ABBRS.fetch(marker))
|
|
101
|
+
number, year = tail
|
|
102
|
+
|
|
103
|
+
Jcgm.locate_type(typed_stage.type_code).new(
|
|
104
|
+
base: base,
|
|
105
|
+
number: (number.nil? || number.empty? ? nil : number.to_s),
|
|
106
|
+
date: urn_date(year),
|
|
107
|
+
typed_stage: typed_stage,
|
|
108
|
+
)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# <number>[:<year>][:<languages>] — the number segment carries the
|
|
112
|
+
# "gum." prefix for a GUM guide, which is what selects the class.
|
|
113
|
+
#
|
|
114
|
+
# Guide and GumGuide deliberately take their `typed_stage` from the
|
|
115
|
+
# attribute default: the grammar emits no type token for them, so
|
|
116
|
+
# `Builder#build` fills it from `published_typed_stage` too, and both
|
|
117
|
+
# paths agree.
|
|
118
|
+
def build_document(parts)
|
|
119
|
+
number, *rest = parts
|
|
120
|
+
require_number!(number)
|
|
121
|
+
gum = number.start_with?(GUM_PREFIX)
|
|
122
|
+
|
|
123
|
+
(gum ? Identifiers::GumGuide : Identifiers::Guide).new(
|
|
124
|
+
number: (gum ? number.delete_prefix(GUM_PREFIX) : number).to_s,
|
|
125
|
+
date: urn_date(segment_matching(rest, YEAR_PATTERN)),
|
|
126
|
+
languages: urn_languages(segment_matching(rest, LANGUAGES_PATTERN)),
|
|
127
|
+
)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def require_number!(segment)
|
|
131
|
+
return unless segment.nil? || segment.empty?
|
|
132
|
+
|
|
133
|
+
raise Pubid::UrnParser::Errors::ParseError,
|
|
134
|
+
"JCGM URN has no document number"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def segment_matching(segments, pattern)
|
|
138
|
+
segments.find { |segment| segment.match?(pattern) }
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# The ordinal, normalized the way `Identifiers::Meeting.ordinal` does it
|
|
142
|
+
# (`number.to_i`), so "011" reads back as "11" and a missing or
|
|
143
|
+
# non-numeric segment as "0" — the behaviour of the previous
|
|
144
|
+
# render-and-re-parse implementation.
|
|
145
|
+
def meeting_number(segment)
|
|
146
|
+
segment.to_i.to_s
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# nil for an absent year; a Date for a well-formed one. The grammar
|
|
150
|
+
# accepts only a 19xx/20xx year, so anything else is a malformed URN and
|
|
151
|
+
# must still be rejected now that no re-parse validates it.
|
|
152
|
+
def urn_date(segment)
|
|
153
|
+
return nil if segment.nil? || segment.empty?
|
|
154
|
+
|
|
155
|
+
unless segment.match?(YEAR_PATTERN)
|
|
156
|
+
raise Pubid::UrnParser::Errors::ParseError,
|
|
157
|
+
"Invalid year in JCGM URN: #{segment.inspect}"
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
Pubid::Components::Date.new(year: segment)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# "en" -> (E), "en,fr" -> (E/F). `original_code` is what the renderer
|
|
164
|
+
# prints, so it is restored from the code rather than left nil.
|
|
165
|
+
def urn_languages(segment)
|
|
166
|
+
return nil if segment.nil? || segment.empty?
|
|
167
|
+
|
|
168
|
+
segment.split(",").map do |code|
|
|
169
|
+
Pubid::Components::Language.new(
|
|
170
|
+
code: code,
|
|
171
|
+
original_code: LANGUAGE_LETTERS.fetch(code, code),
|
|
172
|
+
)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
data/lib/pubid/jcgm.rb
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jcgm
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# Sole JCGM publisher token (see the parser's `publisher` rule).
|
|
8
|
+
PREFIXES = ["JCGM"].freeze
|
|
9
|
+
|
|
10
|
+
autoload :Builder, "#{__dir__}/jcgm/builder"
|
|
11
|
+
autoload :Components, "#{__dir__}/jcgm/components"
|
|
12
|
+
autoload :Identifier, "#{__dir__}/jcgm/identifier"
|
|
13
|
+
autoload :Identifiers, "#{__dir__}/jcgm/identifiers"
|
|
14
|
+
autoload :Parser, "#{__dir__}/jcgm/parser"
|
|
15
|
+
autoload :Renderer, "#{__dir__}/jcgm/renderer"
|
|
16
|
+
autoload :SingleIdentifier, "#{__dir__}/jcgm/single_identifier"
|
|
17
|
+
autoload :SupplementIdentifier, "#{__dir__}/jcgm/supplement_identifier"
|
|
18
|
+
autoload :UrnGenerator, "#{__dir__}/jcgm/urn_generator"
|
|
19
|
+
autoload :UrnParser, "#{__dir__}/jcgm/urn_parser"
|
|
20
|
+
|
|
21
|
+
# Parse a JCGM identifier string
|
|
22
|
+
# @param identifier [String] the identifier string to parse
|
|
23
|
+
# @return [Identifier] the parsed identifier
|
|
24
|
+
def self.parse(identifier)
|
|
25
|
+
unless identifier.is_a?(String)
|
|
26
|
+
raise Pubid::Errors::InvalidInputError,
|
|
27
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
31
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
parser = Parser.new
|
|
35
|
+
builder = Builder.new
|
|
36
|
+
|
|
37
|
+
parsed = parser.parse(identifier)
|
|
38
|
+
builder.build(parsed)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
42
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
43
|
+
Identifier.format_registry.register(:human, renderer: Jcgm::Renderer)
|
|
44
|
+
|
|
45
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
46
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
47
|
+
def self.identifier_types
|
|
48
|
+
@identifier_types ||= Identifiers.constants
|
|
49
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
50
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
51
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Build typed stage index from identifier types
|
|
55
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
56
|
+
def self.all_typed_stages
|
|
57
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
58
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
59
|
+
klass.const_get(:TYPED_STAGES)
|
|
60
|
+
else
|
|
61
|
+
[]
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Lookup: type code -> identifier class
|
|
67
|
+
# @param code [String, Symbol] the type key to find
|
|
68
|
+
# @return [Class, nil] the matching identifier class
|
|
69
|
+
def self.locate_type(code)
|
|
70
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Lookup: abbreviation -> typed stage
|
|
74
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
75
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
76
|
+
def self.locate_stage(abbr)
|
|
77
|
+
abbr_str = abbr.to_s.upcase
|
|
78
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Register this flavor with the Pubid registry
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Register Ujcgm flavor with the registry
|
|
86
|
+
Pubid::Registry.register(:jcgm, Pubid::Jcgm)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jis
|
|
5
|
+
class Builder
|
|
6
|
+
def self.build(parsed_data)
|
|
7
|
+
new.build(parsed_data)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def build(data)
|
|
11
|
+
# Handle supplement case first; the SYMBOL clause (if any) attaches to
|
|
12
|
+
# the outermost identifier, be it the base or the supplement.
|
|
13
|
+
identifier = if data[:amendment]
|
|
14
|
+
build_amendment(data)
|
|
15
|
+
elsif data[:explanation]
|
|
16
|
+
build_explanation(data)
|
|
17
|
+
elsif data[:corrigendum]
|
|
18
|
+
build_corrigendum(data)
|
|
19
|
+
else
|
|
20
|
+
build_single_identifier(data)
|
|
21
|
+
end
|
|
22
|
+
attach_symbol(identifier, data)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
# nil => no SYMBOL clause; "" => bare "SYMBOL" keyword; otherwise value.
|
|
28
|
+
def attach_symbol(identifier, data)
|
|
29
|
+
identifier.symbol = data[:symbol_value].to_s if data[:symbol_present]
|
|
30
|
+
identifier
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def build_single_identifier(data)
|
|
34
|
+
attrs = {
|
|
35
|
+
series: data[:series].to_s,
|
|
36
|
+
number: data[:number].to_s,
|
|
37
|
+
parts: extract_part_strings(data[:parts]),
|
|
38
|
+
year: data[:year]&.to_i,
|
|
39
|
+
language: data[:language]&.to_s,
|
|
40
|
+
all_parts: (true if data[:all_parts]),
|
|
41
|
+
reaffirmed: (true if data[:reaffirmed]),
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# Determine identifier class from type
|
|
45
|
+
type = data[:type]&.to_s
|
|
46
|
+
klass = case type
|
|
47
|
+
when "TR"
|
|
48
|
+
Identifiers::TechnicalReport
|
|
49
|
+
when "TS"
|
|
50
|
+
Identifiers::TechnicalSpecification
|
|
51
|
+
else
|
|
52
|
+
Identifiers::JapaneseIndustrialStandard
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
klass.new(**attrs)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def build_amendment(data)
|
|
59
|
+
amd_data = data[:amendment]
|
|
60
|
+
|
|
61
|
+
# Build base document (without supplement)
|
|
62
|
+
base_data = data.except(:amendment)
|
|
63
|
+
base = build_single_identifier(base_data)
|
|
64
|
+
|
|
65
|
+
# Build amendment
|
|
66
|
+
Identifiers::Amendment.new(
|
|
67
|
+
base: base,
|
|
68
|
+
number: amd_data[:amd_number].to_i,
|
|
69
|
+
year: amd_data[:amd_year].to_i,
|
|
70
|
+
reaffirmed: (true if amd_data[:amd_reaffirmed]),
|
|
71
|
+
)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def build_explanation(data)
|
|
75
|
+
expl_data = data[:explanation]
|
|
76
|
+
|
|
77
|
+
# Build base document (without supplement)
|
|
78
|
+
base_data = data.except(:explanation)
|
|
79
|
+
base = build_single_identifier(base_data)
|
|
80
|
+
|
|
81
|
+
# Build explanation
|
|
82
|
+
Identifiers::Explanation.new(
|
|
83
|
+
base: base,
|
|
84
|
+
number: expl_data[:expl_number]&.to_i,
|
|
85
|
+
year: base.year,
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def build_corrigendum(data)
|
|
90
|
+
corr_data = data[:corrigendum]
|
|
91
|
+
|
|
92
|
+
# Build base document (without supplement)
|
|
93
|
+
base_data = data.except(:corrigendum)
|
|
94
|
+
base = build_single_identifier(base_data)
|
|
95
|
+
|
|
96
|
+
# Build corrigendum
|
|
97
|
+
Identifiers::Corrigendum.new(
|
|
98
|
+
base: base,
|
|
99
|
+
number: corr_data[:corr_number].to_i,
|
|
100
|
+
year: corr_data[:corr_year].to_i,
|
|
101
|
+
reaffirmed: (true if corr_data[:corr_reaffirmed]),
|
|
102
|
+
)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# parts_data is an array of `{ part: "1" }` hashes (or a single hash for
|
|
106
|
+
# a one-level part); return the part numbers as strings.
|
|
107
|
+
def extract_part_strings(parts_data)
|
|
108
|
+
case parts_data
|
|
109
|
+
when Array then parts_data.filter_map { |h| h[:part]&.to_s }
|
|
110
|
+
when Hash then [parts_data[:part]&.to_s].compact
|
|
111
|
+
else []
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jis
|
|
5
|
+
# Base class for every JIS identifier AND the flavor's parse/create entry
|
|
6
|
+
# point — mirrors Pubid::Iso::Identifier. Concrete identifiers under
|
|
7
|
+
# Pubid::Jis::Identifiers descend from this class, so a parsed JIS id is an
|
|
8
|
+
# instance of Pubid::Jis::Identifier.
|
|
9
|
+
class Identifier < ::Pubid::Identifier
|
|
10
|
+
# JIS keeps its number flat at the top level (string, to preserve leading
|
|
11
|
+
# zeros like "0205"), with the division letter in `series` and any
|
|
12
|
+
# multi-level part numbers in `parts`. Supplements override `number` with
|
|
13
|
+
# their integer sequence number; the document number then lives on `base`.
|
|
14
|
+
attribute :number, :string
|
|
15
|
+
attribute :series, :string # Division letter A-Z
|
|
16
|
+
attribute :parts, :string, collection: true # Optional multi-level parts
|
|
17
|
+
attribute :year, :integer
|
|
18
|
+
attribute :language, :string # "E" or "J"
|
|
19
|
+
# Boolean flags carry no default, so they stay nil (and are omitted from
|
|
20
|
+
# the serialized hash) unless actually set true.
|
|
21
|
+
attribute :all_parts, :boolean
|
|
22
|
+
# Reaffirmation (再確認): a trailing "R" on the year marks an edition
|
|
23
|
+
# that was reaffirmed without revision (e.g. ":2019R").
|
|
24
|
+
attribute :reaffirmed, :boolean
|
|
25
|
+
# Graphical-symbol sub-reference (JIS Z 8210 etc.): the value after
|
|
26
|
+
# "SYMBOL". nil means no SYMBOL clause; an empty string means a bare
|
|
27
|
+
# "SYMBOL" keyword with no value.
|
|
28
|
+
attribute :symbol, :string
|
|
29
|
+
|
|
30
|
+
# Polymorphic type map for lutaml::Model key_value (de)serialization:
|
|
31
|
+
# maps each subclass's polymorphic_name to its class name so a stored
|
|
32
|
+
# hash rebuilds the correct identifier type via from_hash.
|
|
33
|
+
JIS_TYPE_MAP = {
|
|
34
|
+
"pubid:jis:japanese-industrial-standard" =>
|
|
35
|
+
"Pubid::Jis::Identifiers::JapaneseIndustrialStandard",
|
|
36
|
+
"pubid:jis:standard" => "Pubid::Jis::Identifiers::Standard",
|
|
37
|
+
"pubid:jis:technical-report" =>
|
|
38
|
+
"Pubid::Jis::Identifiers::TechnicalReport",
|
|
39
|
+
"pubid:jis:technical-specification" =>
|
|
40
|
+
"Pubid::Jis::Identifiers::TechnicalSpecification",
|
|
41
|
+
"pubid:jis:amendment" => "Pubid::Jis::Identifiers::Amendment",
|
|
42
|
+
"pubid:jis:corrigendum" => "Pubid::Jis::Identifiers::Corrigendum",
|
|
43
|
+
"pubid:jis:explanation" => "Pubid::Jis::Identifiers::Explanation",
|
|
44
|
+
}.freeze
|
|
45
|
+
|
|
46
|
+
key_value do
|
|
47
|
+
map "_type", to: :_type, polymorphic_map: JIS_TYPE_MAP
|
|
48
|
+
map "series", to: :series
|
|
49
|
+
map "number", to: :number
|
|
50
|
+
map "parts", to: :parts
|
|
51
|
+
map "year", to: :year
|
|
52
|
+
map "language", to: :language
|
|
53
|
+
map "all_parts", to: :all_parts
|
|
54
|
+
map "reaffirmed", to: :reaffirmed
|
|
55
|
+
# render_empty keeps a bare "SYMBOL" (empty-string value) in the hash so
|
|
56
|
+
# it round-trips distinctly from "no symbol" (nil).
|
|
57
|
+
map "symbol", to: :symbol, render_empty: true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Publisher is always "JIS". A plain constant (not a `publisher` method)
|
|
61
|
+
# so it doesn't shadow the inherited lutaml `publisher` attribute, which
|
|
62
|
+
# would otherwise fail serialization type validation.
|
|
63
|
+
PUBLISHER = "JIS"
|
|
64
|
+
|
|
65
|
+
def all_parts?
|
|
66
|
+
all_parts == true
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def reaffirmed?
|
|
70
|
+
reaffirmed == true
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Render a year with its reaffirmation marker, e.g. "2019R".
|
|
74
|
+
def year_with_reaffirmation
|
|
75
|
+
"#{year}#{'R' if reaffirmed?}"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Render the trailing " SYMBOL[ <value>]" clause, or "" when absent.
|
|
79
|
+
def symbol_suffix
|
|
80
|
+
return "" if symbol.nil?
|
|
81
|
+
|
|
82
|
+
symbol.empty? ? " SYMBOL" : " SYMBOL #{symbol}"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# The rendered document code, e.g. "B 0205-1" (series, number, parts).
|
|
86
|
+
# A convenience for rendering; the underlying data is the flat
|
|
87
|
+
# series/number/parts attributes.
|
|
88
|
+
def code
|
|
89
|
+
result = "#{series} #{number}"
|
|
90
|
+
result += parts.map { |p| "-#{p}" }.join if parts&.any?
|
|
91
|
+
result
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Comparison with all_parts logic
|
|
95
|
+
# When either identifier has all_parts=true, compare only series and number
|
|
96
|
+
def ==(other)
|
|
97
|
+
return false unless other.is_a?(Identifier)
|
|
98
|
+
|
|
99
|
+
if all_parts? || other.all_parts?
|
|
100
|
+
# Compare only series and number, ignore year, parts, all_parts
|
|
101
|
+
return series == other.series && number == other.number
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Normal full comparison
|
|
105
|
+
series == other.series &&
|
|
106
|
+
number == other.number &&
|
|
107
|
+
(parts || []) == (other.parts || []) &&
|
|
108
|
+
year == other.year &&
|
|
109
|
+
language == other.language &&
|
|
110
|
+
all_parts? == other.all_parts? &&
|
|
111
|
+
reaffirmed? == other.reaffirmed? &&
|
|
112
|
+
symbol == other.symbol
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Basic string representation. Delegates to renderer.
|
|
116
|
+
def to_s(**opts)
|
|
117
|
+
render(format: :human, **opts)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# JIS exposes its publisher as the `PUBLISHER` constant rather than the
|
|
121
|
+
# inherited `publisher` attribute, so the generic mr_publisher returns
|
|
122
|
+
# nil. Without this override every JIS id would lose its "JIS." prefix.
|
|
123
|
+
# Lowercased to match the all-lowercase MR convention.
|
|
124
|
+
def mr_publisher
|
|
125
|
+
PUBLISHER.downcase
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# JIS stores its identity across `series` (division letter A–Z), `number`
|
|
129
|
+
# (string, may have leading zeros), and `parts` (multi-level). The
|
|
130
|
+
# generic mr_number_with_part only knows about `number`/`part`/`subpart`,
|
|
131
|
+
# so without these overrides every JIS id would collapse onto its
|
|
132
|
+
# document number and drop the division letter (issue #142).
|
|
133
|
+
# Lowercased to match the all-lowercase MR convention.
|
|
134
|
+
def mr_type
|
|
135
|
+
return nil unless respond_to?(:type_prefix)
|
|
136
|
+
|
|
137
|
+
type_prefix&.downcase
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def mr_number_with_part
|
|
141
|
+
segments = []
|
|
142
|
+
segments << series.to_s.downcase if series
|
|
143
|
+
segments << number.to_s if number
|
|
144
|
+
parts&.each { |p| segments << p.to_s }
|
|
145
|
+
return nil if segments.empty?
|
|
146
|
+
|
|
147
|
+
segments.join("-")
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# JIS stores the year as a bare integer (not a Components::Date), so the
|
|
151
|
+
# inherited mr_year (which reads `date`) returns nil. Emit it directly,
|
|
152
|
+
# including the reaffirmation marker so `JIS X:2019` and `JIS X:2019R`
|
|
153
|
+
# stay distinct in MR.
|
|
154
|
+
def mr_year
|
|
155
|
+
return nil unless year
|
|
156
|
+
|
|
157
|
+
year_with_reaffirmation.to_s
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def mr_languages
|
|
161
|
+
return nil unless language
|
|
162
|
+
|
|
163
|
+
"(#{language})"
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def mr_all_parts
|
|
167
|
+
return nil unless all_parts?
|
|
168
|
+
|
|
169
|
+
"all-parts"
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# from_hash is the shared polymorphic dispatch on Pubid::Identifier.
|
|
173
|
+
# JIS_TYPE_MAP remains as the key_value polymorphic_map.
|
|
174
|
+
|
|
175
|
+
# Parse a JIS identifier string into an identifier object
|
|
176
|
+
# @param identifier [String] The JIS identifier string to parse
|
|
177
|
+
# @return [Identifier] The appropriate identifier object
|
|
178
|
+
# @raise [Pubid::Errors::ParseError] If parsing fails
|
|
179
|
+
def self.parse(identifier)
|
|
180
|
+
unless identifier.is_a?(String)
|
|
181
|
+
raise Pubid::Errors::InvalidInputError,
|
|
182
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
186
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
parsed = Parser.parse(identifier)
|
|
190
|
+
Builder.build(parsed)
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jis
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Amendment identifier type
|
|
7
|
+
# Format: {base}/AMD {number}:{year}
|
|
8
|
+
# Example: JIS A 0001:1999/AMD 1:2000
|
|
9
|
+
class Amendment < SupplementIdentifier
|
|
10
|
+
def supplement_notation
|
|
11
|
+
"AMD #{number}:#{year_with_reaffirmation}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jis
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Corrigendum identifier type
|
|
7
|
+
# Format: {base}/CORRIGENDUM {number}:{year}
|
|
8
|
+
# Example: JIS B 3700-11:1996/CORRIGENDUM 1:2002
|
|
9
|
+
class Corrigendum < SupplementIdentifier
|
|
10
|
+
def supplement_notation
|
|
11
|
+
"CORRIGENDUM #{number}:#{year_with_reaffirmation}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jis
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Explanation identifier type
|
|
7
|
+
# Format: {base}/EXPL[ {number}]
|
|
8
|
+
# Examples:
|
|
9
|
+
# JIS K 2151:2004/EXPL
|
|
10
|
+
# JIS K 2249-4:2011/EXPL 4
|
|
11
|
+
class Explanation < SupplementIdentifier
|
|
12
|
+
def supplement_notation
|
|
13
|
+
if number
|
|
14
|
+
"EXPL #{number}"
|
|
15
|
+
else
|
|
16
|
+
"EXPL"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jis
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Default JIS identifier type (no type prefix)
|
|
7
|
+
# Examples: JIS A 0001:1999, JIS B 0060-1:2015
|
|
8
|
+
class JapaneseIndustrialStandard < SingleIdentifier
|
|
9
|
+
# No type prefix for default standards
|
|
10
|
+
def type_prefix
|
|
11
|
+
nil
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Jis
|
|
5
|
+
module Identifiers
|
|
6
|
+
class Standard < SingleIdentifier
|
|
7
|
+
# Note: type is handled through TYPED_STAGES, not as a separate attribute
|
|
8
|
+
# The Components::Type dependency was removed as it doesn't exist
|
|
9
|
+
|
|
10
|
+
TYPED_STAGES = [
|
|
11
|
+
Pubid::Components::TypedStage.new(
|
|
12
|
+
code: :pubjis,
|
|
13
|
+
stage_code: :published,
|
|
14
|
+
type_code: :jis,
|
|
15
|
+
abbr: ["JIS"],
|
|
16
|
+
name: "Japanese Industrial Standard",
|
|
17
|
+
harmonized_stages: [],
|
|
18
|
+
),
|
|
19
|
+
].freeze
|
|
20
|
+
|
|
21
|
+
def self.type
|
|
22
|
+
{ key: :jis,
|
|
23
|
+
web: :japanese_industrial_standard, title: "Japanese Industrial Standard", short: "JIS" }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|