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
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
# Human-readable renderer for OGC identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces the canonical printed form, e.g.:
|
|
8
|
+
# "24-032r1"
|
|
9
|
+
# "01-009a"
|
|
10
|
+
# "OGC 24-032r1" (only when with_publisher: true)
|
|
11
|
+
#
|
|
12
|
+
# Registered as the `:human` format in the OGC format registry and invoked
|
|
13
|
+
# via `render(format: :human)`.
|
|
14
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
15
|
+
PUBLISHER = "OGC"
|
|
16
|
+
|
|
17
|
+
def render(**_opts)
|
|
18
|
+
id = @id
|
|
19
|
+
result = +""
|
|
20
|
+
result << "#{PUBLISHER} " if with_publisher?(id)
|
|
21
|
+
result << "#{id.year}-#{id.number}"
|
|
22
|
+
result << id.revision.to_s if id.revision
|
|
23
|
+
result
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def with_publisher?(id)
|
|
29
|
+
id.respond_to?(:with_publisher) && id.with_publisher == true
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
# Emits `urn:ogc:<year>:<number>[:<revision>]`, e.g. `urn:ogc:24:032:r1`.
|
|
6
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
7
|
+
def generate
|
|
8
|
+
parts = ["urn", "ogc", identifier.year.to_s, identifier.number.to_s]
|
|
9
|
+
parts << identifier.revision.to_s if identifier.revision
|
|
10
|
+
parts.join(":")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ogc
|
|
5
|
+
# Parses OGC URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits: `urn:ogc:<year>:<number>[:<revision>]`.
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# - urn:ogc:25:023 → 25-023
|
|
11
|
+
# - urn:ogc:24:032:r1 → 24-032r1
|
|
12
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
13
|
+
def parse_urn(urn)
|
|
14
|
+
body = strip_namespace(urn)
|
|
15
|
+
year, number, revision = split_parts(body)
|
|
16
|
+
text = "#{year}-#{number}"
|
|
17
|
+
text += revision.to_s if revision
|
|
18
|
+
flavor_parse(text)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/pubid/ogc.rb
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "pubid"
|
|
4
|
+
module Pubid
|
|
5
|
+
module Ogc
|
|
6
|
+
extend Pubid::PrefixesSupport
|
|
7
|
+
|
|
8
|
+
# OGC identifiers are digit-leading (`25-023`) and carry no publisher token
|
|
9
|
+
# in the printed form. Per the PREFIXES inclusion policy, bare numeric
|
|
10
|
+
# patterns are NOT listed (they would make cross-flavor routing ambiguous).
|
|
11
|
+
# Instead the sole entry is the publisher token "OGC", which relaton uses to
|
|
12
|
+
# route a reference to this flavor even though it is not literally present
|
|
13
|
+
# in the id string.
|
|
14
|
+
PREFIXES = ["OGC"].freeze
|
|
15
|
+
|
|
16
|
+
autoload :Builder, "#{__dir__}/ogc/builder"
|
|
17
|
+
autoload :Identifier, "#{__dir__}/ogc/identifier"
|
|
18
|
+
autoload :Identifiers, "#{__dir__}/ogc/identifiers"
|
|
19
|
+
autoload :Parser, "#{__dir__}/ogc/parser"
|
|
20
|
+
autoload :Renderer, "#{__dir__}/ogc/renderer"
|
|
21
|
+
autoload :UrnGenerator, "#{__dir__}/ogc/urn_generator"
|
|
22
|
+
autoload :UrnParser, "#{__dir__}/ogc/urn_parser"
|
|
23
|
+
|
|
24
|
+
# Parse an OGC identifier string
|
|
25
|
+
def self.parse(identifier)
|
|
26
|
+
Identifier.parse(identifier)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
30
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
31
|
+
Identifier.format_registry.register(:human, renderer: Ogc::Renderer)
|
|
32
|
+
|
|
33
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
34
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
35
|
+
def self.identifier_types
|
|
36
|
+
@identifier_types ||= Identifiers.constants
|
|
37
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
38
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
39
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Build typed stage index from identifier types
|
|
43
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
44
|
+
def self.all_typed_stages
|
|
45
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
46
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
47
|
+
klass.const_get(:TYPED_STAGES)
|
|
48
|
+
else
|
|
49
|
+
[]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Lookup: type code -> identifier class
|
|
55
|
+
# @param code [String, Symbol] the type key to find
|
|
56
|
+
# @return [Class, nil] the matching identifier class
|
|
57
|
+
def self.locate_type(code)
|
|
58
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Lookup: abbreviation -> typed stage
|
|
62
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
63
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
64
|
+
def self.locate_stage(abbr)
|
|
65
|
+
abbr_str = abbr.to_s.upcase
|
|
66
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Register OGC flavor with the registry
|
|
72
|
+
Pubid::Registry.register(:ogc, Pubid::Ogc)
|
data/lib/pubid/oiml/builder.rb
CHANGED
|
@@ -21,8 +21,8 @@ module Pubid
|
|
|
21
21
|
return build_short_amendment(parsed_hash)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
# Check for supplements first (have
|
|
25
|
-
if parsed_hash[:
|
|
24
|
+
# Check for supplements first (have base)
|
|
25
|
+
if parsed_hash[:base]
|
|
26
26
|
return build_supplement(parsed_hash)
|
|
27
27
|
end
|
|
28
28
|
|
|
@@ -53,11 +53,11 @@ module Pubid
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
# Build the base document
|
|
56
|
-
|
|
56
|
+
base = build_base_document(base_hash)
|
|
57
57
|
|
|
58
58
|
# Create amendment
|
|
59
59
|
amendment = Identifiers::Amendment.new
|
|
60
|
-
amendment.
|
|
60
|
+
amendment.base = base
|
|
61
61
|
|
|
62
62
|
# Extract year from edition_format if present, otherwise from year directly
|
|
63
63
|
year_value = if parsed_hash[:edition_format].is_a?(Hash)
|
|
@@ -97,8 +97,8 @@ module Pubid
|
|
|
97
97
|
supplement.joined = true if plus_marker
|
|
98
98
|
|
|
99
99
|
# Recursively parse base identifier
|
|
100
|
-
if parsed_hash[:
|
|
101
|
-
supplement.
|
|
100
|
+
if parsed_hash[:base]
|
|
101
|
+
supplement.base = build(parsed_hash[:base])
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
# Extract year from edition_format if present, otherwise from year directly
|
|
@@ -116,7 +116,7 @@ module Pubid
|
|
|
116
116
|
# Annex with no year of its own but a dated base ("R 60:2017 Annexes"):
|
|
117
117
|
# the year belongs to the base and must render glued to it.
|
|
118
118
|
if supplement.is_a?(Identifiers::Annex) && !year_value &&
|
|
119
|
-
supplement.
|
|
119
|
+
supplement.base&.date
|
|
120
120
|
supplement.year_on_base = true
|
|
121
121
|
end
|
|
122
122
|
|
|
@@ -152,7 +152,11 @@ module Pubid
|
|
|
152
152
|
code_attrs[:suffix] = parsed_hash[:code_suffix].to_s
|
|
153
153
|
code_attrs[:space_suffix] = true if parsed_hash.key?(:space_suffix)
|
|
154
154
|
end
|
|
155
|
-
|
|
155
|
+
# The code fields are flat index columns on the leaf (see
|
|
156
|
+
# Identifiers::CodeNumber) — `number` is what relaton-index keys on —
|
|
157
|
+
# so they are assigned individually rather than as a Code object.
|
|
158
|
+
# Bulletin has no code columns and never reaches this branch.
|
|
159
|
+
code_attrs.each { |name, value| identifier.public_send(:"#{name}=", value) }
|
|
156
160
|
end
|
|
157
161
|
|
|
158
162
|
# Handle other attributes
|
|
@@ -214,6 +218,11 @@ module Pubid
|
|
|
214
218
|
# Structured: :issue and :sequence captured directly as zero-padded
|
|
215
219
|
# strings. Citation: :volume_roman, :issue_arabic, :article_id —
|
|
216
220
|
# decode the 8-digit article_id to recover year+issue+sequence.
|
|
221
|
+
#
|
|
222
|
+
# For the citation form, the parsed roman volume is cross-checked
|
|
223
|
+
# against the year decoded from the article_id; a mismatch warns but
|
|
224
|
+
# does not raise (the article_id is the source of truth — the roman
|
|
225
|
+
# volume is redundant display).
|
|
217
226
|
def apply_bulletin_locator(identifier, parsed_hash)
|
|
218
227
|
if parsed_hash[:article_id]
|
|
219
228
|
article_id = parsed_hash[:article_id].to_s
|
|
@@ -221,6 +230,7 @@ module Pubid
|
|
|
221
230
|
identifier.date.year = article_id[0, 4]
|
|
222
231
|
identifier.issue = article_id[4, 2]
|
|
223
232
|
identifier.sequence = article_id[6, 2]
|
|
233
|
+
warn_on_volume_mismatch(identifier, parsed_hash[:volume_roman])
|
|
224
234
|
return
|
|
225
235
|
end
|
|
226
236
|
|
|
@@ -228,6 +238,24 @@ module Pubid
|
|
|
228
238
|
identifier.sequence = parsed_hash[:sequence].to_s if parsed_hash[:sequence]
|
|
229
239
|
end
|
|
230
240
|
|
|
241
|
+
# Citation form carries the volume in two places: spelled out as a
|
|
242
|
+
# roman numeral ("LXVII") and encoded in the 8-digit article_id
|
|
243
|
+
# (year+issue+sequence, where year - 1959 = volume). They should
|
|
244
|
+
# agree; if they don't, the input was malformed. Warn loudly so the
|
|
245
|
+
# user sees the discrepancy, but continue using the article_id
|
|
246
|
+
# (deterministic) rather than the roman (possibly mistyped).
|
|
247
|
+
def warn_on_volume_mismatch(identifier, parsed_volume_roman)
|
|
248
|
+
return unless parsed_volume_roman && identifier.date&.year
|
|
249
|
+
|
|
250
|
+
declared = parsed_volume_roman.to_s
|
|
251
|
+
computed = Identifiers::Bulletin.to_roman(identifier.date.year.to_i -
|
|
252
|
+
Identifiers::Bulletin::BASE_YEAR_OFFSET)
|
|
253
|
+
return if declared == computed
|
|
254
|
+
|
|
255
|
+
warn "OIML Bulletin citation volume mismatch: parsed '#{declared}' " \
|
|
256
|
+
"but article_id year #{identifier.date.year} implies '#{computed}'"
|
|
257
|
+
end
|
|
258
|
+
|
|
231
259
|
def extract_language(lang_data)
|
|
232
260
|
# Handle both direct string and nested hash from parser
|
|
233
261
|
case lang_data
|
|
@@ -37,7 +37,7 @@ module Pubid
|
|
|
37
37
|
# lutaml's polymorphic_map only validates `_type` on deserialization; it
|
|
38
38
|
# does not re-instantiate the concrete subclass. Route by `_type` so
|
|
39
39
|
# `Pubid::Oiml::Identifier.from_hash(h)` returns the right class (and its
|
|
40
|
-
# nested
|
|
40
|
+
# nested base), mirroring Pubid::Iso::Identifier.from_hash.
|
|
41
41
|
def self.from_hash(data, options = {})
|
|
42
42
|
type = data["_type"] || data[:_type]
|
|
43
43
|
klass_name = OIML_TYPE_MAP[type]
|
|
@@ -48,6 +48,14 @@ module Pubid
|
|
|
48
48
|
super
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
# Uniform class-level parse entry, mirroring every other flavor's
|
|
52
|
+
# `Pubid::<Flavor>::Identifier.parse`. OIML's real logic lives in the
|
|
53
|
+
# module method, so delegate to it (same pattern as jcgm/nist/plateau).
|
|
54
|
+
# The `Pubid::MAX_INPUT_LENGTH` ReDoS guard lives in `Pubid::Oiml.parse`.
|
|
55
|
+
def self.parse(identifier)
|
|
56
|
+
Pubid::Oiml.parse(identifier)
|
|
57
|
+
end
|
|
58
|
+
|
|
51
59
|
def to_urn
|
|
52
60
|
UrnGenerator.new(self).generate
|
|
53
61
|
end
|
|
@@ -45,6 +45,42 @@ module Pubid
|
|
|
45
45
|
map "sequence", to: :sequence
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
# relaton-index keys on `id.root.number.to_s`. Bulletin is the one OIML
|
|
49
|
+
# leaf with no code (it does not include Identifiers::CodeNumber), so
|
|
50
|
+
# it derives the key from the year it already stores: every issue and
|
|
51
|
+
# article of a volume clusters into one bucket, with per-article
|
|
52
|
+
# distinctness coming from the MR slug instead. That is the BIPM
|
|
53
|
+
# Metrologia-volume precedent recorded in CLAUDE.md.
|
|
54
|
+
#
|
|
55
|
+
# A DERIVED READER, deliberately not an attribute: storing it would
|
|
56
|
+
# duplicate `year` in every row, and the key_value block above maps no
|
|
57
|
+
# "number", so nothing is added to the wire format. Safe as a plain
|
|
58
|
+
# method because Bulletin declares no `number` attribute of its own
|
|
59
|
+
# (the ITU itu/identifiers/base.rb precedent).
|
|
60
|
+
#
|
|
61
|
+
# nil for the bare periodical reference "OIML Bulletin", which names no
|
|
62
|
+
# year — a deliberate gap, pinned in spec/pubid/oiml/root_number_spec.rb.
|
|
63
|
+
def number
|
|
64
|
+
date&.year&.to_s
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# The index key above is deliberately coarse — a whole volume in one
|
|
68
|
+
# bucket — which is only defensible because the MR slug stays
|
|
69
|
+
# per-article. The inherited hook reads through `code`, which Bulletin
|
|
70
|
+
# does not have, so it would return nil and collapse every article of a
|
|
71
|
+
# year onto `oiml.bulletin.<year>`; `to_slug` is an output FILENAME, so
|
|
72
|
+
# that is an overwrite. Emit the rest of the locator instead.
|
|
73
|
+
#
|
|
74
|
+
# The year is deliberately NOT included: Renderers::MrString already
|
|
75
|
+
# gives it its own segment (`mr_year`), so repeating it here would
|
|
76
|
+
# render `oiml.bulletin.1960-03-01.1960`.
|
|
77
|
+
def mr_number_with_part
|
|
78
|
+
segments = [issue, sequence].compact
|
|
79
|
+
return nil if segments.empty?
|
|
80
|
+
|
|
81
|
+
segments.join("-")
|
|
82
|
+
end
|
|
83
|
+
|
|
48
84
|
def type_string
|
|
49
85
|
"Bulletin"
|
|
50
86
|
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Oiml
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Installs the flat, index-friendly code columns and their serialization
|
|
7
|
+
# on the seven concrete OIML document leaves (Recommendation, Document,
|
|
8
|
+
# Vocabulary, Guide, BasicPublication, ExpertReport, SeminarReport).
|
|
9
|
+
#
|
|
10
|
+
# Why the leaves and not Pubid::Oiml::SingleIdentifier, which they all
|
|
11
|
+
# inherit from: `number` redefines the parent ::Pubid::Identifier's
|
|
12
|
+
# `attribute :number, Components::Code` as a plain :string (and `part` /
|
|
13
|
+
# `subpart` likewise). Declaring that on a class the concrete types
|
|
14
|
+
# INHERIT from resolves against the parent definition nondeterministically
|
|
15
|
+
# under multi-flavor load — it passes an OIML-only run and can flip
|
|
16
|
+
# `root.number` to "" under the full suite (the IEEE lesson; see
|
|
17
|
+
# lib/pubid/ieee/identifiers/code_number.rb and CLAUDE.md). Declaring on
|
|
18
|
+
# each leaf removes the ambiguity at the point of use.
|
|
19
|
+
#
|
|
20
|
+
# This matters because relaton-index sorts and bsearches every row on
|
|
21
|
+
# `id.root.number.to_s`. OIML kept the code in an Oiml::Components::Code
|
|
22
|
+
# under a `code` attribute and never set `number`, so all 12,226 lines of
|
|
23
|
+
# the published relaton-data-oiml index-v2 keyed "".
|
|
24
|
+
#
|
|
25
|
+
# The serialized hash ALREADY had these as bare top-level scalars — the
|
|
26
|
+
# old converters merely read them through `code` — so the wire format is
|
|
27
|
+
# byte-identical and that index needs no regeneration.
|
|
28
|
+
#
|
|
29
|
+
# Bulletin deliberately does NOT include this module. It carries no code
|
|
30
|
+
# at all (its locator is the year/issue/sequence tuple), so it would only
|
|
31
|
+
# gain a permanently-nil `number` and a `number` key that never appears.
|
|
32
|
+
# It derives its index key from the year instead; see bulletin.rb.
|
|
33
|
+
module CodeNumber
|
|
34
|
+
def self.included(base)
|
|
35
|
+
install_attributes(base)
|
|
36
|
+
install_mappings(base)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.install_attributes(base)
|
|
40
|
+
# Bare document number ("144"), the relaton index key. The part is a
|
|
41
|
+
# sibling column, never folded in, so every part of a document shares
|
|
42
|
+
# one bucket and a part-less reference finds them all.
|
|
43
|
+
base.attribute :number, :string
|
|
44
|
+
base.attribute :part, :string
|
|
45
|
+
base.attribute :subpart, :string
|
|
46
|
+
# Free-form trailing suffix glued to the code, e.g. "sup", "A",
|
|
47
|
+
# "erratum", "GUM 1", "ISO3930". Preserved verbatim for round-trip.
|
|
48
|
+
base.attribute :suffix, :string
|
|
49
|
+
# When true the suffix is space-separated ("D 1 Brochure") rather
|
|
50
|
+
# than the default dash ("R 60-sup"). Named for the RARE case with a
|
|
51
|
+
# false default, so the canonical to_hash drops it from every
|
|
52
|
+
# ordinary row.
|
|
53
|
+
base.attribute :space_suffix, :boolean, default: -> { false }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Merged by lutaml with the block SingleIdentifier declares, which
|
|
57
|
+
# carries publisher/year/edition/stage/iteration.
|
|
58
|
+
def self.install_mappings(base)
|
|
59
|
+
base.key_value do
|
|
60
|
+
map "number", to: :number
|
|
61
|
+
map "part", to: :part
|
|
62
|
+
map "subpart", to: :subpart
|
|
63
|
+
map "suffix", to: :suffix
|
|
64
|
+
map "space_suffix", to: :space_suffix
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# The composed document code, rebuilt on demand from the split columns
|
|
69
|
+
# so the renderer and the URN generator keep one place to ask for the
|
|
70
|
+
# printed form ("144-1", "60-sup"). Deliberately NOT an attribute and
|
|
71
|
+
# NOT memoised: the columns are writable (the base #exclude rebuilds
|
|
72
|
+
# through them), so a cached Code would go stale.
|
|
73
|
+
#
|
|
74
|
+
# nil when there is no number, preserving the old nil-`code` semantics
|
|
75
|
+
# the URN generator branches on.
|
|
76
|
+
def code
|
|
77
|
+
return nil if number.nil?
|
|
78
|
+
|
|
79
|
+
Components::Code.new(
|
|
80
|
+
number: number,
|
|
81
|
+
part: part,
|
|
82
|
+
subpart: subpart,
|
|
83
|
+
suffix: suffix,
|
|
84
|
+
space_suffix: space_suffix,
|
|
85
|
+
)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -7,6 +7,7 @@ module Pubid
|
|
|
7
7
|
autoload :Annex, "#{__dir__}/identifiers/annex"
|
|
8
8
|
autoload :BasicPublication, "#{__dir__}/identifiers/basic_publication"
|
|
9
9
|
autoload :Bulletin, "#{__dir__}/identifiers/bulletin"
|
|
10
|
+
autoload :CodeNumber, "#{__dir__}/identifiers/code_number"
|
|
10
11
|
autoload :Document, "#{__dir__}/identifiers/document"
|
|
11
12
|
autoload :Errata, "#{__dir__}/identifiers/errata"
|
|
12
13
|
autoload :ExpertReport, "#{__dir__}/identifiers/expert_report"
|
data/lib/pubid/oiml/parser.rb
CHANGED
|
@@ -4,7 +4,7 @@ require "parslet"
|
|
|
4
4
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Oiml
|
|
7
|
-
class Parser <
|
|
7
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
8
8
|
include ::Pubid::Parser::CommonParseRules
|
|
9
9
|
include ::Pubid::Parser::CommonParseMethods
|
|
10
10
|
|
|
@@ -20,7 +20,7 @@ module Pubid
|
|
|
20
20
|
rule(:identifier) do
|
|
21
21
|
amendment_identifier | amendment_short | annex_letter_identifier |
|
|
22
22
|
annex_identifier | plus_supplement_identifier |
|
|
23
|
-
trailing_supplement_identifier | bulletin_identifier |
|
|
23
|
+
trailing_supplement_identifier | bulletin_identifier | base
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
# Publisher - always "OIML"
|
|
@@ -44,10 +44,9 @@ module Pubid
|
|
|
44
44
|
rule(:two_digits) { match('\d').repeat(2, 2) }
|
|
45
45
|
|
|
46
46
|
# Roman numeral token composed of I,V,X,L,C,D,M (uppercase, matching
|
|
47
|
-
# OIML's print convention).
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
rule(:roman_numeral) { match("[IVXLCDM]").repeat(1) }
|
|
47
|
+
# OIML's print convention). Captured so the builder can cross-check
|
|
48
|
+
# the declared volume against the year implied by the article_id.
|
|
49
|
+
rule(:roman_numeral) { match("[IVXLCDM]").repeat(1).as(:volume_roman) }
|
|
51
50
|
|
|
52
51
|
# Bulletin locator — citation form. The format OIML prints on the
|
|
53
52
|
# article page is: "LXVII(2) 20260211" where LXVII is the volume in
|
|
@@ -62,7 +61,7 @@ module Pubid
|
|
|
62
61
|
# Bulletin identifier — no code; the locator (when present) is the
|
|
63
62
|
# (year, issue, sequence) tuple drawn from either the structured
|
|
64
63
|
# YYYY-II-SS form or the citation VOLUME(ISSUE) ARTID form. Both
|
|
65
|
-
# decode to the same record. Tried before
|
|
64
|
+
# decode to the same record. Tried before base because
|
|
66
65
|
# "Bulletin" is a word that the single-letter doc_type rule cannot
|
|
67
66
|
# match.
|
|
68
67
|
rule(:bulletin_identifier) do
|
|
@@ -188,7 +187,7 @@ module Pubid
|
|
|
188
187
|
rule(:amendment_identifier) do
|
|
189
188
|
str("Amendment") >> space >> lparen >> year_digits.as(:year) >> rparen >>
|
|
190
189
|
space >> str("to") >> space >>
|
|
191
|
-
base_without_language.as(:
|
|
190
|
+
base_without_language.as(:base) >>
|
|
192
191
|
language_portion.maybe.as(:language)
|
|
193
192
|
end
|
|
194
193
|
|
|
@@ -210,7 +209,7 @@ module Pubid
|
|
|
210
209
|
# amendment_short is tried first; it only matches when a year follows the
|
|
211
210
|
# word, so the no-year trailing form falls through to here.
|
|
212
211
|
rule(:trailing_supplement_identifier) do
|
|
213
|
-
base_without_language.as(:
|
|
212
|
+
base_without_language.as(:base) >>
|
|
214
213
|
space >> (str("Amendment") | str("Errata")).as(:trailing_marker) >>
|
|
215
214
|
language_portion.maybe.as(:language)
|
|
216
215
|
end
|
|
@@ -220,7 +219,7 @@ module Pubid
|
|
|
220
219
|
# and errata to dated bases (e.g. "OIML B 10:2011+Amendment:2012").
|
|
221
220
|
# Annexes already encode the year-on-base intent via their own model.
|
|
222
221
|
rule(:plus_supplement_identifier) do
|
|
223
|
-
base_without_language.as(:
|
|
222
|
+
base_without_language.as(:base) >>
|
|
224
223
|
str("+") >>
|
|
225
224
|
(str("Amendment") | str("Errata")).as(:plus_marker) >>
|
|
226
225
|
(colon >> year_digits.as(:year)).maybe >>
|
|
@@ -230,7 +229,7 @@ module Pubid
|
|
|
230
229
|
# Annex identifier - "BASE Annexes Edition YYYY" / "BASE Annexes:YYYY" /
|
|
231
230
|
# "BASE:YYYY Annexes" (year on the base, no annex year).
|
|
232
231
|
rule(:annex_identifier) do
|
|
233
|
-
base_without_language.as(:
|
|
232
|
+
base_without_language.as(:base) >>
|
|
234
233
|
space >> str("Annexes").as(:annex_marker) >>
|
|
235
234
|
(
|
|
236
235
|
(space >> edition_text >> space >> year_digits.as(:year)).as(:edition_format) |
|
|
@@ -246,7 +245,7 @@ module Pubid
|
|
|
246
245
|
|
|
247
246
|
# Annex with letter - "BASE Annex A Edition YYYY" / "BASE:YYYY Annex B-C"
|
|
248
247
|
rule(:annex_letter_identifier) do
|
|
249
|
-
base_without_language.as(:
|
|
248
|
+
base_without_language.as(:base) >>
|
|
250
249
|
space >> str("Annex") >> space >> annex_letter_value >>
|
|
251
250
|
((space >> edition_text >> space >> year_digits.as(:year)) | (colon >> year_digits.as(:year))).maybe >>
|
|
252
251
|
language_portion.maybe.as(:language)
|
|
@@ -262,7 +261,7 @@ module Pubid
|
|
|
262
261
|
end
|
|
263
262
|
|
|
264
263
|
# Base identifier for recursion and standalone parsing
|
|
265
|
-
rule(:
|
|
264
|
+
rule(:base) do
|
|
266
265
|
publisher >>
|
|
267
266
|
doc_type >>
|
|
268
267
|
full_number >>
|
data/lib/pubid/oiml/renderer.rb
CHANGED
|
@@ -138,7 +138,7 @@ module Pubid
|
|
|
138
138
|
# Plus-joined: "BASE+Amendment:YEAR" / "BASE+Errata:YEAR" with both
|
|
139
139
|
# the base and the supplement carrying their own year.
|
|
140
140
|
if id.joined
|
|
141
|
-
base_str = strip_language(id.
|
|
141
|
+
base_str = strip_language(id.base.to_s)
|
|
142
142
|
result = "#{base_str}+#{id.supplement_type}"
|
|
143
143
|
result += ":#{id.year}" if id.year
|
|
144
144
|
result += " (#{id.language})" if id.language
|
|
@@ -149,7 +149,7 @@ module Pubid
|
|
|
149
149
|
# publication year kept on the base identifier. The word comes from the
|
|
150
150
|
# concrete supplement class.
|
|
151
151
|
if id.trailing
|
|
152
|
-
base_str = strip_language(id.
|
|
152
|
+
base_str = strip_language(id.base.to_s)
|
|
153
153
|
result = "#{base_str} #{id.supplement_type}"
|
|
154
154
|
result += " (#{id.language})" if id.language
|
|
155
155
|
return result
|
|
@@ -157,16 +157,16 @@ module Pubid
|
|
|
157
157
|
|
|
158
158
|
base_format = if format && format != :short
|
|
159
159
|
format
|
|
160
|
-
elsif id.
|
|
160
|
+
elsif id.base.class.attributes.key?(:parsed_format) && id.base.parsed_format == "long"
|
|
161
161
|
:long
|
|
162
162
|
else
|
|
163
163
|
:short
|
|
164
164
|
end
|
|
165
165
|
|
|
166
|
-
base_str = if id.
|
|
167
|
-
id.
|
|
166
|
+
base_str = if id.base.is_a?(SingleIdentifier)
|
|
167
|
+
id.base.to_s(format: base_format)
|
|
168
168
|
else
|
|
169
|
-
id.
|
|
169
|
+
id.base.to_s
|
|
170
170
|
end
|
|
171
171
|
base_str = strip_language(base_str)
|
|
172
172
|
|
|
@@ -182,14 +182,14 @@ module Pubid
|
|
|
182
182
|
# "BASE:YYYY Annex(es)" — the year is glued to the base, the marker
|
|
183
183
|
# carries none. Keep the base date instead of stripping it.
|
|
184
184
|
if id.year_on_base
|
|
185
|
-
base_str = strip_language(id.
|
|
185
|
+
base_str = strip_language(id.base.to_s)
|
|
186
186
|
marker = id.letter ? "Annex #{id.letter}" : "Annexes"
|
|
187
187
|
result = "#{base_str} #{marker}"
|
|
188
188
|
result += " (#{id.language})" if id.language
|
|
189
189
|
return result
|
|
190
190
|
end
|
|
191
191
|
|
|
192
|
-
base_format = if id.
|
|
192
|
+
base_format = if id.base.class.attributes.key?(:parsed_format) && id.base.parsed_format == "long"
|
|
193
193
|
:long
|
|
194
194
|
else
|
|
195
195
|
:short
|
|
@@ -203,10 +203,10 @@ module Pubid
|
|
|
203
203
|
:short
|
|
204
204
|
end
|
|
205
205
|
|
|
206
|
-
base_str = if id.
|
|
207
|
-
id.
|
|
206
|
+
base_str = if id.base.is_a?(SingleIdentifier)
|
|
207
|
+
id.base.to_s(format: base_format)
|
|
208
208
|
else
|
|
209
|
-
id.
|
|
209
|
+
id.base.to_s
|
|
210
210
|
end
|
|
211
211
|
result = base_str.sub(/:.*/, "").sub(/\s+Edition\s+\d{4}/, "").sub(
|
|
212
212
|
/\(.*\)/, ""
|
|
@@ -219,8 +219,8 @@ module Pubid
|
|
|
219
219
|
result += " Annexes"
|
|
220
220
|
if id.year
|
|
221
221
|
result += annex_format == :long ? " Edition #{id.year}" : ":#{id.year}"
|
|
222
|
-
elsif id.
|
|
223
|
-
result += annex_format == :long ? " Edition #{id.
|
|
222
|
+
elsif id.base.date
|
|
223
|
+
result += annex_format == :long ? " Edition #{id.base.date.render(context: @context)}" : ":#{id.base.date.render(context: @context)}"
|
|
224
224
|
end
|
|
225
225
|
end
|
|
226
226
|
|