pubid 2.0.0.pre.alpha.8 → 2.0.0.pre.alpha.11
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/README.adoc +33 -11
- data/conformance/pending.yaml +4 -0
- data/data/bipm/update_codes.yaml +9 -0
- data/data/iec/update_codes.yaml +3 -0
- data/data/ieee/update_codes.yaml +107 -1
- data/{archived-gems/pubid-nist → data/nist}/series.yaml +34 -0
- data/data/nist/update_codes.yaml +8 -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 +61 -0
- data/lib/pubid/amca/builder.rb +4 -4
- data/lib/pubid/amca/identifier.rb +1 -3
- data/lib/pubid/amca/identifiers/base.rb +50 -33
- data/lib/pubid/amca/identifiers/interpretation.rb +18 -10
- data/lib/pubid/amca/identifiers/publication.rb +14 -10
- data/lib/pubid/amca/identifiers/standard.rb +3 -1
- data/lib/pubid/amca/identifiers.rb +0 -1
- data/lib/pubid/amca/parser.rb +1 -1
- data/lib/pubid/amca/renderer.rb +4 -4
- data/lib/pubid/amca/single_identifier.rb +1 -1
- data/lib/pubid/amca/urn_generator.rb +2 -2
- data/lib/pubid/amca.rb +5 -4
- data/lib/pubid/ansi/builder.rb +2 -2
- data/lib/pubid/ansi/identifier.rb +18 -0
- data/lib/pubid/ansi/parser.rb +1 -1
- data/lib/pubid/ansi/renderer.rb +2 -2
- data/lib/pubid/ansi.rb +5 -5
- data/lib/pubid/api/builder.rb +16 -2
- data/lib/pubid/api/identifier.rb +25 -4
- data/lib/pubid/api/identifiers/mpms.rb +10 -8
- data/lib/pubid/api/parser.rb +1 -1
- data/lib/pubid/api/renderer.rb +16 -7
- data/lib/pubid/api/single_identifier.rb +5 -12
- data/lib/pubid/api.rb +1 -0
- data/lib/pubid/ashrae/builder.rb +53 -32
- data/lib/pubid/ashrae/identifier.rb +3 -4
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +7 -1
- data/lib/pubid/ashrae/identifiers/addendum.rb +9 -1
- data/lib/pubid/ashrae/identifiers/base.rb +94 -12
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +8 -1
- data/lib/pubid/ashrae/identifiers/errata.rb +9 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +3 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +16 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +3 -0
- data/lib/pubid/ashrae/identifiers.rb +0 -1
- data/lib/pubid/ashrae/parser.rb +37 -17
- data/lib/pubid/ashrae/renderer.rb +20 -20
- data/lib/pubid/ashrae/single_identifier.rb +1 -1
- data/lib/pubid/ashrae/supplement_identifier.rb +21 -6
- data/lib/pubid/ashrae/urn_generator.rb +8 -2
- data/lib/pubid/ashrae.rb +10 -4
- data/lib/pubid/asme/builder.rb +11 -2
- data/lib/pubid/asme/identifier.rb +9 -0
- data/lib/pubid/asme/identifiers/standard.rb +86 -2
- data/lib/pubid/asme/parser.rb +1 -1
- data/lib/pubid/asme/renderer.rb +3 -3
- data/lib/pubid/asme/single_identifier.rb +8 -1
- data/lib/pubid/asme/urn_generator.rb +2 -2
- data/lib/pubid/asme.rb +1 -0
- data/lib/pubid/astm/builder.rb +10 -3
- data/lib/pubid/astm/identifier.rb +9 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +16 -1
- data/lib/pubid/astm/identifiers/code_number.rb +81 -0
- data/lib/pubid/astm/identifiers/data_series.rb +2 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +16 -0
- data/lib/pubid/astm/identifiers/manual.rb +10 -0
- data/lib/pubid/astm/identifiers/monograph.rb +2 -0
- data/lib/pubid/astm/identifiers/research_report.rb +10 -0
- data/lib/pubid/astm/identifiers/standard.rb +10 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +2 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +2 -0
- data/lib/pubid/astm/identifiers.rb +1 -0
- data/lib/pubid/astm/parser.rb +1 -1
- data/lib/pubid/astm/renderer.rb +1 -1
- data/lib/pubid/astm/single_identifier.rb +31 -1
- data/lib/pubid/astm/urn_generator.rb +7 -5
- data/lib/pubid/astm.rb +1 -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 +92 -0
- data/lib/pubid/bsi/builder.rb +62 -52
- data/lib/pubid/bsi/identifier.rb +0 -1
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +36 -7
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +7 -6
- data/lib/pubid/bsi/identifiers/amendment.rb +4 -4
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +0 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +10 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +10 -1
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +5 -5
- data/lib/pubid/bsi/identifiers/handbook.rb +0 -2
- data/lib/pubid/bsi/identifiers/practice_guide.rb +0 -1
- data/lib/pubid/bsi/identifiers/set.rb +11 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -1
- data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +6 -6
- data/lib/pubid/bsi/parser.rb +1 -1
- data/lib/pubid/bsi/renderer.rb +71 -59
- data/lib/pubid/bsi/single_identifier.rb +64 -7
- data/lib/pubid/bsi/urn_generator.rb +11 -2
- data/lib/pubid/bsi.rb +7 -1
- data/lib/pubid/builder/base.rb +23 -11
- data/lib/pubid/bundled_identifier.rb +19 -9
- 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 +83 -0
- data/lib/pubid/ccsds/builder.rb +1 -1
- data/lib/pubid/ccsds/identifier.rb +10 -3
- data/lib/pubid/ccsds/identifiers/base.rb +4 -2
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/ccsds/parser.rb +1 -1
- data/lib/pubid/ccsds/single_identifier.rb +2 -2
- data/lib/pubid/ccsds/supplement_identifier.rb +6 -6
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds.rb +1 -0
- data/lib/pubid/cen_cenelec/builder.rb +131 -72
- data/lib/pubid/cen_cenelec/identifier.rb +115 -3
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +27 -16
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +46 -6
- data/lib/pubid/cen_cenelec/identifiers/base.rb +8 -9
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +29 -14
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +47 -8
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +60 -3
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +27 -2
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +15 -5
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -1
- data/lib/pubid/cen_cenelec/parser.rb +1 -1
- data/lib/pubid/cen_cenelec/renderer.rb +55 -60
- data/lib/pubid/cen_cenelec/single_identifier.rb +20 -2
- data/lib/pubid/cen_cenelec/urn_generator.rb +66 -44
- data/lib/pubid/cen_cenelec.rb +104 -82
- data/lib/pubid/cie/builder.rb +149 -24
- data/lib/pubid/cie/identifier.rb +13 -4
- data/lib/pubid/cie/identifiers/bundle.rb +35 -5
- data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
- data/lib/pubid/cie/identifiers/conference.rb +11 -6
- data/lib/pubid/cie/identifiers/corrigendum.rb +17 -23
- data/lib/pubid/cie/identifiers/dual_published.rb +6 -6
- data/lib/pubid/cie/identifiers/identical.rb +9 -9
- data/lib/pubid/cie/identifiers/joint_published.rb +10 -10
- data/lib/pubid/cie/identifiers/proceedings.rb +41 -0
- data/lib/pubid/cie/identifiers/standard.rb +43 -8
- data/lib/pubid/cie/identifiers/supplement.rb +27 -25
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +7 -3
- data/lib/pubid/cie/identifiers.rb +2 -0
- data/lib/pubid/cie/parser.rb +55 -6
- data/lib/pubid/cie/single_identifier.rb +40 -1
- data/lib/pubid/cie/supplement_identifier.rb +29 -16
- data/lib/pubid/cie/urn_generator.rb +11 -8
- data/lib/pubid/cie.rb +7 -2
- data/lib/pubid/components/date.rb +21 -5
- data/lib/pubid/conformance/checks.rb +72 -0
- data/lib/pubid/conformance/corpus/case.rb +55 -0
- data/lib/pubid/conformance/corpus.rb +36 -0
- data/lib/pubid/conformance/generator.rb +212 -0
- data/lib/pubid/conformance/pending.rb +63 -0
- data/lib/pubid/conformance/runner.rb +153 -0
- data/lib/pubid/conformance.rb +55 -0
- data/lib/pubid/core.rb +2 -0
- data/lib/pubid/csa/builder.rb +48 -48
- data/lib/pubid/csa/composite_identifier.rb +18 -7
- data/lib/pubid/csa/identifier.rb +187 -80
- data/lib/pubid/csa/identifiers/bundled.rb +25 -9
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
- data/lib/pubid/csa/identifiers/cec.rb +44 -4
- data/lib/pubid/csa/identifiers/combined.rb +97 -69
- data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
- data/lib/pubid/csa/identifiers/package.rb +4 -4
- data/lib/pubid/csa/parser.rb +12 -8
- data/lib/pubid/csa/renderer.rb +13 -5
- data/lib/pubid/csa/single_identifier.rb +93 -4
- data/lib/pubid/csa/urn_generator.rb +9 -2
- data/lib/pubid/csa/wrapper_identifier.rb +43 -10
- data/lib/pubid/csa.rb +7 -1
- 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 +56 -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 +53 -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 +68 -0
- data/lib/pubid/errors.rb +80 -0
- data/lib/pubid/etsi/builder.rb +13 -4
- data/lib/pubid/etsi/identifier.rb +1 -3
- data/lib/pubid/etsi/identifiers/base.rb +43 -11
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +207 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +45 -3
- data/lib/pubid/etsi/identifiers.rb +0 -1
- data/lib/pubid/etsi/parser.rb +9 -3
- data/lib/pubid/etsi/renderer.rb +8 -2
- data/lib/pubid/etsi.rb +6 -5
- data/lib/pubid/evs/builder.rb +26 -0
- data/lib/pubid/evs/identifier.rb +37 -0
- data/lib/pubid/evs/identifiers/national_adoption.rb +17 -0
- data/lib/pubid/evs/identifiers.rb +9 -0
- data/lib/pubid/evs/parser.rb +27 -0
- data/lib/pubid/evs/renderer.rb +30 -0
- data/lib/pubid/evs/urn_generator.rb +30 -0
- data/lib/pubid/evs/urn_parser.rb +80 -0
- data/lib/pubid/evs.rb +90 -0
- data/lib/pubid/export/exporter.rb +2 -1
- data/lib/pubid/export/flavor_exporter.rb +18 -3
- data/lib/pubid/export.rb +1 -0
- data/lib/pubid/format_detector.rb +1 -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 +88 -0
- data/lib/pubid/gost/builder.rb +185 -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 +50 -0
- data/lib/pubid/iala/builder.rb +22 -27
- data/lib/pubid/iala/identifier.rb +36 -8
- data/lib/pubid/iala/identifiers/advice.rb +1 -1
- data/lib/pubid/iala/identifiers/annex.rb +10 -10
- data/lib/pubid/iala/identifiers/general_assembly.rb +5 -2
- data/lib/pubid/iala/identifiers/guideline.rb +3 -1
- data/lib/pubid/iala/identifiers/letter.rb +1 -1
- data/lib/pubid/iala/identifiers/manual.rb +3 -1
- data/lib/pubid/iala/identifiers/model_course.rb +3 -1
- data/lib/pubid/iala/identifiers/recommendation.rb +3 -1
- data/lib/pubid/iala/identifiers/report.rb +1 -1
- data/lib/pubid/iala/identifiers/resolution.rb +1 -1
- data/lib/pubid/iala/identifiers/standard.rb +3 -1
- data/lib/pubid/iala/identifiers.rb +0 -1
- data/lib/pubid/iala/parser.rb +10 -2
- data/lib/pubid/iala/renderer.rb +1 -1
- data/lib/pubid/iala/urn_generator.rb +1 -1
- data/lib/pubid/iala/urn_parser.rb +24 -3
- data/lib/pubid/iala.rb +5 -4
- 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 +70 -0
- data/lib/pubid/identifier.rb +797 -26
- data/lib/pubid/identifier_metadata.rb +1 -0
- data/lib/pubid/idf/builder.rb +4 -4
- data/lib/pubid/idf/identifier.rb +18 -9
- data/lib/pubid/idf/parser.rb +3 -3
- data/lib/pubid/idf/renderer.rb +5 -5
- data/lib/pubid/idf/supplement_identifier.rb +3 -3
- data/lib/pubid/idf/urn_generator.rb +1 -1
- data/lib/pubid/idf.rb +7 -1
- data/lib/pubid/iec/builder.rb +49 -32
- data/lib/pubid/iec/components.rb +0 -1
- data/lib/pubid/iec/identifier.rb +112 -77
- data/lib/pubid/iec/identifiers/amendment.rb +6 -2
- data/lib/pubid/iec/identifiers/base.rb +2 -2
- data/lib/pubid/iec/identifiers/component_specification.rb +0 -10
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +0 -10
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -2
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +13 -15
- data/lib/pubid/iec/identifiers/guide.rb +0 -16
- data/lib/pubid/iec/identifiers/international_standard.rb +22 -6
- data/lib/pubid/iec/identifiers/operational_document.rb +0 -10
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +0 -12
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +0 -10
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +0 -10
- data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +1 -18
- data/lib/pubid/iec/identifiers/technical_specification.rb +1 -18
- data/lib/pubid/iec/identifiers/technology_report.rb +0 -10
- data/lib/pubid/iec/identifiers/test_report_form.rb +0 -11
- data/lib/pubid/iec/identifiers/vap_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers/white_paper.rb +0 -10
- data/lib/pubid/iec/identifiers/working_document.rb +24 -10
- data/lib/pubid/iec/identifiers.rb +1 -0
- data/lib/pubid/iec/parser.rb +53 -28
- data/lib/pubid/iec/renderer.rb +31 -18
- data/lib/pubid/iec/single_identifier.rb +34 -11
- data/lib/pubid/iec/supplement_identifier.rb +32 -19
- data/lib/pubid/iec/urn_generator.rb +227 -61
- data/lib/pubid/iec/urn_parser.rb +42 -4
- data/lib/pubid/iec.rb +2 -6
- data/lib/pubid/ieee/aiee/builder.rb +17 -3
- data/lib/pubid/ieee/aiee/identifier.rb +46 -62
- data/lib/pubid/ieee/aiee/parser.rb +1 -1
- data/lib/pubid/ieee/builder.rb +386 -69
- data/lib/pubid/ieee/compaction.rb +121 -0
- data/lib/pubid/ieee/components/draft.rb +47 -7
- data/lib/pubid/ieee/identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +62 -5
- data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
- data/lib/pubid/ieee/identifiers/base.rb +148 -18
- data/lib/pubid/ieee/identifiers/code_number.rb +82 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +6 -2
- data/lib/pubid/ieee/identifiers/corrigendum.rb +17 -2
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +24 -3
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +3 -3
- data/lib/pubid/ieee/identifiers/dual_published.rb +58 -3
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +102 -5
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +25 -1
- data/lib/pubid/ieee/identifiers/joint_development.rb +64 -15
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +58 -6
- data/lib/pubid/ieee/identifiers/nesc/base.rb +90 -19
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +20 -5
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +16 -5
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +11 -2
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +18 -3
- data/lib/pubid/ieee/identifiers/nesc.rb +1 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +3 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +14 -6
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +4 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +4 -1
- data/lib/pubid/ieee/identifiers/standard.rb +4 -1
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +26 -7
- data/lib/pubid/ieee/identifiers.rb +2 -1
- data/lib/pubid/ieee/ire/builder.rb +7 -6
- data/lib/pubid/ieee/ire/identifier.rb +48 -33
- data/lib/pubid/ieee/ire/parser.rb +1 -1
- data/lib/pubid/ieee/nesc/builder.rb +33 -20
- data/lib/pubid/ieee/nesc/parser.rb +16 -15
- data/lib/pubid/ieee/parser.rb +462 -44
- data/lib/pubid/ieee/pre_parser.rb +1 -1
- data/lib/pubid/ieee/renderer.rb +158 -57
- data/lib/pubid/ieee/typed_stages.rb +12 -1
- data/lib/pubid/ieee/urn_generator.rb +35 -8
- data/lib/pubid/ieee.rb +63 -4
- data/lib/pubid/ieee_debug.rb +1 -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 +86 -0
- data/lib/pubid/iho/identifier.rb +1 -3
- data/lib/pubid/iho/identifiers/base.rb +11 -10
- data/lib/pubid/iho/identifiers/bibliographic.rb +1 -1
- data/lib/pubid/iho/identifiers/circular_letter.rb +1 -1
- data/lib/pubid/iho/identifiers/miscellaneous.rb +1 -1
- data/lib/pubid/iho/identifiers/publication.rb +1 -1
- data/lib/pubid/iho/identifiers/standard.rb +1 -1
- data/lib/pubid/iho/identifiers.rb +0 -1
- data/lib/pubid/iho/parser.rb +1 -1
- data/lib/pubid/iho.rb +8 -7
- 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 +53 -0
- data/lib/pubid/iso/builder.rb +9 -4
- data/lib/pubid/iso/bundled_identifier.rb +5 -3
- data/lib/pubid/iso/combined_identifier.rb +6 -4
- data/lib/pubid/iso/identifier.rb +29 -8
- data/lib/pubid/iso/identifiers/directives_supplement.rb +12 -12
- data/lib/pubid/iso/normalizer.rb +2 -2
- data/lib/pubid/iso/parser.rb +17 -13
- data/lib/pubid/iso/supplement_identifier.rb +19 -6
- data/lib/pubid/iso/urn_generator.rb +4 -1
- data/lib/pubid/iso/urn_parser.rb +1 -1
- data/lib/pubid/iso.rb +7 -1
- data/lib/pubid/itu/builder.rb +230 -29
- data/lib/pubid/itu/components/code.rb +48 -5
- data/lib/pubid/itu/components/designation.rb +35 -0
- data/lib/pubid/itu/components.rb +1 -0
- data/lib/pubid/itu/identifier.rb +1 -3
- data/lib/pubid/itu/identifiers/addendum.rb +15 -0
- data/lib/pubid/itu/identifiers/amendment.rb +7 -29
- data/lib/pubid/itu/identifiers/annex.rb +13 -2
- 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 +357 -25
- data/lib/pubid/itu/identifiers/combined_identifier.rb +99 -23
- data/lib/pubid/itu/identifiers/corrigendum.rb +16 -23
- 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 +3 -2
- data/lib/pubid/itu/identifiers/report.rb +39 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +3 -1
- data/lib/pubid/itu/identifiers/standard_serialization.rb +58 -0
- data/lib/pubid/itu/identifiers/supplement.rb +119 -14
- data/lib/pubid/itu/identifiers.rb +10 -1
- data/lib/pubid/itu/model.rb +1 -1
- data/lib/pubid/itu/parser.rb +481 -27
- data/lib/pubid/itu/urn_generator.rb +36 -6
- data/lib/pubid/itu/urn_parser.rb +8 -0
- data/lib/pubid/itu.rb +12 -3
- data/lib/pubid/jcgm/builder.rb +24 -14
- data/lib/pubid/jcgm/identifier.rb +10 -0
- data/lib/pubid/jcgm/identifiers/amendment.rb +0 -2
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +3 -3
- data/lib/pubid/jcgm/identifiers/meeting.rb +47 -0
- data/lib/pubid/jcgm/identifiers.rb +2 -0
- data/lib/pubid/jcgm/parser.rb +74 -7
- data/lib/pubid/jcgm/renderer.rb +33 -12
- data/lib/pubid/jcgm/single_identifier.rb +84 -6
- data/lib/pubid/jcgm/supplement_identifier.rb +39 -4
- data/lib/pubid/jcgm/urn_generator.rb +21 -13
- data/lib/pubid/jcgm/urn_parser.rb +164 -10
- data/lib/pubid/jcgm.rb +10 -0
- data/lib/pubid/jis/identifier.rb +62 -3
- data/lib/pubid/jis/parser.rb +1 -1
- data/lib/pubid/jis.rb +1 -0
- data/lib/pubid/nist/builder.rb +29 -9
- data/lib/pubid/nist/caster.rb +7 -45
- data/lib/pubid/nist/circular_supplement_builder.rb +7 -5
- data/lib/pubid/nist/components/stage.rb +2 -2
- data/lib/pubid/nist/components/supplement.rb +5 -2
- data/lib/pubid/nist/configuration.rb +6 -2
- data/lib/pubid/nist/identifier.rb +1 -3
- data/lib/pubid/nist/identifiers/base.rb +133 -39
- data/lib/pubid/nist/identifiers/circular.rb +10 -3
- data/lib/pubid/nist/identifiers/circular_supplement.rb +14 -5
- data/lib/pubid/nist/identifiers/commercial_standard.rb +1 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +1 -1
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +8 -2
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -2
- data/lib/pubid/nist/identifiers/dated_document.rb +1 -1
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +1 -1
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +1 -1
- data/lib/pubid/nist/identifiers/handbook.rb +10 -3
- data/lib/pubid/nist/identifiers/internal_report.rb +13 -6
- data/lib/pubid/nist/identifiers/letter_circular.rb +1 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +15 -7
- data/lib/pubid/nist/identifiers/monograph.rb +15 -8
- data/lib/pubid/nist/identifiers/ncstar.rb +2 -2
- data/lib/pubid/nist/identifiers/nsrds.rb +1 -1
- data/lib/pubid/nist/identifiers/owmwp.rb +1 -1
- data/lib/pubid/nist/identifiers/report.rb +15 -7
- data/lib/pubid/nist/identifiers/special_publication.rb +10 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +1 -1
- data/lib/pubid/nist/identifiers.rb +0 -1
- data/lib/pubid/nist/parser.rb +27 -4
- data/lib/pubid/nist/preprocessor.rb +15 -0
- data/lib/pubid/nist/router.rb +2 -2
- data/lib/pubid/nist/series/ir.rb +0 -3
- data/lib/pubid/nist/supplement_identifier.rb +24 -9
- data/lib/pubid/nist.rb +19 -13
- 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 +80 -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 +72 -0
- data/lib/pubid/oiml/builder.rb +36 -8
- data/lib/pubid/oiml/identifier.rb +9 -1
- data/lib/pubid/oiml/identifiers/basic_publication.rb +2 -0
- data/lib/pubid/oiml/identifiers/bulletin.rb +36 -0
- data/lib/pubid/oiml/identifiers/code_number.rb +90 -0
- data/lib/pubid/oiml/identifiers/document.rb +2 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +2 -0
- data/lib/pubid/oiml/identifiers/guide.rb +2 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +2 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +2 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +2 -0
- data/lib/pubid/oiml/identifiers.rb +1 -0
- data/lib/pubid/oiml/parser.rb +12 -13
- data/lib/pubid/oiml/renderer.rb +13 -13
- data/lib/pubid/oiml/single_identifier.rb +41 -37
- data/lib/pubid/oiml/supplement_identifier.rb +36 -9
- data/lib/pubid/oiml/urn_parser.rb +23 -6
- data/lib/pubid/oiml.rb +10 -0
- data/lib/pubid/omg/builder.rb +20 -0
- data/lib/pubid/omg/identifier.rb +61 -0
- data/lib/pubid/omg/identifiers/specification.rb +32 -0
- data/lib/pubid/omg/identifiers.rb +9 -0
- data/lib/pubid/omg/parser.rb +93 -0
- data/lib/pubid/omg/renderer.rb +31 -0
- data/lib/pubid/omg.rb +52 -0
- data/lib/pubid/parser/grammar.rb +74 -0
- data/lib/pubid/parser.rb +2 -0
- data/lib/pubid/parsers/mr_string.rb +120 -7
- data/lib/pubid/plateau/builder.rb +8 -4
- data/lib/pubid/plateau/identifier.rb +1 -3
- data/lib/pubid/plateau/identifiers/base.rb +1 -6
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -1
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/identifiers.rb +0 -1
- data/lib/pubid/plateau/parser.rb +16 -6
- data/lib/pubid/plateau/renderer.rb +1 -1
- data/lib/pubid/plateau/supplement_identifier.rb +11 -11
- data/lib/pubid/plateau.rb +14 -4
- data/lib/pubid/prefixes_support.rb +1 -0
- data/lib/pubid/renderers/annotator.rb +233 -0
- data/lib/pubid/renderers/base.rb +13 -0
- data/lib/pubid/renderers/directives_renderer.rb +3 -3
- data/lib/pubid/renderers/human_readable.rb +6 -4
- data/lib/pubid/renderers/mr_string.rb +54 -6
- data/lib/pubid/renderers/supplement_renderer.rb +1 -1
- data/lib/pubid/renderers.rb +1 -0
- data/lib/pubid/rendering/numbering.rb +25 -7
- data/lib/pubid/rendering/supplement.rb +4 -4
- data/lib/pubid/rendering.rb +1 -0
- data/lib/pubid/sae/builder.rb +1 -1
- data/lib/pubid/sae/identifier.rb +1 -3
- data/lib/pubid/sae/identifiers/base.rb +19 -9
- data/lib/pubid/sae/identifiers.rb +0 -1
- data/lib/pubid/sae/parser.rb +1 -1
- data/lib/pubid/sae.rb +4 -3
- data/lib/pubid/schema/declaration.rb +33 -0
- data/lib/pubid/schema/error.rb +14 -0
- data/lib/pubid/schema/identifier_type.rb +23 -0
- data/lib/pubid/schema/loader.rb +117 -0
- data/lib/pubid/schema/typed_stage.rb +24 -0
- data/lib/pubid/schema.rb +25 -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 +84 -0
- data/lib/pubid/type_resolver.rb +74 -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 +47 -0
- data/lib/pubid/urn_parser/errors.rb +8 -1
- data/lib/pubid/urn_parser.rb +1 -0
- data/lib/pubid/utils.rb +1 -0
- data/lib/pubid/version.rb +1 -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 +68 -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 +38 -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 +82 -0
- data/lib/pubid.rb +424 -22
- data/lib/tasks/conformance.rake +34 -0
- data/lib/tasks/docs.rake +3 -3
- data/lib/tasks/schema.rake +88 -0
- data/schema/core/joint_prefixes.yaml +24 -0
- data/schema/iec.yaml +1017 -0
- data/schema/iso.yaml +1586 -0
- data/schema/schema.schema.yaml +96 -0
- metadata +241 -19
- data/archived-gems/pubid-ccsds/update_codes.yaml +0 -1
- data/archived-gems/pubid-iec/stages.yaml +0 -129
- data/archived-gems/pubid-iec/update_codes.yaml +0 -67
- data/archived-gems/pubid-ieee/update_codes.yaml +0 -104
- data/archived-gems/pubid-iso/stages.yaml +0 -106
- data/archived-gems/pubid-iso/update_codes.yaml +0 -4
- data/archived-gems/pubid-itu/i18n.yaml +0 -13
- data/archived-gems/pubid-itu/series.yaml +0 -42
- data/archived-gems/pubid-nist/publishers.yaml +0 -6
- data/archived-gems/pubid-nist/update_codes.yaml +0 -93
- data/archived-gems/pubid-plateau/update_codes.yaml +0 -6
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +0 -48
- data/lib/pubid/cie/components/code.rb +0 -80
- data/lib/pubid/iala/identifiers/base.rb +0 -14
- data/lib/pubid/iec/components/code.rb +0 -36
- /data/{archived-gems/pubid-nist → data/nist}/stages.yaml +0 -0
|
@@ -23,6 +23,17 @@ module Pubid
|
|
|
23
23
|
# Compare first identifier
|
|
24
24
|
identifiers.first <=> other.identifiers.first
|
|
25
25
|
end
|
|
26
|
+
|
|
27
|
+
# As for BundledIdentifier: a set holds no number of its own, so walk
|
|
28
|
+
# to the first member for the relaton-index key.
|
|
29
|
+
#
|
|
30
|
+
# NOTE the members are frequently a FOREIGN flavor (BS ISO ... holds
|
|
31
|
+
# Pubid::Iso identifiers), which `to_hash` still rejects — see the
|
|
32
|
+
# hand-off bsi-set-cross-flavor-type. `#root` is unaffected by that:
|
|
33
|
+
# it only reads the object, never serializes it.
|
|
34
|
+
def root
|
|
35
|
+
identifiers&.first ? identifiers.first.root : self
|
|
36
|
+
end
|
|
26
37
|
end
|
|
27
38
|
end
|
|
28
39
|
end
|
|
@@ -6,7 +6,16 @@ module Pubid
|
|
|
6
6
|
# Standalone Amendment identifier (no base reference)
|
|
7
7
|
# Examples: "AMD 11015", "(AMD 10971)", "AMD Corrigendum 14716"
|
|
8
8
|
class StandaloneAmendment < SingleIdentifier
|
|
9
|
-
|
|
9
|
+
# The amendment number lives in the `number` inherited from
|
|
10
|
+
# SingleIdentifier — already a Bsi::Components::Code, exactly what the
|
|
11
|
+
# deleted `amendment_number` was, so nothing is retyped. It used to sit
|
|
12
|
+
# under the private name, leaving `number` nil and `root.number` "".
|
|
13
|
+
#
|
|
14
|
+
# A standalone amendment is its OWN document (there is no base standard
|
|
15
|
+
# to walk to — that is what "standalone" means), so it needs a real
|
|
16
|
+
# number rather than a #root override. `Identifiers::Amendment`, the
|
|
17
|
+
# attached kind, keeps its own `amendment_number` and is untouched:
|
|
18
|
+
# there the ordinal is a supplement ordinal, not the document number.
|
|
10
19
|
attribute :corrigendum, :boolean, default: false
|
|
11
20
|
attribute :parenthesized, :boolean, default: false
|
|
12
21
|
|
|
@@ -9,7 +9,7 @@ module Pubid
|
|
|
9
9
|
# Forward: "BS 1000:Supplement No. 1:1972", "BS 1722-1 Supplement No. 1:1974"
|
|
10
10
|
# Reverse: "Supplement No. 1 (1970) to BS 1831:1969"
|
|
11
11
|
class SupplementDocument < SingleIdentifier
|
|
12
|
-
attribute :
|
|
12
|
+
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
13
13
|
attribute :supplement_number, :string
|
|
14
14
|
attribute :supplement_year, :integer
|
|
15
15
|
attribute :supplement_type, :string, default: -> {
|
|
@@ -21,7 +21,7 @@ module Pubid
|
|
|
21
21
|
} # Separator before Supplement (":" or " ")
|
|
22
22
|
|
|
23
23
|
def publisher
|
|
24
|
-
|
|
24
|
+
base&.publisher
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
end
|
|
@@ -12,24 +12,24 @@ module Pubid
|
|
|
12
12
|
# PAS 96:2017 - TC
|
|
13
13
|
# PP 7722:2006 BOOK
|
|
14
14
|
class ValueAddedPublication < SingleIdentifier
|
|
15
|
-
attribute :
|
|
15
|
+
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
16
16
|
attribute :format, :string, values: ["PDF", "TC", "BOOK"]
|
|
17
17
|
|
|
18
|
-
# Delegate common attributes to
|
|
18
|
+
# Delegate common attributes to base
|
|
19
19
|
def publisher
|
|
20
|
-
|
|
20
|
+
base&.publisher
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def number
|
|
24
|
-
|
|
24
|
+
base&.number
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def year
|
|
28
|
-
|
|
28
|
+
base&.year
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def date
|
|
32
|
-
|
|
32
|
+
base&.date
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
data/lib/pubid/bsi/parser.rb
CHANGED
|
@@ -4,7 +4,7 @@ require "parslet"
|
|
|
4
4
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Bsi
|
|
7
|
-
class Parser <
|
|
7
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
8
8
|
# Case-insensitive string match (Parslet 2.0 has no built-in `stri`).
|
|
9
9
|
# Each character becomes a two-case character class; other characters
|
|
10
10
|
# (spaces, punctuation) match verbatim.
|
data/lib/pubid/bsi/renderer.rb
CHANGED
|
@@ -94,6 +94,16 @@ module Pubid
|
|
|
94
94
|
|
|
95
95
|
private
|
|
96
96
|
|
|
97
|
+
# Read a value that may be a component or a bare scalar. BSI's own
|
|
98
|
+
# `number`/`part`/`subpart` are plain strings, but a bundle member or an
|
|
99
|
+
# adopted identifier can be a foreign one (ISO, IEC, CEN/CENELEC) whose
|
|
100
|
+
# equivalents are still a Components::Code.
|
|
101
|
+
def component_str(value)
|
|
102
|
+
return "" if value.nil?
|
|
103
|
+
|
|
104
|
+
(value.respond_to?(:render) ? value.render(context: @context) : value).to_s
|
|
105
|
+
end
|
|
106
|
+
|
|
97
107
|
# ------------------------------------------------------------------
|
|
98
108
|
# SingleIdentifier (base BSI identifier)
|
|
99
109
|
# ------------------------------------------------------------------
|
|
@@ -109,7 +119,7 @@ module Pubid
|
|
|
109
119
|
end
|
|
110
120
|
|
|
111
121
|
if id.number
|
|
112
|
-
number_str = id.number
|
|
122
|
+
number_str = id.number
|
|
113
123
|
|
|
114
124
|
if id.second_number
|
|
115
125
|
second_val = id.second_number.render(context: @context)
|
|
@@ -118,13 +128,13 @@ module Pubid
|
|
|
118
128
|
|
|
119
129
|
space_separated = id.space_separated_part
|
|
120
130
|
if id.part
|
|
121
|
-
part_val = id.part
|
|
131
|
+
part_val = id.part
|
|
122
132
|
part_str = part_val.to_s.strip
|
|
123
133
|
separator = space_separated ? " " : "-"
|
|
124
134
|
number_str += "#{separator}#{part_str}"
|
|
125
135
|
end
|
|
126
136
|
if id.subpart
|
|
127
|
-
subpart_val = id.subpart
|
|
137
|
+
subpart_val = id.subpart
|
|
128
138
|
subpart_str = subpart_val.to_s.strip
|
|
129
139
|
number_str += "-#{subpart_str}"
|
|
130
140
|
end
|
|
@@ -160,13 +170,13 @@ module Pubid
|
|
|
160
170
|
# ------------------------------------------------------------------
|
|
161
171
|
|
|
162
172
|
def render_addendum_document(id, opts)
|
|
163
|
-
result = id.
|
|
173
|
+
result = id.base.to_s(**opts)
|
|
164
174
|
|
|
165
|
-
base_has_year = id.
|
|
175
|
+
base_has_year = id.base.to_s =~ /:(\d{4})$/
|
|
166
176
|
|
|
167
177
|
sep = if id.separator == ":"
|
|
168
178
|
":"
|
|
169
|
-
elsif base_has_year && id.
|
|
179
|
+
elsif base_has_year && id.base.to_s !~ /:\d{4}:/
|
|
170
180
|
" "
|
|
171
181
|
else
|
|
172
182
|
id.separator
|
|
@@ -202,7 +212,7 @@ module Pubid
|
|
|
202
212
|
end
|
|
203
213
|
|
|
204
214
|
result = prefix
|
|
205
|
-
result += " #{id.
|
|
215
|
+
result += " #{id.adopted}" if id.adopted
|
|
206
216
|
result += " ED#{id.edition}" if id.edition
|
|
207
217
|
|
|
208
218
|
result += " (R#{id.reaffirmation_year})" if id.reaffirmation_year
|
|
@@ -227,7 +237,7 @@ module Pubid
|
|
|
227
237
|
end
|
|
228
238
|
|
|
229
239
|
result = prefix
|
|
230
|
-
result += " #{id.
|
|
240
|
+
result += " #{id.adopted}" if id.adopted
|
|
231
241
|
result += " ED#{id.edition}" if id.edition
|
|
232
242
|
|
|
233
243
|
result += " (R#{id.reaffirmation_year})" if id.reaffirmation_year
|
|
@@ -249,14 +259,14 @@ module Pubid
|
|
|
249
259
|
parts << id.prefix if id.prefix
|
|
250
260
|
|
|
251
261
|
if id.number
|
|
252
|
-
number_str = id.number
|
|
262
|
+
number_str = id.number
|
|
253
263
|
|
|
254
264
|
if id.part
|
|
255
|
-
part_val = id.part
|
|
265
|
+
part_val = id.part
|
|
256
266
|
number_str += "-#{part_val}"
|
|
257
267
|
end
|
|
258
268
|
if id.subpart
|
|
259
|
-
subpart_val = id.subpart
|
|
269
|
+
subpart_val = id.subpart
|
|
260
270
|
number_str += "-#{subpart_val}"
|
|
261
271
|
end
|
|
262
272
|
|
|
@@ -289,7 +299,7 @@ module Pubid
|
|
|
289
299
|
end
|
|
290
300
|
|
|
291
301
|
def render_amendment(id)
|
|
292
|
-
base = id.
|
|
302
|
+
base = id.base ? id.base.to_s : ""
|
|
293
303
|
|
|
294
304
|
if id.amd_suffix_form
|
|
295
305
|
# Trailing " AMD5" / " AMD AA" suffix form
|
|
@@ -321,8 +331,10 @@ module Pubid
|
|
|
321
331
|
parts_list = id.identifiers[1..].map do |idd|
|
|
322
332
|
part_val = idd.class.attributes.key?(:part) ? idd.part : nil
|
|
323
333
|
if part_val
|
|
324
|
-
|
|
325
|
-
|
|
334
|
+
# A bundle member may be a foreign identifier (ISO, CEN/CENELEC),
|
|
335
|
+
# whose `part` is still a Components::Code, so read through
|
|
336
|
+
# whichever shape it holds.
|
|
337
|
+
component_str(part_val)
|
|
326
338
|
else
|
|
327
339
|
idd.to_s
|
|
328
340
|
end
|
|
@@ -350,23 +362,23 @@ module Pubid
|
|
|
350
362
|
abbrev_str = prefix.to_s
|
|
351
363
|
end
|
|
352
364
|
if idd.number
|
|
353
|
-
number_val = idd.number
|
|
365
|
+
number_val = idd.number
|
|
354
366
|
abbrev_str += " " if !abbrev_str.empty?
|
|
355
367
|
abbrev_str += number_val.to_s
|
|
356
368
|
end
|
|
357
369
|
if idd.part
|
|
358
|
-
part_val = idd.part
|
|
370
|
+
part_val = idd.part
|
|
359
371
|
abbrev_str += "-#{part_val}"
|
|
360
372
|
end
|
|
361
373
|
parts << abbrev_str
|
|
362
374
|
else
|
|
363
375
|
abbrev_str = ""
|
|
364
376
|
if idd.number
|
|
365
|
-
number_val = idd.number
|
|
377
|
+
number_val = idd.number
|
|
366
378
|
abbrev_str = number_val.to_s
|
|
367
379
|
end
|
|
368
380
|
if idd.part
|
|
369
|
-
part_val = idd.part
|
|
381
|
+
part_val = idd.part
|
|
370
382
|
abbrev_str += "-#{part_val}"
|
|
371
383
|
end
|
|
372
384
|
parts << abbrev_str
|
|
@@ -394,7 +406,7 @@ module Pubid
|
|
|
394
406
|
"00"
|
|
395
407
|
end
|
|
396
408
|
|
|
397
|
-
"#{year_str}/#{id.
|
|
409
|
+
"#{year_str}/#{id.number} DC"
|
|
398
410
|
end
|
|
399
411
|
|
|
400
412
|
def render_consolidated_identifier(id, opts)
|
|
@@ -471,7 +483,7 @@ module Pubid
|
|
|
471
483
|
end
|
|
472
484
|
|
|
473
485
|
def render_corrigendum(id)
|
|
474
|
-
result = id.
|
|
486
|
+
result = id.base ? id.base.to_s : ""
|
|
475
487
|
result += "#{id.separator}C"
|
|
476
488
|
result += id.corrigendum_number.to_s if id.corrigendum_number
|
|
477
489
|
result += ":#{id.corrigendum_year}" if id.corrigendum_year
|
|
@@ -483,7 +495,7 @@ module Pubid
|
|
|
483
495
|
parts << "BS"
|
|
484
496
|
|
|
485
497
|
if id.number
|
|
486
|
-
number_str = id.number
|
|
498
|
+
number_str = id.number
|
|
487
499
|
parts << number_str
|
|
488
500
|
end
|
|
489
501
|
|
|
@@ -507,9 +519,9 @@ module Pubid
|
|
|
507
519
|
parts << "DISC"
|
|
508
520
|
|
|
509
521
|
if id.number
|
|
510
|
-
number_str = id.number
|
|
522
|
+
number_str = id.number
|
|
511
523
|
if id.part
|
|
512
|
-
part_val = id.part
|
|
524
|
+
part_val = id.part
|
|
513
525
|
number_str += "-#{part_val.to_s.strip}"
|
|
514
526
|
end
|
|
515
527
|
parts << "PD #{number_str}"
|
|
@@ -529,14 +541,14 @@ module Pubid
|
|
|
529
541
|
parts << type_abbr
|
|
530
542
|
|
|
531
543
|
if id.number
|
|
532
|
-
number_str = id.number
|
|
544
|
+
number_str = id.number
|
|
533
545
|
|
|
534
546
|
if id.part
|
|
535
|
-
part_val = id.part
|
|
547
|
+
part_val = id.part
|
|
536
548
|
number_str += "-#{part_val.to_s.strip}"
|
|
537
549
|
end
|
|
538
550
|
if id.subpart
|
|
539
|
-
subpart_val = id.subpart
|
|
551
|
+
subpart_val = id.subpart
|
|
540
552
|
number_str += "-#{subpart_val.to_s.strip}"
|
|
541
553
|
end
|
|
542
554
|
|
|
@@ -562,14 +574,14 @@ module Pubid
|
|
|
562
574
|
parts << "EP"
|
|
563
575
|
|
|
564
576
|
if id.number
|
|
565
|
-
number_str = id.number
|
|
577
|
+
number_str = id.number
|
|
566
578
|
|
|
567
579
|
if id.part
|
|
568
|
-
part_val = id.part
|
|
580
|
+
part_val = id.part
|
|
569
581
|
number_str += "-#{part_val.to_s.strip}"
|
|
570
582
|
end
|
|
571
583
|
if id.subpart
|
|
572
|
-
subpart_val = id.subpart
|
|
584
|
+
subpart_val = id.subpart
|
|
573
585
|
number_str += "-#{subpart_val.to_s.strip}"
|
|
574
586
|
end
|
|
575
587
|
|
|
@@ -589,7 +601,7 @@ module Pubid
|
|
|
589
601
|
end
|
|
590
602
|
|
|
591
603
|
def render_expert_commentary(id)
|
|
592
|
-
base_str = id.
|
|
604
|
+
base_str = id.base.to_s
|
|
593
605
|
base_str = base_str.sub(/ (Expert Commentary|ExComm(\s*\(.*\))?)$/, "")
|
|
594
606
|
|
|
595
607
|
case id.format
|
|
@@ -607,14 +619,14 @@ module Pubid
|
|
|
607
619
|
parts << "BS"
|
|
608
620
|
|
|
609
621
|
if id.number
|
|
610
|
-
number_str = id.number
|
|
622
|
+
number_str = id.number
|
|
611
623
|
|
|
612
624
|
if id.part
|
|
613
|
-
part_val = id.part
|
|
625
|
+
part_val = id.part
|
|
614
626
|
number_str += "-#{part_val}"
|
|
615
627
|
end
|
|
616
628
|
if id.subpart
|
|
617
|
-
subpart_val = id.subpart
|
|
629
|
+
subpart_val = id.subpart
|
|
618
630
|
number_str += "-#{subpart_val}"
|
|
619
631
|
end
|
|
620
632
|
|
|
@@ -637,13 +649,13 @@ module Pubid
|
|
|
637
649
|
parts << "BSI Flex"
|
|
638
650
|
|
|
639
651
|
if id.number
|
|
640
|
-
number_str = id.number
|
|
652
|
+
number_str = id.number
|
|
641
653
|
if id.part
|
|
642
|
-
part_val = id.part
|
|
654
|
+
part_val = id.part
|
|
643
655
|
number_str += "-#{part_val}"
|
|
644
656
|
end
|
|
645
657
|
if id.subpart
|
|
646
|
-
subpart_val = id.subpart
|
|
658
|
+
subpart_val = id.subpart
|
|
647
659
|
number_str += "-#{subpart_val}"
|
|
648
660
|
end
|
|
649
661
|
parts << number_str
|
|
@@ -665,9 +677,9 @@ module Pubid
|
|
|
665
677
|
def render_handbook(id)
|
|
666
678
|
abbr = id.original_abbr || "Handbook"
|
|
667
679
|
|
|
668
|
-
number_str = id.number
|
|
680
|
+
number_str = id.number
|
|
669
681
|
if id.part
|
|
670
|
-
part_val = id.part
|
|
682
|
+
part_val = id.part
|
|
671
683
|
number_str += "-#{part_val.to_s.strip}"
|
|
672
684
|
end
|
|
673
685
|
|
|
@@ -681,7 +693,7 @@ module Pubid
|
|
|
681
693
|
parts << id.publisher.to_s if id.publisher
|
|
682
694
|
|
|
683
695
|
if id.number
|
|
684
|
-
number_str = id.number
|
|
696
|
+
number_str = id.number
|
|
685
697
|
parts << number_str
|
|
686
698
|
end
|
|
687
699
|
|
|
@@ -708,9 +720,9 @@ module Pubid
|
|
|
708
720
|
parts << id.publisher.to_s if id.publisher
|
|
709
721
|
|
|
710
722
|
if id.number
|
|
711
|
-
number_str = id.number
|
|
723
|
+
number_str = id.number
|
|
712
724
|
if id.part
|
|
713
|
-
part_val = id.part
|
|
725
|
+
part_val = id.part
|
|
714
726
|
number_str += "-#{part_val}"
|
|
715
727
|
end
|
|
716
728
|
parts << number_str
|
|
@@ -771,7 +783,7 @@ module Pubid
|
|
|
771
783
|
parts << type_abbr
|
|
772
784
|
|
|
773
785
|
if id.number
|
|
774
|
-
number_str = id.number
|
|
786
|
+
number_str = id.number
|
|
775
787
|
|
|
776
788
|
if id.second_number
|
|
777
789
|
second_val = id.second_number.render(context: @context)
|
|
@@ -779,11 +791,11 @@ module Pubid
|
|
|
779
791
|
end
|
|
780
792
|
|
|
781
793
|
if id.part
|
|
782
|
-
part_val = id.part
|
|
794
|
+
part_val = id.part
|
|
783
795
|
number_str += "-#{part_val.to_s.strip}"
|
|
784
796
|
end
|
|
785
797
|
if id.subpart
|
|
786
|
-
subpart_val = id.subpart
|
|
798
|
+
subpart_val = id.subpart
|
|
787
799
|
number_str += "-#{subpart_val.to_s.strip}"
|
|
788
800
|
end
|
|
789
801
|
|
|
@@ -811,7 +823,7 @@ module Pubid
|
|
|
811
823
|
parts << type_abbr
|
|
812
824
|
|
|
813
825
|
if id.number
|
|
814
|
-
number_str = id.number
|
|
826
|
+
number_str = id.number
|
|
815
827
|
|
|
816
828
|
if id.second_number
|
|
817
829
|
second_val = id.second_number.render(context: @context)
|
|
@@ -819,11 +831,11 @@ module Pubid
|
|
|
819
831
|
end
|
|
820
832
|
|
|
821
833
|
if id.part
|
|
822
|
-
part_val = id.part
|
|
834
|
+
part_val = id.part
|
|
823
835
|
number_str += "-#{part_val.to_s.strip}"
|
|
824
836
|
end
|
|
825
837
|
if id.subpart
|
|
826
|
-
subpart_val = id.subpart
|
|
838
|
+
subpart_val = id.subpart
|
|
827
839
|
number_str += "-#{subpart_val.to_s.strip}"
|
|
828
840
|
end
|
|
829
841
|
|
|
@@ -850,7 +862,7 @@ module Pubid
|
|
|
850
862
|
parts << id.publisher.to_s if id.publisher
|
|
851
863
|
|
|
852
864
|
if id.number
|
|
853
|
-
number_str = id.number
|
|
865
|
+
number_str = id.number
|
|
854
866
|
parts << number_str
|
|
855
867
|
end
|
|
856
868
|
|
|
@@ -886,16 +898,16 @@ module Pubid
|
|
|
886
898
|
|
|
887
899
|
def render_standalone_amendment(id)
|
|
888
900
|
base = if id.corrigendum
|
|
889
|
-
"AMD Corrigendum #{id.
|
|
901
|
+
"AMD Corrigendum #{id.number}"
|
|
890
902
|
else
|
|
891
|
-
"AMD #{id.
|
|
903
|
+
"AMD #{id.number}"
|
|
892
904
|
end
|
|
893
905
|
|
|
894
906
|
id.parenthesized ? "(#{base})" : base
|
|
895
907
|
end
|
|
896
908
|
|
|
897
909
|
def render_supplement_document(id)
|
|
898
|
-
base_str = id.
|
|
910
|
+
base_str = id.base.to_s
|
|
899
911
|
|
|
900
912
|
if id.reverse_format
|
|
901
913
|
supplement_str = if id.supplement_type == "No."
|
|
@@ -919,14 +931,14 @@ module Pubid
|
|
|
919
931
|
parts << "BS"
|
|
920
932
|
|
|
921
933
|
if id.number
|
|
922
|
-
number_str = id.number
|
|
934
|
+
number_str = id.number
|
|
923
935
|
|
|
924
936
|
if id.part
|
|
925
|
-
part_val = id.part
|
|
937
|
+
part_val = id.part
|
|
926
938
|
number_str += "-#{part_val}"
|
|
927
939
|
end
|
|
928
940
|
if id.subpart
|
|
929
|
-
subpart_val = id.subpart
|
|
941
|
+
subpart_val = id.subpart
|
|
930
942
|
number_str += "-#{subpart_val}"
|
|
931
943
|
end
|
|
932
944
|
|
|
@@ -949,14 +961,14 @@ module Pubid
|
|
|
949
961
|
parts << "TS"
|
|
950
962
|
|
|
951
963
|
if id.number
|
|
952
|
-
number_str = id.number
|
|
964
|
+
number_str = id.number
|
|
953
965
|
|
|
954
966
|
if id.part
|
|
955
|
-
part_val = id.part
|
|
967
|
+
part_val = id.part
|
|
956
968
|
number_str += "-#{part_val}"
|
|
957
969
|
end
|
|
958
970
|
if id.subpart
|
|
959
|
-
subpart_val = id.subpart
|
|
971
|
+
subpart_val = id.subpart
|
|
960
972
|
number_str += "-#{subpart_val}"
|
|
961
973
|
end
|
|
962
974
|
|
|
@@ -979,7 +991,7 @@ module Pubid
|
|
|
979
991
|
parts << "BS"
|
|
980
992
|
|
|
981
993
|
if id.number
|
|
982
|
-
number_str = id.number
|
|
994
|
+
number_str = id.number
|
|
983
995
|
parts << number_str
|
|
984
996
|
end
|
|
985
997
|
|
|
@@ -998,7 +1010,7 @@ module Pubid
|
|
|
998
1010
|
end
|
|
999
1011
|
|
|
1000
1012
|
def render_value_added_publication(id, opts)
|
|
1001
|
-
base_str = id.
|
|
1013
|
+
base_str = id.base.to_s(**opts)
|
|
1002
1014
|
|
|
1003
1015
|
case id.format
|
|
1004
1016
|
when "TC"
|
|
@@ -9,8 +9,13 @@ module Pubid
|
|
|
9
9
|
# `from_hash` (no facade needed).
|
|
10
10
|
class Identifier < ::Pubid::Identifier
|
|
11
11
|
def self.parse(string)
|
|
12
|
+
unless string.is_a?(String)
|
|
13
|
+
raise Pubid::Errors::InvalidInputError,
|
|
14
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
15
|
+
end
|
|
16
|
+
|
|
12
17
|
if string.length > Pubid::MAX_INPUT_LENGTH
|
|
13
|
-
raise
|
|
18
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
14
19
|
end
|
|
15
20
|
|
|
16
21
|
# Delegate to IEC for bare IEC identifiers. This handles IEC-specific
|
|
@@ -27,8 +32,6 @@ module Pubid
|
|
|
27
32
|
|
|
28
33
|
parsed = parser.parse(string)
|
|
29
34
|
Builder.build(parsed)
|
|
30
|
-
rescue Parslet::ParseFailed => e
|
|
31
|
-
raise StandardError, "Failed to parse '#{string}': #{e.message}"
|
|
32
35
|
end
|
|
33
36
|
|
|
34
37
|
attribute :publisher, Bsi::Components::Publisher, default: -> {
|
|
@@ -36,10 +39,16 @@ module Pubid
|
|
|
36
39
|
}
|
|
37
40
|
attribute :prefix, :string # Specialized prefix (A, AU, C, M, 2A, etc.)
|
|
38
41
|
attribute :flex_prefix, :string # Flex type prefix (CECC, E9111, M, etc.)
|
|
39
|
-
|
|
42
|
+
# `number`/`part`/`subpart` are plain strings, not Bsi::Components::Code:
|
|
43
|
+
# BSI never populates a field of that component beyond `value`. This class
|
|
44
|
+
# body is the sole home of Pubid::Bsi::Identifier (bsi/identifier.rb is a
|
|
45
|
+
# comment-only load stub), so declaring here is safe - every subclass body
|
|
46
|
+
# opens after it has run. `second_number` keeps the component type: it is
|
|
47
|
+
# not one of the three attributes the shared base declares.
|
|
48
|
+
attribute :number, :string
|
|
40
49
|
attribute :iteration, :string # For bracket notation like 1000[9]
|
|
41
|
-
attribute :part,
|
|
42
|
-
attribute :subpart,
|
|
50
|
+
attribute :part, :string
|
|
51
|
+
attribute :subpart, :string
|
|
43
52
|
attribute :second_number, Bsi::Components::Code # For collections like PAS 2035/2030
|
|
44
53
|
attribute :date, Bsi::Components::Date
|
|
45
54
|
attribute :stage, Pubid::Components::Stage
|
|
@@ -61,7 +70,7 @@ module Pubid
|
|
|
61
70
|
return num_cmp unless num_cmp.zero?
|
|
62
71
|
|
|
63
72
|
# Then by part
|
|
64
|
-
part_cmp = (part ||
|
|
73
|
+
part_cmp = (part || "0").to_s <=> (other.part || "0").to_s
|
|
65
74
|
return part_cmp unless part_cmp.zero?
|
|
66
75
|
|
|
67
76
|
# Then by date
|
|
@@ -75,6 +84,54 @@ module Pubid
|
|
|
75
84
|
0
|
|
76
85
|
end
|
|
77
86
|
end
|
|
87
|
+
|
|
88
|
+
# Annex F series groupings per "Rules for the structure and drafting
|
|
89
|
+
# of UK standards" (BSI, 2017), F.1.3-F.1.5. Each maps a `prefix`
|
|
90
|
+
# token to the broader series category.
|
|
91
|
+
SERIES_CATEGORIES = {
|
|
92
|
+
# F.1.3 Automobile
|
|
93
|
+
"AU" => :automotive,
|
|
94
|
+
# F.1.4 Aerospace
|
|
95
|
+
"A" => :aerospace, "B" => :aerospace, "C" => :aerospace,
|
|
96
|
+
"F" => :aerospace, "G" => :aerospace, "HC" => :aerospace,
|
|
97
|
+
"L" => :aerospace, "S" => :aerospace, "SP" => :aerospace,
|
|
98
|
+
"X" => :aerospace, "M" => :aerospace, "TA" => :aerospace,
|
|
99
|
+
"2A" => :aerospace, "2B" => :aerospace, "2C" => :aerospace,
|
|
100
|
+
"2F" => :aerospace, "2G" => :aerospace, "2HC" => :aerospace,
|
|
101
|
+
"2HR" => :aerospace, "2L" => :aerospace, "2M" => :aerospace,
|
|
102
|
+
"2S" => :aerospace, "2SP" => :aerospace, "2TA" => :aerospace,
|
|
103
|
+
"2X" => :aerospace, "3A" => :aerospace, "3B" => :aerospace,
|
|
104
|
+
"3F" => :aerospace, "3G" => :aerospace, "3HR" => :aerospace,
|
|
105
|
+
"3J" => :aerospace, "3L" => :aerospace, "3S" => :aerospace,
|
|
106
|
+
"3TA" => :aerospace, "4F" => :aerospace, "4L" => :aerospace,
|
|
107
|
+
"4S" => :aerospace, "5S" => :aerospace, "7S" => :aerospace,
|
|
108
|
+
# F.1.5 Marine
|
|
109
|
+
"MA" => :marine, "PL" => :marine, "QC" => :marine,
|
|
110
|
+
}.freeze
|
|
111
|
+
|
|
112
|
+
# Series accessor — semantically named alias for `prefix` per
|
|
113
|
+
# issue #252. Returns the prefix token (e.g., "AU", "MA", "2A").
|
|
114
|
+
def series
|
|
115
|
+
prefix
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Series category — one of :automotive, :aerospace, :marine, or nil
|
|
119
|
+
# when the identifier doesn't carry a recognized Annex F prefix.
|
|
120
|
+
def series_category
|
|
121
|
+
SERIES_CATEGORIES[prefix.to_s] if prefix
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def automotive?
|
|
125
|
+
series_category == :automotive
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def aerospace?
|
|
129
|
+
series_category == :aerospace
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def marine?
|
|
133
|
+
series_category == :marine
|
|
134
|
+
end
|
|
78
135
|
end
|
|
79
136
|
|
|
80
137
|
# Backward-compatible alias: BSI's base class is Pubid::Bsi::Identifier.
|
|
@@ -21,8 +21,17 @@ module Pubid
|
|
|
21
21
|
parts << identifier.flex_prefix.to_s.downcase
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
# Fall back to the wrapped document's number. A wrapper — an adopted
|
|
25
|
+
# European norm, a bundle, a set — carries no number of its own, and
|
|
26
|
+
# `AdoptedEuropeanNorm#number` only delegates ONE level, so a
|
|
27
|
+
# "DD ENV ISO 11079:1999" (which adopts a CEN prestandard that is
|
|
28
|
+
# itself a wrapper around the ISO standard) emitted the identity-free
|
|
29
|
+
# `urn:bsi:dd` — the same URN as every other DD adoption. `#root`
|
|
30
|
+
# recurses to the origin document, and for a non-wrapper it is `self`,
|
|
31
|
+
# so this changes nothing for an ordinary identifier.
|
|
32
|
+
urn_number = identifier.number || identifier.root.number
|
|
33
|
+
if urn_number
|
|
34
|
+
number = urn_number.to_s
|
|
26
35
|
if identifier.iteration && !identifier.iteration.empty?
|
|
27
36
|
number += "[#{identifier.iteration}]"
|
|
28
37
|
end
|
data/lib/pubid/bsi.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "pubid"
|
|
3
4
|
module Pubid
|
|
4
5
|
module Bsi
|
|
5
6
|
extend Pubid::PrefixesSupport
|
|
@@ -221,8 +222,13 @@ module Pubid
|
|
|
221
222
|
].freeze
|
|
222
223
|
|
|
223
224
|
def self.parse(string)
|
|
225
|
+
unless string.is_a?(String)
|
|
226
|
+
raise Pubid::Errors::InvalidInputError,
|
|
227
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
228
|
+
end
|
|
229
|
+
|
|
224
230
|
if string.length > Pubid::MAX_INPUT_LENGTH
|
|
225
|
-
raise
|
|
231
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
226
232
|
end
|
|
227
233
|
|
|
228
234
|
Identifier.parse(string)
|