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
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
module Series
|
|
6
|
-
# Default series behavior. All hooks return the "generic" answer so a
|
|
7
|
-
# series bug can be fixed by overriding the relevant hook in a subclass.
|
|
8
|
-
class Base
|
|
9
|
-
# Whether an uppercase letter at the end of `first_number` stays in the
|
|
10
|
-
# number (true) or is extracted as a separate Part component (false).
|
|
11
|
-
def self.preserve_letter_suffix?(parsed_hash)
|
|
12
|
-
parsed_hash[:parsed_format] == :mr
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# Cast a `:letter_number` parser hash (e.g., from "800-56A").
|
|
16
|
-
# Return a cast hash, or nil to skip assignment.
|
|
17
|
-
# Default: split letter suffix into a Part component.
|
|
18
|
-
def self.cast_letter_number(value, _parsed_hash)
|
|
19
|
-
full = combine_letter_suffix(value)
|
|
20
|
-
return nil if full.nil? || full.empty?
|
|
21
|
-
|
|
22
|
-
{ part: Components::Part.new(type: "", value: full.upcase) }
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Whether the edition-year cast should use modern (numeric) date format
|
|
26
|
-
# instead of preserving historical month names. FIPS uses modern.
|
|
27
|
-
def self.modern_edition_date?
|
|
28
|
-
false
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Whether `part_num` alongside `second_num` becomes a Part component
|
|
32
|
-
# (true) or is folded into the compound number (false). IR uses Part.
|
|
33
|
-
def self.part_num_as_component?
|
|
34
|
-
false
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Hook: build compound number when `letter_num` is present.
|
|
38
|
-
# Return true if the series handled it; false to fall back to default.
|
|
39
|
-
def self.handle_letter_num_compound?(_identifier,
|
|
40
|
-
first_num:, letter_base:,
|
|
41
|
-
letter_suffix:)
|
|
42
|
-
false
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Hook: post-process the identifier after compound number is assigned.
|
|
46
|
-
# Override to reverse series-specific preprocessing side effects.
|
|
47
|
-
def self.finalize_identifier(_identifier, _parsed_hash); end
|
|
48
|
-
|
|
49
|
-
# Combine `:letter_suffix` and `:letter_suffix_extra` (e.g., "U" + "r").
|
|
50
|
-
def self.combine_letter_suffix(value)
|
|
51
|
-
suffix = value[:letter_suffix].to_s.strip
|
|
52
|
-
extra = value[:letter_suffix_extra].to_s.strip
|
|
53
|
-
extra.empty? ? suffix : "#{suffix}#{extra}"
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
module Series
|
|
6
|
-
# CRPL series: letter suffix preserved in first_number.
|
|
7
|
-
# Range parsing ("2_3-1") is handled by the dedicated :crpl_range case
|
|
8
|
-
# in the caster; this class only carries the letter-suffix policy.
|
|
9
|
-
class Crpl < LetterPreserving
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
module Series
|
|
6
|
-
# FIPS series: letter suffix preserved; edition dates use modern format.
|
|
7
|
-
class Fips < LetterPreserving
|
|
8
|
-
def self.modern_edition_date?
|
|
9
|
-
true
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
data/lib/pubid/nist/series/ir.rb
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
module Series
|
|
6
|
-
# IR (Interagency Report) series carries the most series-specific logic:
|
|
7
|
-
#
|
|
8
|
-
# - "R" or "Ur" letter suffix becomes revision "r1" (e.g., "79-1786R").
|
|
9
|
-
# - part_num alongside second_num becomes a Part component (type "pt").
|
|
10
|
-
# - Preprocessing converts "84-2946" → "84e2946"; this class reverses
|
|
11
|
-
# that side effect so IR keeps the compound number form.
|
|
12
|
-
class Ir < LetterPreserving
|
|
13
|
-
def self.cast_letter_number(value, _parsed_hash)
|
|
14
|
-
full = combine_letter_suffix(value)
|
|
15
|
-
return nil if full.nil? || full.empty?
|
|
16
|
-
|
|
17
|
-
if ["R", "Ur"].include?(full)
|
|
18
|
-
value[:letter_suffix] = full
|
|
19
|
-
value
|
|
20
|
-
else
|
|
21
|
-
super
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def self.part_num_as_component?
|
|
26
|
-
true
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def self.handle_letter_num_compound?(identifier,
|
|
30
|
-
first_num:, letter_base:,
|
|
31
|
-
letter_suffix:)
|
|
32
|
-
return false unless letter_suffix == "R"
|
|
33
|
-
|
|
34
|
-
identifier.number = Components::Code.new(
|
|
35
|
-
value: "#{first_num.value}-#{letter_base}",
|
|
36
|
-
)
|
|
37
|
-
edition_obj = Components::Edition.new(type: "r", id: "1")
|
|
38
|
-
identifier.edition = edition_obj
|
|
39
|
-
true
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def self.finalize_identifier(identifier, _parsed_hash)
|
|
43
|
-
return unless identifier.number
|
|
44
|
-
|
|
45
|
-
value = identifier.number.value.to_s
|
|
46
|
-
match = value.match(/^(\d+)e(\d{4})$/)
|
|
47
|
-
return unless match
|
|
48
|
-
|
|
49
|
-
identifier.number = Components::Code.new(
|
|
50
|
-
value: "#{match[1]}-#{match[2]}",
|
|
51
|
-
)
|
|
52
|
-
identifier.edition = nil
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
module Series
|
|
6
|
-
# Series where the letter suffix on `first_number` stays in the number.
|
|
7
|
-
# Used for: RPT, MP, LC, CRPL, MONO, FIPS, IR (subclasses refine further).
|
|
8
|
-
class LetterPreserving < Base
|
|
9
|
-
def self.preserve_letter_suffix?(_parsed_hash)
|
|
10
|
-
true
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
module Series
|
|
6
|
-
# MONO series: letter suffix preserved in first_number AND in
|
|
7
|
-
# letter_number (e.g., "NBS MONO 1A" — letter stays in the number).
|
|
8
|
-
class Mono < LetterPreserving
|
|
9
|
-
def self.cast_letter_number(value, _parsed_hash)
|
|
10
|
-
full = combine_letter_suffix(value)
|
|
11
|
-
return nil if full.nil? || full.empty?
|
|
12
|
-
|
|
13
|
-
value[:letter_suffix] = full
|
|
14
|
-
value
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
module Series
|
|
6
|
-
# NCSTAR series: letter suffix in letter_number stays in the number
|
|
7
|
-
# (e.g., "NIST NCSTAR 1-1A" — "1A" remains the compound suffix).
|
|
8
|
-
# Unlike MONO, first_number letter suffix is NOT preserved.
|
|
9
|
-
class Ncstar < Base
|
|
10
|
-
def self.cast_letter_number(value, _parsed_hash)
|
|
11
|
-
full = combine_letter_suffix(value)
|
|
12
|
-
return nil if full.nil? || full.empty?
|
|
13
|
-
|
|
14
|
-
value[:letter_suffix] = full
|
|
15
|
-
value
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
data/lib/pubid/nist/series.rb
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
# Per-series behavior policies for the NIST caster and builder.
|
|
6
|
-
#
|
|
7
|
-
# Series-specific casting decisions (letter-suffix preservation, IR revision
|
|
8
|
-
# handling, FIPS date format, etc.) live behind this interface so the
|
|
9
|
-
# caster and builder never read `parsed_hash[:series]` directly. A series
|
|
10
|
-
# bug now lives in exactly one file.
|
|
11
|
-
module Series
|
|
12
|
-
autoload :Base, "#{__dir__}/series/base"
|
|
13
|
-
autoload :LetterPreserving, "#{__dir__}/series/letter_preserving"
|
|
14
|
-
autoload :Crpl, "#{__dir__}/series/crpl"
|
|
15
|
-
autoload :Fips, "#{__dir__}/series/fips"
|
|
16
|
-
autoload :Ir, "#{__dir__}/series/ir"
|
|
17
|
-
autoload :Mono, "#{__dir__}/series/mono"
|
|
18
|
-
autoload :Ncstar, "#{__dir__}/series/ncstar"
|
|
19
|
-
|
|
20
|
-
# Order matters: longer / more-specific codes first so that substrings
|
|
21
|
-
# do not shadow them (e.g., LCIRC must be matched before IR, since
|
|
22
|
-
# "LCIRC" contains "IR").
|
|
23
|
-
REGISTRY = [
|
|
24
|
-
["LCIRC", LetterPreserving],
|
|
25
|
-
["FIPS", Fips],
|
|
26
|
-
["CRPL", Crpl],
|
|
27
|
-
["NCSTAR", Ncstar],
|
|
28
|
-
["MONO", Mono],
|
|
29
|
-
["IR", Ir],
|
|
30
|
-
["MP", LetterPreserving],
|
|
31
|
-
["RPT", LetterPreserving],
|
|
32
|
-
["LC", LetterPreserving],
|
|
33
|
-
].freeze
|
|
34
|
-
|
|
35
|
-
def self.for(parsed_hash)
|
|
36
|
-
return Base if parsed_hash.nil?
|
|
37
|
-
|
|
38
|
-
series_code = parsed_hash[:series]
|
|
39
|
-
return Base if series_code.nil?
|
|
40
|
-
|
|
41
|
-
series_str = series_code.to_s.upcase
|
|
42
|
-
REGISTRY.each do |code, klass|
|
|
43
|
-
return klass if series_str.include?(code)
|
|
44
|
-
end
|
|
45
|
-
Base
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
# Parses NIST URNs back into identifiers.
|
|
6
|
-
#
|
|
7
|
-
# UrnGenerator emits:
|
|
8
|
-
# urn:nist:{type}:{code}[.{revision}].supp
|
|
9
|
-
#
|
|
10
|
-
# type is the lowercase series (sp, fips, ir, nistcir, …). code is the
|
|
11
|
-
# alphanumeric designation. revision is `r{N}` when present. The `.supp`
|
|
12
|
-
# suffix marks the series as supplementable.
|
|
13
|
-
#
|
|
14
|
-
# Examples:
|
|
15
|
-
# - urn:nist:sp:800-53.supp → NIST SP 800-53
|
|
16
|
-
# - urn:nist:sp:800-53.r5.supp → NIST SP 800-53r5
|
|
17
|
-
# - urn:nist:fips:199.supp → NIST FIPS 199
|
|
18
|
-
class UrnParser < Pubid::UrnParser::Base
|
|
19
|
-
TYPE_UPCASE = {
|
|
20
|
-
"sp" => "SP",
|
|
21
|
-
"fips" => "FIPS",
|
|
22
|
-
"ir" => "IR",
|
|
23
|
-
"nistcir" => "NISTCIR",
|
|
24
|
-
"nbs" => "NBS",
|
|
25
|
-
"nistir" => "NISTIR",
|
|
26
|
-
"csf" => "CSF",
|
|
27
|
-
"gcr" => "GCR",
|
|
28
|
-
"itl" => "ITL",
|
|
29
|
-
"jres" => "JRES",
|
|
30
|
-
"lcirc" => "LCIRC",
|
|
31
|
-
"mon" => "MONO",
|
|
32
|
-
"ms" => "MS",
|
|
33
|
-
"nsrds" => "NSRDS",
|
|
34
|
-
"tn" => "TN",
|
|
35
|
-
"wp" => "WP",
|
|
36
|
-
}.freeze
|
|
37
|
-
|
|
38
|
-
def parse_urn(urn)
|
|
39
|
-
body = strip_namespace(urn)
|
|
40
|
-
parts = split_parts(body)
|
|
41
|
-
|
|
42
|
-
type_token, payload = parts
|
|
43
|
-
code, revision = parse_payload(payload)
|
|
44
|
-
|
|
45
|
-
text = "NIST #{type_label(type_token)} #{code}"
|
|
46
|
-
text += revision if revision
|
|
47
|
-
flavor_parse(text)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
private
|
|
51
|
-
|
|
52
|
-
def parse_payload(payload)
|
|
53
|
-
# Strip the trailing ".supp" supplement marker.
|
|
54
|
-
stripped = payload.sub(/\.supp\z/, "")
|
|
55
|
-
# Split revision suffix from code (e.g., "800-53.r5" → ["800-53", "r5"]).
|
|
56
|
-
match = stripped.match(/^(.*)\.(r\d+)$/i)
|
|
57
|
-
return [stripped, nil] unless match
|
|
58
|
-
|
|
59
|
-
[match[1], match[2]]
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def type_label(token)
|
|
63
|
-
TYPE_UPCASE.fetch(token.downcase) { token.upcase }
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
data/lib/pubid/oasis/builder.rb
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Oasis
|
|
5
|
-
# Turns the parse tree into an `Identifiers::Standard`: stores the slug
|
|
6
|
-
# verbatim in `original`, then performs a best-effort, ORDER-INDEPENDENT
|
|
7
|
-
# decomposition into number / version / stage / part / label.
|
|
8
|
-
#
|
|
9
|
-
# Decomposition splits `original` on "-" and classifies each *whole*
|
|
10
|
-
# fragment (so a stage-like substring inside a spec name — e.g. "CSDL" — is
|
|
11
|
-
# never mistaken for a stage). `number` is the specification name: the run
|
|
12
|
-
# of leading name fragments before the first recognized fragment, and the
|
|
13
|
-
# key relaton-index sorts and binary-searches on. `version`/`stage`/`part`
|
|
14
|
-
# are the first fragment of each recognized kind; `label` is any name
|
|
15
|
-
# fragment appearing after the first recognized one. Anything the
|
|
16
|
-
# classifier cannot place stays only in `original`, so the printed form
|
|
17
|
-
# always round-trips.
|
|
18
|
-
class Builder
|
|
19
|
-
# A fragment is a version when it is `v?N(.N)+` (e.g. "3.0", "v1.2.1",
|
|
20
|
-
# "V1.0"). Bare integers are deliberately NOT versions (too ambiguous
|
|
21
|
-
# with spec-name tokens).
|
|
22
|
-
VERSION_RE = /\Av?\d+(?:\.\d+)+\z/i
|
|
23
|
-
# OASIS approval-stage tokens (+ optional revision digits). Longest-first
|
|
24
|
-
# so shared prefixes classify correctly (CSPRD/CSD before CS, COS before
|
|
25
|
-
# CS/OS).
|
|
26
|
-
STAGE_RE = /\A(?:CSPRD|CSD|COS|CS|WD|OS|PS|PRD|CD|Errata)\d*\z/
|
|
27
|
-
# Part tokens across the three observed spellings, plus bare "Pt"/"P".
|
|
28
|
-
PART_RE = /\A(?:Part|Pt|part|P)\d*\z/
|
|
29
|
-
|
|
30
|
-
def self.build(parsed_data)
|
|
31
|
-
new.build(parsed_data)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def build(data)
|
|
35
|
-
original = data[:original].to_s
|
|
36
|
-
Identifiers::Standard.new(original: original, **decompose(original))
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
private
|
|
40
|
-
|
|
41
|
-
# @return [Hash] best-effort { number:, version:, stage:, part:, label: }.
|
|
42
|
-
# Each fragment is classified once into a [fragment, kind] pair. `number`
|
|
43
|
-
# is the leading run of name fragments; `label` is any name fragment after
|
|
44
|
-
# the first recognized one; version/stage/part are the first of each kind.
|
|
45
|
-
def decompose(original)
|
|
46
|
-
pairs = original.split("-").map { |f| [f, classify(f)] }
|
|
47
|
-
lead = pairs.take_while { |_, kind| kind.nil? }
|
|
48
|
-
rest = pairs.drop(lead.length)
|
|
49
|
-
{
|
|
50
|
-
number: names(lead),
|
|
51
|
-
version: first_of(rest, :version),
|
|
52
|
-
stage: first_of(rest, :stage),
|
|
53
|
-
part: first_of(rest, :part),
|
|
54
|
-
label: names(rest),
|
|
55
|
-
}
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# @return [Symbol, nil] :version / :stage / :part, or nil for a name token
|
|
59
|
-
def classify(fragment)
|
|
60
|
-
return :version if fragment.match?(VERSION_RE)
|
|
61
|
-
return :stage if fragment.match?(STAGE_RE)
|
|
62
|
-
return :part if fragment.match?(PART_RE)
|
|
63
|
-
|
|
64
|
-
nil
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# First fragment of the given kind among [fragment, kind] pairs, or nil.
|
|
68
|
-
def first_of(pairs, kind)
|
|
69
|
-
pairs.find { |_, k| k == kind }&.first
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# Name (unclassified) fragments among the pairs, re-joined, or nil.
|
|
73
|
-
def names(pairs)
|
|
74
|
-
fragments = pairs.select { |_, kind| kind.nil? }.map(&:first)
|
|
75
|
-
fragments.empty? ? nil : fragments.join("-")
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Oasis
|
|
5
|
-
# Base class for every OASIS identifier AND the flavor's parse/create entry
|
|
6
|
-
# point. The single concrete type `Identifiers::Standard` descends from this
|
|
7
|
-
# class, so a parsed OASIS id is an instance of `Pubid::Oasis::Identifier`.
|
|
8
|
-
#
|
|
9
|
-
# OASIS identifiers are free-form slugs with an inconsistent internal
|
|
10
|
-
# structure (spec name + version + approval stage + part + label, in
|
|
11
|
-
# varying order). To guarantee a lossless round-trip we always keep the
|
|
12
|
-
# exact printed slug verbatim in `original` (which alone drives `to_s`); the
|
|
13
|
-
# remaining component fields are a best-effort decomposition for relaton
|
|
14
|
-
# querying and can be nil without ever affecting the rendered string.
|
|
15
|
-
class Identifier < ::Pubid::Identifier
|
|
16
|
-
# The exact slug printed after "OASIS " — always set. Drives `to_s`, so
|
|
17
|
-
# the printed form round-trips verbatim regardless of decomposition.
|
|
18
|
-
attribute :original, :string
|
|
19
|
-
# Best-effort decomposition (any may be nil). `number`/`label` are plain
|
|
20
|
-
# slug fragments; `version`/`stage`/`part` carry the recognized fragment
|
|
21
|
-
# verbatim (e.g. "3.0", "v1.2.1", "PS01", "Errata01", "Pt8", "Part1").
|
|
22
|
-
#
|
|
23
|
-
# `number` holds the specification name ("OSLC-CM", "STIX", "amqp-core").
|
|
24
|
-
# It is the key relaton-index sorts and binary-searches on
|
|
25
|
-
# (`id.root.number.to_s`), and it deliberately CLUSTERS: every version,
|
|
26
|
-
# stage and part of one specification shares it, the same shape as an
|
|
27
|
-
# IETF draft slug or an IANA registry slug.
|
|
28
|
-
#
|
|
29
|
-
# `number`/`stage`/`part` intentionally override the inherited
|
|
30
|
-
# Components::Code / Components::Stage attributes with plain strings (the
|
|
31
|
-
# mechanism JIS uses for `number` and W3C for `date`): OASIS names,
|
|
32
|
-
# stages and parts are opaque tokens that must round-trip exactly and are
|
|
33
|
-
# never re-parsed as structured parts. Redefining an inherited attribute
|
|
34
|
-
# is only deterministic under multi-flavor load because this class body
|
|
35
|
-
# lives in ONE file and is never reopened, so lutaml has finished
|
|
36
|
-
# building the table before `Identifiers::Standard` snapshots it — DO NOT
|
|
37
|
-
# split this class across two files.
|
|
38
|
-
attribute :number, :string
|
|
39
|
-
attribute :version, :string
|
|
40
|
-
attribute :stage, :string
|
|
41
|
-
attribute :part, :string
|
|
42
|
-
attribute :label, :string
|
|
43
|
-
|
|
44
|
-
# Polymorphic type map for lutaml::Model key_value (de)serialization: maps
|
|
45
|
-
# the subclass's polymorphic_name to its class name so a stored hash
|
|
46
|
-
# rebuilds the correct identifier type via from_hash.
|
|
47
|
-
OASIS_TYPE_MAP = {
|
|
48
|
-
"pubid:oasis:standard" => "Pubid::Oasis::Identifiers::Standard",
|
|
49
|
-
}.freeze
|
|
50
|
-
|
|
51
|
-
key_value do
|
|
52
|
-
map "_type", to: :_type, polymorphic_map: OASIS_TYPE_MAP
|
|
53
|
-
map "original", to: :original
|
|
54
|
-
map "number", to: :number
|
|
55
|
-
map "version", to: :version
|
|
56
|
-
map "stage", to: :stage
|
|
57
|
-
map "part", to: :part
|
|
58
|
-
map "label", to: :label
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Publisher is always "OASIS". A plain constant (not a `publisher` method)
|
|
62
|
-
# so it doesn't shadow the inherited lutaml `publisher` attribute, which
|
|
63
|
-
# would otherwise fail serialization type validation.
|
|
64
|
-
PUBLISHER = "OASIS"
|
|
65
|
-
|
|
66
|
-
attr_reader :with_publisher
|
|
67
|
-
|
|
68
|
-
def to_s(with_publisher: true, **opts)
|
|
69
|
-
@with_publisher = with_publisher
|
|
70
|
-
render(format: :human, **opts)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# The decomposition fields. Excluding any of them must also clear
|
|
74
|
-
# `original`, which still spells the excluded value out verbatim.
|
|
75
|
-
DECOMPOSITION_KEYS = %i[number version stage part label].freeze
|
|
76
|
-
|
|
77
|
-
# Widen a partial reference. `#matches?` is
|
|
78
|
-
# `exclude(*ignore) == other.exclude(*ignore)`, and `original` carries
|
|
79
|
-
# every component verbatim, so without this a bare "OASIS WSDM" could
|
|
80
|
-
# never match "OASIS WSDM-v1.1" however much the caller ignored.
|
|
81
|
-
#
|
|
82
|
-
# `original` is cleared ONLY when the exclusion touches the
|
|
83
|
-
# decomposition — the "reset the whole cluster" rule CSA applies to its
|
|
84
|
-
# year-format siblings. A plain `==` still compares `original`, so two
|
|
85
|
-
# slugs that decompose alike but print differently stay distinct: the
|
|
86
|
-
# decomposition loses fragment order and drops repeated fragments, so it
|
|
87
|
-
# is not by itself an identity.
|
|
88
|
-
def exclude(*args)
|
|
89
|
-
result = super
|
|
90
|
-
result.original = nil if args.intersect?(DECOMPOSITION_KEYS)
|
|
91
|
-
result
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
# MR string hooks. `to_slug` delegates to `to_mr_string` and consumers
|
|
95
|
-
# use it as an output FILENAME, so the slug must be unique per document.
|
|
96
|
-
#
|
|
97
|
-
# The publisher lives in the PUBLISHER constant rather than the inherited
|
|
98
|
-
# lutaml attribute, so the base `mr_publisher` returns nil (the BIPM and
|
|
99
|
-
# IANA case) and is supplied here.
|
|
100
|
-
def mr_publisher
|
|
101
|
-
PUBLISHER.downcase
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# The whole verbatim slug, not the decomposed fields: decomposition loses
|
|
105
|
-
# fragment order and drops repeated fragments, so "x-1.0-os-Pt1" and
|
|
106
|
-
# "x-1.0-Pt1-os" would assemble to one slug. `original` cannot collide.
|
|
107
|
-
def mr_number_with_part
|
|
108
|
-
mr_sanitize(original)
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# from_hash is the shared polymorphic dispatch on Pubid::Identifier;
|
|
112
|
-
# OASIS_TYPE_MAP remains as the key_value polymorphic_map.
|
|
113
|
-
|
|
114
|
-
# Parse an OASIS identifier string into an identifier object
|
|
115
|
-
# @param identifier [String] The OASIS identifier string to parse
|
|
116
|
-
# @return [Identifier] The Standard identifier object
|
|
117
|
-
# @raise [Pubid::Errors::ParseError] If parsing fails
|
|
118
|
-
def self.parse(identifier)
|
|
119
|
-
# Reject pathological inputs before they reach the parser
|
|
120
|
-
# (CodeQL rb/polynomial-redos barrier — inline .length by design).
|
|
121
|
-
unless identifier.is_a?(String)
|
|
122
|
-
raise Pubid::Errors::InvalidInputError,
|
|
123
|
-
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
127
|
-
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
parsed = Parser.parse(identifier)
|
|
131
|
-
Builder.build(parsed)
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
private
|
|
135
|
-
|
|
136
|
-
# Filter by CHARSET, not by an enumerated escape list, so a field added
|
|
137
|
-
# later cannot leak an unsafe character (the BIPM `mr_slug` precedent).
|
|
138
|
-
# Three characters need it today: the "." in every version —
|
|
139
|
-
# Renderers::MrString joins SEGMENTS with ".", so a dot inside one breaks
|
|
140
|
-
# the documented segment structure — plus the space and "]" of a few
|
|
141
|
-
# malformed records.
|
|
142
|
-
#
|
|
143
|
-
# A RUN of non-alphanumerics collapses to one "-", which is why "-" is
|
|
144
|
-
# outside the kept set (BIPM's form, not ETSI's): "v3.0]-PS01" would
|
|
145
|
-
# otherwise print a bare "--".
|
|
146
|
-
#
|
|
147
|
-
# Caveat, the same one BIPM records: "-" is both the intra-slug join and
|
|
148
|
-
# the substitute, so two slugs differing ONLY in which non-slug character
|
|
149
|
-
# they use collapse onto one MR string. The corpus has exactly one such
|
|
150
|
-
# pair, the malformed "OpenC2-MQTT-v1.0] -CS01" spelled once with a
|
|
151
|
-
# normal space and once with a non-breaking one — two spellings of one
|
|
152
|
-
# document. Every genuinely distinct identifier keeps its own slug.
|
|
153
|
-
def mr_sanitize(value)
|
|
154
|
-
slug = value.to_s.downcase.gsub(/[^a-z0-9]+/, "-")
|
|
155
|
-
.gsub(/\A-+|-+\z/, "")
|
|
156
|
-
slug.empty? ? nil : slug
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Oasis
|
|
5
|
-
module Identifiers
|
|
6
|
-
# The sole OASIS identifier type. OASIS records carry no document-type
|
|
7
|
-
# distinction in the printed id (every record is `type: OASIS`); the
|
|
8
|
-
# approval stage lives in the `stage` component field, not in the class.
|
|
9
|
-
# Example: "OASIS OSLC-CoreShapes-3.0-PS01-Pt8".
|
|
10
|
-
class Standard < Identifier
|
|
11
|
-
TYPED_STAGES = [
|
|
12
|
-
Pubid::Components::TypedStage.new(
|
|
13
|
-
code: :oasis,
|
|
14
|
-
stage_code: :published,
|
|
15
|
-
type_code: :oasis,
|
|
16
|
-
abbr: ["OASIS"],
|
|
17
|
-
name: "OASIS Standard",
|
|
18
|
-
harmonized_stages: [],
|
|
19
|
-
),
|
|
20
|
-
].freeze
|
|
21
|
-
|
|
22
|
-
def self.type
|
|
23
|
-
{ key: :oasis, web: :standard, title: "OASIS Standard",
|
|
24
|
-
short: "OASIS" }
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
data/lib/pubid/oasis/parser.rb
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "parslet"
|
|
4
|
-
|
|
5
|
-
module Pubid
|
|
6
|
-
module Oasis
|
|
7
|
-
# Parslet grammar for printed OASIS identifiers, e.g.
|
|
8
|
-
# "OASIS OSLC-CoreShapes-3.0-PS01-Pt8"
|
|
9
|
-
# "OASIS amqp-core"
|
|
10
|
-
#
|
|
11
|
-
# OASIS slugs are free-form with a highly inconsistent internal structure
|
|
12
|
-
# (varying fragment order, three part spellings, mixed case, a few
|
|
13
|
-
# malformed records with spaces or stray characters). The grammar therefore
|
|
14
|
-
# only strips the "OASIS " publisher prefix and captures the remainder
|
|
15
|
-
# verbatim; the spec/version/stage/part/label decomposition is done in the
|
|
16
|
-
# Builder with order-independent fragment classification. Keeping
|
|
17
|
-
# decomposition out of the PEG avoids brittle backtracking and guarantees a
|
|
18
|
-
# lossless round-trip.
|
|
19
|
-
class Parser < ::Pubid::Parser::Grammar
|
|
20
|
-
rule(:prefix) { str("OASIS") >> str(" ") }
|
|
21
|
-
|
|
22
|
-
# The whole slug, captured verbatim (any character, incl. spaces / "]").
|
|
23
|
-
rule(:slug) { any.repeat(1).as(:original) }
|
|
24
|
-
|
|
25
|
-
rule(:identifier) { prefix >> slug }
|
|
26
|
-
|
|
27
|
-
rule(:root) { identifier }
|
|
28
|
-
|
|
29
|
-
def self.parse(input)
|
|
30
|
-
new.parse(input)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
data/lib/pubid/oasis/renderer.rb
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Oasis
|
|
5
|
-
# Human-readable renderer for OASIS identifiers.
|
|
6
|
-
#
|
|
7
|
-
# Renders the verbatim slug (`original`), prefixed with the "OASIS "
|
|
8
|
-
# publisher token unless `id.with_publisher == false`. Because rendering is
|
|
9
|
-
# a pure echo of `original`, the printed form always round-trips exactly.
|
|
10
|
-
#
|
|
11
|
-
# "OASIS OSLC-CoreShapes-3.0-PS01-Pt8" (with publisher)
|
|
12
|
-
# "OSLC-CoreShapes-3.0-PS01-Pt8" (without)
|
|
13
|
-
class Renderer < ::Pubid::Renderers::Base
|
|
14
|
-
PUBLISHER = "OASIS"
|
|
15
|
-
|
|
16
|
-
def render(context: nil, **opts)
|
|
17
|
-
id = @id
|
|
18
|
-
body = id.original.to_s
|
|
19
|
-
with_publisher?(id) ? "#{PUBLISHER} #{body}" : body
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
private
|
|
23
|
-
|
|
24
|
-
def with_publisher?(id)
|
|
25
|
-
id.with_publisher != false
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|