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,300 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
# Human-readable renderer for CSA identifiers that extend Pubid::Identifier.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "CSA B149.1:20"
|
|
9
|
+
# "CAN/CSA-C22.2 NO. 60601-1-9:15"
|
|
10
|
+
# "CSA C22.2 NO. 286:23"
|
|
11
|
+
# "CSA MH SERIES 3.14:20"
|
|
12
|
+
#
|
|
13
|
+
# The renderer is registered as the +:human+ format in the CSA format
|
|
14
|
+
# registry and invoked via +render(format: :human)+.
|
|
15
|
+
#
|
|
16
|
+
# Note: Some CSA identifier types (Bundled, Combined, CanadianAdopted,
|
|
17
|
+
# CsaAdopted, Package) extend Lutaml::Model::Serializable directly,
|
|
18
|
+
# not Pubid::Identifier, so they keep their own to_s implementations.
|
|
19
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
20
|
+
def render(context: nil, **_opts)
|
|
21
|
+
id = @id
|
|
22
|
+
@context = context
|
|
23
|
+
|
|
24
|
+
case id
|
|
25
|
+
when Identifiers::Series
|
|
26
|
+
render_series(id)
|
|
27
|
+
when Identifiers::Cec
|
|
28
|
+
render_cec(id)
|
|
29
|
+
else
|
|
30
|
+
render_base(id)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
# Base rendering: "CSA B149.1:20", "CAN/CSA-C22.2-05"
|
|
37
|
+
def render_base(id)
|
|
38
|
+
prefix = publisher_prefix_for(id)
|
|
39
|
+
|
|
40
|
+
# Handle code_only identifiers (empty string means no prefix)
|
|
41
|
+
if prefix == ""
|
|
42
|
+
# No prefix for code_only identifiers
|
|
43
|
+
parts = []
|
|
44
|
+
else
|
|
45
|
+
# Determine if we need space after prefix
|
|
46
|
+
# CAN/CSA- and CAN3- end with dash, so no space needed
|
|
47
|
+
needs_space = !prefix.end_with?("-")
|
|
48
|
+
|
|
49
|
+
parts = []
|
|
50
|
+
parts << prefix
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Code and year together
|
|
54
|
+
code_part = id.number.to_s if id.number
|
|
55
|
+
|
|
56
|
+
# NO. keyword
|
|
57
|
+
if id.no_number
|
|
58
|
+
code_part += " NO. #{id.no_number}"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Series prefix and keyword (before year)
|
|
62
|
+
if id.series_prefix
|
|
63
|
+
code_part += " #{id.series_prefix} SERIES"
|
|
64
|
+
elsif id.series
|
|
65
|
+
# SERIES without prefix
|
|
66
|
+
code_part += " SERIES"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
parts << code_part if code_part
|
|
70
|
+
|
|
71
|
+
# Year with proper format (colon or dash)
|
|
72
|
+
if id.year
|
|
73
|
+
# Use dash if year_format is dash, otherwise colon
|
|
74
|
+
separator = id.year_format == "dash" ? "-" : ":"
|
|
75
|
+
year_part = separator
|
|
76
|
+
year_part += id.year_prefix if id.year_prefix # Add M or F prefix
|
|
77
|
+
year_part += "F" if id.french && id.year_format != "dash" && !id.year_prefix # Only add F if no prefix
|
|
78
|
+
# Convert 4-digit year back to 2-digit for M/F prefix preservation
|
|
79
|
+
# M1983 → M83, F1983 → F83, 1983 → 83, 20xx → xx
|
|
80
|
+
# However, preserve original 4-digit format if the input was 4-digit (original_year_4digit)
|
|
81
|
+
year_str = id.year.to_s
|
|
82
|
+
year_part += if id.original_year_4digit
|
|
83
|
+
# Preserve 4-digit format (e.g., "M1981" stays "M1981")
|
|
84
|
+
year_str
|
|
85
|
+
elsif id.year_prefix&.match?(/^[MF]$/) && year_str.length == 4 && year_str.start_with?("19")
|
|
86
|
+
# M/F + 4-digit year (1900s) → convert to 2-digit with prefix
|
|
87
|
+
year_str[2..3]
|
|
88
|
+
elsif year_str.length == 4 && year_str.start_with?("20")
|
|
89
|
+
# 2000s → just last 2 digits
|
|
90
|
+
year_str[2..3]
|
|
91
|
+
elsif year_str.length == 4 && year_str.start_with?("19") && !id.original_year_4digit
|
|
92
|
+
# 1900s with no M/F prefix, but original was 2-digit (e.g., CAN3-Z299.0-86)
|
|
93
|
+
# Convert back to 2-digit
|
|
94
|
+
year_str[2..3]
|
|
95
|
+
else
|
|
96
|
+
# Other formats - keep as-is
|
|
97
|
+
year_str
|
|
98
|
+
end
|
|
99
|
+
parts[-1] += year_part
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
result = if prefix == ""
|
|
103
|
+
# No prefix, just join parts
|
|
104
|
+
parts.join(" ")
|
|
105
|
+
elsif !prefix.end_with?("-")
|
|
106
|
+
parts.join(" ")
|
|
107
|
+
elsif parts.length == 2
|
|
108
|
+
# No space after dash-ending prefix - join first two parts directly
|
|
109
|
+
# If there are more parts after code, they should still have spaces
|
|
110
|
+
parts.join
|
|
111
|
+
else
|
|
112
|
+
# More than 2 parts shouldn't happen in current design
|
|
113
|
+
parts.join
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Reaffirmation - preserve original format and determine spacing
|
|
117
|
+
if id.reaffirmation && !id.reaffirmation.to_s.empty?
|
|
118
|
+
result += render_reaffirmation(id)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Package (already has leading space from parser)
|
|
122
|
+
if id.package
|
|
123
|
+
result += id.package
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
result
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# CEC rendering: "CSA C22.2 NO. 286:23"
|
|
130
|
+
def render_cec(id)
|
|
131
|
+
parts = []
|
|
132
|
+
|
|
133
|
+
# Publisher prefix (CSA, CAN/CSA-, CAN3-)
|
|
134
|
+
prefix = publisher_prefix_for(id)
|
|
135
|
+
|
|
136
|
+
# Determine if we need space after prefix
|
|
137
|
+
# CAN/CSA- and CAN3- end with dash, so no space needed
|
|
138
|
+
needs_space = !prefix.end_with?("-")
|
|
139
|
+
|
|
140
|
+
parts << prefix unless prefix == ""
|
|
141
|
+
|
|
142
|
+
# CEC Part (C22.2, C22.3, etc.)
|
|
143
|
+
parts << id.cec_part.render(context: @context) if id.cec_part
|
|
144
|
+
|
|
145
|
+
# NO. notation - this is the key semantic component
|
|
146
|
+
parts << "NO."
|
|
147
|
+
|
|
148
|
+
# Number after NO.
|
|
149
|
+
parts << id.no_number.render(context: @context) if id.no_number
|
|
150
|
+
|
|
151
|
+
# Determine separator based on prefix ending
|
|
152
|
+
result = if prefix == ""
|
|
153
|
+
parts.join(" ")
|
|
154
|
+
elsif needs_space
|
|
155
|
+
parts.join(" ")
|
|
156
|
+
elsif parts.length <= 2
|
|
157
|
+
# No space after dash-ending prefix (CAN/CSA-, CAN3-)
|
|
158
|
+
# Join first two parts directly, rest with spaces
|
|
159
|
+
parts.join
|
|
160
|
+
else
|
|
161
|
+
parts[0] + parts[1..].join(" ")
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Year with proper format (colon or dash)
|
|
165
|
+
if id.year
|
|
166
|
+
# Use dash if year_format is dash, otherwise colon
|
|
167
|
+
separator = id.year_format == "dash" ? "-" : ":"
|
|
168
|
+
year_part = separator
|
|
169
|
+
|
|
170
|
+
# Convert 4-digit year back to 2-digit for display
|
|
171
|
+
year_str = id.year.to_s
|
|
172
|
+
display_year = if year_str.length == 4 && year_str.start_with?("20")
|
|
173
|
+
year_str[2..3]
|
|
174
|
+
elsif year_str.length == 4 && year_str.start_with?("19")
|
|
175
|
+
year_str[2..3]
|
|
176
|
+
else
|
|
177
|
+
year_str
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Add prefix if present
|
|
181
|
+
year_part += if id.year_prefix
|
|
182
|
+
id.year_prefix + display_year
|
|
183
|
+
elsif id.french && id.year_format != "dash"
|
|
184
|
+
# Only add F if no prefix already set
|
|
185
|
+
"F#{display_year}"
|
|
186
|
+
else
|
|
187
|
+
display_year
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
result += year_part
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Reaffirmation
|
|
194
|
+
if id.reaffirmation && !id.reaffirmation.to_s.empty?
|
|
195
|
+
result += render_reaffirmation(id)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
result
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Series rendering: "CSA MH SERIES 3.14:20"
|
|
202
|
+
def render_series(id)
|
|
203
|
+
result = series_publisher_prefix_portion(id)
|
|
204
|
+
|
|
205
|
+
# Add code FIRST (before SERIES keyword)
|
|
206
|
+
result += id.number.to_s
|
|
207
|
+
|
|
208
|
+
# Add space before series prefix/SERIES keyword
|
|
209
|
+
result += " "
|
|
210
|
+
|
|
211
|
+
# Add series prefix if present
|
|
212
|
+
result += "#{id.series_prefix} " if id.series_prefix && !id.series_prefix.empty?
|
|
213
|
+
|
|
214
|
+
# Add SERIES keyword
|
|
215
|
+
result += "SERIES"
|
|
216
|
+
|
|
217
|
+
# Add year
|
|
218
|
+
result += series_year_portion(id)
|
|
219
|
+
|
|
220
|
+
# Add reaffirmation
|
|
221
|
+
result += render_reaffirmation(id) if id.reaffirmation && !id.reaffirmation.to_s.empty?
|
|
222
|
+
|
|
223
|
+
result
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
private
|
|
227
|
+
|
|
228
|
+
# Reaffirmation rendering helper - shared across Base, Cec, and Series
|
|
229
|
+
def render_reaffirmation(id)
|
|
230
|
+
# Check if year was originally 2-digit (original_year_4digit flag)
|
|
231
|
+
year_was_2digit = !id.original_year_4digit
|
|
232
|
+
|
|
233
|
+
# Check if reaffirmation was originally 4-digit (original_reaffirmation_4digit flag)
|
|
234
|
+
reaffirmation_was_4digit = id.original_reaffirmation_4digit
|
|
235
|
+
|
|
236
|
+
# Preserve original reaffirmation format
|
|
237
|
+
reaffirmation_str = if reaffirmation_was_4digit
|
|
238
|
+
# Original was 4-digit, keep as-is
|
|
239
|
+
id.reaffirmation.to_s
|
|
240
|
+
elsif id.reaffirmation.to_s.length == 4 && id.reaffirmation.to_s.start_with?("19", "20")
|
|
241
|
+
# Original was 2-digit, convert 4-digit storage back to 2-digit
|
|
242
|
+
id.reaffirmation.to_s[2..3]
|
|
243
|
+
else
|
|
244
|
+
# Already 2-digit or other format
|
|
245
|
+
id.reaffirmation.to_s
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# Determine spacing based on original formats
|
|
249
|
+
if year_was_2digit && reaffirmation_was_4digit
|
|
250
|
+
# Year was 2-digit, reaffirmation was 4-digit → add space
|
|
251
|
+
" (R#{reaffirmation_str})"
|
|
252
|
+
else
|
|
253
|
+
# Both 2-digit, both 4-digit, or other cases → no space
|
|
254
|
+
"(R#{reaffirmation_str})"
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# The publisher prefix to print. A code_only identifier printed none, so
|
|
259
|
+
# it must not gain the default "CSA" — see SingleIdentifier#code_only.
|
|
260
|
+
def publisher_prefix_for(id)
|
|
261
|
+
return "" if id.respond_to?(:code_only) && id.code_only
|
|
262
|
+
|
|
263
|
+
id.publisher_prefix || "CSA"
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
def series_publisher_prefix_portion(id)
|
|
267
|
+
prefix = publisher_prefix_for(id)
|
|
268
|
+
|
|
269
|
+
# Handle code_only identifiers (empty string means no prefix)
|
|
270
|
+
return "" if prefix == ""
|
|
271
|
+
|
|
272
|
+
# Determine if we need space after prefix
|
|
273
|
+
# CAN/CSA- and CAN3- end with dash, so no space needed
|
|
274
|
+
needs_space = !prefix.end_with?("-")
|
|
275
|
+
|
|
276
|
+
needs_space ? "#{prefix} " : prefix
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def series_year_portion(id)
|
|
280
|
+
return "" unless id.year
|
|
281
|
+
|
|
282
|
+
# Use dash if year_format is dash, otherwise colon
|
|
283
|
+
separator = id.year_format == "dash" ? "-" : ":"
|
|
284
|
+
year_part = separator
|
|
285
|
+
year_part += id.year_prefix if id.year_prefix # Add M or F prefix
|
|
286
|
+
year_part += "F" if id.french && id.year_format != "dash" && !id.year_prefix # Only add F if no prefix
|
|
287
|
+
|
|
288
|
+
# Convert 4-digit year back to 2-digit
|
|
289
|
+
year_str = id.year.to_s
|
|
290
|
+
year_part += if year_str.length == 4 && year_str.start_with?("20")
|
|
291
|
+
year_str[2..3]
|
|
292
|
+
else
|
|
293
|
+
year_str
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
year_part
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
class SingleIdentifier < Identifier
|
|
6
|
+
# The document code — "B149.1", "Z240", "C22.2" — and the relaton index
|
|
7
|
+
# key: Relaton::Index sorts and bsearches every row on
|
|
8
|
+
# `id.root.number.to_s`, so it must never be empty.
|
|
9
|
+
#
|
|
10
|
+
# It is the `number` INHERITED from ::Pubid::Identifier, not a
|
|
11
|
+
# redeclaration: Pubid::Csa::Components::Code is a bare alias of
|
|
12
|
+
# Pubid::Components::Code, which is exactly the parent's declared type.
|
|
13
|
+
# That matters. CSA's base is split across two files (csa/identifier.rb +
|
|
14
|
+
# csa/single_identifier.rb) — the IEEE shape in which a leaf can snapshot
|
|
15
|
+
# a half-built parent attribute table (CLAUDE.md, the `number`
|
|
16
|
+
# determinism landmine). Declaring nothing here keeps CSA clear of it.
|
|
17
|
+
# The attribute was named `code` before; there is no alias.
|
|
18
|
+
attribute :no_number, :string
|
|
19
|
+
attribute :year, :string
|
|
20
|
+
attribute :year_format, :string # "colon" or "dash"
|
|
21
|
+
attribute :year_prefix, :string # "F" or "M"
|
|
22
|
+
attribute :original_year_4digit, :boolean, default: -> {
|
|
23
|
+
false
|
|
24
|
+
} # Track if original input was 4-digit (e.g., "M1981" vs "M83")
|
|
25
|
+
attribute :french, :boolean
|
|
26
|
+
attribute :reaffirmation, :string
|
|
27
|
+
attribute :original_reaffirmation_4digit, :boolean, default: -> {
|
|
28
|
+
false
|
|
29
|
+
} # Track if original reaffirmation was 4-digit (e.g., "R2004" vs "R04")
|
|
30
|
+
attribute :has_publisher, :boolean # Track if CSA prefix present
|
|
31
|
+
attribute :series_prefix, :string # MH, RV, etc.
|
|
32
|
+
attribute :series, :boolean # Track if SERIES keyword present
|
|
33
|
+
attribute :package, :string # Package portion (Code, Handbook, etc.)
|
|
34
|
+
attribute :publisher_prefix, :string # Original prefix: "CAN/CSA-", "CSA", "CAN3-"
|
|
35
|
+
|
|
36
|
+
# True when the reference printed no publisher at all ("C22.1-15"), so
|
|
37
|
+
# rendering must not supply the default "CSA".
|
|
38
|
+
#
|
|
39
|
+
# This used to be an empty-string `publisher_prefix` sentinel, which the
|
|
40
|
+
# canonical `to_hash` drops (it strips empty and default-valued
|
|
41
|
+
# attributes by design) — so a code-only identifier came back
|
|
42
|
+
# from `from_hash` with a nil prefix and re-rendered as
|
|
43
|
+
# "CSA C22.1-15". Named for the RARE case with a `false` default,
|
|
44
|
+
# per CLAUDE.md, so it is dropped from every ordinary row.
|
|
45
|
+
attribute :code_only, :boolean, default: -> { false }
|
|
46
|
+
|
|
47
|
+
# A flat, index-friendly serialized shape: the `Components::Code`
|
|
48
|
+
# attributes collapse to bare scalars (`number: C22.2-286`, not
|
|
49
|
+
# `number: {value: C22.2-286}`), the ISO/ETSI/ITU `key_value` pattern.
|
|
50
|
+
#
|
|
51
|
+
# This is deliberately a serialization mapping rather than an
|
|
52
|
+
# `attribute :number, :string` redeclaration. CSA's base is split across
|
|
53
|
+
# two files (csa/identifier.rb + csa/single_identifier.rb) — the IEEE
|
|
54
|
+
# shape in which a leaf can snapshot a half-built parent attribute table
|
|
55
|
+
# — so a retype here would reintroduce the `number` determinism landmine
|
|
56
|
+
# recorded in CLAUDE.md. The runtime attribute stays a Components::Code;
|
|
57
|
+
# only the hash is flat.
|
|
58
|
+
#
|
|
59
|
+
# A lutaml key_value block is EXHAUSTIVE — an unmapped attribute is
|
|
60
|
+
# dropped, `_type` included — so every attribute above appears here. It
|
|
61
|
+
# lives on SingleIdentifier, which only the single-document types
|
|
62
|
+
# inherit; the container types descend from Csa::Identifier directly and
|
|
63
|
+
# keep the default shape for their nested `base`/`identifiers`.
|
|
64
|
+
key_value do
|
|
65
|
+
map "_type", to: :_type
|
|
66
|
+
map "number", with: { to: :number_to_kv, from: :number_from_kv }
|
|
67
|
+
map "no_number",
|
|
68
|
+
with: { to: :no_number_to_kv, from: :no_number_from_kv }
|
|
69
|
+
map "year", to: :year
|
|
70
|
+
map "year_format", to: :year_format
|
|
71
|
+
map "year_prefix", to: :year_prefix
|
|
72
|
+
map "original_year_4digit", to: :original_year_4digit
|
|
73
|
+
map "french", to: :french
|
|
74
|
+
map "reaffirmation", to: :reaffirmation
|
|
75
|
+
map "original_reaffirmation_4digit", to: :original_reaffirmation_4digit
|
|
76
|
+
map "has_publisher", to: :has_publisher
|
|
77
|
+
map "series_prefix", to: :series_prefix
|
|
78
|
+
map "series", to: :series
|
|
79
|
+
map "package", to: :package
|
|
80
|
+
map "publisher_prefix", to: :publisher_prefix
|
|
81
|
+
map "code_only", to: :code_only
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def number_to_kv(model, doc)
|
|
85
|
+
emit_kv(doc, "number", model.number)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def number_from_kv(model, value)
|
|
89
|
+
model.number = Components::Code.new(value: value.to_s)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# `no_number` is a plain :string here but a Components::Code on Cec, so
|
|
93
|
+
# the converter reads through whichever it is given.
|
|
94
|
+
def no_number_to_kv(model, doc)
|
|
95
|
+
emit_kv(doc, "no_number", model.no_number)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def no_number_from_kv(model, value)
|
|
99
|
+
model.no_number =
|
|
100
|
+
if model.class.attributes[:no_number].type == Components::Code
|
|
101
|
+
Components::Code.new(value: value.to_s)
|
|
102
|
+
else
|
|
103
|
+
value.to_s
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Emit a scalar, skipping a nil or empty value so the canonical
|
|
108
|
+
# no-defaults hash never gains an empty key.
|
|
109
|
+
def emit_kv(doc, key, value)
|
|
110
|
+
text = value.respond_to?(:value) ? value.value : value
|
|
111
|
+
return if text.nil? || text.to_s.empty?
|
|
112
|
+
|
|
113
|
+
doc.add_child(
|
|
114
|
+
Lutaml::KeyValue::DataModel::Element.new(key, text.to_s),
|
|
115
|
+
)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
6
|
+
# A code_only identifier printed no publisher, so it keeps an empty
|
|
7
|
+
# publisher segment rather than falling back to "csa" in #generate.
|
|
8
|
+
def urn_publisher_prefix
|
|
9
|
+
return "" if code_only?
|
|
10
|
+
return nil unless identifier.publisher_prefix
|
|
11
|
+
|
|
12
|
+
identifier.publisher_prefix.to_s.downcase
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def code_only?
|
|
16
|
+
identifier.respond_to?(:code_only) && identifier.code_only
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def urn_number
|
|
20
|
+
return nil unless identifier.number
|
|
21
|
+
|
|
22
|
+
identifier.number.render(context: URN_CONTEXT)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def urn_no_number
|
|
26
|
+
"no.#{identifier.no_number}" if identifier.no_number
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def urn_series
|
|
30
|
+
"series.#{identifier.series}" if identifier.series
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def urn_series_prefix
|
|
34
|
+
"series.#{identifier.series_prefix}" if identifier.series_prefix
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def urn_year_csa
|
|
38
|
+
return nil unless identifier.year
|
|
39
|
+
|
|
40
|
+
year = identifier.year.to_s
|
|
41
|
+
year = year[-2..] if year.length == 4 && year.start_with?("20")
|
|
42
|
+
year
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def urn_reaffirmation
|
|
46
|
+
"reaff.#{identifier.reaffirmation}" if identifier.reaffirmation
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def urn_package
|
|
50
|
+
"pkg.#{identifier.package}" if identifier.package
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def urn_year_format
|
|
54
|
+
"format.dash" if identifier.year_format == "dash"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def urn_french
|
|
58
|
+
"french" if identifier.french
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def generate
|
|
62
|
+
parts = ["urn", "csa"]
|
|
63
|
+
|
|
64
|
+
prefix = urn_publisher_prefix || "csa"
|
|
65
|
+
parts << prefix
|
|
66
|
+
|
|
67
|
+
parts << urn_number if urn_number
|
|
68
|
+
parts << urn_no_number if urn_no_number
|
|
69
|
+
parts << urn_series if urn_series
|
|
70
|
+
parts << urn_series_prefix if urn_series_prefix
|
|
71
|
+
|
|
72
|
+
year = urn_year_csa
|
|
73
|
+
if year
|
|
74
|
+
year = "#{identifier.year_prefix}#{year}" if identifier.year_prefix
|
|
75
|
+
parts << year
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
parts << urn_reaffirmation if urn_reaffirmation
|
|
79
|
+
parts << urn_package if urn_package
|
|
80
|
+
parts << urn_year_format if urn_year_format
|
|
81
|
+
parts << urn_french if urn_french
|
|
82
|
+
|
|
83
|
+
parts.join(":")
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
# Parses CSA URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:csa:{publisher}:{code}:{year}:format.{format}
|
|
9
|
+
#
|
|
10
|
+
# The trailing `format.X` token records the year-separator style used
|
|
11
|
+
# in the human-readable form (`dash` for `-`, `colon` for `:`).
|
|
12
|
+
#
|
|
13
|
+
# Examples:
|
|
14
|
+
# - urn:csa:csa:Z240.2.1:16:format.dash → CSA Z240.2.1-16
|
|
15
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
16
|
+
YEAR_SEPARATOR = { "dash" => "-", "colon" => ":" }.freeze
|
|
17
|
+
|
|
18
|
+
def parse_urn(urn)
|
|
19
|
+
body = strip_namespace(urn)
|
|
20
|
+
parts = split_parts(body)
|
|
21
|
+
|
|
22
|
+
format_token = parts.find { |p| p.start_with?("format.") }
|
|
23
|
+
separator = YEAR_SEPARATOR.fetch(format_token&.split(".")&.last, "-")
|
|
24
|
+
|
|
25
|
+
payload = parts.reject { |p| p.start_with?("format.") }
|
|
26
|
+
_publisher, code, year = payload
|
|
27
|
+
text = "CSA #{code}"
|
|
28
|
+
text += "#{separator}#{year}" if year
|
|
29
|
+
flavor_parse(text)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Csa
|
|
7
|
+
# WrapperIdentifier is the base class for all CSA identifiers that wrap
|
|
8
|
+
# other identifiers.
|
|
9
|
+
# Examples:
|
|
10
|
+
# - CanadianAdopted: CAN/{base}
|
|
11
|
+
# - CsaAdopted: CSA {ISO/IEC/CISPR identifier}
|
|
12
|
+
#
|
|
13
|
+
# The wrapper pattern allows proper MODEL-DRIVEN architecture where
|
|
14
|
+
# adoptions are objects that contain other identifier objects, not string
|
|
15
|
+
# prefixes.
|
|
16
|
+
class WrapperIdentifier < Identifier
|
|
17
|
+
# The wrapped identifier (recursively parsed).
|
|
18
|
+
#
|
|
19
|
+
# A real lutaml attribute, not an attr_accessor: the accessor was
|
|
20
|
+
# invisible to `to_hash`, `from_hash` AND `#exclude` (which iterates
|
|
21
|
+
# `self.class.attributes`), so a wrapper serialized to a hash with no
|
|
22
|
+
# identifier in it at all. It is named `base` — the uniform parent
|
|
23
|
+
# accessor every flavor uses — so the inherited `#root` walks it to the
|
|
24
|
+
# origin document and `exclude_from_nested` reaches inside. There is no
|
|
25
|
+
# `wrapped_identifier` alias.
|
|
26
|
+
#
|
|
27
|
+
# Typed as the cross-flavor `::Pubid::Identifier`, not the CSA one:
|
|
28
|
+
# CsaAdopted wraps ISO/IEC/CISPR ids, and lutaml enforces the declared
|
|
29
|
+
# type — `polymorphic: true` widens it only to SUBCLASSES, so a narrower
|
|
30
|
+
# type raises Lutaml::Model::IncorrectModelError on `to_hash`. The
|
|
31
|
+
# Ieee::Identifiers::AdoptedStandard precedent. The nested child carries
|
|
32
|
+
# its own `_type`, so `from_hash` routes it back via TypeResolver.
|
|
33
|
+
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
34
|
+
|
|
35
|
+
# Reaffirmation year (common across wrappers)
|
|
36
|
+
attribute :reaffirmation, :string
|
|
37
|
+
|
|
38
|
+
# Whether the reaffirmation was printed 4-digit ("(R2004)") rather than
|
|
39
|
+
# 2-digit ("(R04)"). CanadianAdopted#to_s reads it to choose the spacing
|
|
40
|
+
# and to render the year back in its original width.
|
|
41
|
+
attribute :original_reaffirmation_4digit, :boolean, default: -> { false }
|
|
42
|
+
|
|
43
|
+
# Year format tracking (for compatibility)
|
|
44
|
+
attribute :year_format, :string
|
|
45
|
+
|
|
46
|
+
# Subclasses MUST implement to_s
|
|
47
|
+
def to_s(**_opts)
|
|
48
|
+
raise NotImplementedError, "Subclasses must implement to_s method"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# The matching primitives relaton uses to normalise a reference before
|
|
52
|
+
# comparing it. An adoption wrapper peels to the document it adopts;
|
|
53
|
+
# without these the inherited defaults return the WRAPPER, which is a
|
|
54
|
+
# silently wrong answer rather than a loud one.
|
|
55
|
+
def base_document
|
|
56
|
+
base ? base.base_document : self
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def drop_supplements
|
|
60
|
+
base || self
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
data/lib/pubid/csa.rb
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# Sole CSA publisher token (see the parser's `publisher` rule).
|
|
8
|
+
PREFIXES = ["CSA"].freeze
|
|
9
|
+
|
|
10
|
+
autoload :Builder, "#{__dir__}/csa/builder"
|
|
11
|
+
autoload :Identifier, "#{__dir__}/csa/identifier"
|
|
12
|
+
autoload :Identifiers, "#{__dir__}/csa/identifiers"
|
|
13
|
+
autoload :Parser, "#{__dir__}/csa/parser"
|
|
14
|
+
autoload :Renderer, "#{__dir__}/csa/renderer"
|
|
15
|
+
autoload :SingleIdentifier, "#{__dir__}/csa/single_identifier"
|
|
16
|
+
autoload :UrnGenerator, "#{__dir__}/csa/urn_generator"
|
|
17
|
+
autoload :UrnParser, "#{__dir__}/csa/urn_parser"
|
|
18
|
+
autoload :WrapperIdentifier, "#{__dir__}/csa/wrapper_identifier"
|
|
19
|
+
autoload :CompositeIdentifier, "#{__dir__}/csa/composite_identifier"
|
|
20
|
+
autoload :Components, "#{__dir__}/csa/components"
|
|
21
|
+
|
|
22
|
+
def self.parse(identifier_string)
|
|
23
|
+
unless identifier_string.is_a?(String)
|
|
24
|
+
raise Pubid::Errors::InvalidInputError,
|
|
25
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
if identifier_string.length > Pubid::MAX_INPUT_LENGTH
|
|
29
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Identifier.parse(identifier_string)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
36
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
37
|
+
def self.identifier_types
|
|
38
|
+
@identifier_types ||= Identifiers.constants
|
|
39
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
40
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
41
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Build typed stage index from identifier types
|
|
45
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
46
|
+
def self.all_typed_stages
|
|
47
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
48
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
49
|
+
klass.const_get(:TYPED_STAGES)
|
|
50
|
+
else
|
|
51
|
+
[]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Lookup: type code -> identifier class
|
|
57
|
+
# @param code [String, Symbol] the type key to find
|
|
58
|
+
# @return [Class, nil] the matching identifier class
|
|
59
|
+
def self.locate_type(code)
|
|
60
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Lookup: abbreviation -> typed stage
|
|
64
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
65
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
66
|
+
def self.locate_stage(abbr)
|
|
67
|
+
abbr_str = abbr.to_s.upcase
|
|
68
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Register this flavor with the Pubid registry
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Register Ucsa flavor with the registry
|
|
76
|
+
Pubid::Registry.register(:csa, Pubid::Csa)
|
|
77
|
+
|
|
78
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
79
|
+
Pubid::Csa::SingleIdentifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
80
|
+
Pubid::Csa::SingleIdentifier.format_registry.register(:human, renderer: Pubid::Csa::Renderer)
|