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
|
@@ -12,7 +12,7 @@ module Pubid
|
|
|
12
12
|
# CSA C22.2 NO. 60601-1:15 PACKAGE WITH ADDENDUM
|
|
13
13
|
#
|
|
14
14
|
# This is a composite pattern where:
|
|
15
|
-
# -
|
|
15
|
+
# - base_identifier is the core CSA standard (recursively parsed)
|
|
16
16
|
# - package_materials describes what's included in the package
|
|
17
17
|
# - Package portion is metadata, not a parseable identifier
|
|
18
18
|
#
|
|
@@ -33,8 +33,8 @@ module Pubid
|
|
|
33
33
|
# false = materials BEFORE: "CSA B149.1:25 Code, Handbook & Training Package"
|
|
34
34
|
attribute :materials_after_keyword, :boolean, default: -> { true }
|
|
35
35
|
|
|
36
|
-
def to_s
|
|
37
|
-
result =
|
|
36
|
+
def to_s
|
|
37
|
+
result = base_identifier.to_s
|
|
38
38
|
|
|
39
39
|
# Add package materials if present
|
|
40
40
|
if package_materials && !package_materials.empty?
|
|
@@ -57,7 +57,7 @@ module Pubid
|
|
|
57
57
|
result += " PACKAGE"
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
result
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
end
|
|
@@ -17,6 +17,110 @@ module Pubid
|
|
|
17
17
|
class Series < Base
|
|
18
18
|
# Series prefix (MH, RV, etc.) - optional
|
|
19
19
|
attribute :series_prefix, :string
|
|
20
|
+
|
|
21
|
+
def to_s
|
|
22
|
+
result = publisher_prefix_portion
|
|
23
|
+
|
|
24
|
+
# Add code FIRST (before SERIES keyword)
|
|
25
|
+
result += code.to_s
|
|
26
|
+
|
|
27
|
+
# Add space before series prefix/SERIES keyword
|
|
28
|
+
result += " "
|
|
29
|
+
|
|
30
|
+
# Add series prefix if present
|
|
31
|
+
result += "#{series_prefix} " if series_prefix && !series_prefix.empty?
|
|
32
|
+
|
|
33
|
+
# Add SERIES keyword
|
|
34
|
+
result += "SERIES"
|
|
35
|
+
|
|
36
|
+
# Add year
|
|
37
|
+
result += year_portion
|
|
38
|
+
|
|
39
|
+
# Add language
|
|
40
|
+
result += language_portion
|
|
41
|
+
|
|
42
|
+
# Add reaffirmation
|
|
43
|
+
result += reaffirmation_portion
|
|
44
|
+
|
|
45
|
+
result
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def publisher_prefix_portion
|
|
51
|
+
prefix = publisher_prefix || "CSA"
|
|
52
|
+
|
|
53
|
+
# Handle code_only identifiers (empty string means no prefix)
|
|
54
|
+
return "" if prefix == ""
|
|
55
|
+
|
|
56
|
+
# Determine if we need space after prefix
|
|
57
|
+
# CAN/CSA- and CAN3- end with dash, so no space needed
|
|
58
|
+
needs_space = !prefix.end_with?("-")
|
|
59
|
+
|
|
60
|
+
needs_space ? "#{prefix} " : prefix
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def year_portion
|
|
64
|
+
return "" unless year
|
|
65
|
+
|
|
66
|
+
# Use dash if year_format is dash, otherwise colon
|
|
67
|
+
separator = year_format == "dash" ? "-" : ":"
|
|
68
|
+
year_part = separator
|
|
69
|
+
year_part += year_prefix if year_prefix # Add M or F prefix
|
|
70
|
+
year_part += "F" if french && year_format != "dash" && !year_prefix # Only add F if no prefix
|
|
71
|
+
|
|
72
|
+
# Convert 4-digit year back to 2-digit
|
|
73
|
+
year_str = year.to_s
|
|
74
|
+
year_part += if year_str.length == 4 && year_str.start_with?("20")
|
|
75
|
+
year_str[2..3]
|
|
76
|
+
else
|
|
77
|
+
year_str
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
year_part
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def language_portion
|
|
84
|
+
"" # CSA doesn't use language codes in rendering
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def reaffirmation_portion
|
|
88
|
+
return "" unless reaffirmation
|
|
89
|
+
|
|
90
|
+
# Check if year was originally 2-digit (original_year_4digit flag)
|
|
91
|
+
year_was_2digit = !original_year_4digit
|
|
92
|
+
|
|
93
|
+
# Check if reaffirmation was originally 4-digit (original_reaffirmation_4digit flag)
|
|
94
|
+
reaffirmation_was_4digit = original_reaffirmation_4digit
|
|
95
|
+
|
|
96
|
+
# Preserve original reaffirmation format
|
|
97
|
+
# If original was 4-digit, keep as 4-digit
|
|
98
|
+
# If original was 2-digit, convert from 4-digit storage back to 2-digit
|
|
99
|
+
reaffirmation_str = if reaffirmation_was_4digit
|
|
100
|
+
# Original was 4-digit, keep as-is
|
|
101
|
+
reaffirmation.to_s
|
|
102
|
+
elsif reaffirmation.to_s.length == 4 && reaffirmation.to_s.start_with?(
|
|
103
|
+
"19", "20"
|
|
104
|
+
)
|
|
105
|
+
# Original was 2-digit, convert 4-digit storage back to 2-digit
|
|
106
|
+
# (R2004) → (R04), (R1994) → (R94)
|
|
107
|
+
reaffirmation.to_s[2..3]
|
|
108
|
+
else
|
|
109
|
+
# Already 2-digit or other format
|
|
110
|
+
reaffirmation.to_s
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Determine spacing based on original formats
|
|
114
|
+
# Space needed if year is 2-digit and reaffirmation is 4-digit (original format)
|
|
115
|
+
# No space if both year and reaffirmation are 2-digit, or both are 4-digit
|
|
116
|
+
if year_was_2digit && reaffirmation_was_4digit
|
|
117
|
+
# Year was 2-digit, reaffirmation was 4-digit → add space
|
|
118
|
+
" (R#{reaffirmation_str})"
|
|
119
|
+
else
|
|
120
|
+
# Both 2-digit, both 4-digit, or other cases → no space
|
|
121
|
+
"(R#{reaffirmation_str})"
|
|
122
|
+
end
|
|
123
|
+
end
|
|
20
124
|
end
|
|
21
125
|
end
|
|
22
126
|
end
|
data/lib/pubid/csa/parser.rb
CHANGED
|
@@ -4,7 +4,7 @@ require "parslet"
|
|
|
4
4
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Csa
|
|
7
|
-
class Parser < ::
|
|
7
|
+
class Parser < Parslet::Parser
|
|
8
8
|
# Basic building blocks
|
|
9
9
|
rule(:space) { str(" ") }
|
|
10
10
|
rule(:dash) { str("-") }
|
|
@@ -179,7 +179,7 @@ module Pubid
|
|
|
179
179
|
# Optional series prefix (MH, RV, etc.) before SERIES keyword
|
|
180
180
|
(series_prefix >> space).maybe >>
|
|
181
181
|
series_keyword.as(:series_type) >>
|
|
182
|
-
(colon_year | dash_year)
|
|
182
|
+
(colon_year | dash_year) >>
|
|
183
183
|
reaffirmation.maybe
|
|
184
184
|
end
|
|
185
185
|
|
|
@@ -194,7 +194,7 @@ module Pubid
|
|
|
194
194
|
).as(:cec_part) >>
|
|
195
195
|
no_notation >>
|
|
196
196
|
no_number >>
|
|
197
|
-
(colon_year | dash_year)
|
|
197
|
+
(colon_year | dash_year) >>
|
|
198
198
|
reaffirmation.maybe
|
|
199
199
|
end
|
|
200
200
|
|
|
@@ -257,7 +257,7 @@ module Pubid
|
|
|
257
257
|
(space >> series_keyword.as(:series) >> (colon_year | dash_year)) |
|
|
258
258
|
# Option 4: just year (no series, no NO.)
|
|
259
259
|
(colon_year | dash_year)
|
|
260
|
-
)
|
|
260
|
+
) >>
|
|
261
261
|
amendment_slash.maybe # Add amendment support here
|
|
262
262
|
end
|
|
263
263
|
|
|
@@ -274,7 +274,7 @@ module Pubid
|
|
|
274
274
|
(space >> series_keyword.as(:series) >> (colon_year | dash_year)) |
|
|
275
275
|
# Option 4: just year
|
|
276
276
|
(colon_year | dash_year)
|
|
277
|
-
)
|
|
277
|
+
)
|
|
278
278
|
end
|
|
279
279
|
|
|
280
280
|
# Continuation code (optional CSA publisher prefix, for combined identifiers)
|
|
@@ -290,7 +290,7 @@ module Pubid
|
|
|
290
290
|
(space >> series_keyword.as(:series) >> (colon_year | dash_year)) |
|
|
291
291
|
# Option 4: just year
|
|
292
292
|
(colon_year | dash_year)
|
|
293
|
-
)
|
|
293
|
+
) >>
|
|
294
294
|
amendment_slash.maybe
|
|
295
295
|
end
|
|
296
296
|
|
|
@@ -353,7 +353,7 @@ module Pubid
|
|
|
353
353
|
(space >> series_keyword.as(:series) >> (colon_year | dash_year)) |
|
|
354
354
|
# Option 3: just year
|
|
355
355
|
(colon_year | dash_year)
|
|
356
|
-
)
|
|
356
|
+
) >>
|
|
357
357
|
(space >> str("PACKAGE")).as(:package_portion).maybe
|
|
358
358
|
end
|
|
359
359
|
|
|
@@ -367,11 +367,7 @@ module Pubid
|
|
|
367
367
|
# Preprocessing to normalize input
|
|
368
368
|
def parse(input)
|
|
369
369
|
# Skip comment lines
|
|
370
|
-
if input.strip.start_with?("#")
|
|
371
|
-
raise Pubid::Errors::ParseError.new(
|
|
372
|
-
"Comment line", input: input, flavor: "csa"
|
|
373
|
-
)
|
|
374
|
-
end
|
|
370
|
+
raise Parslet::ParseFailed.new("Comment line") if input.strip.start_with?("#")
|
|
375
371
|
|
|
376
372
|
# Remove CONSOLIDATED notation FIRST (before other processing)
|
|
377
373
|
normalized = input.gsub(/\s*\(\s*CONSOLIDATED\s*\)\s*/, " ")
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Csa
|
|
5
|
+
class Scheme < Pubid::Scheme
|
|
6
|
+
class << self
|
|
7
|
+
def identifiers
|
|
8
|
+
@identifiers ||= [
|
|
9
|
+
Identifiers::Standard,
|
|
10
|
+
Identifiers::Bundled,
|
|
11
|
+
Identifiers::CanadianAdopted,
|
|
12
|
+
Identifiers::CsaAdopted,
|
|
13
|
+
Identifiers::Package,
|
|
14
|
+
Identifiers::Series,
|
|
15
|
+
Identifiers::Cec,
|
|
16
|
+
Identifiers::Combined,
|
|
17
|
+
].freeze
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def supplement_identifiers
|
|
21
|
+
@supplement_identifiers ||= [].freeze
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def typed_stages
|
|
25
|
+
@typed_stages ||= [].freeze
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def supplement_typed_stages
|
|
29
|
+
@supplement_typed_stages ||= [].freeze
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def locate_typed_stage_by_abbr(_abbr)
|
|
33
|
+
raise ArgumentError,
|
|
34
|
+
"CSA identifiers do not use typed stages"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def locate_identifier_klass_by_type_code(_type_code)
|
|
38
|
+
raise ArgumentError,
|
|
39
|
+
"CSA identifiers do not use type codes"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -2,19 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Csa
|
|
5
|
-
class SingleIdentifier < Identifier
|
|
6
|
-
#
|
|
7
|
-
# key: Relaton::Index sorts and bsearches every row on
|
|
8
|
-
# `id.root.number.to_s`, so it must never be empty.
|
|
5
|
+
class SingleIdentifier < Pubid::Identifier
|
|
6
|
+
# Generate URN for this identifier
|
|
9
7
|
#
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
# That matters. CSA's base is split across two files (csa/identifier.rb +
|
|
14
|
-
# csa/single_identifier.rb) — the IEEE shape in which a leaf can snapshot
|
|
15
|
-
# a half-built parent attribute table (CLAUDE.md, the `number`
|
|
16
|
-
# determinism landmine). Declaring nothing here keeps CSA clear of it.
|
|
17
|
-
# The attribute was named `code` before; there is no alias.
|
|
8
|
+
# @return [String] URN representation
|
|
9
|
+
|
|
10
|
+
attribute :code, Components::Code
|
|
18
11
|
attribute :no_number, :string
|
|
19
12
|
attribute :year, :string
|
|
20
13
|
attribute :year_format, :string # "colon" or "dash"
|
|
@@ -32,88 +25,6 @@ module Pubid
|
|
|
32
25
|
attribute :series, :boolean # Track if SERIES keyword present
|
|
33
26
|
attribute :package, :string # Package portion (Code, Handbook, etc.)
|
|
34
27
|
attribute :publisher_prefix, :string # Original prefix: "CAN/CSA-", "CSA", "CAN3-"
|
|
35
|
-
|
|
36
|
-
# True when the reference printed no publisher at all ("C22.1-15"), so
|
|
37
|
-
# rendering must not supply the default "CSA".
|
|
38
|
-
#
|
|
39
|
-
# This used to be an empty-string `publisher_prefix` sentinel, which the
|
|
40
|
-
# canonical `to_hash` drops (it strips empty and default-valued
|
|
41
|
-
# attributes by design) — so a code-only identifier came back
|
|
42
|
-
# from `from_hash` with a nil prefix and re-rendered as
|
|
43
|
-
# "CSA C22.1-15". Named for the RARE case with a `false` default,
|
|
44
|
-
# per CLAUDE.md, so it is dropped from every ordinary row.
|
|
45
|
-
attribute :code_only, :boolean, default: -> { false }
|
|
46
|
-
|
|
47
|
-
# A flat, index-friendly serialized shape: the `Components::Code`
|
|
48
|
-
# attributes collapse to bare scalars (`number: C22.2-286`, not
|
|
49
|
-
# `number: {value: C22.2-286}`), the ISO/ETSI/ITU `key_value` pattern.
|
|
50
|
-
#
|
|
51
|
-
# This is deliberately a serialization mapping rather than an
|
|
52
|
-
# `attribute :number, :string` redeclaration. CSA's base is split across
|
|
53
|
-
# two files (csa/identifier.rb + csa/single_identifier.rb) — the IEEE
|
|
54
|
-
# shape in which a leaf can snapshot a half-built parent attribute table
|
|
55
|
-
# — so a retype here would reintroduce the `number` determinism landmine
|
|
56
|
-
# recorded in CLAUDE.md. The runtime attribute stays a Components::Code;
|
|
57
|
-
# only the hash is flat.
|
|
58
|
-
#
|
|
59
|
-
# A lutaml key_value block is EXHAUSTIVE — an unmapped attribute is
|
|
60
|
-
# dropped, `_type` included — so every attribute above appears here. It
|
|
61
|
-
# lives on SingleIdentifier, which only the single-document types
|
|
62
|
-
# inherit; the container types descend from Csa::Identifier directly and
|
|
63
|
-
# keep the default shape for their nested `base`/`identifiers`.
|
|
64
|
-
key_value do
|
|
65
|
-
map "_type", to: :_type
|
|
66
|
-
map "number", with: { to: :number_to_kv, from: :number_from_kv }
|
|
67
|
-
map "no_number",
|
|
68
|
-
with: { to: :no_number_to_kv, from: :no_number_from_kv }
|
|
69
|
-
map "year", to: :year
|
|
70
|
-
map "year_format", to: :year_format
|
|
71
|
-
map "year_prefix", to: :year_prefix
|
|
72
|
-
map "original_year_4digit", to: :original_year_4digit
|
|
73
|
-
map "french", to: :french
|
|
74
|
-
map "reaffirmation", to: :reaffirmation
|
|
75
|
-
map "original_reaffirmation_4digit", to: :original_reaffirmation_4digit
|
|
76
|
-
map "has_publisher", to: :has_publisher
|
|
77
|
-
map "series_prefix", to: :series_prefix
|
|
78
|
-
map "series", to: :series
|
|
79
|
-
map "package", to: :package
|
|
80
|
-
map "publisher_prefix", to: :publisher_prefix
|
|
81
|
-
map "code_only", to: :code_only
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def number_to_kv(model, doc)
|
|
85
|
-
emit_kv(doc, "number", model.number)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def number_from_kv(model, value)
|
|
89
|
-
model.number = Components::Code.new(value: value.to_s)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# `no_number` is a plain :string here but a Components::Code on Cec, so
|
|
93
|
-
# the converter reads through whichever it is given.
|
|
94
|
-
def no_number_to_kv(model, doc)
|
|
95
|
-
emit_kv(doc, "no_number", model.no_number)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def no_number_from_kv(model, value)
|
|
99
|
-
model.no_number =
|
|
100
|
-
if model.class.attributes[:no_number].type == Components::Code
|
|
101
|
-
Components::Code.new(value: value.to_s)
|
|
102
|
-
else
|
|
103
|
-
value.to_s
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# Emit a scalar, skipping a nil or empty value so the canonical
|
|
108
|
-
# no-defaults hash never gains an empty key.
|
|
109
|
-
def emit_kv(doc, key, value)
|
|
110
|
-
text = value.respond_to?(:value) ? value.value : value
|
|
111
|
-
return if text.nil? || text.to_s.empty?
|
|
112
|
-
|
|
113
|
-
doc.add_child(
|
|
114
|
-
Lutaml::KeyValue::DataModel::Element.new(key, text.to_s),
|
|
115
|
-
)
|
|
116
|
-
end
|
|
117
28
|
end
|
|
118
29
|
end
|
|
119
30
|
end
|
|
@@ -3,23 +3,16 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Csa
|
|
5
5
|
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
6
|
-
# A code_only identifier printed no publisher, so it keeps an empty
|
|
7
|
-
# publisher segment rather than falling back to "csa" in #generate.
|
|
8
6
|
def urn_publisher_prefix
|
|
9
|
-
return "" if code_only?
|
|
10
7
|
return nil unless identifier.publisher_prefix
|
|
11
8
|
|
|
12
9
|
identifier.publisher_prefix.to_s.downcase
|
|
13
10
|
end
|
|
14
11
|
|
|
15
|
-
def code_only?
|
|
16
|
-
identifier.respond_to?(:code_only) && identifier.code_only
|
|
17
|
-
end
|
|
18
|
-
|
|
19
12
|
def urn_number
|
|
20
|
-
return nil unless identifier.
|
|
13
|
+
return nil unless identifier.code
|
|
21
14
|
|
|
22
|
-
identifier.
|
|
15
|
+
identifier.code.value.to_s
|
|
23
16
|
end
|
|
24
17
|
|
|
25
18
|
def urn_no_number
|
|
@@ -4,61 +4,28 @@ require "lutaml/model"
|
|
|
4
4
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Csa
|
|
7
|
-
# WrapperIdentifier is the base class for all CSA identifiers that wrap
|
|
8
|
-
# other identifiers.
|
|
7
|
+
# WrapperIdentifier is the base class for all CSA identifiers that wrap other identifiers
|
|
9
8
|
# Examples:
|
|
10
|
-
# -
|
|
11
|
-
# -
|
|
9
|
+
# - CanadianAdoptedIdentifier: CAN/{wrapped_identifier}
|
|
10
|
+
# - CsaAdoptedIdentifier: CSA {ISO/IEC/CISPR identifier}
|
|
12
11
|
#
|
|
13
|
-
# The wrapper pattern allows proper MODEL-DRIVEN architecture where
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
# A real lutaml attribute, not an attr_accessor: the accessor was
|
|
20
|
-
# invisible to `to_hash`, `from_hash` AND `#exclude` (which iterates
|
|
21
|
-
# `self.class.attributes`), so a wrapper serialized to a hash with no
|
|
22
|
-
# identifier in it at all. It is named `base` — the uniform parent
|
|
23
|
-
# accessor every flavor uses — so the inherited `#root` walks it to the
|
|
24
|
-
# origin document and `exclude_from_nested` reaches inside. There is no
|
|
25
|
-
# `wrapped_identifier` alias.
|
|
26
|
-
#
|
|
27
|
-
# Typed as the cross-flavor `::Pubid::Identifier`, not the CSA one:
|
|
28
|
-
# CsaAdopted wraps ISO/IEC/CISPR ids, and lutaml enforces the declared
|
|
29
|
-
# type — `polymorphic: true` widens it only to SUBCLASSES, so a narrower
|
|
30
|
-
# type raises Lutaml::Model::IncorrectModelError on `to_hash`. The
|
|
31
|
-
# Ieee::Identifiers::AdoptedStandard precedent. The nested child carries
|
|
32
|
-
# its own `_type`, so `from_hash` routes it back via TypeResolver.
|
|
33
|
-
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
12
|
+
# The wrapper pattern allows proper MODEL-DRIVEN architecture where adoptions
|
|
13
|
+
# are objects that contain other identifier objects, not string prefixes.
|
|
14
|
+
class WrapperIdentifier < Lutaml::Model::Serializable
|
|
15
|
+
# The wrapped identifier (recursively parsed)
|
|
16
|
+
# Use attr_accessor since it can be any identifier object (CSA, ISO, IEC, etc.)
|
|
17
|
+
attr_accessor :wrapped_identifier
|
|
34
18
|
|
|
35
19
|
# Reaffirmation year (common across wrappers)
|
|
36
20
|
attribute :reaffirmation, :string
|
|
37
21
|
|
|
38
|
-
# Whether the reaffirmation was printed 4-digit ("(R2004)") rather than
|
|
39
|
-
# 2-digit ("(R04)"). CanadianAdopted#to_s reads it to choose the spacing
|
|
40
|
-
# and to render the year back in its original width.
|
|
41
|
-
attribute :original_reaffirmation_4digit, :boolean, default: -> { false }
|
|
42
|
-
|
|
43
22
|
# Year format tracking (for compatibility)
|
|
44
23
|
attribute :year_format, :string
|
|
45
24
|
|
|
46
25
|
# Subclasses MUST implement to_s
|
|
47
|
-
def to_s
|
|
26
|
+
def to_s
|
|
48
27
|
raise NotImplementedError, "Subclasses must implement to_s method"
|
|
49
28
|
end
|
|
50
|
-
|
|
51
|
-
# The matching primitives relaton uses to normalise a reference before
|
|
52
|
-
# comparing it. An adoption wrapper peels to the document it adopts;
|
|
53
|
-
# without these the inherited defaults return the WRAPPER, which is a
|
|
54
|
-
# silently wrong answer rather than a loud one.
|
|
55
|
-
def base_document
|
|
56
|
-
base ? base.base_document : self
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def drop_supplements
|
|
60
|
-
base || self
|
|
61
|
-
end
|
|
62
29
|
end
|
|
63
30
|
end
|
|
64
31
|
end
|
data/lib/pubid/csa.rb
CHANGED
|
@@ -2,71 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Csa
|
|
5
|
-
extend Pubid::PrefixesSupport
|
|
6
|
-
|
|
7
|
-
# Sole CSA publisher token (see the parser's `publisher` rule).
|
|
8
|
-
PREFIXES = ["CSA"].freeze
|
|
9
|
-
|
|
10
5
|
autoload :Builder, "#{__dir__}/csa/builder"
|
|
11
6
|
autoload :Identifier, "#{__dir__}/csa/identifier"
|
|
12
7
|
autoload :Identifiers, "#{__dir__}/csa/identifiers"
|
|
13
8
|
autoload :Parser, "#{__dir__}/csa/parser"
|
|
14
|
-
autoload :
|
|
9
|
+
autoload :Scheme, "#{__dir__}/csa/scheme"
|
|
15
10
|
autoload :SingleIdentifier, "#{__dir__}/csa/single_identifier"
|
|
16
11
|
autoload :UrnGenerator, "#{__dir__}/csa/urn_generator"
|
|
17
|
-
autoload :UrnParser, "#{__dir__}/csa/urn_parser"
|
|
18
12
|
autoload :WrapperIdentifier, "#{__dir__}/csa/wrapper_identifier"
|
|
19
13
|
autoload :CompositeIdentifier, "#{__dir__}/csa/composite_identifier"
|
|
20
14
|
autoload :Components, "#{__dir__}/csa/components"
|
|
21
15
|
|
|
22
16
|
def self.parse(identifier_string)
|
|
23
|
-
unless identifier_string.is_a?(String)
|
|
24
|
-
raise Pubid::Errors::InvalidInputError,
|
|
25
|
-
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
if identifier_string.length > Pubid::MAX_INPUT_LENGTH
|
|
29
|
-
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
30
|
-
end
|
|
31
|
-
|
|
32
17
|
Identifier.parse(identifier_string)
|
|
33
18
|
end
|
|
34
|
-
|
|
35
|
-
# Auto-discover all identifier types from the Identifiers namespace
|
|
36
|
-
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
37
|
-
def self.identifier_types
|
|
38
|
-
@identifier_types ||= Identifiers.constants
|
|
39
|
-
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
40
|
-
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
41
|
-
.select { |c| c.type.is_a?(Hash) }
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Build typed stage index from identifier types
|
|
45
|
-
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
46
|
-
def self.all_typed_stages
|
|
47
|
-
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
48
|
-
if klass.const_defined?(:TYPED_STAGES)
|
|
49
|
-
klass.const_get(:TYPED_STAGES)
|
|
50
|
-
else
|
|
51
|
-
[]
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# Lookup: type code -> identifier class
|
|
57
|
-
# @param code [String, Symbol] the type key to find
|
|
58
|
-
# @return [Class, nil] the matching identifier class
|
|
59
|
-
def self.locate_type(code)
|
|
60
|
-
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Lookup: abbreviation -> typed stage
|
|
64
|
-
# @param abbr [String, Symbol] the abbreviation to find
|
|
65
|
-
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
66
|
-
def self.locate_stage(abbr)
|
|
67
|
-
abbr_str = abbr.to_s.upcase
|
|
68
|
-
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
69
|
-
end
|
|
70
19
|
end
|
|
71
20
|
|
|
72
21
|
# Register this flavor with the Pubid registry
|
|
@@ -74,7 +23,3 @@ end
|
|
|
74
23
|
|
|
75
24
|
# Register Ucsa flavor with the registry
|
|
76
25
|
Pubid::Registry.register(:csa, Pubid::Csa)
|
|
77
|
-
|
|
78
|
-
# Per-flavor format registry: inherits global formats, overrides :human
|
|
79
|
-
Pubid::Csa::SingleIdentifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
80
|
-
Pubid::Csa::SingleIdentifier.format_registry.register(:human, renderer: Pubid::Csa::Renderer)
|
data/lib/pubid/etsi/builder.rb
CHANGED
|
@@ -52,14 +52,9 @@ module Pubid
|
|
|
52
52
|
version = build_version(data)
|
|
53
53
|
date = build_date(data)
|
|
54
54
|
|
|
55
|
-
# The code fields are stored as flat index columns on the leaf (see
|
|
56
|
-
# EtsiStandard) — `number` is what relaton-index keys on — so the Code
|
|
57
|
-
# object built above is unpacked rather than assigned.
|
|
58
55
|
Identifiers::EtsiStandard.new(
|
|
59
56
|
type: data[:type].to_s,
|
|
60
|
-
|
|
61
|
-
minor: code.minor,
|
|
62
|
-
parts: code.parts || [],
|
|
57
|
+
code: code,
|
|
63
58
|
version: version,
|
|
64
59
|
date: date,
|
|
65
60
|
)
|
|
@@ -100,23 +95,19 @@ module Pubid
|
|
|
100
95
|
end
|
|
101
96
|
|
|
102
97
|
def build_version(data)
|
|
103
|
-
# Handle both version and edition
|
|
104
|
-
# which case version is left nil (not defaulted) so exclude/matches?
|
|
105
|
-
# treat it as a wildcard.
|
|
98
|
+
# Handle both version and edition
|
|
106
99
|
if data[:version]
|
|
107
100
|
Components::Version.new(version: data[:version].to_s,
|
|
108
101
|
is_edition: false)
|
|
109
102
|
elsif data[:edition]
|
|
110
103
|
Components::Version.new(version: data[:edition].to_s,
|
|
111
104
|
is_edition: true)
|
|
105
|
+
else
|
|
106
|
+
Components::Version.new(version: "1.0.0", is_edition: false)
|
|
112
107
|
end
|
|
113
108
|
end
|
|
114
109
|
|
|
115
110
|
def build_date(data)
|
|
116
|
-
# A partial reference omits the date; leave it nil rather than building
|
|
117
|
-
# an empty Date, so the canonical to_hash drops it entirely.
|
|
118
|
-
return nil unless data[:year]
|
|
119
|
-
|
|
120
111
|
Pubid::Components::Date.new(
|
|
121
112
|
year: data[:year].to_s,
|
|
122
113
|
month: data[:month].to_s,
|
|
@@ -10,13 +10,16 @@ module Pubid
|
|
|
10
10
|
# Simple: 012, 123, 456
|
|
11
11
|
# GSM: GSM 02.01, 02.01
|
|
12
12
|
# Complex: ABC 123, ABC-DEF 123
|
|
13
|
-
#
|
|
14
|
-
# Stays independent of Pubid::Components::Code because ETSI uses
|
|
15
|
-
# +minor+ (a flavor-specific sub-number) plus +parts+.
|
|
16
13
|
class Code < Lutaml::Model::Serializable
|
|
17
|
-
attribute :number, :string
|
|
18
|
-
attribute :minor, :string
|
|
19
|
-
attribute :parts, :string, collection: true
|
|
14
|
+
attribute :number, :string # Main number (can contain dots, letters, etc.)
|
|
15
|
+
attribute :minor, :string # Optional minor part
|
|
16
|
+
attribute :parts, :string, collection: true # Parts array
|
|
17
|
+
|
|
18
|
+
def initialize(number:, minor: nil, parts: nil)
|
|
19
|
+
@number = number
|
|
20
|
+
@minor = minor
|
|
21
|
+
@parts = parts || []
|
|
22
|
+
end
|
|
20
23
|
|
|
21
24
|
# Render code with space for minor and dash-separated parts
|
|
22
25
|
def to_s
|
|
@@ -26,10 +29,6 @@ module Pubid
|
|
|
26
29
|
result
|
|
27
30
|
end
|
|
28
31
|
|
|
29
|
-
def render(context: nil)
|
|
30
|
-
to_s
|
|
31
|
-
end
|
|
32
|
-
|
|
33
32
|
def ==(other)
|
|
34
33
|
return false unless other.is_a?(Code)
|
|
35
34
|
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
module Pubid
|
|
4
|
+
module Etsi
|
|
5
|
+
class Identifier
|
|
6
|
+
def self.parse(identifier)
|
|
7
|
+
parsed = Parser.parse(identifier)
|
|
8
|
+
Builder.build(parsed)
|
|
9
|
+
rescue Parslet::ParseFailed => e
|
|
10
|
+
raise "Failed to parse ETSI identifier '#{identifier}': #{e.message}"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|