pubid 2.0.0.alpha.10 → 2.0.0.pre.alpha.1
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 +51 -54
- data/data/iec/update_codes.yaml +0 -3
- data/data/ieee/update_codes.yaml +1 -107
- data/data/nist/update_codes.yaml +0 -35
- data/lib/pubid/amca/builder.rb +6 -6
- data/lib/pubid/amca/identifier.rb +16 -2
- data/lib/pubid/amca/identifiers/base.rb +46 -74
- data/lib/pubid/amca/identifiers/interpretation.rb +30 -17
- data/lib/pubid/amca/identifiers/publication.rb +27 -14
- data/lib/pubid/amca/identifiers/standard.rb +5 -3
- data/lib/pubid/amca/identifiers.rb +1 -0
- data/lib/pubid/amca/parser.rb +1 -1
- data/lib/pubid/amca/scheme.rb +16 -0
- data/lib/pubid/amca/single_identifier.rb +24 -1
- data/lib/pubid/amca/urn_generator.rb +3 -4
- data/lib/pubid/amca.rb +3 -50
- data/lib/pubid/ansi/builder.rb +5 -7
- data/lib/pubid/ansi/identifier.rb +1 -19
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +1 -2
- data/lib/pubid/ansi/identifiers/standard.rb +3 -2
- data/lib/pubid/ansi/parser.rb +1 -1
- data/lib/pubid/ansi/scheme.rb +15 -0
- data/lib/pubid/ansi/single_identifier.rb +31 -2
- data/lib/pubid/ansi/urn_generator.rb +38 -3
- data/lib/pubid/ansi.rb +6 -47
- data/lib/pubid/api/builder.rb +72 -45
- data/lib/pubid/api/identifier.rb +9 -30
- data/lib/pubid/api/identifiers/base.rb +14 -2
- data/lib/pubid/api/identifiers/bulletin.rb +2 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +2 -0
- data/lib/pubid/api/identifiers/mpms.rb +28 -10
- data/lib/pubid/api/identifiers/publication.rb +2 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +2 -0
- data/lib/pubid/api/identifiers/specification.rb +2 -0
- data/lib/pubid/api/identifiers/standard.rb +2 -0
- data/lib/pubid/api/identifiers/technical_report.rb +2 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +16 -0
- data/lib/pubid/api/parser.rb +1 -1
- data/lib/pubid/api/scheme.rb +66 -0
- data/lib/pubid/api/single_identifier.rb +32 -10
- data/lib/pubid/api/urn_generator.rb +18 -0
- data/lib/pubid/api.rb +5 -56
- data/lib/pubid/ashrae/builder.rb +35 -56
- data/lib/pubid/ashrae/identifier.rb +16 -6
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +11 -7
- data/lib/pubid/ashrae/identifiers/addendum.rb +20 -9
- data/lib/pubid/ashrae/identifiers/base.rb +15 -111
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +16 -8
- data/lib/pubid/ashrae/identifiers/errata.rb +10 -9
- data/lib/pubid/ashrae/identifiers/guideline.rb +0 -3
- data/lib/pubid/ashrae/identifiers/interpretation.rb +10 -16
- data/lib/pubid/ashrae/identifiers/standard.rb +0 -3
- data/lib/pubid/ashrae/identifiers.rb +1 -0
- data/lib/pubid/ashrae/parser.rb +16 -40
- data/lib/pubid/ashrae/scheme.rb +53 -0
- data/lib/pubid/ashrae/single_identifier.rb +14 -1
- data/lib/pubid/ashrae/supplement_identifier.rb +6 -21
- data/lib/pubid/ashrae/urn_generator.rb +10 -8
- data/lib/pubid/ashrae.rb +2 -58
- data/lib/pubid/asme/builder.rb +2 -11
- data/lib/pubid/asme/components/code.rb +2 -10
- data/lib/pubid/asme/identifier.rb +0 -9
- data/lib/pubid/asme/identifiers/base.rb +60 -0
- data/lib/pubid/asme/identifiers/standard.rb +2 -86
- data/lib/pubid/asme/parser.rb +1 -1
- data/lib/pubid/asme/scheme.rb +37 -0
- data/lib/pubid/asme/single_identifier.rb +2 -11
- data/lib/pubid/asme/urn_generator.rb +2 -2
- data/lib/pubid/asme.rb +1 -47
- data/lib/pubid/astm/builder.rb +3 -10
- data/lib/pubid/astm/components/code.rb +0 -9
- data/lib/pubid/astm/identifier.rb +0 -9
- data/lib/pubid/astm/identifiers/adjunct.rb +9 -16
- data/lib/pubid/astm/identifiers/data_series.rb +14 -2
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +34 -25
- data/lib/pubid/astm/identifiers/manual.rb +25 -8
- data/lib/pubid/astm/identifiers/monograph.rb +14 -2
- data/lib/pubid/astm/identifiers/research_report.rb +5 -8
- data/lib/pubid/astm/identifiers/standard.rb +37 -8
- data/lib/pubid/astm/identifiers/technical_report.rb +13 -2
- data/lib/pubid/astm/identifiers/work_in_progress.rb +10 -1
- data/lib/pubid/astm/parser.rb +1 -1
- data/lib/pubid/astm/scheme.rb +55 -0
- data/lib/pubid/astm/single_identifier.rb +10 -32
- data/lib/pubid/astm/urn_generator.rb +5 -7
- data/lib/pubid/astm.rb +27 -44
- data/lib/pubid/bsi/builder.rb +107 -119
- data/lib/pubid/bsi/identifier.rb +25 -4
- data/lib/pubid/bsi/identifiers/addendum_document.rb +37 -3
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +47 -19
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +39 -8
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +55 -2
- data/lib/pubid/bsi/identifiers/amendment.rb +22 -30
- data/lib/pubid/bsi/identifiers/base.rb +11 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +7 -1
- data/lib/pubid/bsi/identifiers/british_standard.rb +1 -2
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +87 -13
- data/lib/pubid/bsi/identifiers/committee_document.rb +17 -10
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +87 -19
- data/lib/pubid/bsi/identifiers/corrigendum.rb +10 -26
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +36 -0
- data/lib/pubid/bsi/identifiers/disc.rb +29 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +46 -2
- data/lib/pubid/bsi/identifiers/electronic_book.rb +38 -2
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +21 -10
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +47 -0
- data/lib/pubid/bsi/identifiers/flex.rb +34 -3
- data/lib/pubid/bsi/identifiers/handbook.rb +17 -1
- data/lib/pubid/bsi/identifiers/index.rb +32 -0
- data/lib/pubid/bsi/identifiers/method.rb +41 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +29 -4
- data/lib/pubid/bsi/identifiers/practice_guide.rb +7 -1
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +54 -2
- data/lib/pubid/bsi/identifiers/published_document.rb +54 -2
- data/lib/pubid/bsi/identifiers/section.rb +30 -0
- data/lib/pubid/bsi/identifiers/set.rb +20 -14
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -10
- data/lib/pubid/bsi/identifiers/supplement_document.rb +25 -3
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +46 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +47 -2
- data/lib/pubid/bsi/identifiers/test_method.rb +32 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +22 -7
- data/lib/pubid/bsi/identifiers.rb +1 -0
- data/lib/pubid/bsi/parser.rb +6 -20
- data/lib/pubid/bsi/scheme.rb +243 -0
- data/lib/pubid/bsi/single_identifier.rb +82 -94
- data/lib/pubid/bsi/urn_generator.rb +5 -13
- data/lib/pubid/bsi.rb +2 -252
- data/lib/pubid/builder/base.rb +13 -62
- data/lib/pubid/bundled_identifier.rb +10 -18
- data/lib/pubid/ccsds/builder.rb +4 -5
- data/lib/pubid/ccsds/identifier.rb +3 -63
- data/lib/pubid/ccsds/identifiers/base.rb +51 -14
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +8 -9
- data/lib/pubid/ccsds/parser.rb +3 -5
- data/lib/pubid/ccsds/scheme.rb +57 -0
- data/lib/pubid/ccsds/single_identifier.rb +3 -6
- data/lib/pubid/ccsds/supplement_identifier.rb +13 -17
- data/lib/pubid/ccsds/urn_generator.rb +6 -6
- data/lib/pubid/ccsds.rb +1 -44
- data/lib/pubid/cen_cenelec/builder.rb +29 -61
- data/lib/pubid/cen_cenelec/identifier.rb +5 -28
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +4 -9
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +12 -2
- data/lib/pubid/cen_cenelec/identifiers/base.rb +46 -5
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +27 -6
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +17 -2
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +4 -62
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +7 -20
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +6 -2
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -2
- data/lib/pubid/cen_cenelec/parser.rb +1 -1
- data/lib/pubid/cen_cenelec/scheme.rb +164 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +91 -10
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +7 -6
- data/lib/pubid/cen_cenelec/urn_generator.rb +7 -7
- data/lib/pubid/cen_cenelec.rb +1 -188
- data/lib/pubid/cie/builder.rb +24 -149
- data/lib/pubid/cie/components/code.rb +72 -0
- data/lib/pubid/cie/identifier.rb +5 -20
- data/lib/pubid/cie/identifiers/bundle.rb +5 -35
- data/lib/pubid/cie/identifiers/conference.rb +6 -11
- data/lib/pubid/cie/identifiers/corrigendum.rb +23 -17
- data/lib/pubid/cie/identifiers/dual_published.rb +6 -6
- data/lib/pubid/cie/identifiers/identical.rb +9 -9
- data/lib/pubid/cie/identifiers/joint_published.rb +10 -10
- data/lib/pubid/cie/identifiers/standard.rb +8 -43
- data/lib/pubid/cie/identifiers/supplement.rb +25 -27
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +3 -7
- data/lib/pubid/cie/identifiers.rb +0 -2
- data/lib/pubid/cie/parser.rb +6 -55
- data/lib/pubid/cie/scheme.rb +64 -0
- data/lib/pubid/cie/single_identifier.rb +5 -44
- data/lib/pubid/cie/supplement_identifier.rb +16 -29
- data/lib/pubid/cie/urn_generator.rb +8 -11
- data/lib/pubid/cie.rb +2 -57
- data/lib/pubid/components/code.rb +8 -22
- data/lib/pubid/components/date.rb +18 -41
- data/lib/pubid/components/edition.rb +6 -9
- data/lib/pubid/components/language.rb +4 -6
- data/lib/pubid/components/locality.rb +1 -10
- data/lib/pubid/components/publisher.rb +6 -9
- data/lib/pubid/components/stage.rb +14 -5
- data/lib/pubid/components/type.rb +15 -5
- data/lib/pubid/components/typed_stage.rb +8 -11
- data/lib/pubid/components.rb +0 -4
- data/lib/pubid/core/update_codes.rb +7 -28
- data/lib/pubid/csa/builder.rb +48 -48
- data/lib/pubid/csa/composite_identifier.rb +7 -18
- data/lib/pubid/csa/identifier.rb +78 -191
- data/lib/pubid/csa/identifiers/base.rb +123 -0
- data/lib/pubid/csa/identifiers/bundled.rb +9 -25
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
- data/lib/pubid/csa/identifiers/cec.rb +103 -40
- data/lib/pubid/csa/identifiers/combined.rb +69 -97
- data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
- data/lib/pubid/csa/identifiers/package.rb +4 -4
- data/lib/pubid/csa/identifiers/series.rb +104 -0
- data/lib/pubid/csa/parser.rb +8 -12
- data/lib/pubid/csa/scheme.rb +44 -0
- data/lib/pubid/csa/single_identifier.rb +5 -94
- data/lib/pubid/csa/urn_generator.rb +2 -9
- data/lib/pubid/csa/wrapper_identifier.rb +10 -43
- data/lib/pubid/csa.rb +1 -56
- data/lib/pubid/etsi/builder.rb +4 -13
- data/lib/pubid/etsi/components/code.rb +9 -10
- data/lib/pubid/etsi/components/version.rb +5 -0
- data/lib/pubid/etsi/identifier.rb +12 -2
- data/lib/pubid/etsi/identifiers/base.rb +24 -60
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +4 -207
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +14 -46
- data/lib/pubid/etsi/identifiers.rb +1 -0
- data/lib/pubid/etsi/parser.rb +3 -9
- data/lib/pubid/etsi/scheme.rb +42 -0
- data/lib/pubid/etsi.rb +2 -52
- data/lib/pubid/export/data_class_exporter.rb +59 -0
- data/lib/pubid/export/exporter.rb +47 -6
- data/lib/pubid/export/flavor_exporter.rb +276 -124
- data/lib/pubid/export/ieee_exporter.rb +78 -0
- data/lib/pubid/export/itu_exporter.rb +66 -0
- data/lib/pubid/export/nist_exporter.rb +64 -0
- data/lib/pubid/export/registry_exporter.rb +90 -0
- data/lib/pubid/export/scheme_exporter.rb +70 -0
- data/lib/pubid/export.rb +6 -0
- data/lib/pubid/identifier.rb +37 -920
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/identifier_registry.rb +198 -0
- data/lib/pubid/idf/builder.rb +7 -7
- data/lib/pubid/idf/identifier.rb +13 -23
- data/lib/pubid/idf/identifiers/amendment.rb +1 -2
- data/lib/pubid/idf/identifiers/corrigendum.rb +1 -2
- data/lib/pubid/idf/identifiers/international_standard.rb +1 -2
- data/lib/pubid/idf/identifiers/reviewed_method.rb +1 -2
- data/lib/pubid/idf/parser.rb +5 -6
- data/lib/pubid/idf/scheme.rb +61 -0
- data/lib/pubid/idf/supplement_identifier.rb +13 -5
- data/lib/pubid/idf/urn_generator.rb +39 -4
- data/lib/pubid/idf.rb +1 -65
- data/lib/pubid/iec/builder.rb +91 -92
- data/lib/pubid/iec/components/code.rb +32 -9
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/identifier.rb +8 -328
- data/lib/pubid/iec/identifiers/amendment.rb +5 -8
- data/lib/pubid/iec/identifiers/base.rb +31 -7
- data/lib/pubid/iec/identifiers/component_specification.rb +13 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +12 -1
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +30 -29
- data/lib/pubid/iec/identifiers/corrigendum.rb +5 -4
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +36 -43
- data/lib/pubid/iec/identifiers/guide.rb +18 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +9 -24
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +3 -2
- data/lib/pubid/iec/identifiers/operational_document.rb +13 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +15 -2
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +24 -26
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +13 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +13 -2
- data/lib/pubid/iec/identifiers/technical_report.rb +21 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +21 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +12 -1
- data/lib/pubid/iec/identifiers/test_report_form.rb +46 -3
- data/lib/pubid/iec/identifiers/vap_identifier.rb +34 -33
- data/lib/pubid/iec/identifiers/white_paper.rb +13 -3
- data/lib/pubid/iec/identifiers/working_document.rb +60 -26
- data/lib/pubid/iec/parser.rb +42 -73
- data/lib/pubid/iec/scheme.rb +71 -0
- data/lib/pubid/iec/single_identifier.rb +23 -15
- data/lib/pubid/iec/supplement_identifier.rb +67 -84
- data/lib/pubid/iec/urn_generator.rb +143 -195
- data/lib/pubid/iec/urn_parser.rb +246 -85
- data/lib/pubid/iec.rb +66 -45
- data/lib/pubid/ieee/aiee/builder.rb +3 -17
- data/lib/pubid/ieee/aiee/identifier.rb +62 -46
- data/lib/pubid/ieee/aiee/parser.rb +1 -1
- data/lib/pubid/ieee/builder.rb +81 -398
- data/lib/pubid/ieee/components/code.rb +0 -8
- data/lib/pubid/ieee/components/draft.rb +0 -54
- data/lib/pubid/ieee/components/relationship.rb +149 -5
- data/lib/pubid/ieee/identifier.rb +11 -3
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +14 -62
- data/lib/pubid/ieee/identifiers/base.rb +547 -340
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +12 -6
- data/lib/pubid/ieee/identifiers/corrigendum.rb +12 -15
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +13 -24
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +7 -3
- data/lib/pubid/ieee/identifiers/dual_published.rb +7 -58
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +11 -99
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +11 -25
- data/lib/pubid/ieee/identifiers/joint_development.rb +15 -66
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +24 -58
- data/lib/pubid/ieee/identifiers/nesc/base.rb +19 -90
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +5 -20
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +5 -16
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +2 -11
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +3 -18
- data/lib/pubid/ieee/identifiers/nesc.rb +0 -1
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +9 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +6 -29
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +11 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +39 -4
- data/lib/pubid/ieee/identifiers/standard.rb +2 -5
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +7 -26
- data/lib/pubid/ieee/identifiers.rb +1 -2
- data/lib/pubid/ieee/ire/builder.rb +6 -7
- data/lib/pubid/ieee/ire/identifier.rb +33 -48
- data/lib/pubid/ieee/ire/parser.rb +1 -1
- data/lib/pubid/ieee/nesc/builder.rb +20 -33
- data/lib/pubid/ieee/nesc/parser.rb +15 -16
- data/lib/pubid/ieee/parser.rb +44 -462
- data/lib/pubid/ieee/scheme.rb +90 -0
- data/lib/pubid/ieee/typed_stages.rb +1 -12
- data/lib/pubid/ieee/urn_generator.rb +8 -35
- data/lib/pubid/ieee.rb +2 -133
- data/lib/pubid/ieee_debug.rb +1 -0
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +17 -5
- data/lib/pubid/iho/identifiers/base.rb +30 -64
- data/lib/pubid/iho/identifiers/bibliographic.rb +5 -1
- data/lib/pubid/iho/identifiers/circular_letter.rb +5 -1
- data/lib/pubid/iho/identifiers/miscellaneous.rb +5 -1
- data/lib/pubid/iho/identifiers/publication.rb +5 -1
- data/lib/pubid/iho/identifiers/standard.rb +5 -1
- data/lib/pubid/iho/identifiers.rb +1 -0
- data/lib/pubid/iho/parser.rb +4 -4
- data/lib/pubid/iho/scheme.rb +29 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho.rb +3 -59
- data/lib/pubid/iso/builder.rb +57 -68
- data/lib/pubid/iso/bundled_identifier.rb +3 -56
- data/lib/pubid/iso/combined_identifier.rb +4 -6
- data/lib/pubid/iso/components/code.rb +19 -7
- data/lib/pubid/iso/components/publisher.rb +8 -10
- data/lib/pubid/iso/components.rb +4 -2
- data/lib/pubid/iso/identifier.rb +11 -260
- data/lib/pubid/iso/identifiers/addendum.rb +6 -9
- data/lib/pubid/iso/identifiers/amendment.rb +4 -8
- data/lib/pubid/iso/identifiers/base.rb +115 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +1 -0
- data/lib/pubid/iso/identifiers/directives.rb +2 -8
- data/lib/pubid/iso/identifiers/directives_supplement.rb +26 -55
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +1 -0
- data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +4 -10
- data/lib/pubid/iso/identifiers/pas.rb +2 -2
- data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
- data/lib/pubid/iso/identifiers/supplement.rb +3 -11
- data/lib/pubid/iso/identifiers/tc_document.rb +15 -44
- data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
- data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
- data/lib/pubid/iso/identifiers.rb +1 -0
- data/lib/pubid/iso/parser.rb +19 -43
- data/lib/pubid/iso/scheme.rb +187 -0
- data/lib/pubid/iso/single_identifier.rb +7 -6
- data/lib/pubid/iso/supplement_identifier.rb +3 -29
- data/lib/pubid/iso/urn_generator.rb +177 -78
- data/lib/pubid/iso/urn_parser.rb +10 -29
- data/lib/pubid/iso.rb +2 -188
- data/lib/pubid/itu/builder.rb +41 -230
- data/lib/pubid/itu/components/code.rb +12 -57
- data/lib/pubid/itu/components/sector.rb +4 -15
- data/lib/pubid/itu/components/series.rb +4 -0
- data/lib/pubid/itu/identifier.rb +51 -2
- data/lib/pubid/itu/identifiers/amendment.rb +31 -7
- data/lib/pubid/itu/identifiers/annex.rb +4 -13
- data/lib/pubid/itu/identifiers/base.rb +128 -456
- data/lib/pubid/itu/identifiers/combined_identifier.rb +25 -99
- data/lib/pubid/itu/identifiers/corrigendum.rb +25 -16
- data/lib/pubid/itu/identifiers/recommendation.rb +4 -3
- data/lib/pubid/itu/identifiers/special_publication.rb +3 -3
- data/lib/pubid/itu/identifiers/supplement.rb +16 -119
- data/lib/pubid/itu/identifiers.rb +1 -10
- data/lib/pubid/itu/model.rb +1 -1
- data/lib/pubid/itu/parser.rb +27 -481
- data/lib/pubid/itu/scheme.rb +174 -0
- data/lib/pubid/itu/urn_generator.rb +6 -36
- data/lib/pubid/itu.rb +2 -58
- data/lib/pubid/jcgm/builder.rb +19 -37
- data/lib/pubid/jcgm/identifier.rb +0 -10
- data/lib/pubid/jcgm/identifiers/amendment.rb +11 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +15 -3
- data/lib/pubid/jcgm/identifiers.rb +0 -2
- data/lib/pubid/jcgm/parser.rb +7 -74
- data/lib/pubid/jcgm/scheme.rb +60 -0
- data/lib/pubid/jcgm/single_identifier.rb +14 -84
- data/lib/pubid/jcgm/supplement_identifier.rb +4 -39
- data/lib/pubid/jcgm/urn_generator.rb +19 -25
- data/lib/pubid/jcgm.rb +2 -57
- data/lib/pubid/jis/builder.rb +52 -44
- data/lib/pubid/jis/components/code.rb +59 -0
- data/lib/pubid/{astm → jis}/components.rb +1 -1
- data/lib/pubid/jis/identifier.rb +5 -181
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/base.rb +72 -0
- data/lib/pubid/jis/identifiers/standard.rb +1 -2
- data/lib/pubid/jis/identifiers/technical_report.rb +1 -2
- data/lib/pubid/jis/identifiers/technical_specification.rb +1 -2
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +6 -32
- data/lib/pubid/jis/scheme.rb +49 -0
- data/lib/pubid/jis/single_identifier.rb +12 -6
- data/lib/pubid/jis/supplement_identifier.rb +14 -17
- data/lib/pubid/jis.rb +2 -48
- data/lib/pubid/nist/builder.rb +1765 -146
- data/lib/pubid/nist/components/code.rb +20 -9
- data/lib/pubid/nist/components/edition.rb +0 -16
- data/lib/pubid/nist/components/publisher.rb +24 -0
- data/lib/pubid/nist/components/supplement.rb +21 -91
- data/lib/pubid/nist/components.rb +1 -0
- data/lib/pubid/nist/configuration.rb +2 -12
- data/lib/pubid/nist/identifiers/base.rb +417 -662
- data/lib/pubid/nist/identifiers/circular.rb +5 -17
- data/lib/pubid/nist/identifiers/circular_supplement.rb +6 -16
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -3
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +5 -7
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +5 -18
- data/lib/pubid/nist/identifiers/crpl_report.rb +13 -16
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -18
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -3
- data/lib/pubid/nist/identifiers/handbook.rb +4 -12
- data/lib/pubid/nist/identifiers/internal_report.rb +7 -15
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -3
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +11 -20
- data/lib/pubid/nist/identifiers/monograph.rb +11 -22
- 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 +10 -19
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -12
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -4
- data/lib/pubid/nist/identifiers.rb +1 -1
- data/lib/pubid/nist/parser.rb +429 -97
- data/lib/pubid/nist/scheme.rb +199 -0
- data/lib/pubid/nist/supplement_identifier.rb +34 -35
- data/lib/pubid/nist/urn_generator.rb +8 -14
- data/lib/pubid/nist.rb +5 -107
- data/lib/pubid/oiml/builder.rb +10 -91
- data/lib/pubid/oiml/components/code.rb +0 -17
- data/lib/pubid/oiml/identifier.rb +0 -53
- data/lib/pubid/oiml/identifiers/annex.rb +46 -13
- data/lib/pubid/oiml/identifiers/base.rb +36 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +0 -2
- data/lib/pubid/oiml/identifiers/document.rb +0 -2
- data/lib/pubid/oiml/identifiers/expert_report.rb +0 -2
- data/lib/pubid/oiml/identifiers/guide.rb +0 -2
- data/lib/pubid/oiml/identifiers/recommendation.rb +0 -2
- data/lib/pubid/oiml/identifiers/seminar_report.rb +0 -2
- data/lib/pubid/oiml/identifiers/vocabulary.rb +0 -2
- data/lib/pubid/oiml/identifiers.rb +1 -3
- data/lib/pubid/oiml/parser.rb +17 -118
- data/lib/pubid/oiml/scheme.rb +46 -0
- data/lib/pubid/oiml/single_identifier.rb +43 -66
- data/lib/pubid/oiml/supplement_identifier.rb +17 -62
- data/lib/pubid/oiml/urn_generator.rb +8 -22
- data/lib/pubid/oiml.rb +1 -56
- data/lib/pubid/parser.rb +0 -1
- data/lib/pubid/parsers/mr_string.rb +7 -120
- data/lib/pubid/plateau/builder.rb +4 -8
- data/lib/pubid/plateau/identifiers/base.rb +36 -40
- data/lib/pubid/plateau/identifiers/handbook.rb +7 -1
- data/lib/pubid/plateau/identifiers/technical_report.rb +5 -1
- data/lib/pubid/plateau/identifiers.rb +1 -0
- data/lib/pubid/plateau/parser.rb +6 -16
- data/lib/pubid/plateau/scheme.rb +45 -0
- data/lib/pubid/plateau/supplement_identifier.rb +15 -11
- data/lib/pubid/plateau.rb +1 -58
- data/lib/pubid/renderers/base.rb +0 -47
- data/lib/pubid/renderers/directives_renderer.rb +14 -27
- data/lib/pubid/renderers/guide_renderer.rb +1 -7
- data/lib/pubid/renderers/human_readable.rb +9 -34
- data/lib/pubid/renderers/iwa_renderer.rb +1 -5
- data/lib/pubid/renderers/mr_string.rb +6 -54
- data/lib/pubid/renderers/supplement_renderer.rb +2 -5
- data/lib/pubid/renderers.rb +0 -1
- data/lib/pubid/rendering/base.rb +73 -0
- data/lib/pubid/rendering/common.rb +211 -0
- data/lib/pubid/rendering/context.rb +21 -33
- data/lib/pubid/rendering/format.rb +25 -0
- data/lib/pubid/rendering/numbering.rb +7 -25
- data/lib/pubid/rendering/supplement.rb +4 -4
- data/lib/pubid/rendering.rb +3 -0
- data/lib/pubid/sae/builder.rb +1 -1
- data/lib/pubid/sae/components/date.rb +0 -8
- data/lib/pubid/sae/components/type.rb +1 -5
- data/lib/pubid/sae/identifier.rb +12 -2
- data/lib/pubid/sae/identifiers/base.rb +28 -33
- data/lib/pubid/sae/identifiers.rb +1 -0
- data/lib/pubid/sae/parser.rb +1 -1
- data/lib/pubid/sae/scheme.rb +47 -0
- data/lib/pubid/sae/urn_generator.rb +10 -2
- data/lib/pubid/sae.rb +2 -49
- data/lib/pubid/scheme.rb +207 -0
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +10 -424
- data/lib/tasks/export.rake +5 -6
- data/lib/tasks/website-data.json +1796 -1854
- metadata +45 -307
- data/data/bipm/update_codes.yaml +0 -9
- data/data/nist/series.yaml +0 -155
- data/lib/pubid/adobe/builder.rb +0 -52
- data/lib/pubid/adobe/identifier.rb +0 -47
- data/lib/pubid/adobe/identifiers/publication.rb +0 -31
- data/lib/pubid/adobe/identifiers/tech_note.rb +0 -32
- data/lib/pubid/adobe/identifiers.rb +0 -10
- data/lib/pubid/adobe/parser.rb +0 -136
- data/lib/pubid/adobe/renderer.rb +0 -39
- data/lib/pubid/adobe/urn_generator.rb +0 -42
- data/lib/pubid/adobe/urn_parser.rb +0 -69
- data/lib/pubid/adobe.rb +0 -60
- data/lib/pubid/amca/renderer.rb +0 -82
- data/lib/pubid/amca/urn_parser.rb +0 -28
- data/lib/pubid/ansi/renderer.rb +0 -53
- data/lib/pubid/ansi/urn_parser.rb +0 -23
- data/lib/pubid/api/identifiers.rb +0 -18
- data/lib/pubid/api/renderer.rb +0 -98
- data/lib/pubid/api/urn_parser.rb +0 -35
- data/lib/pubid/ashrae/renderer.rb +0 -117
- data/lib/pubid/ashrae/urn_parser.rb +0 -27
- data/lib/pubid/asme/renderer.rb +0 -66
- data/lib/pubid/asme/urn_parser.rb +0 -31
- data/lib/pubid/astm/identifiers/code_number.rb +0 -81
- data/lib/pubid/astm/identifiers.rb +0 -19
- data/lib/pubid/astm/renderer.rb +0 -172
- data/lib/pubid/astm/urn_parser.rb +0 -30
- data/lib/pubid/bipm/builder.rb +0 -163
- data/lib/pubid/bipm/identifier.rb +0 -285
- data/lib/pubid/bipm/identifiers/committee_document.rb +0 -36
- data/lib/pubid/bipm/identifiers/guide.rb +0 -35
- data/lib/pubid/bipm/identifiers/meeting.rb +0 -53
- data/lib/pubid/bipm/identifiers/mep.rb +0 -33
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +0 -48
- data/lib/pubid/bipm/identifiers/si_brochure.rb +0 -33
- data/lib/pubid/bipm/identifiers.rb +0 -15
- data/lib/pubid/bipm/parser.rb +0 -237
- data/lib/pubid/bipm/renderer.rb +0 -118
- data/lib/pubid/bipm/urn_generator.rb +0 -58
- data/lib/pubid/bipm/urn_parser.rb +0 -60
- data/lib/pubid/bipm.rb +0 -91
- data/lib/pubid/bsi/renderer.rb +0 -1064
- data/lib/pubid/bsi/urn_parser.rb +0 -52
- data/lib/pubid/calconnect/builder.rb +0 -38
- data/lib/pubid/calconnect/identifier.rb +0 -121
- data/lib/pubid/calconnect/identifiers/standard.rb +0 -29
- data/lib/pubid/calconnect/identifiers.rb +0 -9
- data/lib/pubid/calconnect/parser.rb +0 -54
- data/lib/pubid/calconnect/renderer.rb +0 -36
- data/lib/pubid/calconnect/urn_generator.rb +0 -33
- data/lib/pubid/calconnect/urn_parser.rb +0 -34
- data/lib/pubid/calconnect.rb +0 -82
- data/lib/pubid/ccsds/urn_parser.rb +0 -20
- data/lib/pubid/cen_cenelec/renderer.rb +0 -261
- data/lib/pubid/cen_cenelec/urn_parser.rb +0 -28
- data/lib/pubid/cie/identifiers/code_attributes.rb +0 -52
- data/lib/pubid/cie/identifiers/proceedings.rb +0 -41
- data/lib/pubid/cie/urn_parser.rb +0 -28
- data/lib/pubid/components/adoption.rb +0 -104
- data/lib/pubid/components/iteration.rb +0 -32
- data/lib/pubid/components/relationship.rb +0 -151
- data/lib/pubid/components/supplement.rb +0 -184
- data/lib/pubid/csa/renderer.rb +0 -300
- data/lib/pubid/csa/urn_parser.rb +0 -33
- data/lib/pubid/doi/builder.rb +0 -18
- data/lib/pubid/doi/identifier.rb +0 -49
- data/lib/pubid/doi/identifiers/resource.rb +0 -30
- data/lib/pubid/doi/identifiers.rb +0 -9
- data/lib/pubid/doi/parser.rb +0 -52
- data/lib/pubid/doi/renderer.rb +0 -13
- data/lib/pubid/doi.rb +0 -55
- data/lib/pubid/easc/builder.rb +0 -55
- data/lib/pubid/easc/identifier.rb +0 -59
- data/lib/pubid/easc/identifiers/pmg.rb +0 -20
- data/lib/pubid/easc/identifiers/rmg.rb +0 -19
- data/lib/pubid/easc/identifiers.rb +0 -10
- data/lib/pubid/easc/parser.rb +0 -88
- data/lib/pubid/easc/renderer.rb +0 -48
- data/lib/pubid/easc/urn_generator.rb +0 -46
- data/lib/pubid/easc/urn_parser.rb +0 -57
- data/lib/pubid/easc.rb +0 -52
- data/lib/pubid/ecma/builder.rb +0 -45
- data/lib/pubid/ecma/identifier.rb +0 -147
- data/lib/pubid/ecma/identifiers/memento.rb +0 -30
- data/lib/pubid/ecma/identifiers/standard.rb +0 -31
- data/lib/pubid/ecma/identifiers/technical_report.rb +0 -31
- data/lib/pubid/ecma/identifiers.rb +0 -11
- data/lib/pubid/ecma/parser.rb +0 -76
- data/lib/pubid/ecma/renderer.rb +0 -67
- data/lib/pubid/ecma/urn_generator.rb +0 -46
- data/lib/pubid/ecma/urn_parser.rb +0 -51
- data/lib/pubid/ecma.rb +0 -67
- data/lib/pubid/errors.rb +0 -79
- data/lib/pubid/etsi/renderer.rb +0 -48
- data/lib/pubid/etsi/urn_parser.rb +0 -34
- data/lib/pubid/gb/builder.rb +0 -45
- data/lib/pubid/gb/identifier.rb +0 -67
- data/lib/pubid/gb/identifiers/standard.rb +0 -34
- data/lib/pubid/gb/identifiers.rb +0 -9
- data/lib/pubid/gb/parser.rb +0 -63
- data/lib/pubid/gb/renderer.rb +0 -35
- data/lib/pubid/gb.rb +0 -87
- data/lib/pubid/gost/builder.rb +0 -148
- data/lib/pubid/gost/identifier.rb +0 -47
- data/lib/pubid/gost/identifiers/foreign_reference.rb +0 -25
- data/lib/pubid/gost/identifiers/harmonized.rb +0 -39
- data/lib/pubid/gost/identifiers/identical_adoption.rb +0 -39
- data/lib/pubid/gost/identifiers/interstate_standard.rb +0 -20
- data/lib/pubid/gost/identifiers/national_standard.rb +0 -19
- data/lib/pubid/gost/identifiers.rb +0 -13
- data/lib/pubid/gost/parser.rb +0 -105
- data/lib/pubid/gost/renderer.rb +0 -48
- data/lib/pubid/gost/urn_generator.rb +0 -46
- data/lib/pubid/gost/urn_parser.rb +0 -52
- data/lib/pubid/gost.rb +0 -49
- data/lib/pubid/iala/builder.rb +0 -102
- data/lib/pubid/iala/identifier.rb +0 -90
- data/lib/pubid/iala/identifiers/advice.rb +0 -15
- data/lib/pubid/iala/identifiers/annex.rb +0 -57
- data/lib/pubid/iala/identifiers/general_assembly.rb +0 -19
- data/lib/pubid/iala/identifiers/guideline.rb +0 -17
- data/lib/pubid/iala/identifiers/letter.rb +0 -16
- data/lib/pubid/iala/identifiers/manual.rb +0 -18
- data/lib/pubid/iala/identifiers/model_course.rb +0 -17
- data/lib/pubid/iala/identifiers/recommendation.rb +0 -17
- data/lib/pubid/iala/identifiers/report.rb +0 -16
- data/lib/pubid/iala/identifiers/resolution.rb +0 -16
- data/lib/pubid/iala/identifiers/standard.rb +0 -17
- data/lib/pubid/iala/identifiers.rb +0 -19
- data/lib/pubid/iala/parser.rb +0 -138
- data/lib/pubid/iala/renderer.rb +0 -36
- data/lib/pubid/iala/urn_generator.rb +0 -49
- data/lib/pubid/iala/urn_parser.rb +0 -67
- data/lib/pubid/iala.rb +0 -71
- data/lib/pubid/iana/builder.rb +0 -22
- data/lib/pubid/iana/identifier.rb +0 -140
- data/lib/pubid/iana/identifiers/registry.rb +0 -69
- data/lib/pubid/iana/identifiers.rb +0 -9
- data/lib/pubid/iana/parser.rb +0 -38
- data/lib/pubid/iana/renderer.rb +0 -32
- data/lib/pubid/iana/urn_generator.rb +0 -19
- data/lib/pubid/iana/urn_parser.rb +0 -24
- data/lib/pubid/iana.rb +0 -69
- data/lib/pubid/idf/renderer.rb +0 -84
- data/lib/pubid/idf/urn_parser.rb +0 -25
- data/lib/pubid/iec/components.rb +0 -14
- data/lib/pubid/iec/identifiers/technical_group.rb +0 -30
- data/lib/pubid/iec/identifiers.rb +0 -31
- data/lib/pubid/iec/renderer.rb +0 -267
- data/lib/pubid/ieee/compaction.rb +0 -121
- data/lib/pubid/ieee/identifiers/amendment.rb +0 -40
- data/lib/pubid/ieee/identifiers/code_number.rb +0 -82
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +0 -32
- data/lib/pubid/ieee/pre_parser.rb +0 -301
- data/lib/pubid/ieee/renderer.rb +0 -408
- data/lib/pubid/ieee/urn_parser.rb +0 -34
- data/lib/pubid/ietf/builder.rb +0 -78
- data/lib/pubid/ietf/identifier.rb +0 -5
- data/lib/pubid/ietf/identifiers/base.rb +0 -72
- data/lib/pubid/ietf/identifiers/bcp.rb +0 -36
- data/lib/pubid/ietf/identifiers/fyi.rb +0 -36
- data/lib/pubid/ietf/identifiers/internet_draft.rb +0 -45
- data/lib/pubid/ietf/identifiers/rfc.rb +0 -27
- data/lib/pubid/ietf/identifiers/serialization.rb +0 -51
- data/lib/pubid/ietf/identifiers/std.rb +0 -36
- data/lib/pubid/ietf/identifiers.rb +0 -14
- data/lib/pubid/ietf/parser.rb +0 -61
- data/lib/pubid/ietf/renderer.rb +0 -64
- data/lib/pubid/ietf/urn_generator.rb +0 -37
- data/lib/pubid/ietf/urn_parser.rb +0 -43
- data/lib/pubid/ietf.rb +0 -85
- data/lib/pubid/iho/renderer.rb +0 -30
- data/lib/pubid/iho/urn_parser.rb +0 -58
- data/lib/pubid/isbn/builder.rb +0 -44
- data/lib/pubid/isbn/check_digit.rb +0 -53
- data/lib/pubid/isbn/identifier.rb +0 -81
- data/lib/pubid/isbn/identifiers/book.rb +0 -30
- data/lib/pubid/isbn/identifiers.rb +0 -9
- data/lib/pubid/isbn/parser.rb +0 -45
- data/lib/pubid/isbn/renderer.rb +0 -16
- data/lib/pubid/isbn.rb +0 -52
- data/lib/pubid/iso/normalizer.rb +0 -89
- data/lib/pubid/itu/components/designation.rb +0 -35
- data/lib/pubid/itu/components.rb +0 -12
- data/lib/pubid/itu/identifiers/addendum.rb +0 -15
- data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +0 -87
- data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +0 -92
- data/lib/pubid/itu/identifiers/errata.rb +0 -15
- data/lib/pubid/itu/identifiers/handbook.rb +0 -38
- data/lib/pubid/itu/identifiers/question.rb +0 -63
- data/lib/pubid/itu/identifiers/report.rb +0 -39
- data/lib/pubid/itu/identifiers/standard_serialization.rb +0 -58
- data/lib/pubid/itu/urn_parser.rb +0 -31
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +0 -34
- data/lib/pubid/jcgm/identifiers/meeting.rb +0 -47
- data/lib/pubid/jcgm/renderer.rb +0 -89
- data/lib/pubid/jcgm/urn_parser.rb +0 -177
- data/lib/pubid/jis/identifiers/corrigendum.rb +0 -16
- data/lib/pubid/jis/renderer.rb +0 -69
- data/lib/pubid/jis/urn_parser.rb +0 -23
- data/lib/pubid/nist/caster.rb +0 -1234
- data/lib/pubid/nist/circular_supplement_builder.rb +0 -293
- data/lib/pubid/nist/identifier.rb +0 -8
- data/lib/pubid/nist/identifiers/dated_document.rb +0 -49
- data/lib/pubid/nist/parser_output_normalizer.rb +0 -233
- data/lib/pubid/nist/preprocessor.rb +0 -443
- data/lib/pubid/nist/renderer.rb +0 -43
- data/lib/pubid/nist/router.rb +0 -149
- data/lib/pubid/nist/series/base.rb +0 -58
- data/lib/pubid/nist/series/crpl.rb +0 -13
- data/lib/pubid/nist/series/fips.rb +0 -14
- data/lib/pubid/nist/series/ir.rb +0 -57
- data/lib/pubid/nist/series/letter_preserving.rb +0 -15
- data/lib/pubid/nist/series/mono.rb +0 -19
- data/lib/pubid/nist/series/ncstar.rb +0 -20
- data/lib/pubid/nist/series.rb +0 -49
- data/lib/pubid/nist/urn_parser.rb +0 -67
- data/lib/pubid/oasis/builder.rb +0 -79
- data/lib/pubid/oasis/identifier.rb +0 -160
- data/lib/pubid/oasis/identifiers/standard.rb +0 -29
- data/lib/pubid/oasis/identifiers.rb +0 -9
- data/lib/pubid/oasis/parser.rb +0 -34
- data/lib/pubid/oasis/renderer.rb +0 -29
- data/lib/pubid/oasis/urn_generator.rb +0 -25
- data/lib/pubid/oasis/urn_parser.rb +0 -22
- data/lib/pubid/oasis.rb +0 -79
- data/lib/pubid/ogc/builder.rb +0 -33
- data/lib/pubid/ogc/identifier.rb +0 -81
- data/lib/pubid/ogc/identifiers/document.rb +0 -26
- data/lib/pubid/ogc/identifiers.rb +0 -10
- data/lib/pubid/ogc/parser.rb +0 -40
- data/lib/pubid/ogc/renderer.rb +0 -33
- data/lib/pubid/ogc/urn_generator.rb +0 -14
- data/lib/pubid/ogc/urn_parser.rb +0 -22
- data/lib/pubid/ogc.rb +0 -71
- data/lib/pubid/oiml/identifiers/bulletin.rb +0 -137
- data/lib/pubid/oiml/identifiers/code_number.rb +0 -90
- data/lib/pubid/oiml/identifiers/errata.rb +0 -15
- data/lib/pubid/oiml/renderer.rb +0 -232
- data/lib/pubid/oiml/urn_parser.rb +0 -39
- data/lib/pubid/omg/builder.rb +0 -19
- data/lib/pubid/omg/identifier.rb +0 -47
- data/lib/pubid/omg/identifiers/specification.rb +0 -32
- data/lib/pubid/omg/identifiers.rb +0 -9
- data/lib/pubid/omg/parser.rb +0 -40
- data/lib/pubid/omg/renderer.rb +0 -19
- data/lib/pubid/omg.rb +0 -51
- data/lib/pubid/parser/grammar.rb +0 -74
- data/lib/pubid/plateau/identifier.rb +0 -4
- data/lib/pubid/plateau/renderer.rb +0 -51
- data/lib/pubid/plateau/urn_parser.rb +0 -43
- data/lib/pubid/prefixes_support.rb +0 -51
- data/lib/pubid/renderers/annotator.rb +0 -233
- data/lib/pubid/sae/renderer.rb +0 -36
- data/lib/pubid/sae/urn_parser.rb +0 -36
- data/lib/pubid/tgpp/builder.rb +0 -41
- data/lib/pubid/tgpp/identifier.rb +0 -107
- data/lib/pubid/tgpp/identifiers/technical_report.rb +0 -32
- data/lib/pubid/tgpp/identifiers/technical_specification.rb +0 -33
- data/lib/pubid/tgpp/identifiers.rb +0 -11
- data/lib/pubid/tgpp/parser.rb +0 -78
- data/lib/pubid/tgpp/renderer.rb +0 -52
- data/lib/pubid/tgpp/urn_generator.rb +0 -39
- data/lib/pubid/tgpp/urn_parser.rb +0 -30
- data/lib/pubid/tgpp.rb +0 -83
- data/lib/pubid/type_resolver.rb +0 -59
- data/lib/pubid/un/builder.rb +0 -42
- data/lib/pubid/un/identifier.rb +0 -40
- data/lib/pubid/un/identifiers/document.rb +0 -24
- data/lib/pubid/un/identifiers.rb +0 -9
- data/lib/pubid/un/parser.rb +0 -25
- data/lib/pubid/un/renderer.rb +0 -11
- data/lib/pubid/un.rb +0 -46
- data/lib/pubid/urn_parser/base.rb +0 -81
- data/lib/pubid/urn_parser/errors.rb +0 -16
- data/lib/pubid/urn_parser.rb +0 -14
- data/lib/pubid/w3c/builder.rb +0 -55
- data/lib/pubid/w3c/identifier.rb +0 -130
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +0 -31
- data/lib/pubid/w3c/identifiers/draft_note.rb +0 -31
- data/lib/pubid/w3c/identifiers/note.rb +0 -30
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/standard.rb +0 -12
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/working_draft.rb +0 -30
- data/lib/pubid/w3c/identifiers.rb +0 -25
- data/lib/pubid/w3c/parser.rb +0 -43
- data/lib/pubid/w3c/renderer.rb +0 -35
- data/lib/pubid/w3c/urn_generator.rb +0 -18
- data/lib/pubid/w3c/urn_parser.rb +0 -36
- data/lib/pubid/w3c.rb +0 -67
- data/lib/pubid/xsf/builder.rb +0 -17
- data/lib/pubid/xsf/identifier.rb +0 -66
- data/lib/pubid/xsf/identifiers/xep.rb +0 -31
- data/lib/pubid/xsf/identifiers.rb +0 -9
- data/lib/pubid/xsf/parser.rb +0 -25
- data/lib/pubid/xsf/renderer.rb +0 -23
- data/lib/pubid/xsf/urn_generator.rb +0 -13
- data/lib/pubid/xsf/urn_parser.rb +0 -18
- data/lib/pubid/xsf.rb +0 -81
data/lib/pubid.rb
CHANGED
|
@@ -1,42 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "lutaml/model"
|
|
4
|
+
require_relative "pubid/lutaml/no_store_registration"
|
|
4
5
|
require "parslet"
|
|
5
6
|
|
|
6
|
-
# Eagerly load the Lutaml::Model patch (disables reference store to avoid
|
|
7
|
-
# unbounded memory growth during bulk parsing, and adds a default +to_urn+
|
|
8
|
-
# implementation to every Serializable). This must apply before any Pubid
|
|
9
|
-
# code runs.
|
|
10
|
-
require "pubid/lutaml/no_store_registration"
|
|
11
|
-
|
|
12
|
-
# Uniform, static per-flavor prefix API (Pubid::<Flavor>.prefixes). Required
|
|
13
|
-
# before the flavor autoloads below so each flavor file can `extend` it and the
|
|
14
|
-
# central JOINT_PREFIXES constant is visible when its PREFIXES is defined.
|
|
15
|
-
require "pubid/prefixes_support"
|
|
16
|
-
|
|
17
7
|
module Pubid
|
|
18
|
-
# Upper bound on the length of an identifier string accepted by any +parse+
|
|
19
|
-
# entry point. Real-world standards identifiers are well under 200 characters;
|
|
20
|
-
# this limit exists purely to keep pathological, attacker-controlled inputs
|
|
21
|
-
# away from the flavors' backtracking-capable normalization regexes
|
|
22
|
-
# (CodeQL rb/polynomial-redos). The inline `.length` checks in every public
|
|
23
|
-
# +parse+ method are recognized by CodeQL as a barrier that bounds the input
|
|
24
|
-
# before it can reach those regexes. Ruby 3.2+ already memoizes the flagged
|
|
25
|
-
# regexes to linear time, so this guard is defense-in-depth, not a fix for a
|
|
26
|
-
# live exploit; it must therefore never reject a legitimate identifier.
|
|
27
|
-
MAX_INPUT_LENGTH = 1000
|
|
28
|
-
|
|
29
|
-
# Raised (as an ArgumentError) when an input string exceeds MAX_INPUT_LENGTH.
|
|
30
|
-
INPUT_TOO_LONG_MESSAGE =
|
|
31
|
-
"identifier string exceeds maximum length of #{MAX_INPUT_LENGTH} characters"
|
|
32
|
-
|
|
33
|
-
# Raised (as an ArgumentError) when +parse+ gets something that is not a
|
|
34
|
-
# String. Without this check the input reaches +.length+ and the caller gets a
|
|
35
|
-
# NoMethodError ("undefined method 'length' for nil"), a Ruby internal error
|
|
36
|
-
# that says nothing about the identifier contract. Every public +parse+ entry
|
|
37
|
-
# point rejects a non-String before it measures the length.
|
|
38
|
-
INPUT_NOT_A_STRING_MESSAGE = "identifier must be a String"
|
|
39
|
-
|
|
40
8
|
# Registry for tracking all loaded flavors
|
|
41
9
|
class Registry
|
|
42
10
|
@flavors = {}
|
|
@@ -70,102 +38,53 @@ module Pubid
|
|
|
70
38
|
def registered?(name)
|
|
71
39
|
@flavors.key?(name.to_s.downcase)
|
|
72
40
|
end
|
|
73
|
-
|
|
74
|
-
# Parse an identifier without naming its flavor.
|
|
75
|
-
#
|
|
76
|
-
# The pubid 1.x entry point, kept because consumers still call it —
|
|
77
|
-
# isodoc's +std_docid_semantic_parse+ among them. It delegates to
|
|
78
|
-
# {Pubid.parse}; it is not a second implementation.
|
|
79
|
-
#
|
|
80
|
-
# @param string [String] the identifier string
|
|
81
|
-
# @return [Pubid::Identifier]
|
|
82
|
-
# @raise [Parslet::ParseFailed] when no flavor can parse it
|
|
83
|
-
def parse(string, **opts)
|
|
84
|
-
Pubid.parse(string, **opts)
|
|
85
|
-
end
|
|
86
41
|
end
|
|
87
42
|
end
|
|
88
43
|
|
|
89
|
-
# Canonical joint / co-publication leading tokens, injected symmetrically into
|
|
90
|
-
# every participating flavor's +prefixes+ (see {PrefixesSupport}). Single
|
|
91
|
-
# source of truth: editing an entry here updates both sides at once
|
|
92
|
-
# (e.g. +"ISO/IEC"+ appears in +Pubid::Iso.prefixes+ and +Pubid::Iec.prefixes+),
|
|
93
|
-
# so co-publication symmetry can never drift. Keyed by
|
|
94
|
-
# {PrefixesSupport#prefix_flavor_key}.
|
|
95
|
-
JOINT_PREFIXES = {
|
|
96
|
-
iso: ["ISO/IEC", "IEC/ISO", "ISO/IEC/IEEE"],
|
|
97
|
-
iec: ["ISO/IEC", "IEC/ISO", "ISO/IEC/IEEE"],
|
|
98
|
-
ieee: ["ISO/IEC/IEEE"],
|
|
99
|
-
ansi: ["ANSI/ASHRAE", "ANSI/AMCA"],
|
|
100
|
-
ashrae: ["ANSI/ASHRAE"],
|
|
101
|
-
amca: ["ANSI/AMCA"],
|
|
102
|
-
}.freeze
|
|
103
|
-
|
|
104
|
-
autoload :Errors, "pubid/errors"
|
|
105
44
|
autoload :Parser, "pubid/parser"
|
|
106
45
|
autoload :Components, "pubid/components"
|
|
107
46
|
autoload :BundledIdentifier, "pubid/bundled_identifier"
|
|
108
47
|
autoload :Identifier, "pubid/identifier"
|
|
109
48
|
autoload :IdentifierMetadata, "pubid/identifier_metadata"
|
|
49
|
+
autoload :IdentifierRegistry, "pubid/identifier_registry"
|
|
110
50
|
autoload :Rendering, "pubid/rendering"
|
|
111
51
|
autoload :Renderers, "pubid/renderers"
|
|
112
52
|
autoload :FormatDetector, "pubid/format_detector"
|
|
113
53
|
autoload :FormatRegistry, "pubid/format_registry"
|
|
54
|
+
autoload :Scheme, "pubid/scheme"
|
|
114
55
|
|
|
115
56
|
autoload :UrnGenerator, "pubid/urn_generator/base"
|
|
116
|
-
autoload :UrnParser, "pubid/urn_parser"
|
|
117
57
|
autoload :Builder, "pubid/builder/base"
|
|
118
58
|
autoload :Utils, "pubid/utils"
|
|
119
59
|
autoload :Version, "pubid/version"
|
|
120
60
|
autoload :Core, "pubid/core"
|
|
121
|
-
autoload :TypeResolver, "pubid/type_resolver"
|
|
122
|
-
|
|
123
61
|
|
|
124
62
|
# Require all flavor modules
|
|
125
|
-
autoload :Adobe, "pubid/adobe"
|
|
126
63
|
autoload :Amca, "pubid/amca"
|
|
127
64
|
autoload :Ansi, "pubid/ansi"
|
|
128
65
|
autoload :Api, "pubid/api"
|
|
129
66
|
autoload :Ashrae, "pubid/ashrae"
|
|
130
67
|
autoload :Asme, "pubid/asme"
|
|
131
|
-
autoload :Doi, "pubid/doi"
|
|
132
|
-
autoload :Easc, "pubid/easc"
|
|
133
68
|
autoload :Astm, "pubid/astm"
|
|
134
|
-
autoload :Bipm, "pubid/bipm"
|
|
135
69
|
autoload :Bsi, "pubid/bsi"
|
|
136
|
-
autoload :Calconnect, "pubid/calconnect"
|
|
137
70
|
autoload :Ccsds, "pubid/ccsds"
|
|
138
71
|
autoload :CenCenelec, "pubid/cen_cenelec"
|
|
139
72
|
autoload :Cie, "pubid/cie"
|
|
140
73
|
autoload :Csa, "pubid/csa"
|
|
141
|
-
autoload :Ecma, "pubid/ecma"
|
|
142
74
|
autoload :Etsi, "pubid/etsi"
|
|
143
|
-
autoload :Gost, "pubid/gost"
|
|
144
|
-
autoload :Gb, "pubid/gb"
|
|
145
75
|
autoload :Idf, "pubid/idf"
|
|
146
76
|
autoload :Iec, "pubid/iec"
|
|
147
77
|
autoload :Ieee, "pubid/ieee"
|
|
148
|
-
autoload :Ietf, "pubid/ietf"
|
|
149
|
-
autoload :Isbn, "pubid/isbn"
|
|
150
|
-
autoload :Iala, "pubid/iala"
|
|
151
|
-
autoload :Iana, "pubid/iana"
|
|
152
78
|
autoload :Iho, "pubid/iho"
|
|
153
79
|
autoload :Iso, "pubid/iso"
|
|
154
80
|
autoload :Itu, "pubid/itu"
|
|
155
81
|
autoload :Jcgm, "pubid/jcgm"
|
|
156
82
|
autoload :Jis, "pubid/jis"
|
|
157
83
|
autoload :Nist, "pubid/nist"
|
|
158
|
-
autoload :Oasis, "pubid/oasis"
|
|
159
|
-
autoload :Ogc, "pubid/ogc"
|
|
160
84
|
autoload :Oiml, "pubid/oiml"
|
|
161
|
-
autoload :Omg, "pubid/omg"
|
|
162
85
|
autoload :Plateau, "pubid/plateau"
|
|
163
86
|
autoload :Export, "pubid/export"
|
|
164
87
|
autoload :Sae, "pubid/sae"
|
|
165
|
-
autoload :Tgpp, "pubid/tgpp"
|
|
166
|
-
autoload :Un, "pubid/un"
|
|
167
|
-
autoload :Xsf, "pubid/xsf"
|
|
168
|
-
autoload :W3c, "pubid/w3c"
|
|
169
88
|
|
|
170
89
|
# Format infrastructure (loaded eagerly so Pubid::Renderers / Pubid::Parsers are always available)
|
|
171
90
|
require "pubid/renderers/base"
|
|
@@ -182,49 +101,18 @@ module Pubid
|
|
|
182
101
|
|
|
183
102
|
# Unified parse entry point with auto-detection
|
|
184
103
|
#
|
|
185
|
-
# A human-readable string is routed to its owning flavor by leading prefix
|
|
186
|
-
# token, using the {prefix_flavors} table. This restores the pubid 1.x
|
|
187
|
-
# +Pubid::Registry.parse+ capability, which isodoc still calls; before it,
|
|
188
|
-
# this method raised +No flavor specified+ for every human-readable string,
|
|
189
|
-
# so a reference whose flavor the caller did not already know could not be
|
|
190
|
-
# parsed at all.
|
|
191
|
-
#
|
|
192
104
|
# @param string [String] The identifier string to parse
|
|
193
105
|
# @param format [Symbol] :auto, :human, :mr_string, or :urn
|
|
194
106
|
# @return [Identifier] The parsed identifier
|
|
195
|
-
# @raise [ArgumentError] for a non-String, or one over {MAX_INPUT_LENGTH}
|
|
196
|
-
# @raise [Parslet::ParseFailed] when no flavor can parse the string — the
|
|
197
|
-
# class every flavor's own +parse+ raises (see the parse-failure contract)
|
|
198
107
|
def self.parse(string, format: :auto)
|
|
199
|
-
unless string.is_a?(String)
|
|
200
|
-
raise Pubid::Errors::InvalidInputError,
|
|
201
|
-
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
202
|
-
end
|
|
203
|
-
if string.length > MAX_INPUT_LENGTH
|
|
204
|
-
raise Pubid::Errors::InvalidInputError,
|
|
205
|
-
Pubid::INPUT_TOO_LONG_MESSAGE
|
|
206
|
-
end
|
|
207
|
-
|
|
208
108
|
format = FormatDetector.detect(string) if format == :auto
|
|
209
109
|
|
|
210
110
|
case format
|
|
211
111
|
when :mr_string
|
|
212
|
-
|
|
213
|
-
# human-readable identifiers have that shape — "ITU-T G.711" is the
|
|
214
|
-
# standing example. Fall through to prefix routing when the MR parse
|
|
215
|
-
# fails, rather than reporting an MR error for a string that was never
|
|
216
|
-
# an MR string. A genuine MR failure still surfaces, from the second
|
|
217
|
-
# attempt, as Parslet::ParseFailed.
|
|
218
|
-
#
|
|
219
|
-
# Narrow, for the reason spelled out on {parse_by_prefix}: only a parse
|
|
220
|
-
# failure means "wrong shape". Anything else is a defect and propagates.
|
|
221
|
-
begin
|
|
222
|
-
Parsers::MrString.parse(string)
|
|
223
|
-
rescue Parslet::ParseFailed
|
|
224
|
-
parse_by_prefix(string)
|
|
225
|
-
end
|
|
112
|
+
Parsers::MrString.parse(string)
|
|
226
113
|
when :urn
|
|
227
|
-
|
|
114
|
+
# URN auto-detection: extract flavor from URN namespace
|
|
115
|
+
# e.g., "urn:iso:std:..." → Pubid::Iso
|
|
228
116
|
flavor = detect_flavor_from_urn(string)
|
|
229
117
|
flavor_module = Registry.get(flavor)
|
|
230
118
|
unless flavor_module
|
|
@@ -235,176 +123,12 @@ module Pubid
|
|
|
235
123
|
urn_parser = flavor_module.const_get(:UrnParser)
|
|
236
124
|
urn_parser.parse(string)
|
|
237
125
|
else
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
# Route a human-readable identifier to its flavor by leading prefix token.
|
|
243
|
-
#
|
|
244
|
-
# Three passes, widening each time — the pubid 1.x +Registry.parse+ shape:
|
|
245
|
-
#
|
|
246
|
-
# 1. flavors owning the longest matching prefix ("ISO/IEC" before "ISO")
|
|
247
|
-
# 2. every other flavor, in registry order
|
|
248
|
-
#
|
|
249
|
-
# A longest-match-first order matters because prefixes nest: "ISO/IEC 2131"
|
|
250
|
-
# must not be handed to the flavor that merely owns "ISO".
|
|
251
|
-
#
|
|
252
|
-
# @param string [String] a human-readable identifier
|
|
253
|
-
# @return [Identifier]
|
|
254
|
-
# @raise [Parslet::ParseFailed] when no flavor accepts the string
|
|
255
|
-
# @api private
|
|
256
|
-
def self.parse_by_prefix(string)
|
|
257
|
-
eager_load_flavors!
|
|
258
|
-
|
|
259
|
-
first_error = nil
|
|
260
|
-
fallback = nil
|
|
261
|
-
|
|
262
|
-
prefix_owners = candidates_by_prefix(string)
|
|
263
|
-
(prefix_owners + other_candidates(prefix_owners)).each do |mod|
|
|
264
|
-
begin
|
|
265
|
-
parsed = mod.parse(string)
|
|
266
|
-
rescue Parslet::ParseFailed => e
|
|
267
|
-
# ONLY a parse failure means "not this flavor's identifier". Every
|
|
268
|
-
# other exception is a defect in that flavor and must propagate.
|
|
269
|
-
#
|
|
270
|
-
# A blanket `rescue StandardError` here would swallow exactly the
|
|
271
|
-
# `ArgumentError: unknown attribute…` that the constructor contract on
|
|
272
|
-
# `Identifier` now raises — the error that turned three silent
|
|
273
|
-
# data-loss bugs (CIE `s_prefix`, IEEE `adopted_identifier`,
|
|
274
|
-
# IEEE `csa_identifier`) into visible ones. Catching it one layer up
|
|
275
|
-
# would hand it straight back its disguise: a real builder bug in any
|
|
276
|
-
# flavor would read as "this string is not an identifier".
|
|
277
|
-
first_error ||= e
|
|
278
|
-
next
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
# An exact round trip is the strongest evidence the string belongs to
|
|
282
|
-
# this flavor. It matters because some grammars accept anything by
|
|
283
|
-
# design — adobe and iana take any slug — so without it the first such
|
|
284
|
-
# flavor in registry order claims every unclaimed string and invents
|
|
285
|
-
# structure that was not in the input. Same test isodoc applies before
|
|
286
|
-
# it will annotate a parsed id.
|
|
287
|
-
return parsed if parsed.to_s == string
|
|
288
|
-
|
|
289
|
-
# A non-exact parse is still usable — several flavors legitimately
|
|
290
|
-
# normalise on render, so the round trip is a preference, not a
|
|
291
|
-
# requirement (OGC prints `06-121r9` for `OGC 06-121r9`, and 32 ASHRAE /
|
|
292
|
-
# ASME / CSA / IEEE identifiers route only this way). What it must NOT
|
|
293
|
-
# come from is a flavor that accepts anything: that is how `iec.60050`
|
|
294
|
-
# came back as `IANA iec.60050`. Reporting that no flavor could be
|
|
295
|
-
# determined beats inventing one.
|
|
296
|
-
fallback ||= parsed unless accepts_anything?(mod)
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
return fallback if fallback
|
|
300
|
-
raise first_error if first_error
|
|
301
|
-
|
|
302
|
-
raise Parslet::ParseFailed,
|
|
303
|
-
"no registered flavor could parse #{string.inspect}"
|
|
304
|
-
end
|
|
305
|
-
private_class_method :parse_by_prefix
|
|
306
|
-
|
|
307
|
-
# Flavor modules that own a prefix +string+ starts with, longest prefix
|
|
308
|
-
# first. Deduplicated by module identity, so an alias registration is not
|
|
309
|
-
# tried twice.
|
|
310
|
-
#
|
|
311
|
-
# These are the flavors with an actual claim on the string; a parse from one
|
|
312
|
-
# of them is trusted even when the flavor normalises on render.
|
|
313
|
-
#
|
|
314
|
-
# @param string [String] a human-readable identifier
|
|
315
|
-
# @return [Array<Module>]
|
|
316
|
-
# @api private
|
|
317
|
-
def self.candidates_by_prefix(string)
|
|
318
|
-
ordered = []
|
|
319
|
-
routing_table.each do |prefix, modules|
|
|
320
|
-
ordered.concat(modules) if prefix_match?(string, prefix)
|
|
126
|
+
# Default to MR string parser for MR format, human-readable otherwise
|
|
127
|
+
# The MR string parser converts to human-readable and delegates to flavor.parse
|
|
128
|
+
raise ArgumentError,
|
|
129
|
+
"No flavor specified. Use Pubid::Iso.parse() or another flavor-specific parse method."
|
|
321
130
|
end
|
|
322
|
-
ordered.compact.uniq
|
|
323
131
|
end
|
|
324
|
-
private_class_method :candidates_by_prefix
|
|
325
|
-
|
|
326
|
-
# Every other registered flavor, for the exhaustive second pass.
|
|
327
|
-
#
|
|
328
|
-
# @param exclude [Array<Module>] modules already tried
|
|
329
|
-
# @return [Array<Module>]
|
|
330
|
-
# @api private
|
|
331
|
-
def self.other_candidates(exclude)
|
|
332
|
-
ordered = []
|
|
333
|
-
each_prefix_flavor_module { |mod| ordered << mod }
|
|
334
|
-
ordered.compact.uniq - exclude
|
|
335
|
-
end
|
|
336
|
-
private_class_method :other_candidates
|
|
337
|
-
|
|
338
|
-
# A meaningless string no real identifier scheme should claim. Used to find
|
|
339
|
-
# the flavors whose grammar accepts anything.
|
|
340
|
-
ROUTING_PROBE = "zzqx-nonsense-9714"
|
|
341
|
-
private_constant :ROUTING_PROBE
|
|
342
|
-
|
|
343
|
-
# True when +mod+'s grammar accepts an arbitrary slug.
|
|
344
|
-
#
|
|
345
|
-
# `adobe` and `iana` do, by design — their identifiers genuinely are free
|
|
346
|
-
# text. That makes them unsafe as a fallback: whichever came first in
|
|
347
|
-
# registry order would claim every string no other flavor matched, and
|
|
348
|
-
# answer with structure the input never had.
|
|
349
|
-
#
|
|
350
|
-
# Detected by probing rather than by a hardcoded list, so a flavor that
|
|
351
|
-
# acquires (or loses) an anything-goes grammar is classified correctly
|
|
352
|
-
# without anyone remembering to edit a constant. Computed once per module.
|
|
353
|
-
#
|
|
354
|
-
# @param mod [Module] a flavor module
|
|
355
|
-
# @return [Boolean]
|
|
356
|
-
# @api private
|
|
357
|
-
def self.accepts_anything?(mod)
|
|
358
|
-
@accepts_anything ||= {}
|
|
359
|
-
return @accepts_anything[mod] if @accepts_anything.key?(mod)
|
|
360
|
-
|
|
361
|
-
@accepts_anything[mod] =
|
|
362
|
-
begin
|
|
363
|
-
mod.parse(ROUTING_PROBE)
|
|
364
|
-
true
|
|
365
|
-
rescue StandardError, Parslet::ParseFailed
|
|
366
|
-
false
|
|
367
|
-
end
|
|
368
|
-
end
|
|
369
|
-
private_class_method :accepts_anything?
|
|
370
|
-
|
|
371
|
-
# Prefix => flavor modules, longest prefix first, built once.
|
|
372
|
-
#
|
|
373
|
-
# {prefix_flavors} rebuilds its index on every call, iterating every
|
|
374
|
-
# registered flavor; routing consulted it twice per parse. The registry is
|
|
375
|
-
# static once +eager_load_flavors!+ has run, so the table is memoised here
|
|
376
|
-
# rather than making the public method's cost implicit.
|
|
377
|
-
#
|
|
378
|
-
# The memo is never invalidated, which is safe for every flavor shipped in
|
|
379
|
-
# this gem — they are all +Pubid+-namespace constants that
|
|
380
|
-
# +eager_load_flavors!+ loads before the first parse. A flavor registered
|
|
381
|
-
# from OUTSIDE that namespace after the first {parse} call would miss its
|
|
382
|
-
# prefix priority (it is still tried in the exhaustive second pass, so it is
|
|
383
|
-
# reachable, just not preferred). Bust the memo in +Registry.register+ if
|
|
384
|
-
# out-of-namespace flavors ever become a supported extension point.
|
|
385
|
-
#
|
|
386
|
-
# @return [Hash{String => Array<Module>}]
|
|
387
|
-
# @api private
|
|
388
|
-
def self.routing_table
|
|
389
|
-
@routing_table ||= begin
|
|
390
|
-
index = prefix_flavors
|
|
391
|
-
index.keys
|
|
392
|
-
.sort_by { |prefix| -prefix.length }
|
|
393
|
-
.to_h { |prefix| [prefix, index[prefix].map { |key| Registry.get(key) }] }
|
|
394
|
-
end
|
|
395
|
-
end
|
|
396
|
-
private_class_method :routing_table
|
|
397
|
-
|
|
398
|
-
# True when +string+ starts with +prefix+ at a token boundary, so "ISO" does
|
|
399
|
-
# not claim "ISOFIX" and "BS" does not claim "BSI".
|
|
400
|
-
# @api private
|
|
401
|
-
def self.prefix_match?(string, prefix)
|
|
402
|
-
return false unless string.start_with?(prefix)
|
|
403
|
-
|
|
404
|
-
rest = string[prefix.length]
|
|
405
|
-
rest.nil? || !/[A-Za-z0-9]/.match?(rest)
|
|
406
|
-
end
|
|
407
|
-
private_class_method :prefix_match?
|
|
408
132
|
|
|
409
133
|
def self.detect_flavor_from_urn(urn)
|
|
410
134
|
# urn:iso:std:... → "iso"
|
|
@@ -412,142 +136,4 @@ module Pubid
|
|
|
412
136
|
parts = urn.downcase.split(":")
|
|
413
137
|
parts[1] # The namespace part after "urn"
|
|
414
138
|
end
|
|
415
|
-
|
|
416
|
-
# Trigger autoloads for every declared flavor module so that
|
|
417
|
-
# Registry is populated before URN dispatch needs it. Safe to call
|
|
418
|
-
# repeatedly; no-op after the first invocation.
|
|
419
|
-
#
|
|
420
|
-
# The constant filter allows a digit inside the name (the +0-9+ in the regex)
|
|
421
|
-
# so digit-bearing flavor modules such as +W3c+ are loaded/registered too —
|
|
422
|
-
# without it +W3c+ is silently dropped from the registry enumeration and thus
|
|
423
|
-
# from every registry-driven cross-flavor spec.
|
|
424
|
-
def self.eager_load_flavors!
|
|
425
|
-
return if @flavors_loaded
|
|
426
|
-
|
|
427
|
-
constants.each do |c|
|
|
428
|
-
next unless c.to_s.match?(/\A[A-Z][a-zA-Z0-9]+\z/)
|
|
429
|
-
|
|
430
|
-
begin
|
|
431
|
-
const_get(c)
|
|
432
|
-
rescue StandardError
|
|
433
|
-
nil
|
|
434
|
-
end
|
|
435
|
-
end
|
|
436
|
-
@flavors_loaded = true
|
|
437
|
-
end
|
|
438
|
-
|
|
439
|
-
# Static leading prefix tokens for a single flavor.
|
|
440
|
-
#
|
|
441
|
-
# @param flavor [Symbol, String] a registered flavor name (e.g. +:iso+)
|
|
442
|
-
# @return [Array<String>] the flavor's prefixes (see {PrefixesSupport})
|
|
443
|
-
# @raise [ArgumentError] if the flavor is not registered
|
|
444
|
-
def self.prefixes(flavor)
|
|
445
|
-
mod = Registry.get(flavor)
|
|
446
|
-
raise ArgumentError, "unknown flavor: #{flavor.inspect}" unless mod
|
|
447
|
-
|
|
448
|
-
mod.prefixes
|
|
449
|
-
end
|
|
450
|
-
|
|
451
|
-
# Reverse index mapping every canonical prefix token to the flavor(s) that
|
|
452
|
-
# own it — the exact routing table relaton needs. Co-published prefixes list
|
|
453
|
-
# every co-publisher (e.g. +"ISO/IEC" => [:iec, :iso]+); see the inclusion /
|
|
454
|
-
# exclusion policy documented on {PrefixesSupport}.
|
|
455
|
-
#
|
|
456
|
-
# The +:cen+ alias of +:cen_cenelec+ is de-duplicated by module identity, so a
|
|
457
|
-
# prefix is attributed to a flavor's canonical
|
|
458
|
-
# {PrefixesSupport#prefix_flavor_key} exactly once.
|
|
459
|
-
#
|
|
460
|
-
# @return [Hash{String => Array<Symbol>}] prefix token => sorted flavor keys,
|
|
461
|
-
# e.g. +{ "ISO" => [:iso], "ISO/IEC" => [:iec, :iso], ... }+
|
|
462
|
-
def self.prefix_flavors
|
|
463
|
-
index = Hash.new { |h, k| h[k] = [] }
|
|
464
|
-
each_prefix_flavor_module do |mod|
|
|
465
|
-
key = mod.prefix_flavor_key
|
|
466
|
-
mod.prefixes.each { |prefix| index[prefix] |= [key] }
|
|
467
|
-
end
|
|
468
|
-
index.transform_values(&:sort).sort.to_h
|
|
469
|
-
end
|
|
470
|
-
|
|
471
|
-
# Yields each unique flavor module that exposes +prefixes+ exactly once,
|
|
472
|
-
# collapsing alias registrations (e.g. +:cen+ and +:cen_cenelec+ both point to
|
|
473
|
-
# +Pubid::CenCenelec+) by module identity.
|
|
474
|
-
# @yieldparam mod [Module] a flavor module
|
|
475
|
-
def self.each_prefix_flavor_module
|
|
476
|
-
eager_load_flavors!
|
|
477
|
-
seen = {}
|
|
478
|
-
Registry.flavor_names.each do |flavor_name|
|
|
479
|
-
mod = Registry.get(flavor_name)
|
|
480
|
-
next if seen.key?(mod) || !mod.respond_to?(:prefixes)
|
|
481
|
-
|
|
482
|
-
seen[mod] = true
|
|
483
|
-
yield mod
|
|
484
|
-
end
|
|
485
|
-
end
|
|
486
|
-
|
|
487
|
-
# Typed-stage lookup by abbreviation, across flavors.
|
|
488
|
-
#
|
|
489
|
-
# Each flavor module memoises +all_typed_stages+ over its own +Identifiers+
|
|
490
|
-
# namespace, so an abbreviation only one flavor uses is invisible from any
|
|
491
|
-
# other: +Pubid::Iso.locate_stage("ADTS")+ is nil while
|
|
492
|
-
# +Pubid::Iec.locate_stage("ADTS")+ finds it. A consumer that holds an
|
|
493
|
-
# abbreviation but not the owning flavor had nowhere to ask.
|
|
494
|
-
#
|
|
495
|
-
# @param abbr [String, Symbol] the stage abbreviation (case-insensitive)
|
|
496
|
-
# @param flavor [Symbol, String, nil] search this flavor only; nil searches
|
|
497
|
-
# every registered flavor and returns the first match
|
|
498
|
-
# @return [Object, nil] the flavor's typed-stage object, or nil. The class is
|
|
499
|
-
# flavor-specific: most return {Pubid::Components::TypedStage}, but IEEE
|
|
500
|
-
# has its own +Ieee::Components::TypedStage+, which is not a subclass.
|
|
501
|
-
# @raise [ArgumentError] if +flavor+ names a flavor that is not registered
|
|
502
|
-
def self.locate_stage(abbr, flavor: nil)
|
|
503
|
-
return locate_stage_in(Registry.get(flavor), abbr, flavor) if flavor
|
|
504
|
-
|
|
505
|
-
each_stage_flavor_module do |mod|
|
|
506
|
-
stage = mod.locate_stage(abbr)
|
|
507
|
-
return stage if stage
|
|
508
|
-
end
|
|
509
|
-
nil
|
|
510
|
-
end
|
|
511
|
-
|
|
512
|
-
# Every flavor that knows +abbr+ — the diagnostic companion to
|
|
513
|
-
# {locate_stage}, for telling a consumer which module owns a stage.
|
|
514
|
-
#
|
|
515
|
-
# @param abbr [String, Symbol] the stage abbreviation (case-insensitive)
|
|
516
|
-
# @return [Array<Symbol>] registered flavor keys, sorted
|
|
517
|
-
def self.locate_stage_flavors(abbr)
|
|
518
|
-
found = []
|
|
519
|
-
each_stage_flavor_module do |mod, flavor_name|
|
|
520
|
-
found << flavor_name.to_sym if mod.locate_stage(abbr)
|
|
521
|
-
end
|
|
522
|
-
found.sort
|
|
523
|
-
end
|
|
524
|
-
|
|
525
|
-
# Yields each unique flavor module that implements +locate_stage+, exactly
|
|
526
|
-
# once. Three registered flavors (adobe, easc, gost) define no typed stages
|
|
527
|
-
# at all, so a cross-flavor sweep must skip them rather than raise on the
|
|
528
|
-
# first one it reaches; alias registrations are collapsed by module identity,
|
|
529
|
-
# as in {each_prefix_flavor_module}.
|
|
530
|
-
#
|
|
531
|
-
# @yieldparam mod [Module] a flavor module
|
|
532
|
-
# @yieldparam flavor_name [String] the registry key it was reached under
|
|
533
|
-
def self.each_stage_flavor_module
|
|
534
|
-
eager_load_flavors!
|
|
535
|
-
seen = {}
|
|
536
|
-
Registry.flavor_names.each do |flavor_name|
|
|
537
|
-
mod = Registry.get(flavor_name)
|
|
538
|
-
next if seen.key?(mod) || !mod.respond_to?(:locate_stage)
|
|
539
|
-
|
|
540
|
-
seen[mod] = true
|
|
541
|
-
yield mod, flavor_name
|
|
542
|
-
end
|
|
543
|
-
end
|
|
544
|
-
|
|
545
|
-
# @api private
|
|
546
|
-
def self.locate_stage_in(mod, abbr, flavor)
|
|
547
|
-
raise ArgumentError, "unknown flavor: #{flavor.inspect}" unless mod
|
|
548
|
-
return nil unless mod.respond_to?(:locate_stage)
|
|
549
|
-
|
|
550
|
-
mod.locate_stage(abbr)
|
|
551
|
-
end
|
|
552
|
-
private_class_method :locate_stage_in
|
|
553
139
|
end
|
data/lib/tasks/export.rake
CHANGED
|
@@ -19,18 +19,17 @@ namespace :export do
|
|
|
19
19
|
desc "Audit library data against website publishers"
|
|
20
20
|
task :audit do
|
|
21
21
|
require "pubid/export"
|
|
22
|
+
data = Pubid::Export::Exporter.export_all
|
|
22
23
|
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
# symbol keys (:identifier_types) into the string keys it expects.
|
|
26
|
-
data = JSON.parse(JSON.generate(Pubid::Export::Exporter.export_all))
|
|
24
|
+
# Parse website publishers to extract doc type keys
|
|
25
|
+
# For now, read the generated JSON and provide a summary
|
|
27
26
|
auditor = Pubid::Export::Auditor.new(data)
|
|
28
27
|
|
|
29
28
|
# Build a minimal website representation from the generated data itself
|
|
30
29
|
# (in production, this would parse the website's publishers.ts)
|
|
30
|
+
{}
|
|
31
31
|
summary = data.transform_values do |fd|
|
|
32
|
-
|
|
33
|
-
{ "doc_types" => keys }
|
|
32
|
+
{ "doc_types" => fd[:identifier_types].map { |t| { "key" => t[:key] } } }
|
|
34
33
|
end
|
|
35
34
|
|
|
36
35
|
results = auditor.audit(summary)
|