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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Adobe
|
|
7
|
+
# Parslet grammar for Adobe identifiers.
|
|
8
|
+
#
|
|
9
|
+
# Canonical citation forms (what the renderer produces):
|
|
10
|
+
#
|
|
11
|
+
# Adobe TN 5014 (tech note; replaces the older
|
|
12
|
+
# "Adobe Technical Note #5014")
|
|
13
|
+
# Adobe Publication adobe-glyph-list
|
|
14
|
+
# Adobe Publication adobe-japan1-7
|
|
15
|
+
#
|
|
16
|
+
# The parser also accepts these legacy forms for back-compat:
|
|
17
|
+
#
|
|
18
|
+
# Adobe Technical Note #5014
|
|
19
|
+
# Adobe Technical Note 5014
|
|
20
|
+
# Adobe TN5014 (no space)
|
|
21
|
+
# ATN5014 (short alias)
|
|
22
|
+
# 5014 (bare number; data-repo context)
|
|
23
|
+
# adobe-glyph-list (bare slug)
|
|
24
|
+
class Parser < Parslet::Parser
|
|
25
|
+
include ::Pubid::Parser::CommonParseRules
|
|
26
|
+
|
|
27
|
+
root :identifier
|
|
28
|
+
|
|
29
|
+
rule(:space) { str(" ") }
|
|
30
|
+
rule(:space?) { space.maybe }
|
|
31
|
+
rule(:hash) { str("#") }
|
|
32
|
+
rule(:dot) { str(".") }
|
|
33
|
+
rule(:dash) { str("-") }
|
|
34
|
+
|
|
35
|
+
# Canonical short prefix: "Adobe TN" with optional trailing space.
|
|
36
|
+
# Matches both "Adobe TN 5014" and "Adobe TN5014".
|
|
37
|
+
rule(:tech_note_tn_prefix) do
|
|
38
|
+
str("Adobe") >> space >> str("TN") >> space?.maybe
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Legacy long prefix: "Adobe Technical Note" with optional "#".
|
|
42
|
+
rule(:tech_note_long_prefix) do
|
|
43
|
+
str("Adobe") >> space >> str("Technical") >> space >> str("Note") >>
|
|
44
|
+
(space? >> hash.maybe >> space?).maybe
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Legacy short alias: "ATN" with optional trailing space.
|
|
48
|
+
rule(:tech_note_atn_prefix) do
|
|
49
|
+
str("ATN") >> space?.maybe
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
rule(:tech_note_prefix) do
|
|
53
|
+
tech_note_tn_prefix | tech_note_long_prefix | tech_note_atn_prefix
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
rule(:digits) do
|
|
57
|
+
match("[0-9]").repeat(1)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# 4-digit tech note number, optionally followed by ".<Slug>" from
|
|
61
|
+
# the filename form. The slug is captured but not required.
|
|
62
|
+
rule(:slug_chars) do
|
|
63
|
+
match("[A-Za-z0-9_]").repeat(1)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
rule(:tech_note) do
|
|
67
|
+
(tech_note_prefix >>
|
|
68
|
+
digits.as(:number) >>
|
|
69
|
+
(dot >> slug_chars.as(:slug)).maybe).as(:tech_note)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Bare number form (e.g. when the data repo passes just "5014"
|
|
73
|
+
# extracted from a filename). Not advertised in user docs; used
|
|
74
|
+
# internally by AdobeFetcher::Docid.
|
|
75
|
+
rule(:bare_number) do
|
|
76
|
+
digits.as(:number).as(:tech_note_bare)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# "Adobe Publication " prefix. Matched literally then discarded —
|
|
80
|
+
# the publication slug/version is parsed by the inner rule.
|
|
81
|
+
rule(:publication_prefix) do
|
|
82
|
+
str("Adobe") >> space >> str("Publication") >> space
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Publication slug. Lowercase ASCII letters and digits joined by `-`.
|
|
86
|
+
# Each segment starts with a letter (so a trailing `-<digits>` is
|
|
87
|
+
# unambiguously a version suffix, not part of the slug).
|
|
88
|
+
rule(:slug_segment) do
|
|
89
|
+
match("[a-z]") >> match("[a-z0-9]").repeat
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
rule(:slug_inner) do
|
|
93
|
+
slug_segment >> (dash >> slug_segment).repeat
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
rule(:publication_with_version) do
|
|
97
|
+
(slug_inner.as(:slug) >> dash >> digits.as(:version)).as(:publication_version)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
rule(:publication_slug_or_version) do
|
|
101
|
+
# Try with-version first so `adobe-japan1-7` doesn't get captured
|
|
102
|
+
# as slug `adobe-japan1-7` with no version. The flat `:slug` form
|
|
103
|
+
# is the fallback for unversioned slugs.
|
|
104
|
+
publication_with_version | slug_inner.as(:slug)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
rule(:publication) do
|
|
108
|
+
# Optional "Adobe Publication " prefix. The prefix is consumed
|
|
109
|
+
# but not captured — the inner rule produces :slug or
|
|
110
|
+
# :publication_version as before.
|
|
111
|
+
publication_prefix.maybe >> publication_slug_or_version
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
rule(:identifier) do
|
|
115
|
+
tech_note | bare_number | publication
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Parse a string and return the raw parslet tree.
|
|
119
|
+
# @param string [String]
|
|
120
|
+
# @return [Hash]
|
|
121
|
+
def self.parse(string)
|
|
122
|
+
raise ArgumentError, ::Pubid::INPUT_TOO_LONG_MESSAGE if string.length > ::Pubid::MAX_INPUT_LENGTH
|
|
123
|
+
|
|
124
|
+
new.parse(string.strip)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Adobe
|
|
5
|
+
# Human-readable renderer for Adobe identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces the canonical citation forms:
|
|
8
|
+
# "Adobe TN 5014" (tech note)
|
|
9
|
+
# "Adobe Publication adobe-glyph-list" (publication, slug)
|
|
10
|
+
# "Adobe Publication adobe-japan1-7" (publication, slug + version)
|
|
11
|
+
#
|
|
12
|
+
# The data repo (AdobeFetcher::Docid) overrides #to_s for publications
|
|
13
|
+
# to use the title from metadata instead of the slug, producing e.g.
|
|
14
|
+
# "Adobe Publication Adobe Glyph List". Pubid::Adobe itself is purely
|
|
15
|
+
# structural and renders slug-form citations.
|
|
16
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
17
|
+
def render(context: nil, **_opts)
|
|
18
|
+
id = @id
|
|
19
|
+
|
|
20
|
+
return render_tech_note(id) if id.is_a?(Identifiers::TechNote)
|
|
21
|
+
return render_publication(id) if id.is_a?(Identifiers::Publication)
|
|
22
|
+
|
|
23
|
+
raise ArgumentError, "Unknown Adobe identifier class: #{id.class}"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def render_tech_note(id)
|
|
29
|
+
"Adobe TN #{id.number}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def render_publication(id)
|
|
33
|
+
rendered = "Adobe Publication #{id.slug}"
|
|
34
|
+
rendered << "-#{id.version}" if id.version
|
|
35
|
+
rendered
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Adobe
|
|
5
|
+
# Generates URN strings for Adobe identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Format:
|
|
8
|
+
# urn:adobe:tech-note:<number> e.g. urn:adobe:tech-note:5014
|
|
9
|
+
# urn:adobe:publication:<slug>[:v<ver>] e.g. urn:adobe:publication:adobe-glyph-list
|
|
10
|
+
# urn:adobe:publication:adobe-japan1:v7
|
|
11
|
+
class UrnGenerator
|
|
12
|
+
attr_reader :identifier
|
|
13
|
+
|
|
14
|
+
def initialize(identifier)
|
|
15
|
+
@identifier = identifier
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def generate
|
|
19
|
+
if identifier.is_a?(Identifiers::TechNote)
|
|
20
|
+
generate_tech_note
|
|
21
|
+
elsif identifier.is_a?(Identifiers::Publication)
|
|
22
|
+
generate_publication
|
|
23
|
+
else
|
|
24
|
+
raise ArgumentError,
|
|
25
|
+
"Unknown Adobe identifier class: #{identifier.class}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def generate_tech_note
|
|
32
|
+
"urn:adobe:tech-note:#{identifier.number}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def generate_publication
|
|
36
|
+
parts = ["urn:adobe:publication", identifier.slug]
|
|
37
|
+
parts << "v#{identifier.version}" if identifier.version
|
|
38
|
+
parts.join(":")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Adobe
|
|
5
|
+
# Parses Adobe URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:adobe:tech-note:<number>
|
|
9
|
+
# urn:adobe:publication:<slug>[:v<version>]
|
|
10
|
+
#
|
|
11
|
+
# Examples:
|
|
12
|
+
# urn:adobe:tech-note:5014 → Adobe Technical Note #5014
|
|
13
|
+
# urn:adobe:publication:adobe-glyph-list → adobe-glyph-list
|
|
14
|
+
# urn:adobe:publication:adobe-japan1:v7 → adobe-japan1-7
|
|
15
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
16
|
+
PREFIX = "urn:adobe:".freeze
|
|
17
|
+
|
|
18
|
+
def parse_urn(urn)
|
|
19
|
+
body = strip_namespace(urn)
|
|
20
|
+
parts = split_parts(body)
|
|
21
|
+
namespace = parts.fetch(0)
|
|
22
|
+
|
|
23
|
+
case namespace
|
|
24
|
+
when "tech-note"
|
|
25
|
+
parse_tech_note(parts)
|
|
26
|
+
when "publication"
|
|
27
|
+
parse_publication(parts)
|
|
28
|
+
else
|
|
29
|
+
raise Pubid::UrnParser::Errors::ParseError,
|
|
30
|
+
"Unknown Adobe URN namespace: #{namespace.inspect} in #{urn.inspect}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def strip_namespace(urn)
|
|
37
|
+
unless urn.downcase.start_with?(PREFIX)
|
|
38
|
+
raise Pubid::UrnParser::Errors::ParseError,
|
|
39
|
+
"Invalid Adobe URN: #{urn.inspect}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
urn[PREFIX.length..]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def parse_tech_note(parts)
|
|
46
|
+
number = parts.fetch(1)
|
|
47
|
+
flavor_parse("Adobe Technical Note ##{number}")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def parse_publication(parts)
|
|
51
|
+
slug = parts.fetch(1)
|
|
52
|
+
version_seg = parts[2]
|
|
53
|
+
if version_seg&.start_with?("v")
|
|
54
|
+
flavor_parse("#{slug}-#{version_seg.sub(/\Av/, "")}")
|
|
55
|
+
else
|
|
56
|
+
flavor_parse(slug)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def split_parts(body)
|
|
61
|
+
body.split(":")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def flavor_parse(text)
|
|
65
|
+
::Pubid::Adobe.parse(text)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
data/lib/pubid/adobe.rb
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Adobe
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# Leading identifier prefix tokens that an Adobe document id can start
|
|
8
|
+
# with. Tech notes appear as both `Adobe Technical Note #<n>` and the
|
|
9
|
+
# short alias `ATN<n>` in citations; both must route to this flavor.
|
|
10
|
+
# Named publications start with `Adobe` (e.g. `Adobe Glyph List`,
|
|
11
|
+
# `Adobe-Japan1-7`).
|
|
12
|
+
PREFIXES = ["Adobe", "ATN"].freeze
|
|
13
|
+
|
|
14
|
+
autoload :Builder, "#{__dir__}/adobe/builder"
|
|
15
|
+
autoload :Identifier, "#{__dir__}/adobe/identifier"
|
|
16
|
+
autoload :Identifiers, "#{__dir__}/adobe/identifiers"
|
|
17
|
+
autoload :Parser, "#{__dir__}/adobe/parser"
|
|
18
|
+
autoload :Renderer, "#{__dir__}/adobe/renderer"
|
|
19
|
+
autoload :UrnGenerator, "#{__dir__}/adobe/urn_generator"
|
|
20
|
+
autoload :UrnParser, "#{__dir__}/adobe/urn_parser"
|
|
21
|
+
|
|
22
|
+
# Parse an Adobe identifier string into an identifier object.
|
|
23
|
+
# @param identifier [String]
|
|
24
|
+
# @return [Pubid::Adobe::Identifier]
|
|
25
|
+
def self.parse(identifier)
|
|
26
|
+
Identifier.parse(identifier)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
30
|
+
# with the Adobe-specific renderer.
|
|
31
|
+
Identifier.format_registry = FormatRegistry.new(parent: ::Pubid::Identifier.format_registry)
|
|
32
|
+
Identifier.format_registry.register(:human, renderer: Adobe::Renderer)
|
|
33
|
+
|
|
34
|
+
# Auto-discover identifier types from the Identifiers namespace.
|
|
35
|
+
# @return [Array<Class>]
|
|
36
|
+
def self.identifier_types
|
|
37
|
+
@identifier_types ||= Identifiers.constants
|
|
38
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
39
|
+
.select { |c| c.is_a?(Class) && c < Pubid::Identifier }
|
|
40
|
+
.reject { |c| c == Identifier }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Lookup: type key → identifier class
|
|
44
|
+
# @param code [String, Symbol]
|
|
45
|
+
# @return [Class, nil]
|
|
46
|
+
def self.locate_type(code)
|
|
47
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Lookup: type short letter (e.g. "ATN") → identifier class
|
|
51
|
+
# @param short [String]
|
|
52
|
+
# @return [Class<Identifier>]
|
|
53
|
+
def self.identifier_klass_for_short(short)
|
|
54
|
+
@by_short ||= identifier_types.to_h { |klass| [klass.type[:short].to_s, klass] }
|
|
55
|
+
@by_short.fetch(short.to_s)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Pubid::Registry.register(:adobe, Pubid::Adobe)
|
data/lib/pubid/amca/builder.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Pubid
|
|
|
7
7
|
class Builder
|
|
8
8
|
attr_reader :identifier_class
|
|
9
9
|
|
|
10
|
-
def initialize(identifier_class =
|
|
10
|
+
def initialize(identifier_class = Identifier)
|
|
11
11
|
@identifier_class = identifier_class
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -46,7 +46,7 @@ module Pubid
|
|
|
46
46
|
|
|
47
47
|
# Class method to build an identifier from parsed data
|
|
48
48
|
# @param parsed [Hash, Array] the parsed identifier data
|
|
49
|
-
# @return [
|
|
49
|
+
# @return [Identifier] the constructed identifier object
|
|
50
50
|
def self.build(parsed)
|
|
51
51
|
new.build(parsed)
|
|
52
52
|
end
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Pubid::Amca::Identifier is the AMCA base class (a real Pubid::Identifier
|
|
4
|
-
# subclass); its body
|
|
5
|
-
# live in identifiers/base.rb. This file just ensures it is loaded.
|
|
6
|
-
require_relative "identifiers/base"
|
|
4
|
+
# subclass); its body and `.parse` live in identifiers/base.rb. This file just ensures it is loaded.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Amca
|
|
5
5
|
# Base identifier class for AMCA identifiers. Canonical name
|
|
6
|
-
# Pubid::Amca::Identifier
|
|
6
|
+
# Pubid::Amca::Identifier; common
|
|
7
7
|
# functionality for all AMCA identifier types.
|
|
8
8
|
class Identifier < ::Pubid::Identifier
|
|
9
9
|
# @raise [Parslet::ParseFailed] If parsing fails
|
|
@@ -66,10 +66,5 @@ module Pubid
|
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
module Identifiers
|
|
70
|
-
# Backward-compatible alias: AMCA's base class used to be
|
|
71
|
-
# Pubid::Amca::Identifiers::Base. It is now Pubid::Amca::Identifier.
|
|
72
|
-
Base = Pubid::Amca::Identifier
|
|
73
|
-
end
|
|
74
69
|
end
|
|
75
70
|
end
|
|
@@ -8,7 +8,7 @@ module Pubid
|
|
|
8
8
|
# - AMCA Publication 211-22 (Rev. 01-23)
|
|
9
9
|
# - AMCA Publication 311-16
|
|
10
10
|
# - AMCA Publication 1011-03 (R2010)
|
|
11
|
-
class Publication <
|
|
11
|
+
class Publication < Identifier
|
|
12
12
|
attr_reader :revision
|
|
13
13
|
|
|
14
14
|
def initialize(code:, year:, copublisher: nil, suffix: nil,
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Amca
|
|
5
5
|
module Identifiers
|
|
6
|
-
autoload :Base, "#{__dir__}/identifiers/base"
|
|
7
6
|
autoload :Interpretation, "#{__dir__}/identifiers/interpretation"
|
|
8
7
|
autoload :Publication, "#{__dir__}/identifiers/publication"
|
|
9
8
|
autoload :Standard, "#{__dir__}/identifiers/standard"
|
data/lib/pubid/amca.rb
CHANGED
|
@@ -8,7 +8,7 @@ module Pubid
|
|
|
8
8
|
# Pubid::JOINT_PREFIXES.
|
|
9
9
|
PREFIXES = ["AMCA"].freeze
|
|
10
10
|
|
|
11
|
-
autoload :Identifier, "#{__dir__}/amca/
|
|
11
|
+
autoload :Identifier, "#{__dir__}/amca/identifiers/base"
|
|
12
12
|
autoload :Identifiers, "#{__dir__}/amca/identifiers"
|
|
13
13
|
autoload :Builder, "#{__dir__}/amca/builder"
|
|
14
14
|
autoload :Parser, "#{__dir__}/amca/parser"
|
|
@@ -26,8 +26,8 @@ module Pubid
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# Per-flavor format registry: inherits global formats, overrides :human
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
Identifier.format_registry = FormatRegistry.new(parent: ::Pubid::Identifier.format_registry)
|
|
30
|
+
Identifier.format_registry.register(:human, renderer: Amca::Renderer)
|
|
31
31
|
|
|
32
32
|
# Auto-discover all identifier types from the Identifiers namespace
|
|
33
33
|
# @return [Array<Class>] identifier classes that define a self.type Hash
|
data/lib/pubid/ashrae/builder.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Pubid
|
|
|
7
7
|
class Builder
|
|
8
8
|
attr_reader :identifier_class
|
|
9
9
|
|
|
10
|
-
def initialize(identifier_class =
|
|
10
|
+
def initialize(identifier_class = Identifier)
|
|
11
11
|
@identifier_class = identifier_class
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -53,7 +53,7 @@ module Pubid
|
|
|
53
53
|
|
|
54
54
|
# Class method to build an identifier from parsed data
|
|
55
55
|
# @param parsed [Hash, Array] the parsed identifier data
|
|
56
|
-
# @return [
|
|
56
|
+
# @return [Identifier] the constructed identifier object
|
|
57
57
|
def self.build(parsed)
|
|
58
58
|
new.build(parsed)
|
|
59
59
|
end
|
|
@@ -158,12 +158,12 @@ module Pubid
|
|
|
158
158
|
def build_errata(parsed)
|
|
159
159
|
base_attrs = extract_base_attributes(parsed)
|
|
160
160
|
base_class = determine_identifier_class(base_attrs)
|
|
161
|
-
|
|
161
|
+
base = base_class.new(**base_attrs)
|
|
162
162
|
|
|
163
163
|
errata_date = extract_errata_date(parsed[:errata_date])
|
|
164
164
|
|
|
165
165
|
Identifiers::Errata.new(
|
|
166
|
-
|
|
166
|
+
base: base,
|
|
167
167
|
errata_date: errata_date,
|
|
168
168
|
)
|
|
169
169
|
end
|
|
@@ -174,10 +174,10 @@ module Pubid
|
|
|
174
174
|
def build_interpretation(parsed)
|
|
175
175
|
base_attrs = extract_base_attributes(parsed)
|
|
176
176
|
base_class = determine_identifier_class(base_attrs)
|
|
177
|
-
|
|
177
|
+
base = base_class.new(**base_attrs)
|
|
178
178
|
|
|
179
179
|
Identifiers::Interpretation.new(
|
|
180
|
-
|
|
180
|
+
base: base,
|
|
181
181
|
)
|
|
182
182
|
end
|
|
183
183
|
|
|
@@ -187,13 +187,13 @@ module Pubid
|
|
|
187
187
|
def build_addendum_from_identifier(parsed)
|
|
188
188
|
base_attrs = extract_base_attributes(parsed)
|
|
189
189
|
base_class = determine_identifier_class(base_attrs)
|
|
190
|
-
|
|
190
|
+
base = base_class.new(**base_attrs)
|
|
191
191
|
|
|
192
192
|
addendum_code = extract_value(parsed[:addendum_code])
|
|
193
193
|
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
194
194
|
|
|
195
195
|
Identifiers::Addendum.new(
|
|
196
|
-
|
|
196
|
+
base: base,
|
|
197
197
|
addendum_code: addendum_code,
|
|
198
198
|
addendum_date: addendum_date,
|
|
199
199
|
)
|
|
@@ -209,13 +209,13 @@ module Pubid
|
|
|
209
209
|
year: extract_value(parsed[:year]),
|
|
210
210
|
}
|
|
211
211
|
base_class = determine_identifier_class(base_attrs)
|
|
212
|
-
|
|
212
|
+
base = base_class.new(**base_attrs)
|
|
213
213
|
|
|
214
214
|
addendum_code = extract_value(parsed[:addendum_code])
|
|
215
215
|
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
216
216
|
|
|
217
217
|
Identifiers::Addendum.new(
|
|
218
|
-
|
|
218
|
+
base: base,
|
|
219
219
|
addendum_code: addendum_code,
|
|
220
220
|
addendum_date: addendum_date,
|
|
221
221
|
)
|
|
@@ -232,13 +232,13 @@ module Pubid
|
|
|
232
232
|
year: extract_value(parsed[:year]),
|
|
233
233
|
}
|
|
234
234
|
base_class = determine_identifier_class(base_attrs)
|
|
235
|
-
|
|
235
|
+
base = base_class.new(**base_attrs)
|
|
236
236
|
|
|
237
237
|
addendum_code = extract_value(parsed[:addendum_code])
|
|
238
238
|
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
239
239
|
|
|
240
240
|
Identifiers::Addendum.new(
|
|
241
|
-
|
|
241
|
+
base: base,
|
|
242
242
|
addendum_code: addendum_code,
|
|
243
243
|
addendum_date: addendum_date,
|
|
244
244
|
)
|
|
@@ -270,13 +270,13 @@ module Pubid
|
|
|
270
270
|
end
|
|
271
271
|
|
|
272
272
|
base_class = determine_identifier_class(base_attrs)
|
|
273
|
-
|
|
273
|
+
base = base_class.new(**base_attrs)
|
|
274
274
|
|
|
275
275
|
addendum_code = extract_value(parsed[:addendum_code])
|
|
276
276
|
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
277
277
|
|
|
278
278
|
Identifiers::Addendum.new(
|
|
279
|
-
|
|
279
|
+
base: base,
|
|
280
280
|
addendum_code: addendum_code,
|
|
281
281
|
addendum_date: addendum_date,
|
|
282
282
|
)
|
|
@@ -308,13 +308,13 @@ module Pubid
|
|
|
308
308
|
end
|
|
309
309
|
|
|
310
310
|
base_class = determine_identifier_class(base_attrs)
|
|
311
|
-
|
|
311
|
+
base = base_class.new(**base_attrs)
|
|
312
312
|
|
|
313
313
|
addendum_code = extract_value(parsed[:addendum_code])
|
|
314
314
|
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
315
315
|
|
|
316
316
|
Identifiers::Addendum.new(
|
|
317
|
-
|
|
317
|
+
base: base,
|
|
318
318
|
addendum_code: addendum_code,
|
|
319
319
|
addendum_date: addendum_date,
|
|
320
320
|
)
|
|
@@ -326,13 +326,13 @@ module Pubid
|
|
|
326
326
|
def build_standard_addendum(parsed)
|
|
327
327
|
base_attrs = extract_base_attributes(parsed)
|
|
328
328
|
base_class = determine_identifier_class(base_attrs)
|
|
329
|
-
|
|
329
|
+
base = base_class.new(**base_attrs)
|
|
330
330
|
|
|
331
331
|
addendum_code = extract_value(parsed[:addendum_code])
|
|
332
332
|
addendum_date = extract_addendum_date(parsed[:addendum_year])
|
|
333
333
|
|
|
334
334
|
Identifiers::Addendum.new(
|
|
335
|
-
|
|
335
|
+
base: base,
|
|
336
336
|
addendum_code: addendum_code,
|
|
337
337
|
addendum_date: addendum_date,
|
|
338
338
|
)
|
|
@@ -372,7 +372,7 @@ module Pubid
|
|
|
372
372
|
end
|
|
373
373
|
|
|
374
374
|
base_class = determine_identifier_class(base_attrs)
|
|
375
|
-
|
|
375
|
+
base = base_class.new(**base_attrs)
|
|
376
376
|
|
|
377
377
|
# Build the addendum_codes string from first code and additional codes
|
|
378
378
|
first_code = extract_value(parsed[:addendum_code])
|
|
@@ -406,7 +406,7 @@ module Pubid
|
|
|
406
406
|
end
|
|
407
407
|
|
|
408
408
|
Identifiers::CombinedAddenda.new(
|
|
409
|
-
|
|
409
|
+
base: base,
|
|
410
410
|
addendum_codes: addendum_codes_str,
|
|
411
411
|
)
|
|
412
412
|
end
|
|
@@ -417,12 +417,12 @@ module Pubid
|
|
|
417
417
|
def build_addenda_package(parsed)
|
|
418
418
|
base_attrs = extract_base_attributes(parsed)
|
|
419
419
|
base_class = determine_identifier_class(base_attrs)
|
|
420
|
-
|
|
420
|
+
base = base_class.new(**base_attrs)
|
|
421
421
|
|
|
422
422
|
package_description = extract_value(parsed[:package_description])
|
|
423
423
|
|
|
424
424
|
Identifiers::AddendaPackage.new(
|
|
425
|
-
|
|
425
|
+
base: base,
|
|
426
426
|
package_description: package_description,
|
|
427
427
|
)
|
|
428
428
|
end
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
# The ASHRAE flavor base class is Pubid::Ashrae::Identifier — a real
|
|
4
4
|
# Pubid::Identifier subclass that every concrete ASHRAE identifier descends
|
|
5
5
|
# from, so `is_a?` identity and the shared polymorphic `from_hash` work natively
|
|
6
|
-
# (no facade needed). Its body
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
require_relative "identifiers/base"
|
|
6
|
+
# (no facade needed). Its body and `.parse` live in identifiers/base.rb; this
|
|
7
|
+
# file just ensures it is loaded when a consumer references
|
|
8
|
+
# Pubid::Ashrae::Identifier directly.
|