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
|
@@ -2,73 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Etsi
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Base class for all ETSI identifiers
|
|
7
|
+
class Base < Pubid::Identifier
|
|
8
|
+
# Generate URN for this identifier
|
|
9
|
+
#
|
|
10
|
+
# @return [String] URN representation
|
|
11
|
+
attribute :type, :string
|
|
12
|
+
attribute :code, Pubid::Etsi::Components::Code
|
|
13
|
+
attribute :version, Pubid::Etsi::Components::Version
|
|
14
|
+
attribute :date, Pubid::Components::Date
|
|
15
|
+
|
|
16
|
+
def publisher
|
|
17
|
+
"ETSI"
|
|
15
18
|
end
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
def to_s
|
|
21
|
+
result = "#{publisher} #{type} #{code}"
|
|
22
|
+
result += " #{version} (#{date.year}-#{date.month.to_s.rjust(2,
|
|
23
|
+
'0')})"
|
|
24
|
+
result
|
|
19
25
|
end
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
attribute :type, :string
|
|
26
|
-
attribute :version, Pubid::Etsi::Components::Version
|
|
27
|
-
attribute :date, Pubid::Components::Date
|
|
28
|
-
# Stored as a plain string (always "ETSI") so it round-trips through
|
|
29
|
-
# to_hash/from_hash. Was previously a `def publisher` method, which made
|
|
30
|
-
# lutaml serialize a String against the Components::Publisher attribute and
|
|
31
|
-
# raise on to_hash.
|
|
32
|
-
attribute :publisher, :string, default: -> { "ETSI" }
|
|
33
|
-
|
|
34
|
-
def ==(other)
|
|
35
|
-
return false unless other.is_a?(Pubid::Etsi::Identifier)
|
|
36
|
-
|
|
37
|
-
type == other.type &&
|
|
38
|
-
code == other.code &&
|
|
39
|
-
version == other.version &&
|
|
40
|
-
date == other.date
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# The document code is composed from the split index columns declared on
|
|
44
|
-
# EtsiStandard (`number`/`minor`/`parts`). Returning nil here keeps `==`
|
|
45
|
-
# and the URN generator total for the abstract base and for a supplement
|
|
46
|
-
# whose own base is missing; EtsiStandard composes the real value and
|
|
47
|
-
# SupplementIdentifier delegates to its base.
|
|
48
|
-
def code
|
|
49
|
-
nil
|
|
50
|
-
end
|
|
27
|
+
def ==(other)
|
|
28
|
+
return false unless other.is_a?(Base)
|
|
51
29
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
# against exactly the reference this exclusion exists to match. Same
|
|
57
|
-
# "reset the whole cluster" rule recorded for CSA's year and IEEE's
|
|
58
|
-
# year/month/day in CLAUDE.md.
|
|
59
|
-
#
|
|
60
|
-
# This also covers supplements: the base #exclude recurses into the
|
|
61
|
-
# nested `base` identifier through exclude_from_nested, which re-enters
|
|
62
|
-
# this method on the inner EtsiStandard.
|
|
63
|
-
def exclude(*args)
|
|
64
|
-
result = super
|
|
65
|
-
part_keys = args & %i[part parts]
|
|
66
|
-
if !part_keys.empty? && result.respond_to?(:parts=)
|
|
67
|
-
result.parts = []
|
|
30
|
+
type == other.type &&
|
|
31
|
+
code == other.code &&
|
|
32
|
+
version == other.version &&
|
|
33
|
+
date == other.date
|
|
68
34
|
end
|
|
69
|
-
result
|
|
70
35
|
end
|
|
71
36
|
end
|
|
72
|
-
|
|
73
37
|
end
|
|
74
38
|
end
|
|
@@ -4,218 +4,15 @@ module Pubid
|
|
|
4
4
|
module Etsi
|
|
5
5
|
module Identifiers
|
|
6
6
|
# Single class for all ETSI standard types
|
|
7
|
-
# Type is passed as parameter: EN, ES, EG, TS, ETR, ETS, I-ETS, TBR,
|
|
8
|
-
# TCRTR, NET, GR, GS, SR, TR, GTS
|
|
7
|
+
# Type is passed as parameter: EN, ES, EG, TS, ETR, ETS, I-ETS, TBR, TCRTR, NET, GR, GS, SR, TR, GTS
|
|
9
8
|
# Format: ETSI TYPE CODE VERSION (DATE)
|
|
10
9
|
# Examples:
|
|
11
10
|
# ETSI GS ZSM 012 V1.1.1 (2022-12)
|
|
12
11
|
# ETSI GR ZSM 009-3 V1.1.1 (2023-08)
|
|
13
12
|
# ETSI GTS GSM 02.01 V5.5.0 (1999-01)
|
|
14
|
-
class EtsiStandard <
|
|
15
|
-
# Type is stored in @type attribute from
|
|
16
|
-
# All rendering handled by
|
|
17
|
-
|
|
18
|
-
# --- Index columns -------------------------------------------------
|
|
19
|
-
#
|
|
20
|
-
# relaton-index sorts and bsearches every row on `id.root.number.to_s`,
|
|
21
|
-
# so the document number must be reachable as `number`. ETSI used to
|
|
22
|
-
# keep it inside an Etsi::Components::Code under a `code` attribute,
|
|
23
|
-
# leaving the inherited `number` nil and every index row keyed "".
|
|
24
|
-
#
|
|
25
|
-
# The three Code fields are now plain sibling attributes, which is the
|
|
26
|
-
# shape the serialized hash ALREADY had — the converters below merely
|
|
27
|
-
# read them directly instead of reaching through `code`, so the wire
|
|
28
|
-
# format is byte-identical and relaton-data-etsi's published index-v2
|
|
29
|
-
# needs no regeneration.
|
|
30
|
-
#
|
|
31
|
-
# `number` holds the BARE number ("300 175"), never the part, so all
|
|
32
|
-
# parts of a document share one index bucket and a part-less reference
|
|
33
|
-
# finds them all — the IEEE/ISO semantics documented in CLAUDE.md.
|
|
34
|
-
#
|
|
35
|
-
# LANDMINE: these redeclare attributes inherited from ::Pubid::Identifier
|
|
36
|
-
# (`number` is a Components::Code there, and Etsi::Components::Code is
|
|
37
|
-
# NOT a subclass of it). That resolves nondeterministically under
|
|
38
|
-
# multi-flavor load when declared on a class others inherit from, so it
|
|
39
|
-
# is confined to this LEAF — EtsiStandard has no subclasses, while the
|
|
40
|
-
# shared Pubid::Etsi::Identifier is also SupplementIdentifier's parent
|
|
41
|
-
# and must stay untouched. spec/pubid/etsi/root_number_spec.rb carries
|
|
42
|
-
# the tripwire and is only meaningful under the full `rake` suite.
|
|
43
|
-
attribute :number, :string
|
|
44
|
-
attribute :minor, :string
|
|
45
|
-
attribute :parts, :string, collection: true, default: -> { [] }
|
|
46
|
-
|
|
47
|
-
# Compact serialization (mirrors ISO/JCGM/OIML): the code fields are
|
|
48
|
-
# bare scalars (`number`, a `parts` array and, rarely, a `minor`);
|
|
49
|
-
# Version flattens to a scalar `version` string with an `is_edition`
|
|
50
|
-
# boolean flag (omitted when false); Date flattens to top-level
|
|
51
|
-
# year/month/day. The constant `publisher` ("ETSI") is intentionally
|
|
52
|
-
# NOT mapped — it is reconstructed on load from its attribute default,
|
|
53
|
-
# keeping the hash compact.
|
|
54
|
-
#
|
|
55
|
-
# This block lives on EtsiStandard (a leaf) rather than the shared Identifier:
|
|
56
|
-
# SupplementIdentifier is a sibling that DELEGATES type/code/version and
|
|
57
|
-
# date to its inner `base`, so a block on Identifier would be inherited-and-
|
|
58
|
-
# merged by the supplement and re-emit every delegated field at the top.
|
|
59
|
-
key_value do
|
|
60
|
-
map "_type", to: :_type
|
|
61
|
-
map "type", to: :type
|
|
62
|
-
map "number", to: :number
|
|
63
|
-
map "parts", to: :parts
|
|
64
|
-
map "minor", to: :minor
|
|
65
|
-
map "version", with: { to: :version_to_kv, from: :version_from_kv }
|
|
66
|
-
map "is_edition", with: { to: :edition_to_kv, from: :edition_from_kv }
|
|
67
|
-
map "year", with: { to: :year_to_kv, from: :year_from_kv }
|
|
68
|
-
map "month", with: { to: :month_to_kv, from: :month_from_kv }
|
|
69
|
-
map "day", with: { to: :day_to_kv, from: :day_from_kv }
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# The composed document code, rebuilt on demand from the split columns
|
|
73
|
-
# so the renderer, the URN generator and #== keep one place to ask for
|
|
74
|
-
# the printed form ("300 175-1"). Deliberately NOT an attribute and NOT
|
|
75
|
-
# memoised: `number`/`parts` are writable (the base #exclude rebuilds
|
|
76
|
-
# through them), so a cached Code would go stale.
|
|
77
|
-
#
|
|
78
|
-
# nil when there is no number, preserving the old nil-`code` semantics
|
|
79
|
-
# the URN generator branches on.
|
|
80
|
-
def code
|
|
81
|
-
return nil if number.nil?
|
|
82
|
-
|
|
83
|
-
Pubid::Etsi::Components::Code.new(
|
|
84
|
-
number: number,
|
|
85
|
-
minor: minor,
|
|
86
|
-
parts: parts || [],
|
|
87
|
-
)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# MR slug number segment.
|
|
91
|
-
#
|
|
92
|
-
# The base hook reads the inherited `number` and `part`; ETSI kept
|
|
93
|
-
# neither, so before the index columns landed every ETSI slug was just
|
|
94
|
-
# `etsi.<date>` — 454 distinct slugs for 24,724 documents, and
|
|
95
|
-
# `to_slug` is what consumers use as an output FILENAME.
|
|
96
|
-
#
|
|
97
|
-
# Two things the base hook cannot do for ETSI:
|
|
98
|
-
# * the parts live in the `parts` collection, not the inherited
|
|
99
|
-
# scalar `part`, so they must be appended here or every part of a
|
|
100
|
-
# document collapses onto one slug;
|
|
101
|
-
# * an ETSI number legitimately contains a SPACE ("300 175", "GSM
|
|
102
|
-
# 02.01"), which is outside the [a-z0-9.-] charset Renderers::MrString
|
|
103
|
-
# documents and guarantees. Sanitize BY CHARSET rather than by an
|
|
104
|
-
# enumerated escape list (the BIPM `mr_slug` precedent in
|
|
105
|
-
# CLAUDE.md), so a character added later cannot reach a filename.
|
|
106
|
-
# `minor` is included because it is identity-bearing everywhere else —
|
|
107
|
-
# Code#== compares it, Code#to_s renders it and the URN carries it — so
|
|
108
|
-
# omitting it here would let two distinct documents share one filename.
|
|
109
|
-
# No fixture populates it today; it is in the grammar, so it is here.
|
|
110
|
-
def mr_number_with_part
|
|
111
|
-
return nil if number.nil?
|
|
112
|
-
|
|
113
|
-
mr_sanitize([number, minor, *Array(parts)].compact.join("-"))
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
# ETSI's identity is type + code + version + date (see
|
|
117
|
-
# Pubid::Etsi::Identifier#==), so all four must reach the slug —
|
|
118
|
-
# CLAUDE.md's rule that an identity-bearing marker has to appear on
|
|
119
|
-
# every identity surface, not just in `==`. The base hooks find
|
|
120
|
-
# neither: `mr_type` reads `typed_stage` (ETSI has none) and
|
|
121
|
-
# `mr_edition` reads `edition.number` (ETSI models the edition as
|
|
122
|
-
# `version`). Without these, "ETSI EN 300 729 V6.1.1 (2000-04)",
|
|
123
|
-
# "…V7.1.1 (2000-04)" and "ETSI ETS 300 729 ed.2 (2000-04)" all share
|
|
124
|
-
# one slug — i.e. one output filename.
|
|
125
|
-
def mr_type
|
|
126
|
-
type&.to_s&.downcase
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def mr_edition
|
|
130
|
-
mr_sanitize(version&.version)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
# Segment sanitizer. Renderers::MrString joins SEGMENTS with ".", so a
|
|
134
|
-
# dot inside one would break that structure — hence "." is replaced
|
|
135
|
-
# here even though it is inside the renderer's overall charset (the
|
|
136
|
-
# BIPM `bipm.si-brochure.9e-v3-01.e` precedent in CLAUDE.md). Filtering
|
|
137
|
-
# by charset rather than by an enumerated escape list keeps a character
|
|
138
|
-
# introduced later from leaking into a filename.
|
|
139
|
-
#
|
|
140
|
-
# Public purely to keep this file's surface flat, next to the
|
|
141
|
-
# lutaml-invoked converters below — it has no external callers and
|
|
142
|
-
# would work as well private.
|
|
143
|
-
#
|
|
144
|
-
# The emptiness check is on the OUTPUT, not just the input: a value
|
|
145
|
-
# made entirely of characters outside the charset collapses to "-" and
|
|
146
|
-
# then to "", and an empty string is truthy in Ruby, so it would reach
|
|
147
|
-
# Renderers::MrString as a blank segment and produce a double dot in
|
|
148
|
-
# the joined slug. Unreachable from today's grammar, which only feeds
|
|
149
|
-
# digit/alnum captures here — but not structurally prevented.
|
|
150
|
-
def mr_sanitize(value)
|
|
151
|
-
return nil if value.nil? || value.to_s.empty?
|
|
152
|
-
|
|
153
|
-
sanitized = value.to_s.downcase
|
|
154
|
-
.gsub(/[^a-z0-9-]+/, "-").gsub(/\A-+|-+\z/, "")
|
|
155
|
-
sanitized.empty? ? nil : sanitized
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
# --- Version flattened to scalar version + is_edition flag ---
|
|
159
|
-
def version_to_kv(model, doc)
|
|
160
|
-
emit_kv(doc, "version", model.version&.version)
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
def version_from_kv(model, value)
|
|
164
|
-
version_for(model).version = value.to_s
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
def edition_to_kv(model, doc)
|
|
168
|
-
return unless model.version&.is_edition
|
|
169
|
-
|
|
170
|
-
doc.add_child(
|
|
171
|
-
Lutaml::KeyValue::DataModel::Element.new("is_edition", true),
|
|
172
|
-
)
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def edition_from_kv(model, value)
|
|
176
|
-
version_for(model).is_edition = value
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
# --- Date flattened to top-level year/month/day scalars ---
|
|
180
|
-
def year_to_kv(model, doc)
|
|
181
|
-
emit_kv(doc, "year", model.date&.year)
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
def month_to_kv(model, doc)
|
|
185
|
-
emit_kv(doc, "month", model.date&.month)
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
def day_to_kv(model, doc)
|
|
189
|
-
emit_kv(doc, "day", model.date&.day)
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
def year_from_kv(model, value)
|
|
193
|
-
date_for(model).year = value.to_s
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
def month_from_kv(model, value)
|
|
197
|
-
date_for(model).month = value.to_s
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
def day_from_kv(model, value)
|
|
201
|
-
date_for(model).day = value.to_s
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
def emit_kv(doc, key, value)
|
|
205
|
-
return if value.nil? || value.to_s.empty?
|
|
206
|
-
|
|
207
|
-
doc.add_child(
|
|
208
|
-
Lutaml::KeyValue::DataModel::Element.new(key, value.to_s),
|
|
209
|
-
)
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
def version_for(model)
|
|
213
|
-
model.version ||= Pubid::Etsi::Components::Version.new
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
def date_for(model)
|
|
217
|
-
model.date ||= Pubid::Components::Date.new
|
|
218
|
-
end
|
|
13
|
+
class EtsiStandard < Base
|
|
14
|
+
# Type is stored in @type attribute from Base
|
|
15
|
+
# All rendering handled by Base class
|
|
219
16
|
end
|
|
220
17
|
end
|
|
221
18
|
end
|
|
@@ -3,43 +3,11 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Etsi
|
|
5
5
|
module Identifiers
|
|
6
|
-
#
|
|
7
|
-
class SupplementIdentifier <
|
|
8
|
-
attribute :base, Pubid::Etsi::
|
|
6
|
+
# Base class for ETSI supplements (Amendment, Corrigendum)
|
|
7
|
+
class SupplementIdentifier < Base
|
|
8
|
+
attribute :base, Pubid::Etsi::Identifiers::Base
|
|
9
9
|
attribute :number, :integer
|
|
10
10
|
|
|
11
|
-
# Compact serialization: a supplement carries only its own ordinal
|
|
12
|
-
# `number` (A1 -> 1) and the nested base standard under the compact key
|
|
13
|
-
# `base`. type/code/version/date are delegated to `base` (methods below)
|
|
14
|
-
# and NOT re-emitted here, so the old redundant duplication is gone.
|
|
15
|
-
# This block is inherited unchanged by Amendment/Corrigendum.
|
|
16
|
-
key_value do
|
|
17
|
-
map "_type", to: :_type
|
|
18
|
-
map "number", to: :number
|
|
19
|
-
map "base", with: { to: :base_to_kv, from: :base_from_kv }
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Serialize the base via its own to_hash so it collapses to the compact
|
|
23
|
-
# EtsiStandard shape.
|
|
24
|
-
def base_to_kv(model, doc)
|
|
25
|
-
return unless model.base
|
|
26
|
-
|
|
27
|
-
doc.add_child(
|
|
28
|
-
Lutaml::KeyValue::DataModel::Element.new(
|
|
29
|
-
"base", model.base.to_hash
|
|
30
|
-
),
|
|
31
|
-
)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Re-dispatch through the flavor base so `_type` resolves to the
|
|
35
|
-
# concrete EtsiStandard; a bare polymorphic cast would rebuild a plain
|
|
36
|
-
# Identifier and lose the subclass (and its custom mappings). Mirrors JCGM.
|
|
37
|
-
def base_from_kv(model, value)
|
|
38
|
-
return unless value
|
|
39
|
-
|
|
40
|
-
model.base = Pubid::Etsi::Identifier.from_hash(value)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
11
|
# Inherit attributes from base
|
|
44
12
|
def type
|
|
45
13
|
base.type
|
|
@@ -57,7 +25,17 @@ module Pubid
|
|
|
57
25
|
base.date
|
|
58
26
|
end
|
|
59
27
|
|
|
60
|
-
# Render
|
|
28
|
+
# Render as: ETSI TYPE CODE/SUPPLEMENTS VERSION (DATE)
|
|
29
|
+
# When multiple supplements are present, they appear in order: /A1/C1
|
|
30
|
+
def to_s
|
|
31
|
+
supplement_notations = collect_supplement_notations(self, [])
|
|
32
|
+
# Get the actual base ETSI standard (not supplements)
|
|
33
|
+
actual_base = find_actual_base(base)
|
|
34
|
+
code_with_supplements = "#{actual_base.code}#{supplement_notations.join}"
|
|
35
|
+
"#{actual_base.publisher} #{actual_base.type} #{code_with_supplements} #{actual_base.version} (#{actual_base.date.year}-#{actual_base.date.month.to_s.rjust(
|
|
36
|
+
2, '0'
|
|
37
|
+
)})"
|
|
38
|
+
end
|
|
61
39
|
|
|
62
40
|
# Recursively collect supplement notations from the supplement chain
|
|
63
41
|
def collect_supplement_notations(current_supplement, notations)
|
|
@@ -88,16 +66,6 @@ module Pubid
|
|
|
88
66
|
raise NotImplementedError
|
|
89
67
|
end
|
|
90
68
|
|
|
91
|
-
# Make Renderers::MrString recurse into `base` instead of slugging the
|
|
92
|
-
# supplement flat. Without this the flat path reads the supplement's own
|
|
93
|
-
# `number` — its ordinal, 1 — and the base document is dropped entirely,
|
|
94
|
-
# so every "/C1" corrigendum published in one month shared the slug
|
|
95
|
-
# `etsi.1.<date>`. `to_slug` is an output FILENAME, so that is an
|
|
96
|
-
# overwrite. Same fix as ITU's AnnexOfRecommendation (see CLAUDE.md).
|
|
97
|
-
def mr_supplement_suffix
|
|
98
|
-
[supplement_notation.to_s.downcase, number].compact.join(".")
|
|
99
|
-
end
|
|
100
|
-
|
|
101
69
|
def ==(other)
|
|
102
70
|
return false unless other.is_a?(SupplementIdentifier)
|
|
103
71
|
return false unless other.class == self.class
|
|
@@ -4,6 +4,7 @@ module Pubid
|
|
|
4
4
|
module Etsi
|
|
5
5
|
module Identifiers
|
|
6
6
|
autoload :Amendment, "#{__dir__}/identifiers/amendment"
|
|
7
|
+
autoload :Base, "#{__dir__}/identifiers/base"
|
|
7
8
|
autoload :Corrigendum, "#{__dir__}/identifiers/corrigendum"
|
|
8
9
|
autoload :EtsiStandard, "#{__dir__}/identifiers/etsi_standard"
|
|
9
10
|
autoload :SupplementIdentifier,
|
data/lib/pubid/etsi/parser.rb
CHANGED
|
@@ -4,7 +4,7 @@ require "parslet"
|
|
|
4
4
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Etsi
|
|
7
|
-
class Parser < ::
|
|
7
|
+
class Parser < Parslet::Parser
|
|
8
8
|
# Basic elements
|
|
9
9
|
rule(:digit) { match["0-9"] }
|
|
10
10
|
rule(:digits) { digit.repeat(1) }
|
|
@@ -114,19 +114,13 @@ module Pubid
|
|
|
114
114
|
end
|
|
115
115
|
|
|
116
116
|
# Main identifier
|
|
117
|
-
#
|
|
118
|
-
# The mandatory core is `etsi_prefix type number` (+ optional
|
|
119
|
-
# minor/parts/supplements), mirroring ISO. The version/edition and date
|
|
120
|
-
# suffixes are optional so a partial reference (e.g. "ETSI GS ZSM 012")
|
|
121
|
-
# parses with version/date left nil. Each `.maybe` guards its own leading
|
|
122
|
-
# space so no trailing space is demanded when the suffix is absent.
|
|
123
117
|
rule(:identifier) do
|
|
124
118
|
etsi_prefix >>
|
|
125
119
|
type >> space >>
|
|
126
120
|
number >> minor.maybe >> parts >>
|
|
127
121
|
supplements.maybe >>
|
|
128
|
-
|
|
129
|
-
|
|
122
|
+
space >> version_or_edition >>
|
|
123
|
+
space >> date_part
|
|
130
124
|
end
|
|
131
125
|
|
|
132
126
|
rule(:root) { identifier }
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require "lutaml/model"
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Pubid
|
|
5
|
+
module Etsi
|
|
6
|
+
class Scheme < Lutaml::Model::Serializable
|
|
7
|
+
attribute :type, :string
|
|
8
|
+
attribute :number, :string
|
|
9
|
+
attribute :part, :string, collection: true, default: -> { [] }
|
|
10
|
+
attribute :version, :string, default: -> {}
|
|
11
|
+
attribute :edition, :string, default: -> {}
|
|
12
|
+
attribute :date, :string
|
|
13
|
+
attribute :amendment, :string, default: -> {}
|
|
14
|
+
attribute :corrigendum, :string, default: -> {}
|
|
15
|
+
|
|
16
|
+
def to_s
|
|
17
|
+
result = "ETSI #{type} #{number}"
|
|
18
|
+
|
|
19
|
+
# Add parts
|
|
20
|
+
part.each do |p|
|
|
21
|
+
result += "-#{p}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Add amendment or corrigendum
|
|
25
|
+
result += "/A#{amendment}" if amendment
|
|
26
|
+
result += "/C#{corrigendum}" if corrigendum
|
|
27
|
+
|
|
28
|
+
# Add version or edition
|
|
29
|
+
if version
|
|
30
|
+
result += " V#{version}"
|
|
31
|
+
elsif edition
|
|
32
|
+
result += " ed.#{edition}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Add date (only if present)
|
|
36
|
+
result += " (#{date})" if date
|
|
37
|
+
|
|
38
|
+
result
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
data/lib/pubid/etsi.rb
CHANGED
|
@@ -4,67 +4,17 @@ require "lutaml/model"
|
|
|
4
4
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Etsi
|
|
7
|
-
extend Pubid::PrefixesSupport
|
|
8
|
-
|
|
9
|
-
# Sole ETSI publisher token (see the parser's `etsi_prefix` rule). The
|
|
10
|
-
# document-type tokens (EN, TS, TR, ...) are sub-types that follow the ETSI
|
|
11
|
-
# prefix, not standalone routing tokens, so they are excluded.
|
|
12
|
-
PREFIXES = ["ETSI"].freeze
|
|
13
|
-
|
|
14
7
|
autoload :Builder, "#{__dir__}/etsi/builder"
|
|
15
8
|
autoload :Components, "#{__dir__}/etsi/components"
|
|
16
|
-
autoload :Identifier, "#{__dir__}/etsi/
|
|
9
|
+
autoload :Identifier, "#{__dir__}/etsi/identifier"
|
|
17
10
|
autoload :Identifiers, "#{__dir__}/etsi/identifiers"
|
|
18
11
|
autoload :Parser, "#{__dir__}/etsi/parser"
|
|
19
|
-
autoload :
|
|
12
|
+
autoload :Scheme, "#{__dir__}/etsi/scheme"
|
|
20
13
|
autoload :UrnGenerator, "#{__dir__}/etsi/urn_generator"
|
|
21
|
-
autoload :UrnParser, "#{__dir__}/etsi/urn_parser"
|
|
22
14
|
|
|
23
15
|
def self.parse(identifier)
|
|
24
16
|
Identifier.parse(identifier)
|
|
25
17
|
end
|
|
26
|
-
|
|
27
|
-
# Per-flavor format registry: inherits global formats, overrides :human
|
|
28
|
-
Identifier.format_registry = FormatRegistry.new(parent: ::Pubid::Identifier.format_registry)
|
|
29
|
-
Identifier.format_registry.register(:human, renderer: Etsi::Renderer)
|
|
30
|
-
|
|
31
|
-
# Auto-discover all identifier types from the Identifiers namespace
|
|
32
|
-
# @return [Array<Class>] identifier classes (Pubid::Identifier subclasses)
|
|
33
|
-
def self.identifier_types
|
|
34
|
-
@identifier_types ||= Identifiers.constants
|
|
35
|
-
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
36
|
-
.select { |c| c.is_a?(Class) && c < Pubid::Identifier }
|
|
37
|
-
# Exclude the flavor base itself by identity (Identifier is now an
|
|
38
|
-
# alias for Pubid::Etsi::Identifier, so name-based matching misses it).
|
|
39
|
-
.reject { |c| c == Identifier }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Build typed stage index from identifier types
|
|
43
|
-
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
44
|
-
def self.all_typed_stages
|
|
45
|
-
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
46
|
-
if klass.const_defined?(:TYPED_STAGES)
|
|
47
|
-
klass.const_get(:TYPED_STAGES)
|
|
48
|
-
else
|
|
49
|
-
[]
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Lookup: type code -> identifier class
|
|
55
|
-
# @param code [String, Symbol] the type key to find
|
|
56
|
-
# @return [Class, nil] the matching identifier class
|
|
57
|
-
def self.locate_type(code)
|
|
58
|
-
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Lookup: abbreviation -> typed stage
|
|
62
|
-
# @param abbr [String, Symbol] the abbreviation to find
|
|
63
|
-
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
64
|
-
def self.locate_stage(abbr)
|
|
65
|
-
abbr_str = abbr.to_s.upcase
|
|
66
|
-
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
67
|
-
end
|
|
68
18
|
end
|
|
69
19
|
end
|
|
70
20
|
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Export
|
|
5
|
+
# Strategy for flavors using Lutaml::Model::Serializable as their Scheme
|
|
6
|
+
# (ETSI, Plateau). These have identifier classes in the Identifiers module
|
|
7
|
+
# that may not have def self.type.
|
|
8
|
+
class DataClassExporter < FlavorExporter
|
|
9
|
+
def export
|
|
10
|
+
klasses = resolve_identifier_classes_from_module
|
|
11
|
+
return nil if klasses.empty?
|
|
12
|
+
|
|
13
|
+
fixture_data = fixture_examples
|
|
14
|
+
|
|
15
|
+
identifier_types = klasses.map do |klass|
|
|
16
|
+
info = extract_type_info(klass)
|
|
17
|
+
type_key = info[:key]
|
|
18
|
+
examples = fixture_data[type_key] || fixture_data[type_key.to_s] || []
|
|
19
|
+
|
|
20
|
+
IdentifierTypeResult.new(
|
|
21
|
+
key: info[:key],
|
|
22
|
+
title: info[:title],
|
|
23
|
+
short: info[:short],
|
|
24
|
+
abbr: info[:abbr],
|
|
25
|
+
typed_stages: [],
|
|
26
|
+
examples: examples,
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
scheme = scheme_class
|
|
31
|
+
attrs = scheme&.methods&.include?(:attributes) ? scheme.attributes.keys.map(&:to_s) : []
|
|
32
|
+
|
|
33
|
+
FlavorResult.new(
|
|
34
|
+
flavor: flavor,
|
|
35
|
+
identifier_types: identifier_types,
|
|
36
|
+
attributes: attrs,
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def resolve_identifier_classes_from_module
|
|
43
|
+
mod = scheme_module
|
|
44
|
+
return [] unless mod
|
|
45
|
+
|
|
46
|
+
idents_mod = mod.const_get(:Identifiers)
|
|
47
|
+
skip = %w[Base Supplement]
|
|
48
|
+
|
|
49
|
+
idents_mod.constants.filter_map do |c|
|
|
50
|
+
klass = begin; idents_mod.const_get(c); rescue NameError; next; end
|
|
51
|
+
next unless klass.is_a?(Class)
|
|
52
|
+
next if skip.include?(klass.name&.split("::")&.last)
|
|
53
|
+
|
|
54
|
+
klass
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|