pubid 2.0.0.pre.alpha.8 → 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/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 +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/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 +26 -3
- 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 +9 -9
- data/lib/pubid/nist.rb +12 -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,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module W3c
|
|
5
|
+
# Parses W3C URNs back into identifiers by reconstructing the printed form
|
|
6
|
+
# and delegating to the flavor's text parser.
|
|
7
|
+
#
|
|
8
|
+
# UrnGenerator emits `urn:w3c:<type-down>:<code>[:<date>]`. The first body
|
|
9
|
+
# segment is the maturity token only when it is one of the known tokens AND
|
|
10
|
+
# a code segment follows it (a typed URN always has ≥2 segments); a
|
|
11
|
+
# single-segment body is always a bare code — even one that happens to spell
|
|
12
|
+
# a token, e.g. `urn:w3c:rec` -> `W3C rec` (a Standard, not a REC).
|
|
13
|
+
#
|
|
14
|
+
# Examples:
|
|
15
|
+
# - urn:w3c:wd:charmod:19991129 -> W3C WD-charmod-19991129
|
|
16
|
+
# - urn:w3c:note:xml-names -> W3C NOTE-xml-names
|
|
17
|
+
# - urn:w3c:2dcontext -> W3C 2dcontext
|
|
18
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
19
|
+
KNOWN_TOKENS = %w[note dnote wd cr crd rec pr per spsd obsl].freeze
|
|
20
|
+
|
|
21
|
+
def parse_urn(urn)
|
|
22
|
+
parts = split_parts(strip_namespace(urn))
|
|
23
|
+
|
|
24
|
+
if parts.size > 1 && KNOWN_TOKENS.include?(parts.first)
|
|
25
|
+
token = parts.shift.upcase
|
|
26
|
+
text = "W3C #{token}-#{parts.shift}"
|
|
27
|
+
else
|
|
28
|
+
text = "W3C #{parts.shift}"
|
|
29
|
+
end
|
|
30
|
+
text += "-#{parts.shift}" unless parts.empty?
|
|
31
|
+
|
|
32
|
+
flavor_parse(text)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
data/lib/pubid/w3c.rb
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module W3c
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# Sole W3C publisher token (see the parser's `prefix` rule). Document-type
|
|
8
|
+
# tokens (WD/NOTE/REC/…) follow the "W3C " prefix and are excluded.
|
|
9
|
+
PREFIXES = ["W3C"].freeze
|
|
10
|
+
|
|
11
|
+
autoload :Builder, "#{__dir__}/w3c/builder"
|
|
12
|
+
autoload :Identifier, "#{__dir__}/w3c/identifier"
|
|
13
|
+
autoload :Identifiers, "#{__dir__}/w3c/identifiers"
|
|
14
|
+
autoload :Parser, "#{__dir__}/w3c/parser"
|
|
15
|
+
autoload :Renderer, "#{__dir__}/w3c/renderer"
|
|
16
|
+
autoload :UrnGenerator, "#{__dir__}/w3c/urn_generator"
|
|
17
|
+
autoload :UrnParser, "#{__dir__}/w3c/urn_parser"
|
|
18
|
+
|
|
19
|
+
# Parse a W3C identifier string
|
|
20
|
+
def self.parse(identifier)
|
|
21
|
+
Identifier.parse(identifier)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
25
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
26
|
+
Identifier.format_registry.register(:human, renderer: W3c::Renderer)
|
|
27
|
+
|
|
28
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
29
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
30
|
+
def self.identifier_types
|
|
31
|
+
@identifier_types ||= Identifiers.constants
|
|
32
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
33
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
34
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Build typed stage index from identifier types
|
|
38
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
39
|
+
def self.all_typed_stages
|
|
40
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
41
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
42
|
+
klass.const_get(:TYPED_STAGES)
|
|
43
|
+
else
|
|
44
|
+
[]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Lookup: type code -> identifier class
|
|
50
|
+
# @param code [String, Symbol] the type key to find
|
|
51
|
+
# @return [Class, nil] the matching identifier class
|
|
52
|
+
def self.locate_type(code)
|
|
53
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Lookup: abbreviation -> typed stage
|
|
57
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
58
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
59
|
+
def self.locate_stage(abbr)
|
|
60
|
+
abbr_str = abbr.to_s.upcase
|
|
61
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Register W3C flavor with the registry
|
|
67
|
+
Pubid::Registry.register(:w3c, Pubid::W3c)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Xsf
|
|
5
|
+
# Builds an identifier object from the Parslet parse tree. XSF has a single
|
|
6
|
+
# concrete type, so the builder always produces an Identifiers::Xep.
|
|
7
|
+
class Builder
|
|
8
|
+
def self.build(parsed_data)
|
|
9
|
+
new.build(parsed_data)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def build(data)
|
|
13
|
+
Identifiers::Xep.new(number: data[:number].to_s)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Xsf
|
|
5
|
+
# Base class for every XSF identifier AND the flavor's parse/create entry
|
|
6
|
+
# point — mirrors Pubid::Jis::Identifier. The single concrete type
|
|
7
|
+
# (Pubid::Xsf::Identifiers::Xep) descends from this class, so a parsed XSF
|
|
8
|
+
# id is an instance of Pubid::Xsf::Identifier.
|
|
9
|
+
class Identifier < ::Pubid::Identifier
|
|
10
|
+
# XEP number kept as a string to preserve the 4-digit zero padding
|
|
11
|
+
# ("0001", not 1). No default → it is dropped from the serialized hash
|
|
12
|
+
# only when nil, and always present for a real identifier.
|
|
13
|
+
attribute :number, :string
|
|
14
|
+
|
|
15
|
+
# Polymorphic type map for lutaml::Model key_value (de)serialization:
|
|
16
|
+
# maps each subclass's polymorphic_name to its class name so a stored
|
|
17
|
+
# hash rebuilds the correct identifier type via from_hash.
|
|
18
|
+
XSF_TYPE_MAP = {
|
|
19
|
+
"pubid:xsf:xep" => "Pubid::Xsf::Identifiers::Xep",
|
|
20
|
+
}.freeze
|
|
21
|
+
|
|
22
|
+
key_value do
|
|
23
|
+
map "_type", to: :_type, polymorphic_map: XSF_TYPE_MAP
|
|
24
|
+
map "number", to: :number
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Publisher name. A plain constant (not a `publisher` method) so it does
|
|
28
|
+
# not shadow the inherited lutaml `publisher` attribute, which would
|
|
29
|
+
# otherwise fail serialization type validation. XSF never prints its
|
|
30
|
+
# publisher name in an identifier — the leading token is "XEP".
|
|
31
|
+
PUBLISHER = "XSF"
|
|
32
|
+
|
|
33
|
+
attr_reader :with_publisher
|
|
34
|
+
|
|
35
|
+
# Basic string representation. Delegates to renderer; `with_publisher:
|
|
36
|
+
# false` yields the bare number.
|
|
37
|
+
def to_s(with_publisher: true, **opts)
|
|
38
|
+
@with_publisher = with_publisher
|
|
39
|
+
render(format: :human, **opts)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# from_hash is the shared polymorphic dispatch on Pubid::Identifier;
|
|
43
|
+
# XSF_TYPE_MAP remains as the key_value polymorphic_map.
|
|
44
|
+
|
|
45
|
+
# Parse an XSF identifier string into an identifier object
|
|
46
|
+
# @param identifier [String] The XSF identifier string to parse
|
|
47
|
+
# @return [Identifier] The appropriate identifier object
|
|
48
|
+
# @raise [ArgumentError] If the input exceeds the maximum length
|
|
49
|
+
# @raise [RuntimeError] If parsing fails
|
|
50
|
+
def self.parse(identifier)
|
|
51
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
52
|
+
raise ArgumentError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
parsed = Parser.parse(identifier)
|
|
56
|
+
Builder.build(parsed)
|
|
57
|
+
rescue Parslet::ParseFailed => e
|
|
58
|
+
raise "Failed to parse XSF identifier '#{identifier}': #{e.message}"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Xsf
|
|
5
|
+
module Identifiers
|
|
6
|
+
# XMPP Extension Protocol — the sole XSF identifier type.
|
|
7
|
+
# Format: "XEP NNNN" (e.g. XEP 0001, XEP 0218).
|
|
8
|
+
#
|
|
9
|
+
# `polymorphic_name` auto-derives "pubid:xsf:xep" from the class name,
|
|
10
|
+
# which is what serializes into the `_type` tag and drives from_hash
|
|
11
|
+
# dispatch (see XSF_TYPE_MAP on the base Identifier).
|
|
12
|
+
class Xep < Identifier
|
|
13
|
+
TYPED_STAGES = [
|
|
14
|
+
Pubid::Components::TypedStage.new(
|
|
15
|
+
code: :xep,
|
|
16
|
+
stage_code: :published,
|
|
17
|
+
type_code: :xep,
|
|
18
|
+
abbr: ["XEP"],
|
|
19
|
+
name: "XMPP Extension Protocol",
|
|
20
|
+
harmonized_stages: [],
|
|
21
|
+
),
|
|
22
|
+
].freeze
|
|
23
|
+
|
|
24
|
+
def self.type
|
|
25
|
+
{ key: :xep,
|
|
26
|
+
web: :xep, title: "XMPP Extension Protocol", short: "XEP" }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Xsf
|
|
7
|
+
# Parslet grammar for XSF identifiers. One fixed shape: "XEP NNNN".
|
|
8
|
+
class Parser < Parslet::Parser
|
|
9
|
+
rule(:digit) { match["0-9"] }
|
|
10
|
+
rule(:digits) { digit.repeat(1) }
|
|
11
|
+
|
|
12
|
+
# "XEP 0001" — publisher token, a single space, then the number kept as
|
|
13
|
+
# a string of digits (leading zeros preserved by the builder).
|
|
14
|
+
rule(:identifier) do
|
|
15
|
+
str("XEP") >> str(" ") >> digits.as(:number)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
rule(:root) { identifier }
|
|
19
|
+
|
|
20
|
+
def self.parse(input)
|
|
21
|
+
new.parse(input)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Xsf
|
|
5
|
+
# Human-readable renderer for XSF identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like "XEP 0001". With `with_publisher: false` it emits
|
|
8
|
+
# just the bare number ("0001").
|
|
9
|
+
#
|
|
10
|
+
# Registered as the `:human` format in the XSF format registry and invoked
|
|
11
|
+
# via `render(format: :human)`.
|
|
12
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
13
|
+
PUBLISHER = "XEP"
|
|
14
|
+
|
|
15
|
+
def render(context: nil, **opts)
|
|
16
|
+
id = @id
|
|
17
|
+
return id.number.to_s if id.with_publisher == false
|
|
18
|
+
|
|
19
|
+
"#{PUBLISHER} #{id.number}"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Xsf
|
|
5
|
+
# Emits `urn:xsf:xep:<number>` (e.g. urn:xsf:xep:0001). The number keeps its
|
|
6
|
+
# zero padding so the URN round-trips back to the printed identifier.
|
|
7
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
8
|
+
def generate
|
|
9
|
+
["urn", "xsf", "xep", identifier.number.to_s].join(":")
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Xsf
|
|
5
|
+
# Parses XSF URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits: `urn:xsf:xep:<number>` (e.g. urn:xsf:xep:0001).
|
|
8
|
+
# This inverts it by reconstructing the printed "XEP <number>" string and
|
|
9
|
+
# delegating to the flavor's text parser.
|
|
10
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
11
|
+
def parse_urn(urn)
|
|
12
|
+
body = strip_namespace(urn)
|
|
13
|
+
_type, number = split_parts(body)
|
|
14
|
+
flavor_parse("XEP #{number}")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/pubid/xsf.rb
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
# XSF (XMPP Standards Foundation) flavor. Its documents are XEPs — XMPP
|
|
5
|
+
# Extension Protocols — printed as "XEP NNNN" with a 4-digit zero-padded
|
|
6
|
+
# number (e.g. "XEP 0001"). The simplest full flavor: a single identifier
|
|
7
|
+
# type, one string attribute.
|
|
8
|
+
module Xsf
|
|
9
|
+
extend Pubid::PrefixesSupport
|
|
10
|
+
|
|
11
|
+
# Sole leading token an XSF identifier can start with (see the parser's
|
|
12
|
+
# `str("XEP")`). "XSF" is the publisher name but never appears in a printed
|
|
13
|
+
# identifier, so it is not a prefix.
|
|
14
|
+
PREFIXES = ["XEP"].freeze
|
|
15
|
+
|
|
16
|
+
autoload :Builder, "#{__dir__}/xsf/builder"
|
|
17
|
+
autoload :Identifier, "#{__dir__}/xsf/identifier"
|
|
18
|
+
autoload :Identifiers, "#{__dir__}/xsf/identifiers"
|
|
19
|
+
autoload :Parser, "#{__dir__}/xsf/parser"
|
|
20
|
+
autoload :Renderer, "#{__dir__}/xsf/renderer"
|
|
21
|
+
autoload :UrnGenerator, "#{__dir__}/xsf/urn_generator"
|
|
22
|
+
autoload :UrnParser, "#{__dir__}/xsf/urn_parser"
|
|
23
|
+
|
|
24
|
+
# Parse an XSF identifier string
|
|
25
|
+
def self.parse(identifier)
|
|
26
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
27
|
+
raise ArgumentError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Identifier.parse(identifier)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
34
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
35
|
+
Identifier.format_registry.register(:human, renderer: Xsf::Renderer)
|
|
36
|
+
|
|
37
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
38
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
39
|
+
def self.identifier_types
|
|
40
|
+
@identifier_types ||= Identifiers.constants
|
|
41
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
42
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
43
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Build typed stage index from identifier types
|
|
47
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
48
|
+
def self.all_typed_stages
|
|
49
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
50
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
51
|
+
klass.const_get(:TYPED_STAGES)
|
|
52
|
+
else
|
|
53
|
+
[]
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Lookup: type code -> identifier class
|
|
59
|
+
# @param code [String, Symbol] the type key to find
|
|
60
|
+
# @return [Class, nil] the matching identifier class
|
|
61
|
+
def self.locate_type(code)
|
|
62
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Lookup: abbreviation -> typed stage
|
|
66
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
67
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
68
|
+
def self.locate_stage(abbr)
|
|
69
|
+
abbr_str = abbr.to_s.upcase
|
|
70
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Register XSF flavor with the registry
|
|
76
|
+
Pubid::Registry.register(:xsf, Pubid::Xsf)
|
data/lib/pubid.rb
CHANGED
|
@@ -97,35 +97,54 @@ module Pubid
|
|
|
97
97
|
autoload :Utils, "pubid/utils"
|
|
98
98
|
autoload :Version, "pubid/version"
|
|
99
99
|
autoload :Core, "pubid/core"
|
|
100
|
+
autoload :TypeResolver, "pubid/type_resolver"
|
|
100
101
|
|
|
101
102
|
|
|
102
103
|
# Require all flavor modules
|
|
104
|
+
autoload :Adobe, "pubid/adobe"
|
|
103
105
|
autoload :Amca, "pubid/amca"
|
|
104
106
|
autoload :Ansi, "pubid/ansi"
|
|
105
107
|
autoload :Api, "pubid/api"
|
|
106
108
|
autoload :Ashrae, "pubid/ashrae"
|
|
107
109
|
autoload :Asme, "pubid/asme"
|
|
110
|
+
autoload :Doi, "pubid/doi"
|
|
111
|
+
autoload :Easc, "pubid/easc"
|
|
108
112
|
autoload :Astm, "pubid/astm"
|
|
113
|
+
autoload :Bipm, "pubid/bipm"
|
|
109
114
|
autoload :Bsi, "pubid/bsi"
|
|
115
|
+
autoload :Calconnect, "pubid/calconnect"
|
|
110
116
|
autoload :Ccsds, "pubid/ccsds"
|
|
111
117
|
autoload :CenCenelec, "pubid/cen_cenelec"
|
|
112
118
|
autoload :Cie, "pubid/cie"
|
|
113
119
|
autoload :Csa, "pubid/csa"
|
|
120
|
+
autoload :Ecma, "pubid/ecma"
|
|
114
121
|
autoload :Etsi, "pubid/etsi"
|
|
122
|
+
autoload :Gost, "pubid/gost"
|
|
123
|
+
autoload :Gb, "pubid/gb"
|
|
115
124
|
autoload :Idf, "pubid/idf"
|
|
116
125
|
autoload :Iec, "pubid/iec"
|
|
117
126
|
autoload :Ieee, "pubid/ieee"
|
|
127
|
+
autoload :Ietf, "pubid/ietf"
|
|
128
|
+
autoload :Isbn, "pubid/isbn"
|
|
118
129
|
autoload :Iala, "pubid/iala"
|
|
130
|
+
autoload :Iana, "pubid/iana"
|
|
119
131
|
autoload :Iho, "pubid/iho"
|
|
120
132
|
autoload :Iso, "pubid/iso"
|
|
121
133
|
autoload :Itu, "pubid/itu"
|
|
122
134
|
autoload :Jcgm, "pubid/jcgm"
|
|
123
135
|
autoload :Jis, "pubid/jis"
|
|
124
136
|
autoload :Nist, "pubid/nist"
|
|
137
|
+
autoload :Oasis, "pubid/oasis"
|
|
138
|
+
autoload :Ogc, "pubid/ogc"
|
|
125
139
|
autoload :Oiml, "pubid/oiml"
|
|
140
|
+
autoload :Omg, "pubid/omg"
|
|
126
141
|
autoload :Plateau, "pubid/plateau"
|
|
127
142
|
autoload :Export, "pubid/export"
|
|
128
143
|
autoload :Sae, "pubid/sae"
|
|
144
|
+
autoload :Tgpp, "pubid/tgpp"
|
|
145
|
+
autoload :Un, "pubid/un"
|
|
146
|
+
autoload :Xsf, "pubid/xsf"
|
|
147
|
+
autoload :W3c, "pubid/w3c"
|
|
129
148
|
|
|
130
149
|
# Format infrastructure (loaded eagerly so Pubid::Renderers / Pubid::Parsers are always available)
|
|
131
150
|
require "pubid/renderers/base"
|
|
@@ -181,11 +200,16 @@ module Pubid
|
|
|
181
200
|
# Trigger autoloads for every declared flavor module so that
|
|
182
201
|
# Registry is populated before URN dispatch needs it. Safe to call
|
|
183
202
|
# repeatedly; no-op after the first invocation.
|
|
203
|
+
#
|
|
204
|
+
# The constant filter allows a digit inside the name (the +0-9+ in the regex)
|
|
205
|
+
# so digit-bearing flavor modules such as +W3c+ are loaded/registered too —
|
|
206
|
+
# without it +W3c+ is silently dropped from the registry enumeration and thus
|
|
207
|
+
# from every registry-driven cross-flavor spec.
|
|
184
208
|
def self.eager_load_flavors!
|
|
185
209
|
return if @flavors_loaded
|
|
186
210
|
|
|
187
211
|
constants.each do |c|
|
|
188
|
-
next unless c.to_s.match?(/\A[A-Z][a-zA-
|
|
212
|
+
next unless c.to_s.match?(/\A[A-Z][a-zA-Z0-9]+\z/)
|
|
189
213
|
|
|
190
214
|
begin
|
|
191
215
|
const_get(c)
|