pubid 2.0.0.pre.alpha.2 → 2.0.0.pre.alpha.4
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 +5 -1
- data/data/nist/update_codes.yaml +25 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +4 -55
- data/lib/pubid/amca/identifiers/base.rb +58 -47
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -21
- data/lib/pubid/amca/identifiers/publication.rb +0 -17
- data/lib/pubid/amca/identifiers/standard.rb +0 -4
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_generator.rb +2 -1
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +42 -1
- data/lib/pubid/ansi/builder.rb +5 -3
- data/lib/pubid/ansi/identifier.rb +1 -43
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
- data/lib/pubid/ansi/identifiers/standard.rb +2 -3
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +2 -31
- data/lib/pubid/ansi/urn_generator.rb +3 -38
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +38 -3
- data/lib/pubid/api/builder.rb +33 -74
- data/lib/pubid/api/identifier.rb +5 -52
- data/lib/pubid/api/identifiers/base.rb +2 -14
- data/lib/pubid/api/identifiers/bulletin.rb +0 -2
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
- data/lib/pubid/api/identifiers/mpms.rb +0 -20
- data/lib/pubid/api/identifiers/publication.rb +0 -2
- data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
- data/lib/pubid/api/identifiers/specification.rb +0 -2
- data/lib/pubid/api/identifiers/standard.rb +0 -2
- data/lib/pubid/api/identifiers/technical_report.rb +0 -2
- data/lib/pubid/api/identifiers/typeless_standard.rb +0 -16
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +5 -20
- data/lib/pubid/api/urn_generator.rb +0 -18
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +51 -5
- data/lib/pubid/ashrae/builder.rb +3 -3
- data/lib/pubid/ashrae/identifier.rb +7 -55
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
- data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
- data/lib/pubid/ashrae/identifiers/base.rb +29 -15
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
- data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
- data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
- data/lib/pubid/ashrae/parser.rb +4 -0
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +0 -13
- data/lib/pubid/ashrae/urn_generator.rb +0 -8
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +46 -1
- data/lib/pubid/asme/components/code.rb +10 -2
- data/lib/pubid/asme/identifier.rb +0 -46
- data/lib/pubid/asme/identifiers/base.rb +0 -60
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/single_identifier.rb +3 -1
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +42 -1
- data/lib/pubid/astm/components/code.rb +9 -0
- data/lib/pubid/{jis → astm}/components.rb +1 -1
- data/lib/pubid/astm/identifier.rb +0 -77
- data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
- data/lib/pubid/astm/identifiers/data_series.rb +0 -14
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
- data/lib/pubid/astm/identifiers/manual.rb +0 -27
- data/lib/pubid/astm/identifiers/monograph.rb +0 -14
- data/lib/pubid/astm/identifiers/research_report.rb +0 -7
- data/lib/pubid/astm/identifiers/standard.rb +0 -39
- data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
- data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
- data/lib/pubid/astm/identifiers.rb +18 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +3 -11
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +39 -27
- data/lib/pubid/bsi/builder.rb +21 -12
- data/lib/pubid/bsi/identifier.rb +5 -85
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -36
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +8 -48
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +8 -39
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +2 -55
- data/lib/pubid/bsi/identifiers/amendment.rb +2 -22
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +1 -6
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -87
- data/lib/pubid/bsi/identifiers/committee_document.rb +0 -16
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -87
- data/lib/pubid/bsi/identifiers/corrigendum.rb +2 -10
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +0 -36
- data/lib/pubid/bsi/identifiers/disc.rb +0 -29
- data/lib/pubid/bsi/identifiers/draft_document.rb +2 -46
- data/lib/pubid/bsi/identifiers/electronic_book.rb +2 -38
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +2 -18
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +0 -47
- data/lib/pubid/bsi/identifiers/flex.rb +0 -35
- data/lib/pubid/bsi/identifiers/handbook.rb +1 -15
- data/lib/pubid/bsi/identifiers/index.rb +0 -32
- data/lib/pubid/bsi/identifiers/method.rb +0 -41
- data/lib/pubid/bsi/identifiers/national_annex.rb +4 -29
- data/lib/pubid/bsi/identifiers/practice_guide.rb +1 -6
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +2 -54
- data/lib/pubid/bsi/identifiers/published_document.rb +2 -54
- data/lib/pubid/bsi/identifiers/section.rb +0 -30
- data/lib/pubid/bsi/identifiers/set.rb +3 -20
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +0 -9
- data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -24
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +0 -46
- data/lib/pubid/bsi/identifiers/technical_specification.rb +2 -47
- data/lib/pubid/bsi/identifiers/test_method.rb +0 -32
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +2 -17
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +33 -78
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +232 -2
- data/lib/pubid/builder/base.rb +57 -10
- data/lib/pubid/bundled_identifier.rb +0 -1
- data/lib/pubid/ccsds/builder.rb +4 -3
- data/lib/pubid/ccsds/identifier.rb +53 -68
- data/lib/pubid/ccsds/identifiers/base.rb +11 -61
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +39 -1
- data/lib/pubid/cen_cenelec/builder.rb +12 -14
- data/lib/pubid/cen_cenelec/identifier.rb +11 -40
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +9 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +0 -10
- data/lib/pubid/cen_cenelec/identifiers/base.rb +2 -45
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +0 -27
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +0 -15
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +0 -4
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +9 -90
- data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +172 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +10 -57
- data/lib/pubid/cie/single_identifier.rb +4 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +47 -1
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +22 -8
- data/lib/pubid/components/date.rb +23 -16
- data/lib/pubid/components/edition.rb +9 -6
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +6 -4
- data/lib/pubid/components/locality.rb +10 -1
- data/lib/pubid/components/publisher.rb +9 -6
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +5 -14
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +5 -15
- data/lib/pubid/components/typed_stage.rb +10 -11
- data/lib/pubid/components.rb +4 -1
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +9 -59
- data/lib/pubid/csa/identifiers/base.rb +0 -123
- data/lib/pubid/csa/identifiers/cec.rb +0 -103
- data/lib/pubid/csa/identifiers/series.rb +0 -104
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/single_identifier.rb +1 -1
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +46 -1
- data/lib/pubid/etsi/components/code.rb +10 -9
- data/lib/pubid/etsi/components/version.rb +0 -5
- data/lib/pubid/etsi/identifier.rb +4 -55
- data/lib/pubid/etsi/identifiers/base.rb +31 -27
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +1 -11
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +44 -1
- data/lib/pubid/export/exporter.rb +4 -46
- data/lib/pubid/export/flavor_exporter.rb +111 -278
- data/lib/pubid/export.rb +0 -6
- data/lib/pubid/identifier.rb +92 -18
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +7 -66
- data/lib/pubid/idf/identifiers/amendment.rb +2 -1
- data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
- data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
- data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
- data/lib/pubid/idf/parser.rb +3 -2
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/supplement_identifier.rb +2 -10
- data/lib/pubid/idf/urn_generator.rb +4 -39
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +55 -1
- data/lib/pubid/iec/builder.rb +46 -64
- data/lib/pubid/iec/components/code.rb +8 -32
- data/lib/pubid/iec/components/publisher.rb +0 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +251 -213
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +5 -33
- data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +23 -26
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +35 -24
- data/lib/pubid/iec/identifiers/guide.rb +0 -2
- data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
- data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +17 -11
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
- data/lib/pubid/iec/identifiers/test_report_form.rb +3 -35
- data/lib/pubid/iec/identifiers/vap_identifier.rb +24 -21
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +2 -50
- data/lib/pubid/iec/identifiers.rb +30 -0
- data/lib/pubid/iec/parser.rb +13 -12
- data/lib/pubid/iec/renderer.rb +254 -0
- data/lib/pubid/iec/single_identifier.rb +6 -12
- data/lib/pubid/iec/supplement_identifier.rb +58 -54
- data/lib/pubid/iec/urn_generator.rb +3 -3
- data/lib/pubid/iec/urn_parser.rb +3 -3
- data/lib/pubid/iec.rb +43 -67
- data/lib/pubid/ieee/builder.rb +12 -12
- data/lib/pubid/ieee/components/code.rb +8 -0
- data/lib/pubid/ieee/components/draft.rb +14 -0
- data/lib/pubid/ieee/components/relationship.rb +5 -149
- data/lib/pubid/ieee/identifier.rb +5 -52
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +0 -9
- data/lib/pubid/ieee/identifiers/base.rb +221 -556
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +0 -10
- data/lib/pubid/ieee/identifiers/corrigendum.rb +0 -12
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +0 -10
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +0 -4
- data/lib/pubid/ieee/identifiers/dual_published.rb +0 -4
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +0 -9
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +0 -10
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +0 -18
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +0 -6
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +0 -7
- data/lib/pubid/ieee/identifiers/si_standard.rb +0 -38
- data/lib/pubid/ieee/identifiers/standard.rb +1 -1
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +307 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +66 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +7 -59
- data/lib/pubid/iho/identifiers/base.rb +64 -31
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +2 -2
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +52 -1
- data/lib/pubid/iso/builder.rb +55 -53
- data/lib/pubid/iso/bundled_identifier.rb +51 -0
- data/lib/pubid/iso/components/code.rb +7 -19
- data/lib/pubid/iso/components/publisher.rb +10 -8
- data/lib/pubid/iso/components.rb +2 -4
- data/lib/pubid/iso/identifier.rb +219 -252
- data/lib/pubid/iso/identifiers/addendum.rb +9 -6
- data/lib/pubid/iso/identifiers/amendment.rb +8 -4
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +0 -1
- data/lib/pubid/iso/identifiers/directives.rb +8 -2
- data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +0 -1
- 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 +10 -4
- 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 +11 -3
- data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
- 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 +0 -1
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +22 -4
- data/lib/pubid/iso/single_identifier.rb +0 -4
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +66 -182
- data/lib/pubid/iso/urn_parser.rb +12 -7
- data/lib/pubid/iso.rb +177 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +9 -7
- data/lib/pubid/itu/components/sector.rb +15 -4
- data/lib/pubid/itu/components/series.rb +0 -4
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +4 -116
- data/lib/pubid/itu/identifiers/amendment.rb +0 -2
- data/lib/pubid/itu/identifiers/annex.rb +0 -2
- data/lib/pubid/itu/identifiers/base.rb +124 -128
- data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
- data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
- data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
- data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
- data/lib/pubid/itu/identifiers/supplement.rb +0 -2
- data/lib/pubid/itu/urn_parser.rb +23 -0
- data/lib/pubid/itu.rb +44 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifier.rb +0 -43
- data/lib/pubid/jcgm/identifiers/amendment.rb +0 -9
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +0 -12
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +0 -8
- data/lib/pubid/jcgm/urn_generator.rb +4 -6
- data/lib/pubid/jcgm/urn_parser.rb +23 -0
- data/lib/pubid/jcgm.rb +43 -2
- data/lib/pubid/jis/builder.rb +44 -52
- data/lib/pubid/jis/identifier.rb +120 -46
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +31 -5
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +6 -12
- data/lib/pubid/jis/supplement_identifier.rb +17 -14
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +42 -2
- data/lib/pubid/nist/builder.rb +63 -1871
- data/lib/pubid/nist/caster.rb +1272 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
- data/lib/pubid/nist/components/code.rb +9 -20
- data/lib/pubid/nist/components/supplement.rb +2 -2
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +8 -60
- data/lib/pubid/nist/identifiers/base.rb +564 -492
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -8
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +15 -24
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
- data/lib/pubid/nist/identifiers/handbook.rb +2 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
- data/lib/pubid/nist/identifiers/monograph.rb +7 -3
- data/lib/pubid/nist/identifiers/report.rb +4 -2
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
- data/lib/pubid/nist/identifiers.rb +1 -0
- data/lib/pubid/nist/parser.rb +62 -452
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +428 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +148 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +60 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +3 -1
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +86 -4
- data/lib/pubid/oiml/builder.rb +21 -3
- data/lib/pubid/oiml/components/code.rb +17 -0
- data/lib/pubid/oiml/identifier.rb +40 -46
- data/lib/pubid/oiml/identifiers/annex.rb +13 -46
- data/lib/pubid/oiml/identifiers/errata.rb +15 -0
- data/lib/pubid/oiml/identifiers.rb +1 -1
- data/lib/pubid/oiml/parser.rb +59 -12
- data/lib/pubid/oiml/renderer.rb +171 -0
- data/lib/pubid/oiml/single_identifier.rb +61 -42
- data/lib/pubid/oiml/supplement_identifier.rb +31 -17
- data/lib/pubid/oiml/urn_generator.rb +0 -8
- data/lib/pubid/oiml/urn_parser.rb +22 -0
- data/lib/pubid/oiml.rb +42 -1
- data/lib/pubid/plateau/identifier.rb +4 -55
- data/lib/pubid/plateau/identifiers/base.rb +45 -36
- data/lib/pubid/plateau/identifiers/handbook.rb +0 -6
- data/lib/pubid/plateau/identifiers/technical_report.rb +0 -4
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +0 -4
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +43 -1
- data/lib/pubid/renderers/directives_renderer.rb +22 -8
- data/lib/pubid/renderers/guide_renderer.rb +4 -2
- data/lib/pubid/renderers/human_readable.rb +18 -7
- data/lib/pubid/rendering/context.rb +28 -19
- data/lib/pubid/rendering.rb +0 -3
- data/lib/pubid/sae/components/date.rb +8 -0
- data/lib/pubid/sae/components/type.rb +5 -1
- data/lib/pubid/sae/identifier.rb +4 -35
- data/lib/pubid/sae/identifiers/base.rb +26 -31
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +2 -10
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +42 -1
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +9 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +45 -7
- data/lib/tasks/export.rake +6 -5
- data/lib/tasks/website-data.json +1940 -1882
- metadata +75 -45
- data/lib/pubid/amca/scheme.rb +0 -16
- data/lib/pubid/ansi/scheme.rb +0 -15
- data/lib/pubid/api/scheme.rb +0 -66
- data/lib/pubid/ashrae/scheme.rb +0 -53
- data/lib/pubid/asme/scheme.rb +0 -37
- data/lib/pubid/astm/scheme.rb +0 -55
- data/lib/pubid/bsi/identifiers/base.rb +0 -11
- data/lib/pubid/bsi/scheme.rb +0 -243
- data/lib/pubid/ccsds/scheme.rb +0 -57
- data/lib/pubid/cen_cenelec/scheme.rb +0 -164
- data/lib/pubid/cie/scheme.rb +0 -64
- data/lib/pubid/components/factory.rb +0 -50
- data/lib/pubid/csa/scheme.rb +0 -44
- data/lib/pubid/etsi/scheme.rb +0 -42
- data/lib/pubid/export/data_class_exporter.rb +0 -59
- data/lib/pubid/export/ieee_exporter.rb +0 -78
- data/lib/pubid/export/itu_exporter.rb +0 -66
- data/lib/pubid/export/nist_exporter.rb +0 -64
- data/lib/pubid/export/registry_exporter.rb +0 -90
- data/lib/pubid/export/scheme_exporter.rb +0 -70
- data/lib/pubid/identifier_registry.rb +0 -198
- data/lib/pubid/idf/scheme.rb +0 -61
- data/lib/pubid/iec/scheme.rb +0 -71
- data/lib/pubid/ieee/scheme.rb +0 -90
- data/lib/pubid/iho/scheme.rb +0 -29
- data/lib/pubid/iso/identifiers/base.rb +0 -115
- data/lib/pubid/iso/scheme.rb +0 -193
- data/lib/pubid/itu/scheme.rb +0 -174
- data/lib/pubid/jcgm/scheme.rb +0 -60
- data/lib/pubid/jis/components/code.rb +0 -59
- data/lib/pubid/jis/identifiers/base.rb +0 -72
- data/lib/pubid/jis/scheme.rb +0 -49
- data/lib/pubid/nist/components/publisher.rb +0 -24
- data/lib/pubid/nist/scheme.rb +0 -199
- data/lib/pubid/oiml/identifiers/base.rb +0 -36
- data/lib/pubid/oiml/scheme.rb +0 -46
- data/lib/pubid/plateau/scheme.rb +0 -45
- data/lib/pubid/rendering/base.rb +0 -73
- data/lib/pubid/rendering/common.rb +0 -211
- data/lib/pubid/rendering/format.rb +0 -25
- data/lib/pubid/sae/scheme.rb +0 -47
- data/lib/pubid/scheme.rb +0 -219
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
module Identifiers
|
|
6
|
+
autoload :Base, "#{__dir__}/identifiers/base"
|
|
7
|
+
autoload :Standard, "#{__dir__}/identifiers/standard"
|
|
8
|
+
autoload :IsoDualPublished, "#{__dir__}/identifiers/iso_dual_published"
|
|
9
|
+
autoload :Manual, "#{__dir__}/identifiers/manual"
|
|
10
|
+
autoload :ResearchReport, "#{__dir__}/identifiers/research_report"
|
|
11
|
+
autoload :DataSeries, "#{__dir__}/identifiers/data_series"
|
|
12
|
+
autoload :TechnicalReport, "#{__dir__}/identifiers/technical_report"
|
|
13
|
+
autoload :Monograph, "#{__dir__}/identifiers/monograph"
|
|
14
|
+
autoload :Adjunct, "#{__dir__}/identifiers/adjunct"
|
|
15
|
+
autoload :WorkInProgress, "#{__dir__}/identifiers/work_in_progress"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
# Human-readable renderer for ASTM identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Consolidates the per-type rendering logic that used to live inline on
|
|
8
|
+
# each identifier class. Produces strings like:
|
|
9
|
+
# "ASTM E2938-15"
|
|
10
|
+
# "ASTM RR:A01-1234"
|
|
11
|
+
# "ASTM MNL45-EB"
|
|
12
|
+
# "ASTM ADJD2148"
|
|
13
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
14
|
+
def render(context: nil, **opts)
|
|
15
|
+
id = @id
|
|
16
|
+
|
|
17
|
+
case id
|
|
18
|
+
when Identifiers::Standard
|
|
19
|
+
render_standard(id)
|
|
20
|
+
when Identifiers::IsoDualPublished
|
|
21
|
+
render_standard(id)
|
|
22
|
+
when Identifiers::ResearchReport
|
|
23
|
+
render_research_report(id)
|
|
24
|
+
when Identifiers::DataSeries
|
|
25
|
+
render_data_series(id)
|
|
26
|
+
when Identifiers::TechnicalReport
|
|
27
|
+
render_technical_report(id)
|
|
28
|
+
when Identifiers::Monograph
|
|
29
|
+
render_monograph(id)
|
|
30
|
+
when Identifiers::Adjunct
|
|
31
|
+
render_adjunct(id)
|
|
32
|
+
when Identifiers::WorkInProgress
|
|
33
|
+
render_work_in_progress(id)
|
|
34
|
+
when Identifiers::Manual
|
|
35
|
+
render_manual(id)
|
|
36
|
+
else
|
|
37
|
+
render_single(id)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def render_single(id)
|
|
44
|
+
parts = []
|
|
45
|
+
parts << id.publisher if id.publisher
|
|
46
|
+
parts << id.prefix if id.class.attributes.key?(:prefix) && id.prefix
|
|
47
|
+
parts << id.code.to_s if id.code
|
|
48
|
+
parts << "-#{id.year}" if id.year
|
|
49
|
+
parts << id.format_suffix if id.format_suffix
|
|
50
|
+
parts.join(" ")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def render_standard(id)
|
|
54
|
+
parts = []
|
|
55
|
+
parts << id.publisher if id.publisher
|
|
56
|
+
|
|
57
|
+
if id.code
|
|
58
|
+
code_str = id.code.to_s
|
|
59
|
+
if id.code.dual_m
|
|
60
|
+
base_code = "#{id.code.letter}#{id.code.number}"
|
|
61
|
+
code_str = "#{base_code}/#{base_code}M"
|
|
62
|
+
end
|
|
63
|
+
parts << code_str
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
result = parts.join(" ")
|
|
67
|
+
|
|
68
|
+
if id.year
|
|
69
|
+
result += "-#{year_portion(id)}"
|
|
70
|
+
result += id.sub_year if id.sub_year
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
result += "(#{id.reapproval})" if id.reapproval
|
|
74
|
+
result += "e#{id.edition}" if id.edition
|
|
75
|
+
|
|
76
|
+
result
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def year_portion(id)
|
|
80
|
+
year_str = id.year.to_s
|
|
81
|
+
year_str.length == 4 ? year_str[-2..] : year_str
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def render_research_report(id)
|
|
85
|
+
parts = []
|
|
86
|
+
parts << id.publisher if id.publisher
|
|
87
|
+
parts << "RR:#{id.committee}-#{id.code.number}" if id.committee && id.code
|
|
88
|
+
parts.join(" ")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def render_data_series(id)
|
|
92
|
+
parts = []
|
|
93
|
+
parts << id.publisher if id.publisher
|
|
94
|
+
|
|
95
|
+
result = parts.join(" ")
|
|
96
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
97
|
+
|
|
98
|
+
result += "DS"
|
|
99
|
+
result += id.code.to_s if id.code
|
|
100
|
+
result += "HOL" if id.hol_suffix
|
|
101
|
+
result += id.format_suffix if id.format_suffix
|
|
102
|
+
result
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def render_technical_report(id)
|
|
106
|
+
if id.publisher == "ISO/ASTM" && (id.code.nil? || id.code.letter.nil?)
|
|
107
|
+
result = "ISO/ASTMTR"
|
|
108
|
+
else
|
|
109
|
+
result = "TR"
|
|
110
|
+
result += id.code.letter if id.code&.letter
|
|
111
|
+
end
|
|
112
|
+
result += id.code.number if id.code&.number
|
|
113
|
+
result += id.format_suffix if id.format_suffix
|
|
114
|
+
result
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def render_monograph(id)
|
|
118
|
+
parts = []
|
|
119
|
+
parts << id.publisher if id.publisher
|
|
120
|
+
|
|
121
|
+
result = parts.join(" ")
|
|
122
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
123
|
+
|
|
124
|
+
result += "MONO"
|
|
125
|
+
result += id.code.number if id.code
|
|
126
|
+
result += "-#{id.edition}" if id.edition
|
|
127
|
+
result += id.format_suffix if id.format_suffix
|
|
128
|
+
result
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def render_adjunct(id)
|
|
132
|
+
result = []
|
|
133
|
+
result << id.publisher if id.publisher && !id.ea_suffix && !id.dvd_suffix
|
|
134
|
+
result << "ADJ#{id.designation}#{'-EA' if id.ea_suffix}#{'DVD' if id.dvd_suffix}"
|
|
135
|
+
result.compact.join(" ")
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def render_work_in_progress(id)
|
|
139
|
+
parts = []
|
|
140
|
+
parts << id.publisher if id.publisher
|
|
141
|
+
|
|
142
|
+
result = parts.join(" ")
|
|
143
|
+
result += " " if id.publisher && !result.end_with?(" ")
|
|
144
|
+
|
|
145
|
+
result += "WK"
|
|
146
|
+
result += id.code.number if id.code
|
|
147
|
+
result
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def render_manual(id)
|
|
151
|
+
parts = []
|
|
152
|
+
parts << id.publisher if id.publisher
|
|
153
|
+
parts << "MNL"
|
|
154
|
+
parts << "TP" if id.tp_designation
|
|
155
|
+
parts << id.code.number if id.code
|
|
156
|
+
|
|
157
|
+
result = parts.join
|
|
158
|
+
|
|
159
|
+
result += "-#{id.edition}" if id.edition
|
|
160
|
+
|
|
161
|
+
if id.publisher
|
|
162
|
+
result = "#{id.publisher} #{result[id.publisher.length..]}"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
result += "-SUP" if id.supplement
|
|
166
|
+
result += id.format_suffix if id.format_suffix
|
|
167
|
+
|
|
168
|
+
result
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Astm
|
|
5
|
-
|
|
5
|
+
# Descends from Pubid::Astm::Identifier (the flavor base) so every concrete
|
|
6
|
+
# ASTM identifier is `is_a?(Pubid::Astm::Identifier)`.
|
|
7
|
+
class SingleIdentifier < Identifier
|
|
6
8
|
# Generate URN for this identifier
|
|
7
9
|
#
|
|
8
10
|
# @return [String] URN representation
|
|
@@ -10,16 +12,6 @@ module Pubid
|
|
|
10
12
|
attribute :code, Components::Code
|
|
11
13
|
attribute :year, :string
|
|
12
14
|
attribute :format_suffix, :string # -EB for eBook
|
|
13
|
-
|
|
14
|
-
def to_s
|
|
15
|
-
parts = []
|
|
16
|
-
parts << publisher if publisher
|
|
17
|
-
parts << prefix if self.class.attributes.key?(:prefix) && prefix
|
|
18
|
-
parts << code.to_s if code
|
|
19
|
-
parts << "-#{year}" if year
|
|
20
|
-
parts << format_suffix if format_suffix
|
|
21
|
-
parts.join(" ")
|
|
22
|
-
end
|
|
23
15
|
end
|
|
24
16
|
end
|
|
25
17
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Astm
|
|
5
|
+
# Parses ASTM URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:astm:{publisher}:{code}:{year}[:sub_year][:reapp.X][:eX][:wip][:wk.X]
|
|
9
|
+
#
|
|
10
|
+
# The publisher slot is the lowercase publisher string ("astm" or
|
|
11
|
+
# "pub-copub"). The code slot is the alphanumeric ASTM code (e.g.,
|
|
12
|
+
# "D2148", "A1"). Year is **2 digits** in the URN.
|
|
13
|
+
#
|
|
14
|
+
# Examples:
|
|
15
|
+
# - urn:astm:astm:D2148:2022 → ASTM D2148-22
|
|
16
|
+
# - urn:astm:astm:A1:2002 → ASTM A1-02
|
|
17
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
18
|
+
def parse_urn(urn)
|
|
19
|
+
body = strip_namespace(urn)
|
|
20
|
+
parts = split_parts(body)
|
|
21
|
+
|
|
22
|
+
_publisher, code, year = parts
|
|
23
|
+
|
|
24
|
+
text = "ASTM #{code}"
|
|
25
|
+
text += "-#{year[-2..]}" if year && year.length >= 2
|
|
26
|
+
flavor_parse(text)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/pubid/astm.rb
CHANGED
|
@@ -1,38 +1,50 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "parslet"
|
|
4
|
-
require "lutaml/model"
|
|
5
|
-
require_relative "identifier"
|
|
6
|
-
require_relative "astm/identifier"
|
|
7
|
-
require_relative "astm/components/code"
|
|
8
|
-
require_relative "astm/single_identifier"
|
|
9
|
-
require_relative "astm/parser"
|
|
10
|
-
require_relative "astm/builder"
|
|
11
|
-
|
|
12
|
-
# Identifier classes
|
|
13
|
-
require_relative "astm/identifiers/base"
|
|
14
|
-
require_relative "astm/identifiers/standard"
|
|
15
|
-
require_relative "astm/identifiers/iso_dual_published"
|
|
16
|
-
require_relative "astm/identifiers/manual"
|
|
17
|
-
require_relative "astm/identifiers/research_report"
|
|
18
|
-
require_relative "astm/identifiers/data_series"
|
|
19
|
-
require_relative "astm/identifiers/technical_report"
|
|
20
|
-
require_relative "astm/identifiers/monograph"
|
|
21
|
-
require_relative "astm/identifiers/adjunct"
|
|
22
|
-
require_relative "astm/identifiers/work_in_progress"
|
|
23
|
-
|
|
24
|
-
# Scheme (must be loaded after identifiers)
|
|
25
|
-
require_relative "astm/scheme"
|
|
26
|
-
|
|
27
3
|
module Pubid
|
|
28
4
|
module Astm
|
|
5
|
+
autoload :Components, "#{__dir__}/astm/components"
|
|
6
|
+
autoload :Identifier, "#{__dir__}/astm/identifier"
|
|
7
|
+
autoload :Identifiers, "#{__dir__}/astm/identifiers"
|
|
8
|
+
autoload :SingleIdentifier, "#{__dir__}/astm/single_identifier"
|
|
9
|
+
autoload :Parser, "#{__dir__}/astm/parser"
|
|
10
|
+
autoload :Builder, "#{__dir__}/astm/builder"
|
|
11
|
+
autoload :Renderer, "#{__dir__}/astm/renderer"
|
|
12
|
+
autoload :UrnGenerator, "#{__dir__}/astm/urn_generator"
|
|
13
|
+
autoload :UrnParser, "#{__dir__}/astm/urn_parser"
|
|
14
|
+
|
|
29
15
|
def self.parse(str)
|
|
30
16
|
Identifier.parse(str)
|
|
31
17
|
end
|
|
32
|
-
end
|
|
33
18
|
|
|
34
|
-
|
|
19
|
+
def self.identifier_types
|
|
20
|
+
@identifier_types ||= Identifiers.constants
|
|
21
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
22
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
23
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.all_typed_stages
|
|
27
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
28
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
29
|
+
klass.const_get(:TYPED_STAGES)
|
|
30
|
+
else
|
|
31
|
+
[]
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.locate_type(code)
|
|
37
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.locate_stage(abbr)
|
|
41
|
+
abbr_str = abbr.to_s.upcase
|
|
42
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
43
|
+
end
|
|
44
|
+
end
|
|
35
45
|
end
|
|
36
46
|
|
|
37
|
-
# Register Uastm flavor with the registry
|
|
38
47
|
Pubid::Registry.register(:astm, Pubid::Astm)
|
|
48
|
+
|
|
49
|
+
Pubid::Astm::SingleIdentifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
50
|
+
Pubid::Astm::SingleIdentifier.format_registry.register(:human, renderer: Pubid::Astm::Renderer)
|
data/lib/pubid/bsi/builder.rb
CHANGED
|
@@ -3,12 +3,19 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Bsi
|
|
5
5
|
class Builder < Pubid::Builder::Base
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
# Default typed stage used when an abbreviation lookup yields no match.
|
|
7
|
+
# Empty/unknown abbreviations fall back to the published British Standard.
|
|
8
|
+
DEFAULT_TYPED_STAGE = Pubid::Components::TypedStage.new(
|
|
9
|
+
code: :pubbs,
|
|
10
|
+
stage_code: :published,
|
|
11
|
+
type_code: :bs,
|
|
12
|
+
abbr: ["BS"],
|
|
13
|
+
name: "British Standard",
|
|
14
|
+
harmonized_stages: %w[60.00 60.60],
|
|
15
|
+
).freeze
|
|
16
|
+
|
|
17
|
+
def self.build(parsed_data)
|
|
18
|
+
new.build(parsed_data)
|
|
12
19
|
end
|
|
13
20
|
|
|
14
21
|
def build(data)
|
|
@@ -122,7 +129,7 @@ module Pubid
|
|
|
122
129
|
return identifier
|
|
123
130
|
end
|
|
124
131
|
|
|
125
|
-
# Determine identifier class using
|
|
132
|
+
# Determine identifier class using the module's lookup helpers
|
|
126
133
|
identifier = locate_identifier_klass(data).new
|
|
127
134
|
assign_attributes(identifier, data)
|
|
128
135
|
|
|
@@ -934,17 +941,19 @@ module Pubid
|
|
|
934
941
|
return Identifiers::AdoptedEuropeanNorm if parsed_hash[:adopted_string]&.match?(/^EN\s+\d/)
|
|
935
942
|
return Identifiers::AdoptedInternationalStandard if parsed_hash[:adopted_string]
|
|
936
943
|
|
|
937
|
-
# Use type to determine class via
|
|
944
|
+
# Use type to determine class via Pubid::Bsi.locate_stage / locate_type.
|
|
945
|
+
# Unknown abbreviations fall back to DEFAULT_TYPED_STAGE (published BS).
|
|
938
946
|
type_str = parsed_hash[:type] || parsed_hash[:stage] || ""
|
|
939
|
-
typed_stage =
|
|
940
|
-
|
|
947
|
+
typed_stage = Bsi.locate_stage(type_str.to_s.upcase) || DEFAULT_TYPED_STAGE
|
|
948
|
+
Bsi.locate_type(typed_stage.type_code) || Identifiers::BritishStandard
|
|
941
949
|
end
|
|
942
950
|
|
|
943
951
|
def cast(type, value)
|
|
944
952
|
case type
|
|
945
953
|
when :type
|
|
946
|
-
# Lookup from register
|
|
947
|
-
|
|
954
|
+
# Lookup from register via Pubid::Bsi.locate_stage.
|
|
955
|
+
# Unknown abbreviations fall back to DEFAULT_TYPED_STAGE (published BS).
|
|
956
|
+
typed_stage = Bsi.locate_stage(value.to_s.upcase) || DEFAULT_TYPED_STAGE
|
|
948
957
|
{
|
|
949
958
|
stage: typed_stage.to_stage,
|
|
950
959
|
type: typed_stage.to_type,
|
data/lib/pubid/bsi/identifier.rb
CHANGED
|
@@ -1,87 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# This handles IEC-specific features like VAP suffixes (CSV, RLV, etc.)
|
|
9
|
-
# and consolidated supplements (+AMD1:2001)
|
|
10
|
-
if string.match?(/\bIEC\b/) &&
|
|
11
|
-
(string.match?(/\s+(CSV|CMV|RLV|SER|EXV|PAC|PRV)\b/) ||
|
|
12
|
-
string.match?(/\+AMD\d+:/) ||
|
|
13
|
-
string.match?(/\+COR\d+:/))
|
|
14
|
-
return Pubid::Iec.parse(string)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
parser = Parser.new
|
|
18
|
-
scheme = Scheme.new
|
|
19
|
-
|
|
20
|
-
parsed = parser.parse(string)
|
|
21
|
-
Builder.build(parsed, scheme)
|
|
22
|
-
rescue Parslet::ParseFailed => e
|
|
23
|
-
raise StandardError, "Failed to parse '#{string}': #{e.message}"
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Factory mirroring pubid 1.x's `Pubid::Bsi::Identifier.create` API.
|
|
27
|
-
# Dispatches via {Pubid::Bsi::Scheme}'s IDENTIFIER_CLASS_MAP and
|
|
28
|
-
# TYPED_STAGES_REGISTRY; default subclass is BritishStandard.
|
|
29
|
-
#
|
|
30
|
-
# BSI's renderer requires BSI-namespaced Component subclasses
|
|
31
|
-
# (`Bsi::Components::*`), so coercion is inlined rather than reusing
|
|
32
|
-
# {Pubid::Components::Factory}.
|
|
33
|
-
def self.create(type: nil, stage: nil, **opts)
|
|
34
|
-
klass = resolve_create_class(type: type, stage: stage)
|
|
35
|
-
attrs = coerce_create_attrs(opts)
|
|
36
|
-
ts = resolve_create_typed_stage(klass, stage)
|
|
37
|
-
attrs[:typed_stage] = ts if ts
|
|
38
|
-
klass.new(**attrs)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def self.resolve_create_class(type:, stage:)
|
|
42
|
-
scheme = Scheme.new
|
|
43
|
-
klass = nil
|
|
44
|
-
if type
|
|
45
|
-
klass = scheme.locate_identifier_klass_by_type_code(type)
|
|
46
|
-
elsif stage
|
|
47
|
-
ts = scheme.locate_typed_stage_by_abbr(stage.to_s)
|
|
48
|
-
klass = scheme.locate_identifier_klass_by_type_code(ts.type_code) if ts
|
|
49
|
-
end
|
|
50
|
-
klass || Identifiers::BritishStandard
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def self.resolve_create_typed_stage(klass, stage)
|
|
54
|
-
if stage
|
|
55
|
-
Scheme.new.locate_typed_stage_by_abbr(stage.to_s)
|
|
56
|
-
elsif klass.const_defined?(:TYPED_STAGES)
|
|
57
|
-
klass.const_get(:TYPED_STAGES).find do |ts|
|
|
58
|
-
ts.stage_code.to_sym == :published
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def self.coerce_create_attrs(opts)
|
|
64
|
-
attrs = {}
|
|
65
|
-
if (v = opts[:publisher])
|
|
66
|
-
attrs[:publisher] = Components::Publisher.new(body: v.to_s)
|
|
67
|
-
end
|
|
68
|
-
%i[number part subpart].each do |k|
|
|
69
|
-
v = opts[k]
|
|
70
|
-
attrs[k] = Components::Code.new(value: v.to_s) unless v.nil?
|
|
71
|
-
end
|
|
72
|
-
if (v = opts[:year])
|
|
73
|
-
attrs[:date] = Components::Date.new(year: v.to_s)
|
|
74
|
-
end
|
|
75
|
-
# BSI :edition is a plain string attribute (not a Component).
|
|
76
|
-
attrs[:edition] = opts[:edition].to_s if opts[:edition]
|
|
77
|
-
# TODO(create-shim): BSI also has prefix, flex_prefix, iteration,
|
|
78
|
-
# second_number, month, translation_lang/upper attributes that
|
|
79
|
-
# aren't yet wired through. Add as call sites require them.
|
|
80
|
-
attrs
|
|
81
|
-
end
|
|
82
|
-
private_class_method :resolve_create_class,
|
|
83
|
-
:resolve_create_typed_stage,
|
|
84
|
-
:coerce_create_attrs
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
3
|
+
# Pubid::Bsi::Identifier is the BSI base class (a real Pubid::Identifier
|
|
4
|
+
# subclass); its body, `.parse` (including the IEC-delegation logic), and the
|
|
5
|
+
# SingleIdentifier back-compat alias live in single_identifier.rb. This file
|
|
6
|
+
# just ensures it is loaded when a consumer references Pubid::Bsi::Identifier.
|
|
7
|
+
require_relative "single_identifier"
|
|
@@ -10,8 +10,8 @@ module Pubid
|
|
|
10
10
|
# "BS 1902-2.3:Addendum No. 1:1976"
|
|
11
11
|
# "BS 2000-0:Addendum 1:1983"
|
|
12
12
|
# "BS 6034:1981:Addendum No. 1:1986"
|
|
13
|
-
class AddendumDocument <
|
|
14
|
-
attribute :base_identifier,
|
|
13
|
+
class AddendumDocument < SingleIdentifier
|
|
14
|
+
attribute :base_identifier, ::Pubid::Identifier, polymorphic: true
|
|
15
15
|
attribute :addendum_number, :string
|
|
16
16
|
attribute :addendum_year, :integer
|
|
17
17
|
attribute :addendum_type, :string, default: -> {
|
|
@@ -21,40 +21,6 @@ module Pubid
|
|
|
21
21
|
":"
|
|
22
22
|
} # Separator before Addendum (":" or " ")
|
|
23
23
|
|
|
24
|
-
def to_s(lang: :en, lang_single: false)
|
|
25
|
-
result = base_identifier.to_s(lang: lang, lang_single: lang_single)
|
|
26
|
-
|
|
27
|
-
# Determine separator - if separator is explicitly ":", use it
|
|
28
|
-
# Otherwise if base has year and doesn't already have double colon, use space
|
|
29
|
-
base_has_year = base_identifier.to_s =~ /:(\d{4})$/
|
|
30
|
-
|
|
31
|
-
sep = if separator == ":"
|
|
32
|
-
":"
|
|
33
|
-
elsif base_has_year && base_identifier.to_s !~ /:\d{4}:/
|
|
34
|
-
" "
|
|
35
|
-
else
|
|
36
|
-
separator
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Format: "BASE:Addendum No. N:YEAR" or "BASE Addendum No. N:YEAR" or "BASE:Addendum N:YEAR"
|
|
40
|
-
result += sep
|
|
41
|
-
result += "Addendum"
|
|
42
|
-
|
|
43
|
-
# Add space after "Addendum" if there's a type prefix (like "No.")
|
|
44
|
-
if addendum_type.empty?
|
|
45
|
-
# No type prefix, but still need space before number
|
|
46
|
-
else
|
|
47
|
-
result += " #{addendum_type}"
|
|
48
|
-
end
|
|
49
|
-
result += " "
|
|
50
|
-
result += " "
|
|
51
|
-
|
|
52
|
-
result += addendum_number.to_s
|
|
53
|
-
result += ":#{addendum_year}" if addendum_year
|
|
54
|
-
|
|
55
|
-
result
|
|
56
|
-
end
|
|
57
|
-
|
|
58
24
|
def publisher
|
|
59
25
|
base_identifier&.publisher
|
|
60
26
|
end
|
|
@@ -7,7 +7,7 @@ module Pubid
|
|
|
7
7
|
# Example: "BS EN 10077-1:2006" where EN 10077-1:2006 is a CEN identifier object
|
|
8
8
|
# Example: "BS EN ISO 8601:2019" where EN ISO 8601:2019 is a CEN AdoptedEuropeanNorm wrapping ISO
|
|
9
9
|
class AdoptedEuropeanNorm < BritishStandard
|
|
10
|
-
attribute :adopted_identifier,
|
|
10
|
+
attribute :adopted_identifier, ::Pubid::Identifier, polymorphic: true # CEN object
|
|
11
11
|
attribute :edition, :string
|
|
12
12
|
attribute :translation_lang, :string
|
|
13
13
|
attribute :translation_upper, :string
|
|
@@ -16,53 +16,13 @@ module Pubid
|
|
|
16
16
|
attribute :expert_commentary, :boolean
|
|
17
17
|
attribute :expert_commentary_topic, :string
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
when String
|
|
27
|
-
publisher
|
|
28
|
-
else
|
|
29
|
-
"BS"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
result = prefix
|
|
33
|
-
result += " #{adopted_identifier}" if adopted_identifier
|
|
34
|
-
result += " ED#{edition}" if edition
|
|
35
|
-
|
|
36
|
-
# Reaffirmation notation like (R2004)
|
|
37
|
-
result += " (R#{reaffirmation_year})" if reaffirmation_year
|
|
38
|
-
|
|
39
|
-
# Translation - preserve the "version" or "Translation" suffix if present
|
|
40
|
-
if translation_lang
|
|
41
|
-
result += if translation_suffix_type == "version"
|
|
42
|
-
" (#{translation_lang} version)"
|
|
43
|
-
elsif translation_suffix_type == "Translation"
|
|
44
|
-
" (#{translation_lang} Translation)"
|
|
45
|
-
else
|
|
46
|
-
" (#{translation_lang})"
|
|
47
|
-
end
|
|
48
|
-
elsif translation_upper
|
|
49
|
-
result += if translation_suffix_type == "Translation"
|
|
50
|
-
" (#{translation_upper} Translation)"
|
|
51
|
-
else
|
|
52
|
-
" (#{translation_upper})"
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# ExpertCommentary suffix
|
|
57
|
-
if expert_commentary
|
|
58
|
-
result += if expert_commentary_topic
|
|
59
|
-
" ExComm (#{expert_commentary_topic})"
|
|
60
|
-
else
|
|
61
|
-
" ExComm"
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
result
|
|
19
|
+
# Override self.type to return nil so this polymorphic wrapper is not
|
|
20
|
+
# registered as a base type. Inherits `:bs` from BritishStandard which
|
|
21
|
+
# would otherwise shadow it in Bsi.locate_type(:bs) auto-discovery.
|
|
22
|
+
# AdoptedEuropeanNorm is constructed explicitly by the builder, not
|
|
23
|
+
# selected by type-code lookup.
|
|
24
|
+
def self.type
|
|
25
|
+
nil
|
|
66
26
|
end
|
|
67
27
|
|
|
68
28
|
# Delegate common methods to adopted identifier
|
|
@@ -7,7 +7,7 @@ module Pubid
|
|
|
7
7
|
# Example: "BS ISO 8601:2019" where ISO 8601:2019 is an ISO identifier object
|
|
8
8
|
# Example: "BS IEC 62600:2020" where IEC 62600:2020 is an IEC identifier object
|
|
9
9
|
class AdoptedInternationalStandard < BritishStandard
|
|
10
|
-
attribute :adopted_identifier,
|
|
10
|
+
attribute :adopted_identifier, ::Pubid::Identifier, polymorphic: true # ISO/IEC object
|
|
11
11
|
attribute :edition, :string
|
|
12
12
|
attribute :translation_lang, :string
|
|
13
13
|
attribute :translation_upper, :string
|
|
@@ -16,44 +16,13 @@ module Pubid
|
|
|
16
16
|
attribute :expert_commentary, :boolean
|
|
17
17
|
attribute :expert_commentary_topic, :string
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
when String
|
|
27
|
-
publisher
|
|
28
|
-
else
|
|
29
|
-
"BS"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
result = prefix
|
|
33
|
-
result += " #{adopted_identifier}" if adopted_identifier
|
|
34
|
-
result += " ED#{edition}" if edition
|
|
35
|
-
|
|
36
|
-
# Reaffirmation notation like (R2004)
|
|
37
|
-
result += " (R#{reaffirmation_year})" if reaffirmation_year
|
|
38
|
-
|
|
39
|
-
# Translation - normalize to just "(Language)" format
|
|
40
|
-
# "(French version)", "(French Translation)", "(French)" all become "(French)"
|
|
41
|
-
if translation_lang
|
|
42
|
-
result += " (#{translation_lang})"
|
|
43
|
-
elsif translation_upper
|
|
44
|
-
result += " (#{translation_upper})"
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# ExpertCommentary suffix
|
|
48
|
-
if expert_commentary
|
|
49
|
-
result += if expert_commentary_topic
|
|
50
|
-
" ExComm (#{expert_commentary_topic})"
|
|
51
|
-
else
|
|
52
|
-
" ExComm"
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
result
|
|
19
|
+
# Override self.type to return nil so this polymorphic wrapper is not
|
|
20
|
+
# registered as a base type. Inherits `:bs` from BritishStandard which
|
|
21
|
+
# would otherwise shadow it in Bsi.locate_type(:bs) auto-discovery.
|
|
22
|
+
# AdoptedInternationalStandard is constructed explicitly by the builder,
|
|
23
|
+
# not selected by type-code lookup.
|
|
24
|
+
def self.type
|
|
25
|
+
nil
|
|
57
26
|
end
|
|
58
27
|
|
|
59
28
|
# Delegate common methods to adopted identifier
|