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,141 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Csa
|
|
7
|
+
module Identifiers
|
|
8
|
+
class Bundled < Identifier
|
|
9
|
+
# The consolidated base document and the amendments bundled with it.
|
|
10
|
+
# Both are typed cross-flavor and polymorphic — see
|
|
11
|
+
# WrapperIdentifier#base — because a bundle's base is routinely a Cec,
|
|
12
|
+
# which is not a Standard subclass. #root is inherited: it walks
|
|
13
|
+
# `base` to the origin document.
|
|
14
|
+
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
15
|
+
attribute :bundled_with, ::Pubid::Identifier, polymorphic: true,
|
|
16
|
+
collection: true
|
|
17
|
+
attribute :reaffirmation, :string
|
|
18
|
+
attribute :original_reaffirmation_4digit, :boolean, default: -> {
|
|
19
|
+
false
|
|
20
|
+
}
|
|
21
|
+
attribute :year_format, :string # Add for compatibility with identifier.rb
|
|
22
|
+
|
|
23
|
+
# A bundle is a base document consolidated with its amendments, so
|
|
24
|
+
# both matching primitives peel to that base.
|
|
25
|
+
def base_document
|
|
26
|
+
base ? base.base_document : self
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def drop_supplements
|
|
30
|
+
base || self
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def to_s(**opts)
|
|
34
|
+
# For Cec identifiers, use normalized form (number instead of cec_part + NO.)
|
|
35
|
+
# This is used for "normalized form" rendering in bundled identifiers
|
|
36
|
+
if base.is_a?(Cec)
|
|
37
|
+
# Render base with normalized code format
|
|
38
|
+
prefix = base.publisher_prefix || "CSA"
|
|
39
|
+
needs_space = !prefix.end_with?("-")
|
|
40
|
+
# Convert 4-digit year back to 2-digit for display
|
|
41
|
+
year_display = if base.year
|
|
42
|
+
year_str = base.year.to_s
|
|
43
|
+
if year_str.length == 4 && year_str.start_with?("20")
|
|
44
|
+
year_str[2..3]
|
|
45
|
+
else
|
|
46
|
+
year_str
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
base_str = (needs_space ? "#{prefix} " : prefix) +
|
|
50
|
+
base.number.value.to_s + # Normalized code (e.g. "C22.2-1")
|
|
51
|
+
":#{year_display}"
|
|
52
|
+
parts = [base_str]
|
|
53
|
+
else
|
|
54
|
+
# Standard rendering for other identifier types
|
|
55
|
+
parts = [base.to_s]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Add bundled amendments/supplements (without CSA prefix)
|
|
59
|
+
if bundled_with && !bundled_with.empty?
|
|
60
|
+
bundled_with.each do |bundled|
|
|
61
|
+
# For Cec identifiers, use normalized code format
|
|
62
|
+
if bundled.is_a?(Cec)
|
|
63
|
+
bundled_part = bundled.number.value.to_s # e.g. "C22.2-2"
|
|
64
|
+
if bundled.year
|
|
65
|
+
# Use dash if year_format is dash, otherwise colon
|
|
66
|
+
separator = bundled.year_format == "dash" ? "-" : ":"
|
|
67
|
+
bundled_part += separator
|
|
68
|
+
bundled_part += bundled.year_prefix if bundled.year_prefix # Add M or F prefix
|
|
69
|
+
bundled_part += "F" if bundled.french && bundled.year_format != "dash" && !bundled.year_prefix
|
|
70
|
+
# Convert 4-digit year back to 2-digit
|
|
71
|
+
year_str = bundled.year.to_s
|
|
72
|
+
bundled_part += if year_str.length == 4 && year_str.start_with?("20")
|
|
73
|
+
year_str[2..3]
|
|
74
|
+
else
|
|
75
|
+
year_str
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
else
|
|
79
|
+
# Standard rendering for other identifier types
|
|
80
|
+
bundled_part = ""
|
|
81
|
+
bundled_part += bundled.number.to_s if bundled.number
|
|
82
|
+
|
|
83
|
+
if bundled.year
|
|
84
|
+
# Use dash if year_format is dash, otherwise colon
|
|
85
|
+
separator = bundled.year_format == "dash" ? "-" : ":"
|
|
86
|
+
bundled_part += separator
|
|
87
|
+
bundled_part += bundled.year_prefix if bundled.year_prefix # Add M or F prefix
|
|
88
|
+
bundled_part += "F" if bundled.french && bundled.year_format != "dash" && !bundled.year_prefix # Only add F if no prefix
|
|
89
|
+
# Convert 4-digit year back to 2-digit
|
|
90
|
+
# Use original_year_4digit flag to determine original format
|
|
91
|
+
year_str = bundled.year.to_s
|
|
92
|
+
bundled_part += if bundled.class.attributes.key?(:original_year_4digit) && bundled.original_year_4digit
|
|
93
|
+
# Preserve 4-digit format
|
|
94
|
+
year_str
|
|
95
|
+
elsif year_str.length == 4 && year_str.start_with?("20")
|
|
96
|
+
# 2000s → convert to 2-digit
|
|
97
|
+
year_str[2..3]
|
|
98
|
+
elsif year_str.length == 4 && year_str.start_with?("19") && bundled.class.attributes.key?(:original_year_4digit) && !bundled.original_year_4digit
|
|
99
|
+
# 1900s with no M/F prefix, but original was 2-digit (e.g., bundled identifier)
|
|
100
|
+
# Convert back to 2-digit
|
|
101
|
+
year_str[2..3]
|
|
102
|
+
else
|
|
103
|
+
# Other formats - keep as-is
|
|
104
|
+
year_str
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
parts << bundled_part
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
result = parts.join(" + ")
|
|
114
|
+
|
|
115
|
+
# Reaffirmation - preserve original format and determine spacing
|
|
116
|
+
if reaffirmation
|
|
117
|
+
# For bundled identifiers, check year format from base identifier
|
|
118
|
+
# to determine spacing
|
|
119
|
+
year_was_2digit = base.class.attributes.key?(:original_year_4digit) && !base.original_year_4digit
|
|
120
|
+
|
|
121
|
+
# Check if reaffirmation was originally 4-digit
|
|
122
|
+
# Note: We need to track this at the Bundled level, but for now
|
|
123
|
+
# assume 4-digit if the value is 4 digits and starts with 19/20
|
|
124
|
+
reaffirmation_was_4digit = reaffirmation.to_s.length == 4 &&
|
|
125
|
+
reaffirmation.to_s.start_with?("19", "20")
|
|
126
|
+
|
|
127
|
+
# Determine spacing based on original formats
|
|
128
|
+
# Space needed if year is 2-digit and reaffirmation is 4-digit
|
|
129
|
+
result += if year_was_2digit && reaffirmation_was_4digit
|
|
130
|
+
" (R#{reaffirmation})"
|
|
131
|
+
else
|
|
132
|
+
"(R#{reaffirmation})"
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
annotate_plain_render(result, **opts)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
module Identifiers
|
|
6
|
+
# CanadianAdoptedIdentifier represents Canadian adoption of standards
|
|
7
|
+
# indicated by the CAN/ prefix wrapper.
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# CAN/CSA-C22.2 NO. 60601-1-9:15
|
|
11
|
+
# CAN/CSA-Z662:23 (R2024)
|
|
12
|
+
#
|
|
13
|
+
# This is a wrapper pattern where:
|
|
14
|
+
# - CAN/ indicates Canadian adoption
|
|
15
|
+
# - The base is the actual CSA standard being adopted
|
|
16
|
+
#
|
|
17
|
+
# This is semantically different from a string prefix because:
|
|
18
|
+
# - CAN/ wraps an entire identifier (which may itself be complex)
|
|
19
|
+
# - The wrapped identifier is recursively parsed as a full CSA identifier
|
|
20
|
+
# - Proper object composition, not string manipulation
|
|
21
|
+
class CanadianAdopted < WrapperIdentifier
|
|
22
|
+
def to_s(**opts)
|
|
23
|
+
# For CAN3- identifiers, don't add CAN/ prefix (CAN3- is already complete)
|
|
24
|
+
# For Series with CAN/CSA- prefix, don't add CAN/ (it's already complete)
|
|
25
|
+
# For CAN/CSA- identifiers, CAN/ wraps CSA- part
|
|
26
|
+
if base.class.attributes.key?(:publisher_prefix) && base.publisher_prefix
|
|
27
|
+
prefix = base.publisher_prefix
|
|
28
|
+
# CAN3- is standalone, just render wrapped identifier
|
|
29
|
+
# CAN/CSA- is already complete for Series identifiers
|
|
30
|
+
if prefix == "CAN3-" || (prefix == "CAN/CSA-" && base.is_a?(Identifiers::Series))
|
|
31
|
+
result = base.to_s
|
|
32
|
+
else
|
|
33
|
+
# For other cases, prepend CAN/ prefix
|
|
34
|
+
result = "CAN/#{base}"
|
|
35
|
+
end
|
|
36
|
+
else
|
|
37
|
+
# No publisher_prefix, prepend CAN/
|
|
38
|
+
result = "CAN/#{base}"
|
|
39
|
+
end
|
|
40
|
+
# Only add reaffirmation from wrapper if base doesn't have one
|
|
41
|
+
# (to avoid duplicates - Identifier.parse sets it on both)
|
|
42
|
+
if reaffirmation && !(base.class.attributes.key?(:reaffirmation) && base.reaffirmation)
|
|
43
|
+
# Determine if space is needed before reaffirmation
|
|
44
|
+
# Space needed if year is 2-digit and reaffirmation is 4-digit (original format)
|
|
45
|
+
# No space if both year and reaffirmation are 2-digit
|
|
46
|
+
# Check original_year_4digit flag - if false, year was originally 2-digit
|
|
47
|
+
year_was_2digit = base.class.attributes.key?(:original_year_4digit) &&
|
|
48
|
+
!base.original_year_4digit
|
|
49
|
+
# Check original_reaffirmation_4digit flag
|
|
50
|
+
reaffirmation_was_4digit = original_reaffirmation_4digit
|
|
51
|
+
|
|
52
|
+
# Preserve original reaffirmation format
|
|
53
|
+
# If original was 4-digit, keep as 4-digit
|
|
54
|
+
# If original was 2-digit, convert from 4-digit storage back to 2-digit
|
|
55
|
+
reaffirmation_str = if reaffirmation_was_4digit
|
|
56
|
+
# Original was 4-digit, keep as-is
|
|
57
|
+
reaffirmation.to_s
|
|
58
|
+
elsif reaffirmation.to_s.length == 4 && reaffirmation.to_s.start_with?(
|
|
59
|
+
"19", "20"
|
|
60
|
+
)
|
|
61
|
+
# Original was 2-digit, convert 4-digit storage back to 2-digit
|
|
62
|
+
# (R2004) → (R04), (R1994) → (R94)
|
|
63
|
+
reaffirmation.to_s[2..3]
|
|
64
|
+
else
|
|
65
|
+
# Already 2-digit or other format
|
|
66
|
+
reaffirmation.to_s
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if year_was_2digit && reaffirmation_was_4digit
|
|
70
|
+
# Year was 2-digit, reaffirmation was 4-digit → add space
|
|
71
|
+
result += " (R#{reaffirmation_str})"
|
|
72
|
+
else
|
|
73
|
+
# Both 2-digit or other cases → no space
|
|
74
|
+
result += "(R#{reaffirmation_str})"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
annotate_plain_render(result, **opts)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Canadian Electrical Code (CEC) identifier
|
|
7
|
+
# Pattern: CSA C22.{2,3,4,6} NO. {number}:{year}
|
|
8
|
+
# Examples: CSA C22.2 NO. 286:23, CSA C22.3 NO. 7:20
|
|
9
|
+
#
|
|
10
|
+
# The "NO." indicates a numbered standard within the C22.x series
|
|
11
|
+
# and must be preserved (not normalized) as a semantic component.
|
|
12
|
+
class Cec < SingleIdentifier
|
|
13
|
+
attribute :cec_part, Components::Code # C22.2, C22.3, C22.4, C22.6
|
|
14
|
+
attribute :no_number, Components::Code # Number after NO.
|
|
15
|
+
|
|
16
|
+
# `CSA C22.2 NO. 286:23` stores the joined "C22.2-286" in `number`, which
|
|
17
|
+
# appears nowhere in the printed form; the two halves it does print live
|
|
18
|
+
# in `cec_part` and `no_number`. Naming them gives the identifier its
|
|
19
|
+
# docnumber spans back.
|
|
20
|
+
def annotation_tokens
|
|
21
|
+
super + [
|
|
22
|
+
[:publisher_prefix, "publisher"],
|
|
23
|
+
[:cec_part, "docnumber"],
|
|
24
|
+
[:no_number, "docnumber"],
|
|
25
|
+
]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Merged with SingleIdentifier's block (lutaml combines an inherited
|
|
29
|
+
# key_value block with a subclass one), so this adds only the half of
|
|
30
|
+
# the code that Cec keeps separately.
|
|
31
|
+
key_value do
|
|
32
|
+
map "cec_part",
|
|
33
|
+
with: { to: :cec_part_to_kv, from: :cec_part_from_kv }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def cec_part_to_kv(model, doc)
|
|
37
|
+
emit_kv(doc, "cec_part", model.cec_part)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def cec_part_from_kv(model, value)
|
|
41
|
+
model.cec_part = Components::Code.new(value: value.to_s)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# The document code, synthesised from its two halves:
|
|
45
|
+
# cec_part + "-" + no_number (e.g. "C22.2-1"). This is the index key.
|
|
46
|
+
#
|
|
47
|
+
# It shadows the reader lutaml generates for the inherited `number`
|
|
48
|
+
# attribute, which is safe because Cec declares no `number` of its own
|
|
49
|
+
# — the ITU precedent (itu/identifiers/base.rb). `cec_part` and
|
|
50
|
+
# `no_number` are themselves serialized, so from_hash reproduces the
|
|
51
|
+
# synthesised value.
|
|
52
|
+
#
|
|
53
|
+
# Deliberately NOT memoised: `@number` is the very ivar lutaml uses to
|
|
54
|
+
# store the inherited attribute, so caching there would both discard a
|
|
55
|
+
# value assigned through the generated writer and go stale if
|
|
56
|
+
# `cec_part`/`no_number` were reassigned — and `number` is the relaton
|
|
57
|
+
# index key. The concatenation is trivial, so there is nothing to save.
|
|
58
|
+
def number
|
|
59
|
+
return nil unless cec_part && no_number
|
|
60
|
+
|
|
61
|
+
Components::Code.new(value: "#{cec_part.value}-#{no_number.value}")
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Csa
|
|
7
|
+
module Identifiers
|
|
8
|
+
# Combined represents CSA identifiers joined with "/" or ", "
|
|
9
|
+
# Examples:
|
|
10
|
+
# CSA A23.1:24/CSA A23.2:24
|
|
11
|
+
# CSA N285.0:23/CSA N285.6 SERIES:23
|
|
12
|
+
# CSA A123.1-05/A123.5-05 (R2015)
|
|
13
|
+
# CSA B44:19/B44.1:19/B44.2:19 (triple combined)
|
|
14
|
+
class Combined < Identifier
|
|
15
|
+
# The co-equal designations, in printed order.
|
|
16
|
+
#
|
|
17
|
+
# One polymorphic collection, the IEC ConsolidatedIdentifier shape —
|
|
18
|
+
# not the historical first/second/third triple, which hard-capped the
|
|
19
|
+
# form at three and froze a non-standard hash shape. The first member
|
|
20
|
+
# is the primary designation, which is what #root walks so the index
|
|
21
|
+
# key is non-empty. Typed cross-flavor for the same reason as
|
|
22
|
+
# WrapperIdentifier#base.
|
|
23
|
+
attribute :identifiers, ::Pubid::Identifier, polymorphic: true,
|
|
24
|
+
collection: true
|
|
25
|
+
attribute :reaffirmation, :string
|
|
26
|
+
attribute :original_reaffirmation_4digit, :boolean, default: -> {
|
|
27
|
+
false
|
|
28
|
+
}
|
|
29
|
+
attribute :package, :string
|
|
30
|
+
attribute :year_format, :string # Dummy for compatibility
|
|
31
|
+
attribute :separator, :string, default: -> { "/" } # "/" or ", "
|
|
32
|
+
|
|
33
|
+
# A combined id stores its members in `identifiers`, not `base`, so
|
|
34
|
+
# walk the primary designation to the origin document
|
|
35
|
+
# (Iec::Identifiers::ConsolidatedIdentifier does the same).
|
|
36
|
+
def root
|
|
37
|
+
identifiers&.first&.root || self
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Co-equal designations, so both matching primitives reduce to the
|
|
41
|
+
# primary one — the Iec::Identifiers::ConsolidatedIdentifier shape.
|
|
42
|
+
def base_document
|
|
43
|
+
identifiers&.first&.base_document || self
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def drop_supplements
|
|
47
|
+
identifiers&.first || self
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def to_s(**opts)
|
|
51
|
+
parts = render_parts
|
|
52
|
+
result = parts.join(separator || "/")
|
|
53
|
+
result += render_reaffirmation if reaffirmation
|
|
54
|
+
result += package if package
|
|
55
|
+
annotate_plain_render(result, **opts)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
# With a comma separator every designation carries its full prefix;
|
|
61
|
+
# with a slash the trailing ones are continuations printed bare.
|
|
62
|
+
def render_parts
|
|
63
|
+
return identifiers.map(&:to_s) if separator == ", "
|
|
64
|
+
|
|
65
|
+
identifiers.each_with_index.map do |identifier, index|
|
|
66
|
+
index.zero? ? identifier.to_s : render_continuation(identifier)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Reaffirmation - preserve original format and determine spacing.
|
|
71
|
+
# A space is needed when the year was printed 2-digit and the
|
|
72
|
+
# reaffirmation 4-digit; the year format comes from the primary
|
|
73
|
+
# designation.
|
|
74
|
+
def render_reaffirmation
|
|
75
|
+
primary = identifiers&.first
|
|
76
|
+
year_was_2digit =
|
|
77
|
+
primary &&
|
|
78
|
+
primary.class.attributes.key?(:original_year_4digit) &&
|
|
79
|
+
!primary.original_year_4digit
|
|
80
|
+
|
|
81
|
+
reaffirmation_was_4digit = reaffirmation.to_s.length == 4 &&
|
|
82
|
+
reaffirmation.to_s.start_with?("19", "20")
|
|
83
|
+
|
|
84
|
+
if year_was_2digit && reaffirmation_was_4digit
|
|
85
|
+
" (R#{reaffirmation})"
|
|
86
|
+
else
|
|
87
|
+
"(R#{reaffirmation})"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Render identifier without CSA prefix (unless has_publisher is true)
|
|
92
|
+
def render_continuation(identifier)
|
|
93
|
+
parts = []
|
|
94
|
+
|
|
95
|
+
# Add CSA prefix if present in original
|
|
96
|
+
if identifier.has_publisher
|
|
97
|
+
parts << (identifier.publisher_prefix || "CSA")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
code_part = identifier.number.to_s if identifier.number
|
|
101
|
+
|
|
102
|
+
# NO. keyword
|
|
103
|
+
if identifier.no_number
|
|
104
|
+
code_part += " NO. #{identifier.no_number}"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Series prefix and keyword (before year)
|
|
108
|
+
if identifier.series_prefix
|
|
109
|
+
code_part += " #{identifier.series_prefix} SERIES"
|
|
110
|
+
elsif identifier.series
|
|
111
|
+
# SERIES without prefix
|
|
112
|
+
code_part += " SERIES"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
code_part += render_continuation_year(identifier) if identifier.year
|
|
116
|
+
|
|
117
|
+
parts << code_part if code_part
|
|
118
|
+
|
|
119
|
+
join_continuation(identifier, parts)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Year with proper format (colon or dash)
|
|
123
|
+
def render_continuation_year(identifier)
|
|
124
|
+
separator = identifier.year_format == "dash" ? "-" : ":"
|
|
125
|
+
year_part = separator
|
|
126
|
+
# Add M or F prefix
|
|
127
|
+
year_part += identifier.year_prefix if identifier.year_prefix
|
|
128
|
+
# Only add F if no prefix
|
|
129
|
+
if identifier.french && identifier.year_format != "dash" &&
|
|
130
|
+
!identifier.year_prefix
|
|
131
|
+
year_part += "F"
|
|
132
|
+
end
|
|
133
|
+
# Convert 4-digit year back to 2-digit
|
|
134
|
+
year_str = identifier.year.to_s
|
|
135
|
+
year_part + if year_str.length == 4 && year_str.start_with?("20")
|
|
136
|
+
year_str[2..3]
|
|
137
|
+
else
|
|
138
|
+
year_str
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Join with proper spacing based on prefix
|
|
143
|
+
def join_continuation(identifier, parts)
|
|
144
|
+
return parts.join(" ") unless identifier.has_publisher &&
|
|
145
|
+
parts.length > 1
|
|
146
|
+
|
|
147
|
+
prefix = parts[0]
|
|
148
|
+
if prefix.end_with?("-")
|
|
149
|
+
# No space after dash-ending prefix
|
|
150
|
+
prefix + parts[1..].join(" ")
|
|
151
|
+
else
|
|
152
|
+
parts.join(" ")
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
module Identifiers
|
|
6
|
+
# CsaAdoptedIdentifier represents CSA adoption of international standards
|
|
7
|
+
# (ISO, IEC, ISO/IEC, CISPR, etc.)
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# CSA ISO/IEC TR 12785-3:15
|
|
11
|
+
# CSA ISO/IEC TR 19758:04 (R2024)
|
|
12
|
+
# CSA CISPR 16-1-1:18
|
|
13
|
+
# CSA-ISO 10012:03 (when wrapped by CanadianAdopted)
|
|
14
|
+
#
|
|
15
|
+
# Key difference from CanadianAdopted:
|
|
16
|
+
# - CsaAdopted wraps ISO/IEC/CISPR standards (external)
|
|
17
|
+
# - CanadianAdopted wraps CSA standards (internal)
|
|
18
|
+
#
|
|
19
|
+
# This is a wrapper pattern where:
|
|
20
|
+
# - CSA prefix indicates adoption
|
|
21
|
+
# - The base is the external standard (ISO/IEC/CISPR)
|
|
22
|
+
# - Wrapped identifier is recursively parsed using external flavor parsers
|
|
23
|
+
class CsaAdopted < WrapperIdentifier
|
|
24
|
+
# Publisher prefix (e.g., "CSA-", "CAN3-") for rendering
|
|
25
|
+
# When set, uses dash format without space (e.g., "CSA-ISO" not "CSA ISO")
|
|
26
|
+
attribute :publisher_prefix, :string
|
|
27
|
+
|
|
28
|
+
def to_s(**opts)
|
|
29
|
+
# Get string representation from wrapped identifier
|
|
30
|
+
base_str = base.to_s
|
|
31
|
+
|
|
32
|
+
# Convert 4-digit years to 2-digit for CSA adoption format
|
|
33
|
+
# ISO/IEC TR 12785-3:2015 → ISO/IEC TR 12785-3:15
|
|
34
|
+
# Also handle amendment years: /Amd 1:2022 → /A1:22
|
|
35
|
+
if base_str =~ /:(\d{4})\b/
|
|
36
|
+
year = $1
|
|
37
|
+
if year.start_with?("20")
|
|
38
|
+
short_year = year[2..3]
|
|
39
|
+
base_str = base_str.sub(":#{year}", ":#{short_year}")
|
|
40
|
+
elsif year.start_with?("19")
|
|
41
|
+
# Handle 1900s years: 1998 → 98
|
|
42
|
+
short_year = year[2..3]
|
|
43
|
+
base_str = base_str.sub(":#{year}", ":#{short_year}")
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Convert ISO/IEC amendment format to CSA format
|
|
48
|
+
# /Amd 1:22 → /A1:22, /Amd 1-22 → /A1-22
|
|
49
|
+
# Handle both 2-digit and 4-digit years
|
|
50
|
+
base_str = base_str.gsub(%r{/Amd\s+(\d+)([:/-])(\d{2,4})\b}) do |_match|
|
|
51
|
+
amendment_num = $1
|
|
52
|
+
separator = $2
|
|
53
|
+
amend_year = $3
|
|
54
|
+
# Convert 4-digit year to 2-digit if needed
|
|
55
|
+
if amend_year.length == 4 && amend_year.start_with?("20", "19")
|
|
56
|
+
amend_year = amend_year[2..3]
|
|
57
|
+
end
|
|
58
|
+
"/A#{amendment_num}#{separator}#{amend_year}"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Apply publisher prefix format
|
|
62
|
+
# If publisher_prefix is "CSA-", render as "CSA-ISO..." (no space)
|
|
63
|
+
# Otherwise render as "CSA ISO..." (with space)
|
|
64
|
+
result = if publisher_prefix&.end_with?("-")
|
|
65
|
+
"#{publisher_prefix}#{base_str}"
|
|
66
|
+
else
|
|
67
|
+
"CSA #{base_str}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Append reaffirmation if present
|
|
71
|
+
result += " (R#{reaffirmation})" if reaffirmation
|
|
72
|
+
|
|
73
|
+
annotate_plain_render(result, **opts)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
module Identifiers
|
|
6
|
+
# PackageIdentifier represents CSA standards sold as packages
|
|
7
|
+
# with additional materials (PDF, print, addenda, etc.)
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# CSA Z662:23 PACKAGE INCLUDES: +1 (PDF & ESA)
|
|
11
|
+
# CSA B149.1:20 PACKAGE (PDF + PRINT)
|
|
12
|
+
# CSA C22.2 NO. 60601-1:15 PACKAGE WITH ADDENDUM
|
|
13
|
+
#
|
|
14
|
+
# This is a composite pattern where:
|
|
15
|
+
# - base is the core CSA standard (recursively parsed)
|
|
16
|
+
# - package_materials describes what's included in the package
|
|
17
|
+
# - Package portion is metadata, not a parseable identifier
|
|
18
|
+
#
|
|
19
|
+
# Difference from BundledIdentifier:
|
|
20
|
+
# - Package: Single base + materials metadata
|
|
21
|
+
# - Bundled: Multiple identifiers consolidated together
|
|
22
|
+
class Package < CompositeIdentifier
|
|
23
|
+
# Package materials/contents description
|
|
24
|
+
# Examples: "INCLUDES: +1 (PDF & ESA)", "(PDF + PRINT)", "WITH ADDENDUM"
|
|
25
|
+
attribute :package_materials, :string
|
|
26
|
+
|
|
27
|
+
# Package keyword variant (for future extensibility)
|
|
28
|
+
# Usually "PACKAGE" but could be variations
|
|
29
|
+
attribute :package_keyword, :string
|
|
30
|
+
|
|
31
|
+
# Track whether materials come before or after PACKAGE keyword
|
|
32
|
+
# true = materials AFTER: "CSA Z662:23 PACKAGE INCLUDES: +1"
|
|
33
|
+
# false = materials BEFORE: "CSA B149.1:25 Code, Handbook & Training Package"
|
|
34
|
+
attribute :materials_after_keyword, :boolean, default: -> { true }
|
|
35
|
+
|
|
36
|
+
def to_s(**opts)
|
|
37
|
+
result = base.to_s
|
|
38
|
+
|
|
39
|
+
# Add package materials if present
|
|
40
|
+
if package_materials && !package_materials.empty?
|
|
41
|
+
if materials_after_keyword
|
|
42
|
+
# Format: {base} PACKAGE {materials}
|
|
43
|
+
result += " PACKAGE"
|
|
44
|
+
result += " #{package_materials}"
|
|
45
|
+
elsif package_materials.match?(/\sPACKAGE\s*$/i)
|
|
46
|
+
# Format: {base} {materials} PACKAGE
|
|
47
|
+
# Check if materials already end with "Package" (to preserve exact capitalization)
|
|
48
|
+
# Materials already include the Package suffix
|
|
49
|
+
result += " #{package_materials}"
|
|
50
|
+
else
|
|
51
|
+
# Add Package suffix (use the package_keyword value)
|
|
52
|
+
result += " #{package_materials}"
|
|
53
|
+
result += " #{package_keyword}"
|
|
54
|
+
end
|
|
55
|
+
else
|
|
56
|
+
# No materials, just add PACKAGE keyword
|
|
57
|
+
result += " PACKAGE"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
annotate_plain_render(result, **opts)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
module Identifiers
|
|
6
|
+
# SeriesIdentifier represents CSA identifiers where SERIES
|
|
7
|
+
# is the primary document type, not just a keyword modifier
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# CSA MH SERIES 3.14:20
|
|
11
|
+
# CSA RV SERIES 1:19
|
|
12
|
+
# CSA SERIES Z1000:22
|
|
13
|
+
#
|
|
14
|
+
# Difference from Standard with series_keyword:
|
|
15
|
+
# - Series: SERIES is the document type (primary)
|
|
16
|
+
# - Standard: SERIES is a modifier keyword (secondary)
|
|
17
|
+
class Series < Base
|
|
18
|
+
# Series prefix (MH, RV, etc.) - optional
|
|
19
|
+
attribute :series_prefix, :string
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
module Identifiers
|
|
6
|
+
autoload :Base, "#{__dir__}/identifiers/base"
|
|
7
|
+
autoload :Bundled, "#{__dir__}/identifiers/bundled"
|
|
8
|
+
autoload :CanadianAdopted, "#{__dir__}/identifiers/canadian_adopted"
|
|
9
|
+
autoload :Cec, "#{__dir__}/identifiers/cec"
|
|
10
|
+
autoload :Combined, "#{__dir__}/identifiers/combined"
|
|
11
|
+
autoload :CsaAdopted, "#{__dir__}/identifiers/csa_adopted"
|
|
12
|
+
autoload :Package, "#{__dir__}/identifiers/package"
|
|
13
|
+
autoload :Series, "#{__dir__}/identifiers/series"
|
|
14
|
+
autoload :Standard, "#{__dir__}/identifiers/standard"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|