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,384 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Components
|
|
6
|
+
# Forward declare component classes
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Base class for all IEEE identifiers. Canonical name
|
|
10
|
+
# Pubid::Ieee::Identifier. IEEE
|
|
11
|
+
# builds its identifiers as instances of this class directly.
|
|
12
|
+
class Identifier < ::Pubid::Identifier
|
|
13
|
+
# Generate URN for this identifier
|
|
14
|
+
#
|
|
15
|
+
# @return [String] URN representation
|
|
16
|
+
|
|
17
|
+
attribute :publisher, :string, default: -> { "IEEE" }
|
|
18
|
+
attribute :copublisher, :string, collection: true # IEC, ISO, ANSI, etc.
|
|
19
|
+
# NB: there is deliberately NO `attribute :code`. IEEE's document code is
|
|
20
|
+
# serialized as the split index columns (number/prefix/parts/separator) on
|
|
21
|
+
# concrete leaf types via the CodeNumber mixin; `code`/`code_obj` remain a
|
|
22
|
+
# runtime-only representation (built in #initialize, read by the renderer).
|
|
23
|
+
# This holds for every IEEE type, including the historical AIEE/IRE and
|
|
24
|
+
# the NESC family: all three used to descend from
|
|
25
|
+
# Lutaml::Model::Serializable with their own `attribute :code`, and were
|
|
26
|
+
# reparented onto this base (with the CodeNumber mixin on their leaves).
|
|
27
|
+
attribute :year, :string
|
|
28
|
+
attribute :type, :string, default: -> { "Std" } # Std, Draft Std
|
|
29
|
+
attribute :draft_status, :string # Unapproved, Approved, Active Unapproved
|
|
30
|
+
attribute :draft, :string # Will store draft as object
|
|
31
|
+
# Numbered/lettered revision id, e.g. "2" for "P802.16Rev2", "i" for the
|
|
32
|
+
# relaton suffix "/R-i". IEEE's native inline "Rev<n>" and relaton's
|
|
33
|
+
# synthetic "/R-<x>" both feed this one attribute; rendered inline as
|
|
34
|
+
# "Rev<id>". `::Pubid::Identifier` has no `revision` attribute, so this is
|
|
35
|
+
# free of the number/stage multi-flavor collision landmine.
|
|
36
|
+
attribute :revision, :string
|
|
37
|
+
attribute :edition, :string # Edition 1.0
|
|
38
|
+
attribute :month, :string
|
|
39
|
+
attribute :day, :string
|
|
40
|
+
attribute :redline, :boolean, default: -> { false }
|
|
41
|
+
attribute :amendments, Identifier, collection: true # Amendment identifiers
|
|
42
|
+
attribute :corrigenda, Identifier, collection: true # Corrigendum identifiers
|
|
43
|
+
attribute :revision_of, Identifier # Revision relationships
|
|
44
|
+
attribute :incorporates, Identifier, collection: true # Incorporated documents
|
|
45
|
+
attribute :supersedes, Identifier, collection: true # Superseded documents
|
|
46
|
+
attribute :supplement_to, Identifier # For supplements
|
|
47
|
+
attribute :iso_identifier, :string # For IEC/IEEE formats
|
|
48
|
+
attribute :parenthetical_content, :string # Raw parenthetical content
|
|
49
|
+
attribute :note, :string # Parenthetical notes
|
|
50
|
+
attribute :adoption, :string # Adoption notes
|
|
51
|
+
attribute :amendment_to, :string # Amendment to relationships
|
|
52
|
+
attribute :edition_month, :string # Month part from Edition YYYY-MM
|
|
53
|
+
attribute :space_before_draft, :boolean, default: -> {
|
|
54
|
+
false
|
|
55
|
+
} # Track space before /D
|
|
56
|
+
attribute :typed_stage, Components::TypedStage # TYPED_STAGE integration
|
|
57
|
+
attribute :relationships, Components::Relationship, collection: true # Relationship metadata
|
|
58
|
+
attribute :nickname, :string # Book nickname (e.g., "[The Orange Book]")
|
|
59
|
+
attribute :interpretation, :boolean, default: -> {
|
|
60
|
+
false
|
|
61
|
+
} # /INT notation
|
|
62
|
+
attribute :ashrae_number, :string # ASHRAE Guideline number
|
|
63
|
+
attribute :ashrae_year, :string # ASHRAE Guideline year
|
|
64
|
+
attribute :crossref, :string # IEEE cross-reference (e.g., /C62.22.1-1996)
|
|
65
|
+
attribute :reaffirmed, :string # Reaffirmed year (e.g., "2010" for (R2010))
|
|
66
|
+
|
|
67
|
+
# Store actual component objects
|
|
68
|
+
attr_accessor :code_obj, :draft_obj
|
|
69
|
+
|
|
70
|
+
# Accept either keyword args (`new(number: "802")`, the normal path) or a
|
|
71
|
+
# single positional attribute hash (`new({number: "802"})`). The latter is
|
|
72
|
+
# what the base `Pubid::Identifier#exclude`/matching machinery uses when it
|
|
73
|
+
# rebuilds via `self.class.new(attrs)`; without it, `exclude`/`matches?`
|
|
74
|
+
# raised ArgumentError for every IEEE identifier.
|
|
75
|
+
# Constructor parameters that are not lutaml attributes: `code` is
|
|
76
|
+
# runtime-only (kept as `code_obj`), and the draft forms are turned into
|
|
77
|
+
# component objects below.
|
|
78
|
+
def self.extra_init_keys
|
|
79
|
+
%i[code draft draft_obj]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def initialize(args = {}, **kwargs)
|
|
83
|
+
args = args.merge(kwargs) unless kwargs.empty?
|
|
84
|
+
# This override calls `super()` with no attributes and assigns through
|
|
85
|
+
# setters instead, so it bypasses the base constructor's coercion and
|
|
86
|
+
# unknown-key check. Apply them here to keep the cross-flavor contract.
|
|
87
|
+
args = self.class.normalize_init_attributes(args)
|
|
88
|
+
super()
|
|
89
|
+
|
|
90
|
+
# Handle typed_stage if provided
|
|
91
|
+
if args[:typed_stage]
|
|
92
|
+
self.typed_stage = args[:typed_stage]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Handle code as component object. `code` is runtime-only (not a lutaml
|
|
96
|
+
# attribute) — we keep the parsed Components::Code in code_obj; every
|
|
97
|
+
# leaf serializes the split index columns (number/prefix/parts/separator)
|
|
98
|
+
# via the CodeNumber mixin instead of a `code` string. The renderer reads
|
|
99
|
+
# code_obj (base #code returns it).
|
|
100
|
+
if args[:code].is_a?(String)
|
|
101
|
+
self.code_obj = Components::Code.parse(args[:code])
|
|
102
|
+
elsif args[:code]
|
|
103
|
+
self.code_obj = args[:code]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Handle draft as component object
|
|
107
|
+
if args[:draft_obj]
|
|
108
|
+
self.draft_obj = args[:draft_obj]
|
|
109
|
+
self.draft = args[:draft_obj].to_s
|
|
110
|
+
elsif args[:draft].is_a?(String)
|
|
111
|
+
self.draft_obj = Components::Draft.parse(args[:draft])
|
|
112
|
+
self.draft = draft_obj.to_s
|
|
113
|
+
elsif args[:draft]
|
|
114
|
+
self.draft_obj = args[:draft]
|
|
115
|
+
self.draft = args[:draft].to_s
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Set other attributes.
|
|
119
|
+
#
|
|
120
|
+
# A key the class accepts but does not declare as a lutaml attribute
|
|
121
|
+
# (see `extra_init_keys`) is assigned through its plain accessor.
|
|
122
|
+
# Without that, `CsaDualPublished#csa_identifier` — an `attr_accessor`
|
|
123
|
+
# by design, "stored as-is (not a Lutaml model type)" — was never
|
|
124
|
+
# assigned at all, and `renderer.rb` read nil from it:
|
|
125
|
+
# `IEEE Std 844.1-2017/CSA C22.2 No. 293.1-17` rendered back as
|
|
126
|
+
# `IEEE Std 844.1-2017/CSA`, losing the CSA designation entirely.
|
|
127
|
+
attrs = self.class.attributes
|
|
128
|
+
extra = self.class.extra_init_keys
|
|
129
|
+
args.each do |key, value|
|
|
130
|
+
next if %i[code draft draft_obj typed_stage].include?(key)
|
|
131
|
+
|
|
132
|
+
setter = :"#{key}="
|
|
133
|
+
if attrs.key?(key)
|
|
134
|
+
public_send(setter, value)
|
|
135
|
+
elsif extra.include?(key) && respond_to?(setter)
|
|
136
|
+
public_send(setter, value)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Override accessors to return component objects.
|
|
142
|
+
def code
|
|
143
|
+
code_obj
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def draft
|
|
147
|
+
draft_obj
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Lazily rebuild the parsed component objects from the underlying string
|
|
151
|
+
# attributes. After from_hash, lutaml restores the :code/:draft strings
|
|
152
|
+
# (@code/@draft) but not these objects; the renderer reads code_obj/
|
|
153
|
+
# draft_obj directly, so rebuild on demand to render a deserialized
|
|
154
|
+
# identifier identically to the parsed one. On the parse path code_obj/
|
|
155
|
+
# draft_obj are already set, so the `||=` returns them unchanged.
|
|
156
|
+
def code_obj
|
|
157
|
+
@code_obj ||=
|
|
158
|
+
(Components::Code.parse(@code.to_s) unless @code.nil? || @code.to_s.empty?)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def draft_obj
|
|
162
|
+
@draft_obj ||=
|
|
163
|
+
(Components::Draft.parse(@draft.to_s) unless @draft.nil? || @draft.to_s.empty?)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Expose numeric month from draft if available
|
|
167
|
+
def draft_month
|
|
168
|
+
return nil unless draft_obj.is_a?(Components::Draft)
|
|
169
|
+
|
|
170
|
+
draft_obj.numeric_month
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# IEEE stores its publication date as separate `year`/`month`/`day`
|
|
174
|
+
# :string attributes, not a Components::Date, so the base #exclude's
|
|
175
|
+
# `:year`->`:date` remap can't reach them (it would nil an unused `date`
|
|
176
|
+
# component and leave the strings). After the base rebuild, nil the whole
|
|
177
|
+
# date cluster when `:year`/`:date` is excluded, so a date-less reference
|
|
178
|
+
# matches every date in the bucket (relaton partial-ref matching). NB: the
|
|
179
|
+
# base #exclude also previously raised for every IEEE id (positional
|
|
180
|
+
# `self.class.new(attrs)` vs the keyword initialize) — fixed by
|
|
181
|
+
# Identifier#initialize accepting a positional hash.
|
|
182
|
+
def exclude(*args)
|
|
183
|
+
result = super
|
|
184
|
+
if args.intersect?(%i[year date])
|
|
185
|
+
%i[year month day].each do |attr|
|
|
186
|
+
result.public_send("#{attr}=", nil) if result.respond_to?("#{attr}=")
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
result
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Compact the serialized hash (recursively, so nested Corrigendum bases
|
|
193
|
+
# are compacted too) after the normal serialize + canonicalize: collapse
|
|
194
|
+
# `typed_stage` to a scalar `stage` and strip the `/` off `draft`. See
|
|
195
|
+
# Compaction for why this is a hash transform, not lutaml attributes.
|
|
196
|
+
def to_hash(*args)
|
|
197
|
+
hash = super
|
|
198
|
+
Compaction.collapse(hash) if hash.is_a?(::Hash)
|
|
199
|
+
hash
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Inverse of the to_hash compaction: expand a scalar `stage` back into the
|
|
203
|
+
# `typed_stage` sub-hash (on a deep copy, recursively) before lutaml
|
|
204
|
+
# deserializes, so nested bases rebuild their component too. `draft` needs
|
|
205
|
+
# no expansion (Draft.parse accepts the slashless form).
|
|
206
|
+
def self.from_hash(data, options = {})
|
|
207
|
+
data = Compaction.expand(Compaction.deep_dup(data)) if data.is_a?(::Hash)
|
|
208
|
+
super
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Register the identifier classes the automatic `Identifiers::*` scan
|
|
212
|
+
# cannot see, so `Pubid::Ieee::Identifier.from_hash` can route their rows
|
|
213
|
+
# back. The scan only looks at classes declared *directly* under
|
|
214
|
+
# `Identifiers`, which misses both AIEE and IRE (they live under their own
|
|
215
|
+
# `Aiee`/`Ire` namespaces) and the whole NESC family (nested one level
|
|
216
|
+
# deeper, under `Identifiers::Nesc`).
|
|
217
|
+
def self.additional_identifier_classes
|
|
218
|
+
[
|
|
219
|
+
Aiee::Identifier,
|
|
220
|
+
Ire::Identifier,
|
|
221
|
+
Identifiers::Nesc::Draft,
|
|
222
|
+
Identifiers::Nesc::Edition,
|
|
223
|
+
Identifiers::Nesc::Handbook,
|
|
224
|
+
Identifiers::Nesc::Redline,
|
|
225
|
+
Identifiers::Nesc::Standard,
|
|
226
|
+
]
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# Parse IEEE identifier string.
|
|
230
|
+
#
|
|
231
|
+
# PreParser owns all regex/dispatch logic; this method is a thin
|
|
232
|
+
# orchestrator that consumes a PreParser::Result and routes to the
|
|
233
|
+
# correct builder.
|
|
234
|
+
def self.parse(input)
|
|
235
|
+
unless input.is_a?(String)
|
|
236
|
+
raise Pubid::Errors::InvalidInputError,
|
|
237
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
if input.length > Pubid::MAX_INPUT_LENGTH
|
|
241
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
result = PreParser.preprocess(input)
|
|
245
|
+
|
|
246
|
+
case result.dispatch
|
|
247
|
+
when :aiee_simple
|
|
248
|
+
return Aiee::Identifier.parse(result.input)
|
|
249
|
+
when :iec_ieee_copublished
|
|
250
|
+
return parse_single(result.input)
|
|
251
|
+
when :dual_semicolon
|
|
252
|
+
return build_dual(result.parts)
|
|
253
|
+
when :dual_reaffirmed
|
|
254
|
+
return build_reaffirmed(result)
|
|
255
|
+
when :dual_ire
|
|
256
|
+
return build_dual_with_reaffirmed(result)
|
|
257
|
+
when :dual_space_separated
|
|
258
|
+
return build_dual(result.parts)
|
|
259
|
+
when :dual_and
|
|
260
|
+
return build_dual(result.parts)
|
|
261
|
+
when :dual_ampersand
|
|
262
|
+
return build_dual(result.parts)
|
|
263
|
+
when :aiee_asa_adoption
|
|
264
|
+
return build_aiee_asa_adoption(result.parts)
|
|
265
|
+
when :adopted
|
|
266
|
+
return build_adopted(result.parts)
|
|
267
|
+
else
|
|
268
|
+
parse_single(result.input)
|
|
269
|
+
end
|
|
270
|
+
rescue Parslet::ParseFailed
|
|
271
|
+
parse_single(input)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
# ---- dispatch constructors (used by parse) ----
|
|
275
|
+
|
|
276
|
+
def self.build_dual(parts)
|
|
277
|
+
first = parse_single(parts[0])
|
|
278
|
+
second = parse_single(parts[1])
|
|
279
|
+
Identifiers::DualPublished.new(
|
|
280
|
+
first_identifier: first,
|
|
281
|
+
second_identifier: second,
|
|
282
|
+
)
|
|
283
|
+
end
|
|
284
|
+
private_class_method :build_dual
|
|
285
|
+
|
|
286
|
+
def self.build_reaffirmed(result)
|
|
287
|
+
parsed = parse_single(result.input)
|
|
288
|
+
parsed.reaffirmed = result.metadata[:reaffirmed] if parsed.class.attributes.key?(:reaffirmed)
|
|
289
|
+
parsed
|
|
290
|
+
end
|
|
291
|
+
private_class_method :build_reaffirmed
|
|
292
|
+
|
|
293
|
+
def self.build_dual_with_reaffirmed(result)
|
|
294
|
+
ieee_id = parse_single(result.parts[0])
|
|
295
|
+
ieee_id.reaffirmed = result.metadata[:reaffirmed] if ieee_id.class.attributes.key?(:reaffirmed)
|
|
296
|
+
ire_id = parse_single(result.parts[1])
|
|
297
|
+
Identifiers::DualPublished.new(
|
|
298
|
+
first_identifier: ieee_id,
|
|
299
|
+
second_identifier: ire_id,
|
|
300
|
+
)
|
|
301
|
+
end
|
|
302
|
+
private_class_method :build_dual_with_reaffirmed
|
|
303
|
+
|
|
304
|
+
def self.build_aiee_asa_adoption(parts)
|
|
305
|
+
aiee_id = parse_single(parts[0])
|
|
306
|
+
asa_id = parse_single(parts[1])
|
|
307
|
+
# `adopted_identifierS` — AdoptedStandard declares a collection. The
|
|
308
|
+
# singular spelling was not an attribute, so lutaml dropped it without
|
|
309
|
+
# a word and the ASA half of these 13 identifiers was never stored:
|
|
310
|
+
# `AIEE No 18-1934 (ASA C55 1934)` rendered back as `AIEE No 18-1934`.
|
|
311
|
+
# The unknown-key contract turned that silent loss into a raise, which
|
|
312
|
+
# is how it was found.
|
|
313
|
+
Identifiers::AdoptedStandard.new(
|
|
314
|
+
ieee_identifier: aiee_id,
|
|
315
|
+
adopted_identifiers: [asa_id],
|
|
316
|
+
)
|
|
317
|
+
end
|
|
318
|
+
private_class_method :build_aiee_asa_adoption
|
|
319
|
+
|
|
320
|
+
def self.build_adopted(parts)
|
|
321
|
+
ieee_id = parse_single(parts[0])
|
|
322
|
+
adopted_parts = parts[1].split(",").map(&:strip)
|
|
323
|
+
adopted_ids = adopted_parts.map do |part|
|
|
324
|
+
if part.start_with?("IEC")
|
|
325
|
+
Pubid::Iec.parse(normalize_iec_adoption(part))
|
|
326
|
+
elsif part.start_with?("ANSI")
|
|
327
|
+
Pubid::Ansi.parse(part)
|
|
328
|
+
else
|
|
329
|
+
parse_single(part)
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
Identifiers::AdoptedStandard.new(
|
|
333
|
+
ieee_identifier: ieee_id,
|
|
334
|
+
adopted_identifiers: adopted_ids,
|
|
335
|
+
)
|
|
336
|
+
end
|
|
337
|
+
private_class_method :build_adopted
|
|
338
|
+
|
|
339
|
+
# "IEC 60255-24 Edition 2.0 2013-04" → "IEC 60255-24:2013-04 ED2.0"
|
|
340
|
+
def self.normalize_iec_adoption(part)
|
|
341
|
+
iec_part = part.dup
|
|
342
|
+
iec_part.gsub!(/\s+Edition\s+([0-9.]+)\s+([0-9-]+)/, ':\2 ED\1')
|
|
343
|
+
iec_part.gsub!(/\s+Edition\s+([0-9.]+)\s*$/, ' ED\1')
|
|
344
|
+
iec_part
|
|
345
|
+
end
|
|
346
|
+
private_class_method :normalize_iec_adoption
|
|
347
|
+
|
|
348
|
+
# Parse a single IEEE identifier
|
|
349
|
+
def self.parse_single(input)
|
|
350
|
+
# Apply legacy update_codes normalization first, before Parser's extensive preprocessing
|
|
351
|
+
normalized = Core::UpdateCodes.apply(input, :ieee)
|
|
352
|
+
parsed = Parser.parse(normalized) # Use class method for preprocessing
|
|
353
|
+
builder = Builder.new(Identifier)
|
|
354
|
+
# Pass the original input string to builder for context
|
|
355
|
+
builder.original_input = input
|
|
356
|
+
builder.build(parsed)
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
# IEEE stores identity in `code` (prefix/number/parts) rather than the
|
|
360
|
+
# generic `number`, has its own `type` string ("Std", "Draft Std"), and
|
|
361
|
+
# carries `year` as a bare string — none of which the generic MrString
|
|
362
|
+
# renderer knows about. Override the lossless MR template directly so
|
|
363
|
+
# every IEEE identifier round-trips (issue #142). Supplements append
|
|
364
|
+
# `_{type}.{number}.{year}` recursively via mr_supplement_suffix.
|
|
365
|
+
# Lowercased to match the all-lowercase MR convention.
|
|
366
|
+
def mr_publisher
|
|
367
|
+
publisher&.to_s&.downcase
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
def mr_type
|
|
371
|
+
type&.downcase
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
def mr_number_with_part
|
|
375
|
+
code_obj&.to_s&.downcase
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
def mr_year
|
|
379
|
+
year&.to_s
|
|
380
|
+
end
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
end
|
|
384
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Mixin for concrete IEEE leaf identifiers that are their own `#root` and
|
|
7
|
+
# carry a document code. It splits the code into separate, index-friendly
|
|
8
|
+
# scalar attributes and, crucially, **replaces** the serialized `code`
|
|
9
|
+
# string with them:
|
|
10
|
+
#
|
|
11
|
+
# number :string bare-digit narrowing key ("802", "37")
|
|
12
|
+
# prefix :string letter series designator ("C"), if any
|
|
13
|
+
# parts :string collection dotted/dashed parts (["16", "1"])
|
|
14
|
+
# separator :string "." or "-", to render the parts back
|
|
15
|
+
#
|
|
16
|
+
# relaton's index-v2 keys its binary search on `id.root.number.to_s` and
|
|
17
|
+
# narrows a part-less reference (`IEEE 802`) to the whole bucket of parts
|
|
18
|
+
# (`802.11`, `802.16`, `802.16.1`), then matches `parts` — so `number`
|
|
19
|
+
# (part-less) and `parts` MUST be separate columns. The full `code` string
|
|
20
|
+
# is not serialized at all; `code_obj` (the runtime Components::Code the
|
|
21
|
+
# renderer/urn_generator read) is rebuilt losslessly from the four fields.
|
|
22
|
+
#
|
|
23
|
+
# Why a leaf mixin and not the base: IEEE keeps identity in `code`, so the
|
|
24
|
+
# base class's inherited generic `number` (a `Components::Code`) is nil.
|
|
25
|
+
# Redefining `attribute :number, :string` on the shared,
|
|
26
|
+
# **directly-instantiated** `Ieee::Identifier` base resolves against the
|
|
27
|
+
# parent's `Components::Code` **nondeterministically under multi-flavor
|
|
28
|
+
# load** (it passes IEEE-only but flips once every flavor is required,
|
|
29
|
+
# e.g. the full suite). Applying the split only on leaf classes that are
|
|
30
|
+
# never a superclass avoids that merge ambiguity — the same pattern
|
|
31
|
+
# CIE/IHO/IETF use. Never define a `#number` *method*: it collides with
|
|
32
|
+
# lutaml's generated accessor and corrupts attribute resolution.
|
|
33
|
+
module CodeNumber
|
|
34
|
+
def self.included(base)
|
|
35
|
+
base.attribute :number, :string
|
|
36
|
+
base.attribute :prefix, :string
|
|
37
|
+
base.attribute :parts, :string, collection: true, default: -> { [] }
|
|
38
|
+
base.attribute :separator, :string
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Accept keyword args or a single positional hash (the latter is what the
|
|
42
|
+
# base #exclude/matching rebuild passes) — see Identifier#initialize.
|
|
43
|
+
def initialize(args = {}, **kwargs)
|
|
44
|
+
super
|
|
45
|
+
sync_split_from_code_obj
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# On the parse path `code_obj` is already built (base #initialize parses
|
|
49
|
+
# it from the `code:` arg); hoist its fields onto the split attributes
|
|
50
|
+
# so they serialize.
|
|
51
|
+
def sync_split_from_code_obj
|
|
52
|
+
co = code_obj
|
|
53
|
+
return unless co
|
|
54
|
+
|
|
55
|
+
self.number = co.number
|
|
56
|
+
self.prefix = co.prefix
|
|
57
|
+
self.parts = co.parts
|
|
58
|
+
self.separator = co.original_separator
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# After from_hash there is no `code` string and no cached object, so
|
|
62
|
+
# rebuild code_obj from the split fields. On the parse path base
|
|
63
|
+
# #initialize already set @code_obj, so the `||=` returns it unchanged.
|
|
64
|
+
def code_obj
|
|
65
|
+
@code_obj ||= rebuild_code_obj_from_split
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def rebuild_code_obj_from_split
|
|
69
|
+
return nil if number.nil? || number.to_s.empty?
|
|
70
|
+
|
|
71
|
+
nonempty_parts = parts.nil? || parts.empty? ? nil : parts
|
|
72
|
+
Components::Code.new(
|
|
73
|
+
prefix: prefix,
|
|
74
|
+
number: number,
|
|
75
|
+
parts: nonempty_parts,
|
|
76
|
+
original_separator: separator,
|
|
77
|
+
)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Conformance identifier for IEEE standards
|
|
7
|
+
# Represents conformance test documents
|
|
8
|
+
# Example: IEEE Std 802.16/Conformance01-2003
|
|
9
|
+
class ConformanceIdentifier < SupplementIdentifier
|
|
10
|
+
# Uniform `number` (the conformance ordinal) + inherited `year`, not
|
|
11
|
+
# `conf_number`/`conf_year`. `number` is a plain string redefining the
|
|
12
|
+
# inherited Components::Code (leaf-safe). `root.number` still returns the
|
|
13
|
+
# base document number.
|
|
14
|
+
attribute :number, :string
|
|
15
|
+
# `year` inherited from the base.
|
|
16
|
+
|
|
17
|
+
# TYPED_STAGES for conformance
|
|
18
|
+
# Conformance uses "Conformance" abbreviation
|
|
19
|
+
TYPED_STAGES = [
|
|
20
|
+
Components::TypedStage.new(
|
|
21
|
+
abbr: ["Conformance"],
|
|
22
|
+
type_code: "conformance",
|
|
23
|
+
stage_code: "published",
|
|
24
|
+
),
|
|
25
|
+
].freeze
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Corrigendum identifier for IEEE standards
|
|
7
|
+
# Represents corrections to published standards
|
|
8
|
+
# Example: IEEE Std 535-2013/Cor. 1-2017
|
|
9
|
+
class Corrigendum < SupplementIdentifier
|
|
10
|
+
# The corrigendum's own ordinal (`number`) and `year` — uniform names,
|
|
11
|
+
# not `cor_number`/`cor_year`. `number` is a plain string redefining the
|
|
12
|
+
# inherited Components::Code (leaf-safe, like the standards); `year` is
|
|
13
|
+
# the inherited base :string. `root.number` still returns the *base*
|
|
14
|
+
# document number, so the index key is unaffected.
|
|
15
|
+
attribute :number, :string
|
|
16
|
+
# `year` inherited from the base.
|
|
17
|
+
|
|
18
|
+
# TYPED_STAGES for corrigendum
|
|
19
|
+
# Corrigendum uses "Cor" abbreviation
|
|
20
|
+
TYPED_STAGES = [
|
|
21
|
+
Components::TypedStage.new(
|
|
22
|
+
abbr: ["Cor"],
|
|
23
|
+
type_code: "corrigendum",
|
|
24
|
+
stage_code: "published",
|
|
25
|
+
),
|
|
26
|
+
].freeze
|
|
27
|
+
|
|
28
|
+
# MR supplement suffix: `cor.{number}.{year}` (e.g. "/cor.1.2017").
|
|
29
|
+
# The MrString renderer recurses into `base` and appends this so the
|
|
30
|
+
# full IEEE corrigendum round-trips losslessly (issue #142).
|
|
31
|
+
def mr_supplement_suffix
|
|
32
|
+
segments = ["cor"]
|
|
33
|
+
segments << number.to_s if number
|
|
34
|
+
segments << year.to_s if year
|
|
35
|
+
segments.join(".")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Identifiers
|
|
6
|
+
# CSA dual published identifier
|
|
7
|
+
# Represents IEEE/CSA dual published standards
|
|
8
|
+
# Example: IEEE Std 844.1-2017/CSA C22.2 No. 293.1-17
|
|
9
|
+
class CsaDualPublished < Identifier
|
|
10
|
+
attribute :ieee_identifier, Identifier
|
|
11
|
+
# CSA identifier is stored as-is (not a Lutaml model type)
|
|
12
|
+
attr_accessor :csa_identifier
|
|
13
|
+
|
|
14
|
+
# `csa_identifier` is a real constructor parameter even though it is
|
|
15
|
+
# not a lutaml attribute, so the unknown-key contract must let it
|
|
16
|
+
# through — and the constructor must actually assign it.
|
|
17
|
+
def self.extra_init_keys
|
|
18
|
+
super + %i[csa_identifier]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Walk to the IEEE designation for the relaton-index key: this wrapper
|
|
22
|
+
# names one document by an IEEE and a CSA number and holds neither
|
|
23
|
+
# itself, so `root.number` was "".
|
|
24
|
+
def root
|
|
25
|
+
ieee_identifier ? ieee_identifier.root : self
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Carry the number onto the URN and the MR slug as well as #root — see
|
|
29
|
+
# AdoptedStandard#code_obj. `#code` below delegates already, but the
|
|
30
|
+
# URN generator and the MR renderer both read `code_obj`.
|
|
31
|
+
def code_obj
|
|
32
|
+
ieee_identifier&.code_obj
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Delegate common attributes to ieee_identifier
|
|
36
|
+
def publisher
|
|
37
|
+
ieee_identifier.publisher
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def copublisher
|
|
41
|
+
ieee_identifier.copublisher
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def code
|
|
45
|
+
ieee_identifier.code
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def year
|
|
49
|
+
ieee_identifier.year
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def typed_stage
|
|
53
|
+
ieee_identifier.typed_stage
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def self.parse(string)
|
|
57
|
+
Identifier.parse(string)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Dual Identifier - wraps two identifiers connected with "and"
|
|
7
|
+
# Example: "ANSI C37.61-1973 and IEEE Std 321-1973"
|
|
8
|
+
class DualIdentifier < Identifier
|
|
9
|
+
attribute :first_identifier, Identifier, polymorphic: true
|
|
10
|
+
attribute :second_identifier, Identifier, polymorphic: true
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|