pubid 2.0.0.pre.alpha.7 → 2.0.0.pre.alpha.9
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 +9 -50
- 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/data/nist/series.yaml +155 -0
- data/data/nist/update_codes.yaml +8 -0
- data/lib/pubid/adobe/builder.rb +52 -0
- data/lib/pubid/adobe/identifier.rb +49 -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 +128 -0
- data/lib/pubid/adobe/renderer.rb +39 -0
- data/lib/pubid/adobe/urn_generator.rb +42 -0
- data/lib/pubid/adobe/urn_parser.rb +69 -0
- data/lib/pubid/adobe.rb +60 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +1 -3
- data/lib/pubid/amca/identifiers/base.rb +1 -6
- data/lib/pubid/amca/identifiers/interpretation.rb +1 -1
- data/lib/pubid/amca/identifiers/publication.rb +1 -1
- data/lib/pubid/amca/identifiers/standard.rb +1 -1
- data/lib/pubid/amca/identifiers.rb +0 -1
- data/lib/pubid/amca/single_identifier.rb +1 -1
- data/lib/pubid/amca.rb +3 -3
- data/lib/pubid/ashrae/builder.rb +22 -22
- data/lib/pubid/ashrae/identifier.rb +3 -4
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +1 -1
- data/lib/pubid/ashrae/identifiers/addendum.rb +1 -1
- data/lib/pubid/ashrae/identifiers/base.rb +14 -8
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +1 -1
- data/lib/pubid/ashrae/identifiers.rb +0 -1
- data/lib/pubid/ashrae/parser.rb +14 -9
- data/lib/pubid/ashrae/renderer.rb +19 -19
- data/lib/pubid/ashrae/single_identifier.rb +1 -1
- data/lib/pubid/ashrae/supplement_identifier.rb +6 -6
- data/lib/pubid/ashrae.rb +3 -3
- data/lib/pubid/bipm/builder.rb +107 -0
- data/lib/pubid/bipm/identifier.rb +160 -0
- data/lib/pubid/bipm/identifiers/committee_document.rb +24 -0
- data/lib/pubid/bipm/identifiers/guide.rb +24 -0
- data/lib/pubid/bipm/identifiers/meeting.rb +41 -0
- data/lib/pubid/bipm/identifiers/mep.rb +21 -0
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +24 -0
- data/lib/pubid/bipm/identifiers/si_brochure.rb +20 -0
- data/lib/pubid/bipm/identifiers.rb +15 -0
- data/lib/pubid/bipm/parser.rb +184 -0
- data/lib/pubid/bipm/renderer.rb +110 -0
- data/lib/pubid/bipm/urn_generator.rb +58 -0
- data/lib/pubid/bipm/urn_parser.rb +52 -0
- data/lib/pubid/bipm.rb +86 -0
- data/lib/pubid/bsi/builder.rb +14 -14
- data/lib/pubid/bsi/identifier.rb +0 -1
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/amendment.rb +4 -4
- 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/supplement_document.rb +2 -2
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +6 -6
- data/lib/pubid/bsi/renderer.rb +8 -8
- data/lib/pubid/bsi/single_identifier.rb +48 -0
- data/lib/pubid/builder/base.rb +5 -3
- data/lib/pubid/bundled_identifier.rb +3 -3
- data/lib/pubid/calconnect/builder.rb +38 -0
- data/lib/pubid/calconnect/identifier.rb +117 -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 +77 -0
- data/lib/pubid/ccsds/builder.rb +1 -1
- data/lib/pubid/ccsds/identifier.rb +1 -1
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +2 -2
- data/lib/pubid/ccsds/supplement_identifier.rb +6 -6
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/cen_cenelec/builder.rb +46 -12
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +60 -3
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
- data/lib/pubid/cen_cenelec/renderer.rb +5 -5
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +5 -5
- data/lib/pubid/cen_cenelec/urn_generator.rb +1 -1
- data/lib/pubid/cen_cenelec.rb +76 -72
- data/lib/pubid/cie/builder.rb +139 -24
- data/lib/pubid/cie/identifier.rb +7 -3
- data/lib/pubid/cie/identifiers/bundle.rb +32 -4
- data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
- data/lib/pubid/cie/identifiers/conference.rb +9 -4
- data/lib/pubid/cie/identifiers/corrigendum.rb +17 -23
- data/lib/pubid/cie/identifiers/dual_published.rb +4 -4
- data/lib/pubid/cie/identifiers/identical.rb +7 -7
- data/lib/pubid/cie/identifiers/joint_published.rb +8 -8
- data/lib/pubid/cie/identifiers/proceedings.rb +39 -0
- data/lib/pubid/cie/identifiers/standard.rb +33 -7
- data/lib/pubid/cie/identifiers/supplement.rb +24 -22
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +6 -2
- data/lib/pubid/cie/identifiers.rb +2 -0
- data/lib/pubid/cie/parser.rb +54 -5
- 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 +0 -1
- data/lib/pubid/components/date.rb +21 -5
- data/lib/pubid/csa/builder.rb +1 -1
- data/lib/pubid/csa/composite_identifier.rb +17 -1
- data/lib/pubid/csa/identifier.rb +48 -3
- data/lib/pubid/csa/identifiers/bundled.rb +6 -0
- data/lib/pubid/csa/identifiers/combined.rb +6 -0
- data/lib/pubid/csa/identifiers/package.rb +2 -2
- data/lib/pubid/csa/parser.rb +6 -6
- data/lib/pubid/csa/wrapper_identifier.rb +17 -0
- data/lib/pubid/doi/builder.rb +18 -0
- data/lib/pubid/doi/identifier.rb +46 -0
- data/lib/pubid/doi/identifiers/resource.rb +30 -0
- data/lib/pubid/doi/identifiers.rb +9 -0
- data/lib/pubid/doi/parser.rb +52 -0
- data/lib/pubid/doi/renderer.rb +13 -0
- data/lib/pubid/doi.rb +55 -0
- data/lib/pubid/easc/builder.rb +55 -0
- data/lib/pubid/easc/identifier.rb +61 -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 +80 -0
- data/lib/pubid/easc/renderer.rb +48 -0
- data/lib/pubid/easc/urn_generator.rb +46 -0
- data/lib/pubid/easc/urn_parser.rb +57 -0
- data/lib/pubid/easc.rb +52 -0
- data/lib/pubid/ecma/builder.rb +31 -0
- data/lib/pubid/ecma/identifier.rb +76 -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 +41 -0
- data/lib/pubid/ecma/renderer.rb +46 -0
- data/lib/pubid/ecma/urn_generator.rb +25 -0
- data/lib/pubid/ecma/urn_parser.rb +35 -0
- data/lib/pubid/ecma.rb +67 -0
- data/lib/pubid/etsi/builder.rb +7 -3
- data/lib/pubid/etsi/identifier.rb +1 -3
- data/lib/pubid/etsi/identifiers/base.rb +28 -10
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +128 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +35 -3
- data/lib/pubid/etsi/identifiers.rb +0 -1
- data/lib/pubid/etsi/parser.rb +8 -2
- data/lib/pubid/etsi/renderer.rb +8 -2
- data/lib/pubid/etsi.rb +5 -5
- data/lib/pubid/export/exporter.rb +2 -1
- data/lib/pubid/export/flavor_exporter.rb +18 -3
- data/lib/pubid/gb/builder.rb +45 -0
- data/lib/pubid/gb/identifier.rb +64 -0
- data/lib/pubid/gb/identifiers/standard.rb +34 -0
- data/lib/pubid/gb/identifiers.rb +9 -0
- data/lib/pubid/gb/parser.rb +63 -0
- data/lib/pubid/gb/renderer.rb +35 -0
- data/lib/pubid/gb.rb +87 -0
- data/lib/pubid/gost/builder.rb +148 -0
- data/lib/pubid/gost/identifier.rb +49 -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 +97 -0
- data/lib/pubid/gost/renderer.rb +48 -0
- data/lib/pubid/gost/urn_generator.rb +46 -0
- data/lib/pubid/gost/urn_parser.rb +52 -0
- data/lib/pubid/gost.rb +49 -0
- data/lib/pubid/iala/builder.rb +22 -27
- data/lib/pubid/iala/identifier.rb +27 -2
- data/lib/pubid/iala/identifiers/advice.rb +1 -1
- data/lib/pubid/iala/identifiers/annex.rb +14 -12
- 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/renderer.rb +1 -1
- data/lib/pubid/iala/urn_generator.rb +1 -1
- data/lib/pubid/iala/urn_parser.rb +19 -2
- data/lib/pubid/iala.rb +4 -4
- data/lib/pubid/iana/builder.rb +20 -0
- data/lib/pubid/iana/identifier.rb +72 -0
- data/lib/pubid/iana/identifiers/registry.rb +33 -0
- data/lib/pubid/iana/identifiers.rb +9 -0
- data/lib/pubid/iana/parser.rb +38 -0
- data/lib/pubid/iana/renderer.rb +29 -0
- data/lib/pubid/iana/urn_generator.rb +15 -0
- data/lib/pubid/iana/urn_parser.rb +24 -0
- data/lib/pubid/iana.rb +69 -0
- data/lib/pubid/identifier.rb +210 -23
- data/lib/pubid/idf/builder.rb +1 -1
- data/lib/pubid/idf/parser.rb +2 -2
- data/lib/pubid/idf/renderer.rb +1 -1
- data/lib/pubid/idf/supplement_identifier.rb +3 -3
- data/lib/pubid/iec/builder.rb +35 -25
- data/lib/pubid/iec/identifier.rb +47 -2
- data/lib/pubid/iec/identifiers/base.rb +2 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +6 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +11 -11
- data/lib/pubid/iec/identifiers/international_standard.rb +8 -5
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +1 -1
- data/lib/pubid/iec/identifiers/technical_specification.rb +1 -1
- data/lib/pubid/iec/identifiers/vap_identifier.rb +12 -12
- data/lib/pubid/iec/identifiers.rb +1 -0
- data/lib/pubid/iec/parser.rb +51 -10
- data/lib/pubid/iec/renderer.rb +18 -8
- data/lib/pubid/iec/single_identifier.rb +1 -1
- data/lib/pubid/iec/supplement_identifier.rb +32 -19
- data/lib/pubid/iec.rb +1 -6
- data/lib/pubid/ieee/aiee/builder.rb +17 -3
- data/lib/pubid/ieee/aiee/identifier.rb +45 -61
- data/lib/pubid/ieee/builder.rb +341 -68
- 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 +30 -5
- data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
- data/lib/pubid/ieee/identifiers/base.rb +106 -13
- 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 +3 -3
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +3 -3
- data/lib/pubid/ieee/identifiers/dual_published.rb +3 -3
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +102 -5
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +2 -1
- data/lib/pubid/ieee/identifiers/joint_development.rb +56 -11
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -1
- 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/nesc/builder.rb +33 -20
- data/lib/pubid/ieee/nesc/parser.rb +15 -14
- data/lib/pubid/ieee/parser.rb +461 -43
- data/lib/pubid/ieee/pre_parser.rb +1 -1
- data/lib/pubid/ieee/renderer.rb +154 -57
- data/lib/pubid/ieee/typed_stages.rb +12 -1
- data/lib/pubid/ieee/urn_generator.rb +3 -5
- data/lib/pubid/ieee.rb +56 -3
- data/lib/pubid/ietf/builder.rb +62 -0
- data/lib/pubid/ietf/identifier.rb +5 -0
- data/lib/pubid/ietf/identifiers/base.rb +75 -0
- data/lib/pubid/ietf/identifiers/bcp.rb +25 -0
- data/lib/pubid/ietf/identifiers/fyi.rb +25 -0
- data/lib/pubid/ietf/identifiers/internet_draft.rb +29 -0
- data/lib/pubid/ietf/identifiers/rfc.rb +25 -0
- data/lib/pubid/ietf/identifiers/std.rb +25 -0
- data/lib/pubid/ietf/identifiers.rb +13 -0
- data/lib/pubid/ietf/parser.rb +43 -0
- data/lib/pubid/ietf/renderer.rb +26 -0
- data/lib/pubid/ietf/urn_generator.rb +23 -0
- data/lib/pubid/ietf/urn_parser.rb +35 -0
- data/lib/pubid/ietf.rb +76 -0
- data/lib/pubid/iho/identifier.rb +1 -3
- data/lib/pubid/iho/identifiers/base.rb +1 -7
- 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.rb +7 -7
- data/lib/pubid/isbn/builder.rb +44 -0
- data/lib/pubid/isbn/check_digit.rb +53 -0
- data/lib/pubid/isbn/identifier.rb +63 -0
- data/lib/pubid/isbn/identifiers/book.rb +30 -0
- data/lib/pubid/isbn/identifiers.rb +9 -0
- data/lib/pubid/isbn/parser.rb +45 -0
- data/lib/pubid/isbn/renderer.rb +16 -0
- data/lib/pubid/isbn.rb +52 -0
- data/lib/pubid/iso/builder.rb +9 -4
- data/lib/pubid/iso/combined_identifier.rb +2 -2
- data/lib/pubid/iso/identifier.rb +17 -1
- data/lib/pubid/iso/identifiers/directives_supplement.rb +8 -8
- data/lib/pubid/iso/normalizer.rb +2 -2
- data/lib/pubid/iso/parser.rb +16 -12
- 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/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 +6 -28
- 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 +341 -23
- 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 +480 -26
- data/lib/pubid/itu/urn_generator.rb +36 -6
- data/lib/pubid/itu/urn_parser.rb +8 -0
- data/lib/pubid/itu.rb +11 -3
- data/lib/pubid/jcgm/builder.rb +23 -13
- 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 +66 -6
- data/lib/pubid/jcgm/renderer.rb +26 -12
- data/lib/pubid/jcgm/single_identifier.rb +74 -5
- 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 +15 -3
- data/lib/pubid/jis/identifier.rb +52 -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/supplement.rb +5 -2
- data/lib/pubid/nist/configuration.rb +7 -1
- data/lib/pubid/nist/identifier.rb +1 -3
- data/lib/pubid/nist/identifiers/base.rb +121 -37
- data/lib/pubid/nist/identifiers/circular.rb +1 -1
- 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 +1 -1
- data/lib/pubid/nist/identifiers/crpl_report.rb +1 -1
- 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 +1 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +1 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +1 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +1 -1
- data/lib/pubid/nist/identifiers/monograph.rb +1 -1
- 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 +1 -1
- 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 +29 -4
- data/lib/pubid/nist/preprocessor.rb +15 -0
- data/lib/pubid/nist/router.rb +3 -2
- data/lib/pubid/nist/series/ir.rb +0 -3
- data/lib/pubid/nist/supplement_identifier.rb +9 -9
- data/lib/pubid/nist.rb +13 -12
- data/lib/pubid/oasis/builder.rb +77 -0
- data/lib/pubid/oasis/identifier.rb +82 -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 +74 -0
- data/lib/pubid/ogc/builder.rb +33 -0
- data/lib/pubid/ogc/identifier.rb +77 -0
- data/lib/pubid/ogc/identifiers/document.rb +26 -0
- data/lib/pubid/ogc/identifiers.rb +10 -0
- data/lib/pubid/ogc/parser.rb +40 -0
- data/lib/pubid/ogc/renderer.rb +33 -0
- data/lib/pubid/ogc/urn_generator.rb +14 -0
- data/lib/pubid/ogc/urn_parser.rb +22 -0
- data/lib/pubid/ogc.rb +71 -0
- data/lib/pubid/oiml/builder.rb +31 -7
- data/lib/pubid/oiml/identifier.rb +9 -1
- data/lib/pubid/oiml/parser.rb +11 -12
- data/lib/pubid/oiml/renderer.rb +13 -13
- data/lib/pubid/oiml/single_identifier.rb +20 -0
- data/lib/pubid/oiml/supplement_identifier.rb +9 -9
- data/lib/pubid/oiml/urn_parser.rb +23 -6
- data/lib/pubid/oiml.rb +4 -0
- data/lib/pubid/omg/builder.rb +19 -0
- data/lib/pubid/omg/identifier.rb +44 -0
- data/lib/pubid/omg/identifiers/specification.rb +32 -0
- data/lib/pubid/omg/identifiers.rb +9 -0
- data/lib/pubid/omg/parser.rb +40 -0
- data/lib/pubid/omg/renderer.rb +19 -0
- data/lib/pubid/omg.rb +51 -0
- data/lib/pubid/parsers/mr_string.rb +101 -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 +15 -5
- data/lib/pubid/plateau/renderer.rb +1 -1
- data/lib/pubid/plateau/supplement_identifier.rb +11 -11
- data/lib/pubid/plateau.rb +4 -4
- data/lib/pubid/renderers/human_readable.rb +3 -1
- data/lib/pubid/renderers/mr_string.rb +46 -4
- data/lib/pubid/renderers/supplement_renderer.rb +1 -1
- data/lib/pubid/rendering/supplement.rb +4 -4
- data/lib/pubid/sae/builder.rb +1 -1
- data/lib/pubid/sae/identifier.rb +1 -3
- data/lib/pubid/sae/identifiers/base.rb +10 -7
- data/lib/pubid/sae/identifiers.rb +0 -1
- data/lib/pubid/sae.rb +3 -3
- data/lib/pubid/tgpp/builder.rb +41 -0
- data/lib/pubid/tgpp/identifier.rb +91 -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 +62 -0
- data/lib/pubid/tgpp/renderer.rb +36 -0
- data/lib/pubid/tgpp/urn_generator.rb +20 -0
- data/lib/pubid/tgpp/urn_parser.rb +28 -0
- data/lib/pubid/tgpp.rb +78 -0
- data/lib/pubid/type_resolver.rb +59 -0
- data/lib/pubid/un/builder.rb +42 -0
- data/lib/pubid/un/identifier.rb +37 -0
- data/lib/pubid/un/identifiers/document.rb +24 -0
- data/lib/pubid/un/identifiers.rb +9 -0
- data/lib/pubid/un/parser.rb +25 -0
- data/lib/pubid/un/renderer.rb +11 -0
- data/lib/pubid/un.rb +46 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid/w3c/builder.rb +55 -0
- data/lib/pubid/w3c/identifier.rb +101 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +31 -0
- data/lib/pubid/w3c/identifiers/draft_note.rb +31 -0
- data/lib/pubid/w3c/identifiers/note.rb +30 -0
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/standard.rb +12 -0
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/working_draft.rb +30 -0
- data/lib/pubid/w3c/identifiers.rb +25 -0
- data/lib/pubid/w3c/parser.rb +43 -0
- data/lib/pubid/w3c/renderer.rb +35 -0
- data/lib/pubid/w3c/urn_generator.rb +18 -0
- data/lib/pubid/w3c/urn_parser.rb +36 -0
- data/lib/pubid/w3c.rb +67 -0
- data/lib/pubid/xsf/builder.rb +17 -0
- data/lib/pubid/xsf/identifier.rb +62 -0
- data/lib/pubid/xsf/identifiers/xep.rb +31 -0
- data/lib/pubid/xsf/identifiers.rb +9 -0
- data/lib/pubid/xsf/parser.rb +25 -0
- data/lib/pubid/xsf/renderer.rb +23 -0
- data/lib/pubid/xsf/urn_generator.rb +13 -0
- data/lib/pubid/xsf/urn_parser.rb +18 -0
- data/lib/pubid/xsf.rb +76 -0
- data/lib/pubid.rb +25 -1
- metadata +205 -4
- data/lib/pubid/cie/components/code.rb +0 -80
- data/lib/pubid/iala/identifiers/base.rb +0 -14
|
@@ -8,7 +8,10 @@ module Pubid
|
|
|
8
8
|
# Handles both:
|
|
9
9
|
# - SI: Published standards (IEEE/ASTM SI 10-1997)
|
|
10
10
|
# - PSI: Proposed SI (drafts: IEEE/ASTM PSI 10/D2, October 2015)
|
|
11
|
-
class SiStandard <
|
|
11
|
+
class SiStandard < Identifier
|
|
12
|
+
# Reliable string `number` for relaton's index key (see CodeNumber).
|
|
13
|
+
include CodeNumber
|
|
14
|
+
|
|
12
15
|
# TYPED_STAGES for SI standards
|
|
13
16
|
TYPED_STAGES = [
|
|
14
17
|
Components::TypedStage.new(
|
|
@@ -17,7 +17,10 @@ module Pubid
|
|
|
17
17
|
# std = Pubid::Ieee.parse("ANSI/IEEE Std 500-1984")
|
|
18
18
|
# std.publisher # => "IEEE"
|
|
19
19
|
# std.copublisher # => ["ANSI"]
|
|
20
|
-
class Standard <
|
|
20
|
+
class Standard < Identifier
|
|
21
|
+
# Reliable string `number` for relaton's index key (see CodeNumber).
|
|
22
|
+
include CodeNumber
|
|
23
|
+
|
|
21
24
|
# TYPED_STAGES for published IEEE standards
|
|
22
25
|
# Standards use "Std" abbreviation for published state
|
|
23
26
|
TYPED_STAGES = [
|
|
@@ -3,19 +3,38 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ieee
|
|
5
5
|
module Identifiers
|
|
6
|
-
#
|
|
6
|
+
# Identifier class for supplement identifiers (amendments, corrigenda, interpretations, etc.)
|
|
7
7
|
# Supplements modify or add to a base document
|
|
8
|
-
class SupplementIdentifier <
|
|
9
|
-
attribute :
|
|
8
|
+
class SupplementIdentifier < Identifier
|
|
9
|
+
attribute :base, Identifier, polymorphic: true
|
|
10
10
|
|
|
11
|
-
# Delegate publisher to
|
|
11
|
+
# Delegate publisher to base
|
|
12
12
|
def publisher
|
|
13
|
-
|
|
13
|
+
base&.publisher
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
# Delegate code to
|
|
16
|
+
# Delegate code to base if not overridden
|
|
17
17
|
def code
|
|
18
|
-
|
|
18
|
+
base&.code
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# `publisher` is a pure delegation to `base`, so it must never be
|
|
22
|
+
# serialized independently on the wrapper. lutaml's default-tracking
|
|
23
|
+
# otherwise emits it asymmetrically — omitted on the parse path (the
|
|
24
|
+
# wrapper's own attribute is never assigned) but present after
|
|
25
|
+
# `from_hash` (deserialization assigns it) — which breaks the canonical
|
|
26
|
+
# `to_hash` round-trip for a supplement whose base carries a non-default
|
|
27
|
+
# publisher (e.g. an ANSI/ISO corrigendum). The truth lives in `base`.
|
|
28
|
+
def to_hash(*args)
|
|
29
|
+
hash = super
|
|
30
|
+
if hash.is_a?(::Hash)
|
|
31
|
+
# `publisher` and `code` are delegated to `base`; never serialize
|
|
32
|
+
# them on the wrapper (they'd duplicate base.publisher/base.number
|
|
33
|
+
# and, for publisher, desync across parse vs from_hash).
|
|
34
|
+
hash.delete("publisher")
|
|
35
|
+
hash.delete("code")
|
|
36
|
+
end
|
|
37
|
+
hash
|
|
19
38
|
end
|
|
20
39
|
end
|
|
21
40
|
end
|
|
@@ -4,9 +4,10 @@ module Pubid
|
|
|
4
4
|
module Ieee
|
|
5
5
|
module Identifiers
|
|
6
6
|
autoload :AdoptedStandard, "#{__dir__}/identifiers/adopted_standard"
|
|
7
|
-
autoload :
|
|
7
|
+
autoload :Amendment, "#{__dir__}/identifiers/amendment"
|
|
8
8
|
autoload :ConformanceIdentifier,
|
|
9
9
|
"#{__dir__}/identifiers/conformance_identifier"
|
|
10
|
+
autoload :CodeNumber, "#{__dir__}/identifiers/code_number"
|
|
10
11
|
autoload :Corrigendum, "#{__dir__}/identifiers/corrigendum"
|
|
11
12
|
autoload :CsaDualPublished, "#{__dir__}/identifiers/csa_dual_published"
|
|
12
13
|
autoload :DualIdentifier, "#{__dir__}/identifiers/dual_identifier"
|
|
@@ -14,11 +14,12 @@ module Pubid
|
|
|
14
14
|
# Extract type
|
|
15
15
|
attributes[:type] = extract_value(parsed[:type])
|
|
16
16
|
|
|
17
|
-
# Extract
|
|
17
|
+
# Extract the document designation. It travels as `code:` so the base
|
|
18
|
+
# initializer parses it into `code_obj` and the CodeNumber mixin
|
|
19
|
+
# hoists the flat split columns (number/prefix/parts/separator) that
|
|
20
|
+
# relaton indexes on.
|
|
18
21
|
number_str = extract_value(parsed[:number])
|
|
19
|
-
if number_str
|
|
20
|
-
attributes[:number] = Components::Code.parse(number_str)
|
|
21
|
-
end
|
|
22
|
+
attributes[:code] = number_str if number_str
|
|
22
23
|
|
|
23
24
|
# Extract year - handle both short (52) and full (1952) formats
|
|
24
25
|
year_str = extract_value(parsed[:year])
|
|
@@ -28,13 +29,13 @@ module Pubid
|
|
|
28
29
|
if year_int.between?(12, 63)
|
|
29
30
|
year_int += 1900
|
|
30
31
|
end
|
|
31
|
-
attributes[:year] = year_int
|
|
32
|
+
attributes[:year] = year_int.to_s
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
# Override with full_year if present
|
|
35
36
|
full_year_str = extract_value(parsed[:full_year])
|
|
36
37
|
if full_year_str
|
|
37
|
-
attributes[:year] = full_year_str.to_i
|
|
38
|
+
attributes[:year] = full_year_str.to_i.to_s
|
|
38
39
|
end
|
|
39
40
|
|
|
40
41
|
# Create identifier
|
|
@@ -5,32 +5,36 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Ieee
|
|
7
7
|
module Ire
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
8
|
+
# IRE identifiers (Institute of Radio Engineers: 1912-1963).
|
|
9
|
+
#
|
|
10
|
+
# Reparented onto Pubid::Ieee::Identifier + the CodeNumber mixin for the
|
|
11
|
+
# same reasons AIEE was (see Pubid::Ieee::Aiee::Identifier): descending
|
|
12
|
+
# from bare Lutaml::Model::Serializable left IRE without `#root` (relaton
|
|
13
|
+
# keys its index on `id.root.number.to_s` -> NoMethodError), without a
|
|
14
|
+
# polymorphic `_type` (so `from_hash` could not route back), and — because
|
|
15
|
+
# an IRE object was not a ::Pubid::Identifier — unassignable to
|
|
16
|
+
# Identifiers::AdoptedStandard#adopted_identifiers, which raised
|
|
17
|
+
# Lutaml::Model::IncorrectModelError on `to_hash` for the IRE-adopted
|
|
18
|
+
# forms ("IEEE Std 159-1972 (52 IRE 7 S2)").
|
|
19
|
+
#
|
|
20
|
+
# The document designation ("7.S2") is carried in the shared `code_obj`
|
|
21
|
+
# and serialized as the flat split columns (number/prefix/parts/
|
|
22
|
+
# separator); the publication year uses the base's plain `:string` `year`
|
|
23
|
+
# (IRE previously declared its own `:integer` one, which would collide).
|
|
24
|
+
class Identifier < Pubid::Ieee::Identifier
|
|
25
|
+
include Pubid::Ieee::Identifiers::CodeNumber
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
attribute :publisher, :string, default: -> { "IRE" }
|
|
28
|
+
# IRE spells its type word out when present ("Trans.", "Standard",
|
|
29
|
+
# "Std") and omits it otherwise, so the base's "Std" default must go —
|
|
30
|
+
# else "52 IRE 7.S2" would render as "52 IRE Std 7.S2".
|
|
31
|
+
attribute :type, :string, default: -> {}
|
|
30
32
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
# A distinct polymorphic name so from_hash routes to IRE. The derived
|
|
34
|
+
# default (last name segment "Identifier") would be
|
|
35
|
+
# "pubid:ieee:identifier", colliding with the base class.
|
|
36
|
+
def self.polymorphic_name
|
|
37
|
+
"pubid:ieee:ire"
|
|
34
38
|
end
|
|
35
39
|
|
|
36
40
|
# Parse IRE identifier string
|
|
@@ -40,17 +44,28 @@ module Pubid
|
|
|
40
44
|
builder.build(parsed)
|
|
41
45
|
end
|
|
42
46
|
|
|
43
|
-
def to_s
|
|
44
|
-
parts = []
|
|
47
|
+
def to_s(trademark: false)
|
|
45
48
|
# Year comes FIRST in IRE format - render as 2-digit short year
|
|
46
|
-
if year
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
result = [(short_year if year), publisher, type, code&.to_s]
|
|
50
|
+
.compact.join(" ")
|
|
51
|
+
# The code is the last token, so the end of the string already *is*
|
|
52
|
+
# the code boundary — but the symbol is picked from the code, not by
|
|
53
|
+
# scanning the string (which starts with the year).
|
|
54
|
+
if trademark
|
|
55
|
+
result += Pubid::Ieee.trademark_symbol_for(code_obj&.number,
|
|
56
|
+
code_obj&.prefix,
|
|
57
|
+
publishers: [publisher])
|
|
49
58
|
end
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
result
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
# IRE prints the publication year first, abbreviated to two digits for
|
|
65
|
+
# the 20th century ("1952" => "52").
|
|
66
|
+
def short_year
|
|
67
|
+
value = year.to_i
|
|
68
|
+
(value.between?(1900, 1999) ? value - 1900 : value).to_s
|
|
54
69
|
end
|
|
55
70
|
end
|
|
56
71
|
end
|
|
@@ -20,6 +20,18 @@ module Pubid
|
|
|
20
20
|
# identifier = builder.build(parsed)
|
|
21
21
|
# # => #<Pubid::Ieee::Identifiers::Nesc::Handbook>
|
|
22
22
|
class Builder
|
|
23
|
+
# The NESC's own designation (ANSI/IEEE C2). Used as the index code for
|
|
24
|
+
# the year-first forms, which print no code of their own.
|
|
25
|
+
#
|
|
26
|
+
# CAVEAT: this files the whole NESC family — including the Handbook and
|
|
27
|
+
# Redline, which are companions of the code rather than the code itself
|
|
28
|
+
# — under one `prefix "C"` + `number "2"` index key. That is deliberate:
|
|
29
|
+
# relaton narrows on `root.number` and then matches the full hash, so
|
|
30
|
+
# `_type` (and `variant`) keep the documents distinct; the alternative
|
|
31
|
+
# was an empty key, which silently defeats the binary search. Revisit if
|
|
32
|
+
# relaton ever treats `prefix + number` alone as an identity.
|
|
33
|
+
DEFAULT_CODE = "C2"
|
|
34
|
+
|
|
23
35
|
# Build NESC identifier from parsed hash
|
|
24
36
|
#
|
|
25
37
|
# @param parsed_hash [Hash] Hash from parser
|
|
@@ -28,22 +40,18 @@ module Pubid
|
|
|
28
40
|
# Determine identifier type based on parsed attributes
|
|
29
41
|
identifier_class = determine_identifier_class(parsed_hash)
|
|
30
42
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
#
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
)
|
|
40
|
-
end
|
|
43
|
+
# The code travels through the base initializer as `code:` so it lands
|
|
44
|
+
# in `code_obj` and the CodeNumber mixin hoists the flat split columns
|
|
45
|
+
# relaton indexes on. Every NESC document is the C2-designated code
|
|
46
|
+
# (or a companion of it), so the year-first forms — which print no
|
|
47
|
+
# code — still key under "C2" rather than leaving `root.number` empty.
|
|
48
|
+
identifier = identifier_class.new(
|
|
49
|
+
code: parsed_hash[:code]&.to_s || DEFAULT_CODE,
|
|
50
|
+
)
|
|
41
51
|
|
|
42
52
|
# Set year (required for all NESC identifiers)
|
|
43
53
|
if parsed_hash[:year]
|
|
44
|
-
identifier.year =
|
|
45
|
-
year: parsed_hash[:year].to_s.to_i,
|
|
46
|
-
)
|
|
54
|
+
identifier.year = parsed_hash[:year].to_s
|
|
47
55
|
end
|
|
48
56
|
|
|
49
57
|
# Set variant (Handbook, Redline, etc.)
|
|
@@ -56,16 +64,20 @@ module Pubid
|
|
|
56
64
|
identifier.edition = parsed_hash[:edition].to_s
|
|
57
65
|
end
|
|
58
66
|
|
|
59
|
-
# Set draft flag
|
|
60
|
-
if parsed_hash[:draft]
|
|
61
|
-
identifier.draft = true
|
|
62
|
-
end
|
|
63
|
-
|
|
64
67
|
# Set month (for drafts)
|
|
65
68
|
if parsed_hash[:month]
|
|
66
69
|
identifier.month = parsed_hash[:month].to_s
|
|
67
70
|
end
|
|
68
71
|
|
|
72
|
+
# Registered-trademark "(R)" marks and the "(NESC(R))" abbreviation
|
|
73
|
+
# suffix (year-first forms) — see Identifiers::Nesc::Base#name_portion.
|
|
74
|
+
identifier.registered = true if parsed_hash[:name_registered] ||
|
|
75
|
+
parsed_hash[:abbr_registered]
|
|
76
|
+
if parsed_hash[:paren_abbr]
|
|
77
|
+
identifier.abbr_suffix = true
|
|
78
|
+
identifier.abbr_suffix_registered = true if parsed_hash[:paren_registered]
|
|
79
|
+
end
|
|
80
|
+
|
|
69
81
|
identifier
|
|
70
82
|
end
|
|
71
83
|
|
|
@@ -92,8 +104,9 @@ module Pubid
|
|
|
92
104
|
# C2 code means standard NESC
|
|
93
105
|
return Identifiers::Nesc::Standard if parsed_hash[:code]
|
|
94
106
|
|
|
95
|
-
#
|
|
96
|
-
|
|
107
|
+
# Plain year-first edition. Never the abstract Nesc::Base — only
|
|
108
|
+
# concrete leaves carry the CodeNumber `number` column.
|
|
109
|
+
Identifiers::Nesc::Edition
|
|
97
110
|
end
|
|
98
111
|
end
|
|
99
112
|
end
|
|
@@ -34,15 +34,15 @@ module Pubid
|
|
|
34
34
|
str("C2").as(:code)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
# NESC name variations
|
|
37
|
+
# NESC name variations (the "(R)" registered mark is captured
|
|
38
|
+
# separately by the `registered` rule so it can be round-tripped)
|
|
38
39
|
rule(:nesc_full_name) do
|
|
39
|
-
str("National Electrical Safety Code
|
|
40
|
-
str("National Electrical Safety Code") |
|
|
40
|
+
str("National Electrical Safety Code") |
|
|
41
41
|
str("National Electric Safety Code") # Typo variation
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
rule(:nesc_abbr) do
|
|
45
|
-
str("NESC
|
|
45
|
+
str("NESC")
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
rule(:nesc_name) do
|
|
@@ -51,7 +51,7 @@ module Pubid
|
|
|
51
51
|
|
|
52
52
|
# Registered trademark notation
|
|
53
53
|
rule(:registered) do
|
|
54
|
-
str("(R)")
|
|
54
|
+
str("(R)")
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
# Edition notations
|
|
@@ -97,8 +97,8 @@ module Pubid
|
|
|
97
97
|
dash >>
|
|
98
98
|
year.as(:year) >>
|
|
99
99
|
(comma.maybe >> space).maybe >>
|
|
100
|
-
nesc_full_name >>
|
|
101
|
-
(space >> str("(") >> nesc_abbr >> str(")")).maybe
|
|
100
|
+
nesc_full_name >> registered.maybe >>
|
|
101
|
+
(space >> str("(") >> nesc_abbr >> registered.maybe >> str(")")).maybe
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
# Pattern 2: YYYY NESC format (year-first)
|
|
@@ -109,11 +109,12 @@ module Pubid
|
|
|
109
109
|
year.as(:year) >>
|
|
110
110
|
space >>
|
|
111
111
|
(
|
|
112
|
-
# Full name with optional (NESC) suffix
|
|
113
|
-
(nesc_full_name >> registered >>
|
|
114
|
-
(space >> str("(") >> nesc_abbr
|
|
115
|
-
|
|
116
|
-
(
|
|
112
|
+
# Full name with optional (NESC) abbreviation suffix
|
|
113
|
+
(nesc_full_name.as(:full_name) >> registered.as(:name_registered).maybe >>
|
|
114
|
+
(space >> str("(") >> nesc_abbr.as(:paren_abbr) >>
|
|
115
|
+
registered.as(:paren_registered).maybe >> str(")")).maybe) |
|
|
116
|
+
# Just the NESC abbreviation (e.g. "2017 NESC(R) Handbook")
|
|
117
|
+
(nesc_abbr.as(:abbr) >> registered.as(:abbr_registered).maybe)
|
|
117
118
|
) >>
|
|
118
119
|
(space >> variant).maybe >>
|
|
119
120
|
(comma >> space >> edition).maybe
|
|
@@ -123,7 +124,7 @@ module Pubid
|
|
|
123
124
|
# Examples: "National Electrical Safety Code, C2-2012"
|
|
124
125
|
# "National Electrical Safety Code, C2-2012 - Redline"
|
|
125
126
|
rule(:name_first) do
|
|
126
|
-
nesc_full_name >>
|
|
127
|
+
nesc_full_name >> registered.maybe >>
|
|
127
128
|
comma >>
|
|
128
129
|
space >>
|
|
129
130
|
c2_code >>
|
|
@@ -138,7 +139,7 @@ module Pubid
|
|
|
138
139
|
rule(:draft_nesc) do
|
|
139
140
|
str("Draft").as(:draft) >>
|
|
140
141
|
space >>
|
|
141
|
-
nesc_name >>
|
|
142
|
+
nesc_name >> registered.maybe >>
|
|
142
143
|
comma >> space >>
|
|
143
144
|
month >> space >> year.as(:year)
|
|
144
145
|
end
|