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
|
@@ -5,14 +5,44 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Cie
|
|
7
7
|
module Identifiers
|
|
8
|
-
# Bundle identifier for CIE
|
|
9
|
-
#
|
|
8
|
+
# Bundle identifier for CIE: a comma-separated list of sibling documents,
|
|
9
|
+
# each a full CIE identifier (typically a Supplement).
|
|
10
10
|
# Example: CIE 198-SP1.1:2011,198-SP1.2:2011,198-SP1.3:2011,198-SP1.4:2011
|
|
11
|
+
#
|
|
12
|
+
# A CIE bundle is the parts of one supplement of one standard, so its
|
|
13
|
+
# members share a base document. That shared +base+ is hoisted to the
|
|
14
|
+
# bundle and the +ids+ carry only what differs (supplement number/part);
|
|
15
|
+
# #root walks +base+ to the origin standard for the relaton-index key.
|
|
16
|
+
# (Defensive: if members ever don't share a base, each id keeps its own
|
|
17
|
+
# and +base+ is nil — see Builder#build_bundle.)
|
|
11
18
|
class Bundle < SingleIdentifier
|
|
12
|
-
attribute :
|
|
19
|
+
attribute :base, Identifier, polymorphic: true
|
|
20
|
+
attribute :ids, Identifier, polymorphic: true, collection: true
|
|
13
21
|
|
|
14
|
-
|
|
15
|
-
|
|
22
|
+
# The origin document: the shared base's root, else the first member's.
|
|
23
|
+
def root
|
|
24
|
+
(base || ids&.first)&.root || self
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# The printed form writes the publisher once: the first member keeps its
|
|
28
|
+
# "CIE " prefix, the rest are bare. A base-less member is re-based onto
|
|
29
|
+
# the bundle's shared base for rendering.
|
|
30
|
+
def to_s(**opts)
|
|
31
|
+
return "" unless ids&.any?
|
|
32
|
+
|
|
33
|
+
result = ids.each_with_index.map do |id, i|
|
|
34
|
+
member = id.base ? id : rebased(id)
|
|
35
|
+
i.zero? ? member.to_s : member.to_s.delete_prefix("CIE ")
|
|
36
|
+
end.join(",")
|
|
37
|
+
|
|
38
|
+
annotate_plain_render(result, **opts)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
# Attach the bundle's shared base to a base-less member for rendering.
|
|
44
|
+
def rebased(id)
|
|
45
|
+
Supplement.new(base: base, number: id.number, part: id.part)
|
|
16
46
|
end
|
|
17
47
|
end
|
|
18
48
|
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Cie
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Shared document-code attributes + rendering for the CIE identifier
|
|
7
|
+
# types that carry a code (Standard, Identical, JointPublished,
|
|
8
|
+
# DualPublished).
|
|
9
|
+
#
|
|
10
|
+
# The code fields live *flat* on the identifier (no nested
|
|
11
|
+
# Components::Code), so the serialized hash stays compact:
|
|
12
|
+
# {style:, year:, ..., number: "018", iteration: "2"}
|
|
13
|
+
# rather than nesting them under a code: {number:, iteration:, style:}.
|
|
14
|
+
#
|
|
15
|
+
# +code.style+ is intentionally gone: it always equalled the identifier's
|
|
16
|
+
# own +style+ (the builder set both from one value), so #code_string reads
|
|
17
|
+
# the identifier's +style+ directly for the part-separator fallback.
|
|
18
|
+
module CodeAttributes
|
|
19
|
+
def self.included(base)
|
|
20
|
+
base.class_eval do
|
|
21
|
+
attribute :number, :string # "018", "170", "11664"
|
|
22
|
+
attribute :part, :string # "1", "2", "4"
|
|
23
|
+
attribute :iteration, :string # "2" in "018.2"
|
|
24
|
+
attribute :part_separator, :string # "slash" | "dash" (original sep)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Render the code portion: "018.2", "170-1", "19/2.1", "11664-1".
|
|
29
|
+
# Uses +part_separator+ when set, otherwise falls back to the
|
|
30
|
+
# identifier's +style+ (legacy -> "/", current -> "-").
|
|
31
|
+
def code_string
|
|
32
|
+
return nil unless number
|
|
33
|
+
|
|
34
|
+
result = number.dup
|
|
35
|
+
if part && iteration
|
|
36
|
+
result += "/#{part}.#{iteration}"
|
|
37
|
+
elsif iteration
|
|
38
|
+
result += ".#{iteration}"
|
|
39
|
+
elsif part
|
|
40
|
+
separator = case part_separator
|
|
41
|
+
when "slash" then "/"
|
|
42
|
+
when "dash" then "-"
|
|
43
|
+
else style == "current" ? "-" : "/"
|
|
44
|
+
end
|
|
45
|
+
result += "#{separator}#{part}"
|
|
46
|
+
end
|
|
47
|
+
result
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -9,22 +9,27 @@ module Pubid
|
|
|
9
9
|
# Handles x-prefix conference proceedings
|
|
10
10
|
# Example: CIE x038:2013, CIE x038:2013 Amendment 1
|
|
11
11
|
class Conference < SingleIdentifier
|
|
12
|
-
|
|
12
|
+
# :string overrides the base ::Pubid::Identifier Components::Code type.
|
|
13
|
+
attribute :number, :string
|
|
13
14
|
attribute :amendment_number, :string
|
|
15
|
+
# Techstreet opaque /slug variant (no default -> round-trips cleanly)
|
|
16
|
+
attribute :variant, :string
|
|
14
17
|
|
|
15
|
-
def to_s
|
|
16
|
-
result = "CIE x#{
|
|
18
|
+
def to_s(**opts)
|
|
19
|
+
result = "CIE x#{number}"
|
|
17
20
|
|
|
18
21
|
# Date with separator
|
|
19
22
|
if year
|
|
20
|
-
|
|
21
|
-
result += "#{separator}#{year}"
|
|
23
|
+
result += "#{date_sep_char}#{year}"
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
# Amendment if present
|
|
25
27
|
result += " Amendment #{amendment_number}" if amendment_number
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
# Opaque /slug variant if present
|
|
30
|
+
result += "/#{variant}" if variant
|
|
31
|
+
|
|
32
|
+
annotate_plain_render(result, **opts)
|
|
28
33
|
end
|
|
29
34
|
end
|
|
30
35
|
end
|
|
@@ -5,34 +5,28 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Cie
|
|
7
7
|
module Identifiers
|
|
8
|
-
# Corrigendum identifier for CIE
|
|
9
|
-
#
|
|
8
|
+
# Corrigendum identifier for CIE (/CorN notation).
|
|
9
|
+
# Wraps a nested base — a Standard, or a Supplement when the
|
|
10
|
+
# corrigendum applies to a supplement (CIE 198-SP1.4:2011/Cor1:2013).
|
|
11
|
+
# The "/CorN:year" is a clean trailing suffix on the base's rendering.
|
|
10
12
|
# Examples: CIE 232:2019/Cor1:2020, CIE 198-SP1.4:2011/Cor1:2013
|
|
11
13
|
class Corrigendum < SupplementIdentifier
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
attribute :
|
|
16
|
-
attribute :cor_number, :string
|
|
17
|
-
attribute :cor_year, :string
|
|
14
|
+
# +number+ (the "/CorN" ordinal) is inherited from SupplementIdentifier.
|
|
15
|
+
# The corrigendum's own year — SupplementIdentifier descends from the
|
|
16
|
+
# base Identifier (not SingleIdentifier), so there is no inherited year.
|
|
17
|
+
attribute :year, :string
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
# Add supplement notation if base is a supplement
|
|
24
|
-
if base_supplement
|
|
25
|
-
result += "-SP#{base_supplement}"
|
|
26
|
-
result += ".#{base_supplement_part}" if base_supplement_part
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Add base year with colon
|
|
30
|
-
result += ":#{base_year}" if base_year
|
|
19
|
+
# Uniform supplement interface (shared with Supplement).
|
|
20
|
+
def supplement_type
|
|
21
|
+
:corrigendum
|
|
22
|
+
end
|
|
31
23
|
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
def supplement_year
|
|
25
|
+
year
|
|
26
|
+
end
|
|
34
27
|
|
|
35
|
-
|
|
28
|
+
def to_s(**opts)
|
|
29
|
+
annotate_plain_render("#{base}/Cor#{number}:#{year}", **opts)
|
|
36
30
|
end
|
|
37
31
|
end
|
|
38
32
|
end
|
|
@@ -9,31 +9,31 @@ module Pubid
|
|
|
9
9
|
# Represents CIE/IEC dual published standards
|
|
10
10
|
# Example: CIE S 009:2002/IEC 62471:2006
|
|
11
11
|
class DualPublished < SingleIdentifier
|
|
12
|
+
include CodeAttributes # flat number/part/iteration/part_separator + #code_string
|
|
13
|
+
|
|
12
14
|
attribute :s_prefix, :boolean, default: -> { false }
|
|
13
|
-
attribute :code, Components::Code
|
|
14
15
|
attribute :iec_identifier, :string # IEC portion as string
|
|
15
16
|
|
|
16
|
-
def to_s
|
|
17
|
+
def to_s(**opts)
|
|
17
18
|
parts = ["CIE"]
|
|
18
19
|
|
|
19
20
|
# S prefix
|
|
20
21
|
parts << "S" if s_prefix
|
|
21
22
|
|
|
22
23
|
# Code
|
|
23
|
-
parts <<
|
|
24
|
+
parts << code_string if number
|
|
24
25
|
|
|
25
26
|
result = parts.join(" ")
|
|
26
27
|
|
|
27
28
|
# Date
|
|
28
29
|
if year
|
|
29
|
-
|
|
30
|
-
result += "#{separator}#{year}"
|
|
30
|
+
result += "#{date_sep_char}#{year}"
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
# IEC portion with slash separator
|
|
34
34
|
result += "/IEC #{iec_identifier}" if iec_identifier
|
|
35
35
|
|
|
36
|
-
result
|
|
36
|
+
annotate_plain_render(result, **opts)
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
end
|
|
@@ -12,24 +12,25 @@ module Pubid
|
|
|
12
12
|
# CIE S 014-4/E2007 - part with dash + language
|
|
13
13
|
# CIE S 008/E:2001 (ISO 8995-1:2002(E)) - language with colon year
|
|
14
14
|
class Identical < SingleIdentifier
|
|
15
|
+
include CodeAttributes # flat number/part/iteration/part_separator + #code_string
|
|
16
|
+
|
|
15
17
|
attribute :s_prefix, :boolean, default: -> { false }
|
|
16
|
-
attribute :code, Components::Code
|
|
17
18
|
attribute :language, Components::Language
|
|
18
19
|
attribute :iso_reference, :string # The ISO identifier in parentheses
|
|
19
20
|
|
|
20
|
-
def to_s
|
|
21
|
+
def to_s(**opts)
|
|
21
22
|
parts = ["CIE"]
|
|
22
23
|
|
|
23
24
|
# S prefix
|
|
24
25
|
parts << "S" if s_prefix
|
|
25
26
|
|
|
26
27
|
# Code
|
|
27
|
-
parts <<
|
|
28
|
+
parts << code_string if number
|
|
28
29
|
|
|
29
30
|
result = parts.join(" ")
|
|
30
31
|
|
|
31
32
|
# Language + Year combined for slash formats before ISO reference
|
|
32
|
-
if language && (language.format == "slash_colon" || (language.format == "slash" && year &&
|
|
33
|
+
if language && (language.format == "slash_colon" || (language.format == "slash" && year && style != "slash"))
|
|
33
34
|
# Render /E:YYYY or /EYYYY (language with year, no separate date separator)
|
|
34
35
|
result += if language.format == "slash_colon"
|
|
35
36
|
"/#{language.code}:#{year}" # /E:2001
|
|
@@ -39,13 +40,12 @@ module Pubid
|
|
|
39
40
|
elsif language && language.format == "slash"
|
|
40
41
|
# Language without year: /E
|
|
41
42
|
result += "/#{language.code}"
|
|
42
|
-
elsif year &&
|
|
43
|
+
elsif year && style == "slash"
|
|
43
44
|
# Legacy slash-year format without language: /1998
|
|
44
45
|
result += "/#{year}"
|
|
45
46
|
elsif year
|
|
46
|
-
# Standard date with separator
|
|
47
|
-
|
|
48
|
-
result += "#{separator}#{year}"
|
|
47
|
+
# Standard date with separator derived from style
|
|
48
|
+
result += "#{date_sep_char}#{year}"
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# Language (parenthetical) after date
|
|
@@ -56,7 +56,7 @@ module Pubid
|
|
|
56
56
|
# ISO reference in parentheses
|
|
57
57
|
result += " (ISO #{iso_reference})" if iso_reference
|
|
58
58
|
|
|
59
|
-
result
|
|
59
|
+
annotate_plain_render(result, **opts)
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
end
|
|
@@ -8,13 +8,14 @@ module Pubid
|
|
|
8
8
|
# Joint published identifier for CIE
|
|
9
9
|
# Handles CIE ISO, CIE IEC, CIE ISO/CIE patterns
|
|
10
10
|
class JointPublished < SingleIdentifier
|
|
11
|
+
include CodeAttributes # flat number/part/iteration/part_separator + #code_string
|
|
12
|
+
|
|
11
13
|
attribute :copublisher, :string # "ISO", "IEC", or "ISO/CIE"
|
|
12
|
-
attribute :code, Components::Code
|
|
13
14
|
attribute :language, Components::Language
|
|
14
15
|
attribute :doc_type, :string # "TR" for Technical Report
|
|
15
16
|
attribute :stage, :string # "DIS" for draft stage
|
|
16
17
|
|
|
17
|
-
def to_s
|
|
18
|
+
def to_s(**opts)
|
|
18
19
|
parts = ["CIE", copublisher]
|
|
19
20
|
|
|
20
21
|
# Document type (TR)
|
|
@@ -24,27 +25,26 @@ module Pubid
|
|
|
24
25
|
parts << stage if stage
|
|
25
26
|
|
|
26
27
|
# Code (number-part) - special handling for IEC dot separator
|
|
27
|
-
if
|
|
28
|
-
code_str =
|
|
28
|
+
if number
|
|
29
|
+
code_str = code_string
|
|
29
30
|
# For IEC copublisher, if code has a part, use dot not slash/dash
|
|
30
|
-
if copublisher == "IEC" &&
|
|
31
|
-
code_str = "#{
|
|
31
|
+
if copublisher == "IEC" && part
|
|
32
|
+
code_str = "#{number}.#{part}"
|
|
32
33
|
end
|
|
33
34
|
parts << code_str
|
|
34
35
|
end
|
|
35
36
|
|
|
36
37
|
result = parts.join(" ")
|
|
37
38
|
|
|
38
|
-
# Date -
|
|
39
|
+
# Date - separator derived from style
|
|
39
40
|
if year
|
|
40
|
-
|
|
41
|
-
result += "#{separator}#{year}"
|
|
41
|
+
result += "#{date_sep_char}#{year}"
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
# Language (always parenthetical for joint published)
|
|
45
45
|
result += language.to_s if language
|
|
46
46
|
|
|
47
|
-
result
|
|
47
|
+
annotate_plain_render(result, **opts)
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Cie
|
|
7
|
+
module Identifiers
|
|
8
|
+
# Proceedings paper identifier for CIE conference papers.
|
|
9
|
+
#
|
|
10
|
+
# Two surface forms share this type:
|
|
11
|
+
# x-prefixed (attached to a conference): "CIE x043-OP01"
|
|
12
|
+
# standalone (with a page range): "CIE OP02 1-5"
|
|
13
|
+
#
|
|
14
|
+
# The paper itself is the document, so its identity (code + running
|
|
15
|
+
# number, e.g. "OP01") is stored flat as +number+ for BOTH forms. This
|
|
16
|
+
# gives every proceedings row a non-empty relaton-index binary-search key
|
|
17
|
+
# (see index_number_spec). The x-form's parent conference lives in
|
|
18
|
+
# +conference+; the standalone form's +page+ range is its locality.
|
|
19
|
+
# No-default values so absent keys drop from to_hash (round-trip).
|
|
20
|
+
class Proceedings < SingleIdentifier
|
|
21
|
+
# The paper identity "OP01" / "P03". :string overrides the base
|
|
22
|
+
# ::Pubid::Identifier Components::Code type.
|
|
23
|
+
attribute :number, :string
|
|
24
|
+
# The parent conference "043" (x-form only; nil for standalone).
|
|
25
|
+
attribute :conference, :string
|
|
26
|
+
# Page range "1-5" (standalone form only).
|
|
27
|
+
attribute :page, :string
|
|
28
|
+
|
|
29
|
+
def to_s(**opts)
|
|
30
|
+
result = if conference
|
|
31
|
+
"CIE x#{conference}-#{number}"
|
|
32
|
+
else
|
|
33
|
+
"CIE #{number} #{page}"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
annotate_plain_render(result, **opts)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -8,22 +8,52 @@ module Pubid
|
|
|
8
8
|
# Standard identifier for CIE
|
|
9
9
|
# Handles both legacy (pre-2001) and current (2001+) styles
|
|
10
10
|
class Standard < SingleIdentifier
|
|
11
|
+
include CodeAttributes # flat number/part/iteration/part_separator + #code_string
|
|
12
|
+
|
|
11
13
|
attribute :s_prefix, :boolean, default: -> { false }
|
|
12
|
-
|
|
14
|
+
# D-series marker (CIE D001-2006). Boolean default false so it is
|
|
15
|
+
# canonicalized away for every non-D standard (round-trip contract).
|
|
16
|
+
attribute :d_prefix, :boolean, default: -> { false }
|
|
13
17
|
attribute :language, Components::Language
|
|
14
18
|
attribute :stage, :string # DIS, DS
|
|
15
19
|
|
|
16
|
-
def to_s
|
|
20
|
+
def to_s(**opts)
|
|
21
|
+
annotate_plain_render(render_plain, **opts)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# CIE Standard distinguishes S-prefixed standards (`CIE S 017`) from
|
|
25
|
+
# plain (`CIE 015`), D-prefixed (`CIE D001`), and DIS-staged. The
|
|
26
|
+
# generic mr_type looks at typed_stage, which CIE doesn't use, so
|
|
27
|
+
# without this override the `S`/`D`/stage marker would be lost in MR.
|
|
28
|
+
def mr_type
|
|
29
|
+
return stage.downcase if stage
|
|
30
|
+
return "d" if d_prefix
|
|
31
|
+
return "s" if s_prefix
|
|
32
|
+
|
|
33
|
+
nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
# The plain composition, extracted verbatim from `to_s`. It has two
|
|
39
|
+
# early returns (the slash_colon language form and the legacy
|
|
40
|
+
# bare slash-year form), and `to_s` needs a single exit to wrap.
|
|
41
|
+
def render_plain
|
|
17
42
|
parts = ["CIE"]
|
|
18
43
|
|
|
19
44
|
# Stage (DIS/DS) before code if present
|
|
20
45
|
parts << stage if stage
|
|
21
46
|
|
|
22
|
-
|
|
23
|
-
|
|
47
|
+
if d_prefix
|
|
48
|
+
# D-series: the D is attached to the code (no space): CIE D001
|
|
49
|
+
parts << "D#{code_string}"
|
|
50
|
+
else
|
|
51
|
+
# S prefix
|
|
52
|
+
parts << "S" if s_prefix
|
|
24
53
|
|
|
25
|
-
|
|
26
|
-
|
|
54
|
+
# Code
|
|
55
|
+
parts << code_string if number
|
|
56
|
+
end
|
|
27
57
|
|
|
28
58
|
# Build initial result from parts
|
|
29
59
|
result = parts.join(" ")
|
|
@@ -39,10 +69,15 @@ module Pubid
|
|
|
39
69
|
return result # Year already added
|
|
40
70
|
end
|
|
41
71
|
|
|
72
|
+
# Bare slash-year (legacy, no language): CIE S 007/1998
|
|
73
|
+
if year && style == "slash"
|
|
74
|
+
result += "/#{year}"
|
|
75
|
+
return result
|
|
76
|
+
end
|
|
77
|
+
|
|
42
78
|
# Date with separator (for non-slash-colon formats)
|
|
43
79
|
if year
|
|
44
|
-
|
|
45
|
-
result += "#{separator}#{year}"
|
|
80
|
+
result += "#{date_sep_char}#{year}"
|
|
46
81
|
end
|
|
47
82
|
|
|
48
83
|
# Language (parenthetical formats) - comes after date
|
|
@@ -5,39 +5,41 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Cie
|
|
7
7
|
module Identifiers
|
|
8
|
-
# Supplement identifier for CIE
|
|
9
|
-
#
|
|
8
|
+
# Supplement identifier for CIE (-SPN / -SPN.P notation).
|
|
9
|
+
# Wraps a nested base (the base Standard); the "-SPN" is
|
|
10
|
+
# inserted after the base number, so to_s renders from the base's parts.
|
|
10
11
|
# Examples: CIE 121-SP1:2009, CIE 198-SP1.4:2011, CIE DIS 025-SP1/E:2019
|
|
11
12
|
class Supplement < SupplementIdentifier
|
|
12
|
-
|
|
13
|
-
attribute :
|
|
14
|
-
attribute :supplement_part, :string # "1" in "SP1.1", "4" in "SP1.4"
|
|
15
|
-
attribute :year, :string
|
|
16
|
-
attribute :stage, :string # "DIS", "DS"
|
|
17
|
-
attribute :language, Components::Language
|
|
18
|
-
|
|
19
|
-
def to_s
|
|
20
|
-
parts = ["CIE"]
|
|
13
|
+
# +number+ (the "-SPN" ordinal) is inherited from SupplementIdentifier.
|
|
14
|
+
attribute :part, :string # "1" in "SP1.1", "4" in "SP1.4"
|
|
21
15
|
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
# Uniform supplement interface (shared with Corrigendum).
|
|
17
|
+
def supplement_type
|
|
18
|
+
:supplement
|
|
19
|
+
end
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
def supplement_year
|
|
22
|
+
base&.year
|
|
23
|
+
end
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
def to_s(**opts)
|
|
26
|
+
b = base
|
|
27
|
+
parts = ["CIE"]
|
|
28
|
+
parts << b.stage if b.respond_to?(:stage) && b.stage
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
core = "#{b.number}-SP#{number}"
|
|
31
|
+
core += ".#{part}" if part
|
|
32
|
+
parts << core
|
|
33
|
+
result = parts.join(" ")
|
|
36
34
|
|
|
37
|
-
#
|
|
38
|
-
|
|
35
|
+
# Language with slash (before year), e.g. "/E"
|
|
36
|
+
if b.language && b.language.format == "slash_colon"
|
|
37
|
+
result += "/#{b.language.code}"
|
|
38
|
+
end
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
# Supplements always use the current (colon) style.
|
|
41
|
+
result += ":#{b.year}" if b.year
|
|
42
|
+
annotate_plain_render(result, **opts)
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
end
|
|
@@ -8,11 +8,15 @@ module Pubid
|
|
|
8
8
|
# Tutorial Bundle identifier for CIE
|
|
9
9
|
# Special text-based identifier
|
|
10
10
|
# Example: CIE Tutorials Bundle 1
|
|
11
|
+
#
|
|
12
|
+
# The ordinal ("1") is the bundle's own +number+ (also the relaton-index
|
|
13
|
+
# root key); there is no separate document, so no nested base.
|
|
11
14
|
class TutorialBundle < SingleIdentifier
|
|
12
|
-
|
|
15
|
+
# :string overrides the base ::Pubid::Identifier Components::Code type.
|
|
16
|
+
attribute :number, :string
|
|
13
17
|
|
|
14
|
-
def to_s
|
|
15
|
-
"CIE Tutorials Bundle #{
|
|
18
|
+
def to_s(**opts)
|
|
19
|
+
annotate_plain_render("CIE Tutorials Bundle #{number}", **opts)
|
|
16
20
|
end
|
|
17
21
|
end
|
|
18
22
|
end
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Cie
|
|
5
5
|
module Identifiers
|
|
6
|
+
autoload :CodeAttributes, "#{__dir__}/identifiers/code_attributes"
|
|
6
7
|
autoload :Bundle, "#{__dir__}/identifiers/bundle"
|
|
7
8
|
autoload :Conference, "#{__dir__}/identifiers/conference"
|
|
8
9
|
autoload :Corrigendum, "#{__dir__}/identifiers/corrigendum"
|
|
9
10
|
autoload :DualPublished, "#{__dir__}/identifiers/dual_published"
|
|
10
11
|
autoload :Identical, "#{__dir__}/identifiers/identical"
|
|
11
12
|
autoload :JointPublished, "#{__dir__}/identifiers/joint_published"
|
|
13
|
+
autoload :Proceedings, "#{__dir__}/identifiers/proceedings"
|
|
12
14
|
autoload :Standard, "#{__dir__}/identifiers/standard"
|
|
13
15
|
autoload :Supplement, "#{__dir__}/identifiers/supplement"
|
|
14
16
|
autoload :TutorialBundle, "#{__dir__}/identifiers/tutorial_bundle"
|
data/lib/pubid/cie/parser.rb
CHANGED
|
@@ -6,7 +6,7 @@ module Pubid
|
|
|
6
6
|
module Cie
|
|
7
7
|
# Parser for CIE identifiers
|
|
8
8
|
# Handles dual-style system (legacy vs current)
|
|
9
|
-
class Parser <
|
|
9
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
10
10
|
# Basic building blocks
|
|
11
11
|
rule(:space) { str(" ") }
|
|
12
12
|
rule(:space?) { space.maybe }
|
|
@@ -135,9 +135,50 @@ module Pubid
|
|
|
135
135
|
(str("FDIS") | str("DIS") | str("DS")) >> space
|
|
136
136
|
end
|
|
137
137
|
|
|
138
|
-
# Document type (TR for Technical Report)
|
|
138
|
+
# Document type (TR for Technical Report, TS for Technical Specification)
|
|
139
139
|
rule(:doc_type) do
|
|
140
|
-
str("TR") # Don't consume trailing space
|
|
140
|
+
(str("TR") | str("TS")) # Don't consume trailing space
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Proceedings paper code: 1+ uppercase letters (OP, PO, PP, WP, IP, P, ...)
|
|
144
|
+
# Deliberately generic (open set); greedy letters then digits.
|
|
145
|
+
rule(:paper_code) do
|
|
146
|
+
match("[A-Z]").repeat(1).as(:paper_code)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Techstreet opaque conference variant: /<lowercase-alnum slug>
|
|
150
|
+
# Charset kept lowercase-alnum so it can't collide with the uppercase
|
|
151
|
+
# /E, /Cor, /IEC tails or the self.parse language gsub.
|
|
152
|
+
rule(:variant_slug) do
|
|
153
|
+
slash >> match("[0-9a-z]").repeat(1).as(:variant)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Conference proceedings paper (x-prefixed): CIE x043-OP01
|
|
157
|
+
rule(:conf_proceedings) do
|
|
158
|
+
str("CIE") >> space >> str("x") >> digits.as(:conf_number) >>
|
|
159
|
+
dash >> paper_code >> digits.as(:paper_number)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Standalone proceedings paper: CIE OP02 1-5
|
|
163
|
+
rule(:standalone_proceedings) do
|
|
164
|
+
str("CIE") >> space >> paper_code >> digits.as(:paper_number) >>
|
|
165
|
+
space >> (digits >> dash >> digits).as(:page_range)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# D-series: CIE D001-2006 / CIE D002:2004
|
|
169
|
+
rule(:d_series_identifier) do
|
|
170
|
+
str("CIE") >> space >> str("D").as(:d_prefix) >> digits.as(:number) >> date
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Standard with bare slash-year (no language letter): CIE S 007/1998
|
|
174
|
+
# Uses a narrow number(+iteration) pattern rather than the full code rule
|
|
175
|
+
# so code_with_part_slash doesn't greedily consume the /year.
|
|
176
|
+
rule(:standard_with_slash_year) do
|
|
177
|
+
str("CIE") >> space >>
|
|
178
|
+
stage_code.maybe.as(:stage) >>
|
|
179
|
+
s_prefix.maybe.as(:s_prefix) >>
|
|
180
|
+
(digits.as(:number) >> (dot >> digits.as(:iteration)).maybe) >>
|
|
181
|
+
slash >> year_digits.as(:slash_year)
|
|
141
182
|
end
|
|
142
183
|
|
|
143
184
|
# DIS stage with supplement pattern (e.g., DIS 025-SP1/E:2019)
|
|
@@ -157,12 +198,14 @@ module Pubid
|
|
|
157
198
|
stage_code.maybe.as(:stage) >>
|
|
158
199
|
s_prefix.maybe.as(:s_prefix) >>
|
|
159
200
|
code >>
|
|
160
|
-
# Language can come BEFORE date, AFTER date, or both
|
|
201
|
+
# Language can come BEFORE date, AFTER date, or both.
|
|
202
|
+
# The whole date group is optional so a bare "CIE 015" (no year)
|
|
203
|
+
# parses with year left nil (partial reference for relaton matching).
|
|
161
204
|
(
|
|
162
205
|
(language >> date).as(:lang_before) |
|
|
163
206
|
(date >> language.maybe).as(:date_then_lang) |
|
|
164
207
|
date
|
|
165
|
-
)
|
|
208
|
+
).maybe
|
|
166
209
|
end
|
|
167
210
|
|
|
168
211
|
# Standard identifier without ISO reference but with language-year (CIE S 014-4/E:2007)
|
|
@@ -181,7 +224,9 @@ module Pubid
|
|
|
181
224
|
digits.as(:conf_number) >>
|
|
182
225
|
date >>
|
|
183
226
|
# Optional amendment
|
|
184
|
-
(space >> str("Amendment") >> space >> digits.as(:amd_number)).maybe
|
|
227
|
+
(space >> str("Amendment") >> space >> digits.as(:amd_number)).maybe >>
|
|
228
|
+
# Optional techstreet opaque /slug variant
|
|
229
|
+
variant_slug.maybe
|
|
185
230
|
end
|
|
186
231
|
|
|
187
232
|
# Joint published with ISO
|
|
@@ -320,6 +365,10 @@ module Pubid
|
|
|
320
365
|
corrigendum_identifier |
|
|
321
366
|
supplement_identifier |
|
|
322
367
|
standard_with_language_year |
|
|
368
|
+
standard_with_slash_year |
|
|
369
|
+
d_series_identifier |
|
|
370
|
+
conf_proceedings |
|
|
371
|
+
standalone_proceedings |
|
|
323
372
|
legacy_code_with_year | # Before standard to catch 001-1980 pattern
|
|
324
373
|
conference_identifier |
|
|
325
374
|
standard_identifier
|