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
|
@@ -5,6 +5,7 @@ module Pubid
|
|
|
5
5
|
class SingleIdentifier < Identifier
|
|
6
6
|
# Base class for OIML single identifiers (non-supplements)
|
|
7
7
|
attribute :publisher, :string
|
|
8
|
+
attribute :code, Oiml::Components::Code
|
|
8
9
|
attribute :date, Pubid::Components::Date
|
|
9
10
|
attribute :edition, :string
|
|
10
11
|
attribute :stage, :string
|
|
@@ -14,49 +15,56 @@ module Pubid
|
|
|
14
15
|
"short"
|
|
15
16
|
} # Track parsed format
|
|
16
17
|
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# intentionally omitted (recomputed from the class on load).
|
|
21
|
-
#
|
|
22
|
-
# The code columns (number/part/subpart/suffix/space_suffix) are NOT
|
|
23
|
-
# here: they are declared, and mapped, by Identifiers::CodeNumber on each
|
|
24
|
-
# concrete leaf, because redefining the inherited `number` on this class
|
|
25
|
-
# — which every leaf inherits — is the multi-flavor determinism landmine.
|
|
26
|
-
# Keeping the mapping with the attribute is also what lets Bulletin, the
|
|
27
|
-
# one leaf with no code, omit both.
|
|
28
|
-
key_value do
|
|
29
|
-
map "publisher", to: :publisher
|
|
30
|
-
map "year", with: { to: :year_to_kv, from: :year_from_kv }
|
|
31
|
-
map "edition", to: :edition
|
|
32
|
-
map "stage", to: :stage
|
|
33
|
-
map "iteration", to: :iteration
|
|
18
|
+
# Type is determined by the subclass
|
|
19
|
+
def type
|
|
20
|
+
type_string
|
|
34
21
|
end
|
|
35
22
|
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
def to_s(format: nil)
|
|
24
|
+
# Use parsed format if not explicitly overridden
|
|
25
|
+
format ||= (parsed_format == "long" ? :long : :short)
|
|
38
26
|
|
|
39
|
-
|
|
40
|
-
(model.date ||= Pubid::Components::Date.new).year = value.to_s
|
|
41
|
-
end
|
|
27
|
+
result = "#{publisher} #{type_string} #{code}"
|
|
42
28
|
|
|
43
|
-
|
|
44
|
-
|
|
29
|
+
# Track if we're using Edition format for language spacing
|
|
30
|
+
using_edition_format = false
|
|
45
31
|
|
|
46
|
-
|
|
47
|
-
|
|
32
|
+
# Add edition/date portion
|
|
33
|
+
if edition && date
|
|
34
|
+
# Has edition number: "6th Edition 2015"
|
|
35
|
+
result += " #{edition} Edition #{date.year}"
|
|
36
|
+
using_edition_format = true
|
|
37
|
+
elsif edition
|
|
38
|
+
# Edition without year (shouldn't happen but handle it)
|
|
39
|
+
result += " #{edition}"
|
|
40
|
+
using_edition_format = true
|
|
41
|
+
elsif date
|
|
42
|
+
# Date without edition number
|
|
43
|
+
if format == :long
|
|
44
|
+
result += " Edition #{date.year}"
|
|
45
|
+
using_edition_format = true
|
|
46
|
+
else
|
|
47
|
+
result += ":#{date.year}"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
# Add draft stage if present (iteration + stage)
|
|
52
|
+
if stage || iteration
|
|
53
|
+
result += " "
|
|
54
|
+
result += iteration.to_s if iteration
|
|
55
|
+
result += stage.to_s if stage
|
|
56
|
+
end
|
|
50
57
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
# Add language portion - depends on format
|
|
59
|
+
if language
|
|
60
|
+
result += if using_edition_format || parsed_format == "short_with_space"
|
|
61
|
+
" (#{language})"
|
|
62
|
+
else
|
|
63
|
+
"(#{language})"
|
|
64
|
+
end
|
|
65
|
+
end
|
|
55
66
|
|
|
56
|
-
|
|
57
|
-
# Store requested format so the renderer can access it
|
|
58
|
-
@requested_format = format
|
|
59
|
-
render(format: :human, **opts)
|
|
67
|
+
result
|
|
60
68
|
end
|
|
61
69
|
|
|
62
70
|
def edition_portion
|
|
@@ -76,37 +84,6 @@ module Pubid
|
|
|
76
84
|
raise NotImplementedError, "Subclasses must implement type_string"
|
|
77
85
|
end
|
|
78
86
|
|
|
79
|
-
# OIML keeps identity in the code columns and `type_string` (e.g. "R",
|
|
80
|
-
# "V", "D"), not in the inherited `typed_stage` — the generic MrString
|
|
81
|
-
# renderer would otherwise drop both and produce `OIML.<year>`.
|
|
82
|
-
# Losslessness for issue #142 requires the type letter and document
|
|
83
|
-
# number to appear in MR.
|
|
84
|
-
#
|
|
85
|
-
# Reads through `code`, which every code-bearing leaf composes from its
|
|
86
|
-
# split columns (Identifiers::CodeNumber); Bulletin has no code and
|
|
87
|
-
# returns nil here, keeping its (year, issue, sequence) slug.
|
|
88
|
-
def mr_number_with_part
|
|
89
|
-
segments = []
|
|
90
|
-
segments << code&.number&.to_s if code&.number
|
|
91
|
-
segments << code&.part&.to_s if code&.part
|
|
92
|
-
segments << code&.subpart&.to_s if code&.subpart
|
|
93
|
-
segments << code&.suffix&.to_s if code&.suffix
|
|
94
|
-
return nil if segments.empty?
|
|
95
|
-
|
|
96
|
-
segments.join("-")
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Bulletin overrides `code`; every other leaf gets it from
|
|
100
|
-
# Identifiers::CodeNumber. Returning nil here keeps #== , the renderer
|
|
101
|
-
# and the URN generator total for the abstract class itself.
|
|
102
|
-
def code
|
|
103
|
-
nil
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def mr_type
|
|
107
|
-
type_string&.downcase
|
|
108
|
-
end
|
|
109
|
-
|
|
110
87
|
# Subclasses override this
|
|
111
88
|
end
|
|
112
89
|
end
|
|
@@ -5,78 +5,33 @@ module Pubid
|
|
|
5
5
|
class SupplementIdentifier < Identifier
|
|
6
6
|
# Base class for OIML supplements (amendments, annexes)
|
|
7
7
|
# These wrap a base identifier like ISO amendments
|
|
8
|
-
attribute :
|
|
8
|
+
attribute :base_identifier, Oiml::Identifier
|
|
9
9
|
attribute :year, :string
|
|
10
10
|
attribute :language, :string
|
|
11
|
-
|
|
12
|
-
# Delegate the document code to the wrapped standard, mirroring
|
|
13
|
-
# Pubid::Etsi::Identifiers::SupplementIdentifier#code.
|
|
14
|
-
#
|
|
15
|
-
# PRE-EXISTING BUG this closes: `UrnGenerator#urn_number` calls
|
|
16
|
-
# `identifier.code` for every non-Bulletin type, but a supplement
|
|
17
|
-
# descends from Oiml::Identifier directly — it is a SIBLING of
|
|
18
|
-
# SingleIdentifier, which is where `code` used to live — so it inherited
|
|
19
|
-
# no `code` at all and `to_urn` raised NoMethodError for every Amendment,
|
|
20
|
-
# Errata and Annex. Verified against a baseline captured on main: all
|
|
21
|
-
# five supplement fixtures already raised there, so this is a fix, not a
|
|
22
|
-
# regression introduced by the move to split index columns.
|
|
23
|
-
#
|
|
24
|
-
# It stayed hidden because spec/pubid/oiml/urn_spec.rb only exercises a
|
|
25
|
-
# bare Recommendation and spec/pubid/oiml/fixtures_spec.rb globs a bad
|
|
26
|
-
# path and runs 0 examples (hand-off: ten-dead-fixture-specs).
|
|
27
|
-
# `iteration` is the same story: declared on SingleIdentifier, read
|
|
28
|
-
# unconditionally by UrnGenerator#urn_iteration, absent from the
|
|
29
|
-
# supplement branch of the hierarchy. (`stage` escapes because
|
|
30
|
-
# ::Pubid::Identifier declares one, so it merely returns nil.)
|
|
31
|
-
def code
|
|
32
|
-
base&.code
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def iteration
|
|
36
|
-
base&.iteration
|
|
37
|
-
end
|
|
38
|
-
# True for the trailing-word shorthand ("OIML R 138:2009 Amendment"),
|
|
39
|
-
# where the supplement word is appended after a dated base instead of the
|
|
40
|
-
# "Amendment (YYYY) to BASE" prose form. The word itself comes from the
|
|
41
|
-
# concrete class (#supplement_type), so only this flag is stored.
|
|
42
|
-
attribute :trailing, :boolean, default: false
|
|
43
|
-
# True for the plus-joined form ("OIML B 10:2011+Amendment:2012") where
|
|
44
|
-
# both the base and the supplement carry their own year, joined by "+".
|
|
45
|
-
attribute :joined, :boolean, default: false
|
|
46
11
|
attribute :parsed_format, :string, default: -> {
|
|
47
12
|
"short"
|
|
48
13
|
} # Track supplement's parsed format
|
|
49
14
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def base_to_kv(model, doc)
|
|
62
|
-
base = model.base
|
|
63
|
-
return unless base
|
|
15
|
+
def to_s(format: :short)
|
|
16
|
+
# Determine base format: explicit parameter takes priority, else use parsed format
|
|
17
|
+
base_format = if format && format != :short
|
|
18
|
+
format # Use explicit override
|
|
19
|
+
elsif base_identifier.class.attributes.key?(:parsed_format) && base_identifier.parsed_format == "long"
|
|
20
|
+
:long
|
|
21
|
+
else
|
|
22
|
+
:short
|
|
23
|
+
end
|
|
64
24
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
)
|
|
69
|
-
end
|
|
25
|
+
# Render base with determined format (preserves Edition vs colon)
|
|
26
|
+
base_str = base_identifier.to_s(format: base_format)
|
|
27
|
+
base_str = base_str.sub(/\s*\([^)]+\)\s*$/, "").strip # Remove language from base
|
|
70
28
|
|
|
71
|
-
|
|
72
|
-
model.base = ::Pubid::Oiml::Identifier.from_hash(value) if value
|
|
73
|
-
end
|
|
29
|
+
result = "#{supplement_type} (#{year}) to #{base_str}"
|
|
74
30
|
|
|
75
|
-
|
|
31
|
+
# Supplements ALWAYS add space before their language
|
|
32
|
+
result += " (#{language})" if language
|
|
76
33
|
|
|
77
|
-
|
|
78
|
-
@requested_format = format
|
|
79
|
-
render(format: :human, **opts)
|
|
34
|
+
result
|
|
80
35
|
end
|
|
81
36
|
|
|
82
37
|
# Subclasses override this
|
|
@@ -15,6 +15,14 @@ module Pubid
|
|
|
15
15
|
identifier.code.to_s
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
def urn_year
|
|
19
|
+
if identifier.date&.year
|
|
20
|
+
return identifier.date.year.to_s
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
nil
|
|
24
|
+
end
|
|
25
|
+
|
|
18
26
|
def urn_stage
|
|
19
27
|
identifier.stage&.to_s&.downcase
|
|
20
28
|
end
|
|
@@ -28,17 +36,6 @@ module Pubid
|
|
|
28
36
|
end
|
|
29
37
|
|
|
30
38
|
def generate
|
|
31
|
-
# Bulletin issues carry no code; the (year, issue, sequence) tuple
|
|
32
|
-
# is the locator. URNs are canonical regardless of how the input was
|
|
33
|
-
# formatted, so we always emit the structured YYYY-II-SS form even
|
|
34
|
-
# when the identifier was parsed from a citation string.
|
|
35
|
-
if identifier.is_a?(Identifiers::Bulletin)
|
|
36
|
-
parts = ["urn", "oiml", "bulletin"]
|
|
37
|
-
parts << bulletin_locator if identifier.date&.present?
|
|
38
|
-
parts << urn_language if urn_language
|
|
39
|
-
return parts.join(":")
|
|
40
|
-
end
|
|
41
|
-
|
|
42
39
|
parts = ["urn", "oiml"]
|
|
43
40
|
parts << urn_type
|
|
44
41
|
parts << urn_number if urn_number
|
|
@@ -62,17 +59,6 @@ module Pubid
|
|
|
62
59
|
|
|
63
60
|
parts.join(":")
|
|
64
61
|
end
|
|
65
|
-
|
|
66
|
-
# Structured locator "YYYY-II-SS" (or "YYYY-II" / "YYYY") for a Bulletin.
|
|
67
|
-
# Built directly from the date year and the issue/sequence attributes so
|
|
68
|
-
# the URN is identical regardless of whether the input was the structured
|
|
69
|
-
# or citation form.
|
|
70
|
-
def bulletin_locator
|
|
71
|
-
locator = identifier.date.year.to_s
|
|
72
|
-
locator += "-#{identifier.issue}" if identifier.issue
|
|
73
|
-
locator += "-#{identifier.sequence}" if identifier.sequence
|
|
74
|
-
locator
|
|
75
|
-
end
|
|
76
62
|
end
|
|
77
63
|
end
|
|
78
64
|
end
|
data/lib/pubid/oiml.rb
CHANGED
|
@@ -2,78 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Oiml
|
|
5
|
-
extend Pubid::PrefixesSupport
|
|
6
|
-
|
|
7
|
-
# Sole OIML publisher token (see the parser's `publisher` rule).
|
|
8
|
-
PREFIXES = ["OIML"].freeze
|
|
9
|
-
|
|
10
5
|
autoload :Builder, "#{__dir__}/oiml/builder"
|
|
11
6
|
autoload :Components, "#{__dir__}/oiml/components"
|
|
12
7
|
autoload :Identifier, "#{__dir__}/oiml/identifier"
|
|
13
8
|
autoload :Identifiers, "#{__dir__}/oiml/identifiers"
|
|
14
9
|
autoload :Parser, "#{__dir__}/oiml/parser"
|
|
15
|
-
autoload :
|
|
10
|
+
autoload :Scheme, "#{__dir__}/oiml/scheme"
|
|
16
11
|
autoload :SingleIdentifier, "#{__dir__}/oiml/single_identifier"
|
|
17
12
|
autoload :SupplementIdentifier, "#{__dir__}/oiml/supplement_identifier"
|
|
18
13
|
autoload :UrnGenerator, "#{__dir__}/oiml/urn_generator"
|
|
19
|
-
autoload :UrnParser, "#{__dir__}/oiml/urn_parser"
|
|
20
14
|
|
|
21
15
|
def self.parse(identifier)
|
|
22
|
-
unless identifier.is_a?(String)
|
|
23
|
-
raise Pubid::Errors::InvalidInputError,
|
|
24
|
-
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
28
|
-
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
29
|
-
end
|
|
30
|
-
|
|
31
16
|
parser = Parser.new
|
|
32
17
|
builder = Builder.new
|
|
33
18
|
|
|
34
19
|
parsed = parser.parse(identifier)
|
|
35
20
|
builder.build(parsed)
|
|
36
21
|
end
|
|
37
|
-
|
|
38
|
-
# Per-flavor format registry: inherits global formats, overrides :human
|
|
39
|
-
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
40
|
-
Identifier.format_registry.register(:human, renderer: Oiml::Renderer)
|
|
41
|
-
|
|
42
|
-
# Auto-discover all identifier types from the Identifiers namespace
|
|
43
|
-
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
44
|
-
def self.identifier_types
|
|
45
|
-
@identifier_types ||= Identifiers.constants
|
|
46
|
-
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
47
|
-
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
48
|
-
.select { |c| c.type.is_a?(Hash) }
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Build typed stage index from identifier types
|
|
52
|
-
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
53
|
-
def self.all_typed_stages
|
|
54
|
-
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
55
|
-
if klass.const_defined?(:TYPED_STAGES)
|
|
56
|
-
klass.const_get(:TYPED_STAGES)
|
|
57
|
-
else
|
|
58
|
-
[]
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Lookup: type code -> identifier class
|
|
64
|
-
# @param code [String, Symbol] the type key to find
|
|
65
|
-
# @return [Class, nil] the matching identifier class
|
|
66
|
-
def self.locate_type(code)
|
|
67
|
-
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Lookup: abbreviation -> typed stage
|
|
71
|
-
# @param abbr [String, Symbol] the abbreviation to find
|
|
72
|
-
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
73
|
-
def self.locate_stage(abbr)
|
|
74
|
-
abbr_str = abbr.to_s.upcase
|
|
75
|
-
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
76
|
-
end
|
|
77
22
|
end
|
|
78
23
|
end
|
|
79
24
|
|
data/lib/pubid/parser.rb
CHANGED
|
@@ -2,28 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Parsers
|
|
5
|
-
# Parses a machine-readable (MR) identifier string back into an Identifier.
|
|
6
|
-
#
|
|
7
|
-
# The MR format produced by `Renderers::MrString` mirrors the human form,
|
|
8
|
-
# lowercased and filename-safe:
|
|
9
|
-
#
|
|
10
|
-
# iso.9001.2015 → ISO 9001:2015
|
|
11
|
-
# iso-iec.17031-1.2020 → ISO/IEC 17031-1:2020
|
|
12
|
-
# iso.1234-1-2-3.2020 → ISO 1234-1-2-3:2020
|
|
13
|
-
# iso.tr.14627.2017 → ISO/TR 14627:2017
|
|
14
|
-
# iso.16634.-- → ISO 16634:--
|
|
15
|
-
# iso.9001.2015_amd.1.2020 → ISO 9001:2015/Amd 1:2020
|
|
16
|
-
# iso-iec.13818-1.2015_amd.3.2016_cor.1.2017 → ISO/IEC 13818-1:2015/Amd 3:2016/Cor 1:2017
|
|
17
|
-
#
|
|
18
|
-
# Copublishers join with `-` (`iso-iec`), supplements append with `_`
|
|
19
|
-
# (`iso.9001.2015_amd.1.2020`). Both round-trip back to `/` here. The
|
|
20
|
-
# flavor's own parser is case-insensitive on the type/publisher tokens
|
|
21
|
-
# we emit, so the lowercased slug re-parses cleanly.
|
|
22
|
-
#
|
|
23
|
-
# Note: NIST, CSA, IEEE, JIS, and SAE emit their own MR shapes that this
|
|
24
|
-
# parser does not attempt to reverse (their `to_s` already round-trips
|
|
25
|
-
# through the flavor's own parser, so callers should use that path for
|
|
26
|
-
# those flavors).
|
|
27
5
|
class MrString < Base
|
|
28
6
|
FLAVOR_MAP = {
|
|
29
7
|
"ISO" => :iso,
|
|
@@ -81,14 +59,6 @@ module Pubid
|
|
|
81
59
|
ccsds: :Ccsds,
|
|
82
60
|
}.freeze
|
|
83
61
|
|
|
84
|
-
# Lower-case type codes the renderer emits as a separate MR segment
|
|
85
|
-
# (e.g. `iso.tr.14627`). When the parser sees one of these in the
|
|
86
|
-
# second position, it splits it back out as `/TYPE`.
|
|
87
|
-
TYPE_CODES = %w[
|
|
88
|
-
tr ts pas is amd cor suppl add ext guide spec
|
|
89
|
-
standard corrigendum amendment
|
|
90
|
-
].freeze
|
|
91
|
-
|
|
92
62
|
def self.parse(mr_string)
|
|
93
63
|
flavor = detect_flavor(mr_string)
|
|
94
64
|
|
|
@@ -101,106 +71,23 @@ module Pubid
|
|
|
101
71
|
raise ArgumentError, "Unknown flavor: #{flavor}" unless flavor_module
|
|
102
72
|
|
|
103
73
|
identifier_string = convert_to_human_readable(mr_string)
|
|
104
|
-
|
|
105
|
-
# Refuse to hand the flavor a string this parser did not change.
|
|
106
|
-
#
|
|
107
|
-
# `detect_flavor` falls back to `:iso` for any publisher it does not
|
|
108
|
-
# know, and `Pubid::Iso.parse` sends an MR-shaped string straight back
|
|
109
|
-
# here — so a string that survives conversion unchanged recurses
|
|
110
|
-
# forever. `ECMA-426 ed1` is the standing example: "ECMA" is absent
|
|
111
|
-
# from FLAVOR_MAP, the string matches the MR shape heuristic
|
|
112
|
-
# (`/\A[A-Z]{2,}[.-]/`), and conversion is a fixed point.
|
|
113
|
-
# `Pubid::Iso.parse("ECMA-426 ed1")` raised SystemStackError.
|
|
114
|
-
#
|
|
115
|
-
# A fixed point means "this was never an MR string", which is a parse
|
|
116
|
-
# failure — the class the cross-flavor contract requires, and the one
|
|
117
|
-
# `Pubid.parse` treats as "try the next flavor".
|
|
118
|
-
if identifier_string == mr_string && flavor_module == Pubid::Iso
|
|
119
|
-
raise Parslet::ParseFailed,
|
|
120
|
-
"#{mr_string.inspect} is not an MR string"
|
|
121
|
-
end
|
|
122
|
-
|
|
123
74
|
flavor_module.parse(identifier_string)
|
|
124
75
|
end
|
|
125
76
|
|
|
126
77
|
def self.detect_flavor(mr_string)
|
|
127
|
-
publisher = mr_string.split(
|
|
78
|
+
publisher = mr_string.split(".").first.upcase
|
|
128
79
|
FLAVOR_MAP[publisher] || :iso
|
|
129
80
|
end
|
|
130
81
|
|
|
131
|
-
# Convert the MR slug back to a human-readable identifier string the
|
|
132
|
-
# flavor's own parser will accept. Splits on `_` first so each segment
|
|
133
|
-
# (head + each supplement) is converted independently, then re-joined
|
|
134
|
-
# with `/`. Within the head, the copublisher separator `-` (first
|
|
135
|
-
# segment only) is restored to `/`.
|
|
136
82
|
def self.convert_to_human_readable(mr_string)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
"
|
|
83
|
+
parts = mr_string.split(".")
|
|
84
|
+
if parts.size > 2
|
|
85
|
+
year_part = parts.pop
|
|
86
|
+
parts.join(" ") + ":#{year_part}"
|
|
87
|
+
else
|
|
88
|
+
parts.join(" ")
|
|
143
89
|
end
|
|
144
90
|
end
|
|
145
|
-
|
|
146
|
-
# Converts a head segment like `iso-iec.13818-1.2015` to
|
|
147
|
-
# `ISO/IEC 13818-1:2015`.
|
|
148
|
-
def self.convert_head(head)
|
|
149
|
-
parts = head.split(".")
|
|
150
|
-
return parts.join(" ").upcase if parts.length <= 1
|
|
151
|
-
|
|
152
|
-
publisher, *rest = parts
|
|
153
|
-
|
|
154
|
-
# Optional type code segment (iso.tr.14627.2017 → ISO/TR 14627:2017).
|
|
155
|
-
type_segment = nil
|
|
156
|
-
if rest.first && TYPE_CODES.include?(rest.first.downcase)
|
|
157
|
-
type_segment = rest.shift.upcase
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
# Trailing language segment — bare language code(s) with no parens.
|
|
161
|
-
# Detect by length <= 5 and all-alpha (en, fr, en-fr, ru).
|
|
162
|
-
language_segment = nil
|
|
163
|
-
if rest.last&.match?(/\A[a-z]{2}(-[a-z]{2})*\z/)
|
|
164
|
-
language_segment = rest.pop
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
# Trailing year segment (may be `--` for undated, or YYYY[-MM[-DD]]).
|
|
168
|
-
year_segment = nil
|
|
169
|
-
if rest.any? && rest.last.match?(/\A(?:\d{4}(?:-\d{2}){0,2}|--)\z/)
|
|
170
|
-
year_segment = rest.pop
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
# Copublishers in the first segment: `iso-iec` → `ISO/IEC`. Multi-word
|
|
174
|
-
# publisher bodies (e.g. `cen-cenelec`) round-trip the same way.
|
|
175
|
-
publisher_part = publisher.split("-").map(&:upcase).join("/")
|
|
176
|
-
publisher_part = "#{publisher_part}/#{type_segment}" if type_segment
|
|
177
|
-
|
|
178
|
-
number_part = rest.join(" ")
|
|
179
|
-
result = publisher_part
|
|
180
|
-
result += " #{number_part}" unless number_part.empty?
|
|
181
|
-
result += ":#{year_segment}" if year_segment
|
|
182
|
-
if language_segment
|
|
183
|
-
langs = language_segment.split("-").join(",")
|
|
184
|
-
result += "(#{langs})"
|
|
185
|
-
end
|
|
186
|
-
result
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
# Converts a supplement segment like `amd.1.2020` to `Amd 1:2020`.
|
|
190
|
-
# The first token is the lowercase type code; remaining tokens are
|
|
191
|
-
# number and optional year.
|
|
192
|
-
def self.convert_supplement(supp)
|
|
193
|
-
tokens = supp.split(".")
|
|
194
|
-
type = tokens.shift&.upcase
|
|
195
|
-
year = tokens.last&.match?(/\A\d{4}\z/) ? tokens.pop : nil
|
|
196
|
-
number = tokens.join(" ")
|
|
197
|
-
|
|
198
|
-
result = type.to_s
|
|
199
|
-
result += " #{number}" unless number.empty?
|
|
200
|
-
result += ":#{year}" if year
|
|
201
|
-
result
|
|
202
|
-
end
|
|
203
91
|
end
|
|
204
92
|
end
|
|
205
93
|
end
|
|
206
|
-
|
|
@@ -9,7 +9,7 @@ module Pubid
|
|
|
9
9
|
|
|
10
10
|
def build(parsed)
|
|
11
11
|
# Check for annex supplement first
|
|
12
|
-
if parsed[:
|
|
12
|
+
if parsed[:base_identifier] && parsed[:annex_letter]
|
|
13
13
|
return build_annex(parsed)
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -29,11 +29,7 @@ module Pubid
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
params[:annex] = parsed[:annex].to_s.to_i if parsed[:annex]
|
|
32
|
-
|
|
33
|
-
# edition slice via the shared handbook rule, so drop it here.
|
|
34
|
-
if parsed[:edition] && klass == Identifiers::Handbook
|
|
35
|
-
params[:edition] = parsed[:edition].to_s
|
|
36
|
-
end
|
|
32
|
+
params[:edition] = parsed[:edition].to_s if parsed[:edition]
|
|
37
33
|
|
|
38
34
|
klass.new(**params)
|
|
39
35
|
end
|
|
@@ -42,10 +38,10 @@ module Pubid
|
|
|
42
38
|
|
|
43
39
|
def build_annex(parsed)
|
|
44
40
|
# Recursively parse base identifier
|
|
45
|
-
base = build(parsed[:
|
|
41
|
+
base = build(parsed[:base_identifier])
|
|
46
42
|
|
|
47
43
|
Identifiers::Annex.new(
|
|
48
|
-
|
|
44
|
+
base_identifier: base,
|
|
49
45
|
letter: parsed[:annex_letter].to_s,
|
|
50
46
|
)
|
|
51
47
|
end
|
|
@@ -2,54 +2,50 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Plateau
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# Stored as a plain string (always "PLATEAU") so it round-trips through
|
|
18
|
-
# to_hash/from_hash. Was a `def publisher` method, which made lutaml
|
|
19
|
-
# serialize a String against the Components::Publisher attribute.
|
|
20
|
-
attribute :publisher, :string, default: -> { "PLATEAU" }
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Base class for all PLATEAU identifiers
|
|
7
|
+
class Base < Pubid::Identifier
|
|
8
|
+
# Generate URN for this identifier
|
|
9
|
+
#
|
|
10
|
+
# @return [String] URN representation
|
|
11
|
+
attribute :number, :integer
|
|
12
|
+
attribute :annex, :integer, default: -> {}
|
|
13
|
+
|
|
14
|
+
def publisher
|
|
15
|
+
"PLATEAU"
|
|
16
|
+
end
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
# Subclasses must implement type_string
|
|
19
|
+
def type_string
|
|
20
|
+
raise NotImplementedError, "Subclasses must implement type_string"
|
|
21
|
+
end
|
|
26
22
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
def formatted_number
|
|
24
|
+
"#%02d" % number
|
|
25
|
+
end
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
def formatted_annex
|
|
28
|
+
annex ? "-#{annex}" : ""
|
|
29
|
+
end
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
def ==(other)
|
|
32
|
+
return false unless other.class == self.class
|
|
37
33
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
number == other.number &&
|
|
35
|
+
annex == other.annex
|
|
36
|
+
end
|
|
41
37
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
# Include type_string and annex in serialization for round-trip compatibility
|
|
39
|
+
def base_hash
|
|
40
|
+
hash = super
|
|
41
|
+
if self.class.attributes.key?(:type_string) && type_string
|
|
42
|
+
hash[:type] =
|
|
43
|
+
type_string
|
|
44
|
+
end
|
|
45
|
+
hash[:annex] = annex if annex
|
|
46
|
+
hash
|
|
48
47
|
end
|
|
49
|
-
hash[:annex] = annex if annex
|
|
50
|
-
hash
|
|
51
48
|
end
|
|
52
49
|
end
|
|
53
|
-
|
|
54
50
|
end
|
|
55
51
|
end
|