pubid 2.0.0.pre.alpha.1 → 2.0.0.pre.alpha.3
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 +27 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -0
- data/lib/pubid/amca/identifiers/base.rb +0 -26
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -17
- data/lib/pubid/amca/identifiers/publication.rb +0 -13
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- 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 -1
- 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 +29 -74
- data/lib/pubid/api/identifier.rb +0 -4
- data/lib/pubid/api/identifiers/base.rb +0 -2
- 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 +1 -17
- 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 +1 -14
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +1 -13
- 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 +6 -0
- 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 +3 -0
- 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/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 +42 -1
- data/lib/pubid/asme/components/code.rb +10 -2
- data/lib/pubid/asme/identifiers/base.rb +0 -60
- data/lib/pubid/asme/renderer.rb +66 -0
- 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/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 +0 -10
- 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 +8 -2
- data/lib/pubid/bsi/identifiers/addendum_document.rb +3 -33
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +11 -47
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +11 -38
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +3 -53
- data/lib/pubid/bsi/identifiers/amendment.rb +3 -19
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +2 -4
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/committee_document.rb +1 -14
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/corrigendum.rb +3 -7
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +1 -34
- data/lib/pubid/bsi/identifiers/disc.rb +1 -27
- data/lib/pubid/bsi/identifiers/draft_document.rb +3 -44
- data/lib/pubid/bsi/identifiers/electronic_book.rb +3 -36
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +3 -15
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +1 -45
- data/lib/pubid/bsi/identifiers/flex.rb +1 -33
- data/lib/pubid/bsi/identifiers/handbook.rb +2 -13
- data/lib/pubid/bsi/identifiers/index.rb +1 -30
- data/lib/pubid/bsi/identifiers/method.rb +1 -39
- data/lib/pubid/bsi/identifiers/national_annex.rb +5 -27
- data/lib/pubid/bsi/identifiers/practice_guide.rb +2 -4
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +3 -52
- data/lib/pubid/bsi/identifiers/published_document.rb +3 -52
- data/lib/pubid/bsi/identifiers/section.rb +1 -28
- data/lib/pubid/bsi/identifiers/set.rb +3 -17
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +1 -7
- data/lib/pubid/bsi/identifiers/supplement_document.rb +3 -21
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +1 -44
- data/lib/pubid/bsi/identifiers/technical_specification.rb +3 -45
- data/lib/pubid/bsi/identifiers/test_method.rb +1 -30
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +3 -14
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +6 -70
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +224 -1
- 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 +66 -1
- data/lib/pubid/ccsds/identifiers/base.rb +11 -50
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/single_identifier.rb +4 -1
- 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 +8 -2
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +13 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/base.rb +5 -41
- 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 +2 -25
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -13
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +4 -7
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
- 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 +11 -89
- 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 +168 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +6 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +43 -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 +11 -8
- data/lib/pubid/components.rb +4 -0
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -3
- data/lib/pubid/csa/identifiers/base.rb +2 -122
- data/lib/pubid/csa/identifiers/cec.rb +2 -101
- data/lib/pubid/csa/identifiers/series.rb +2 -102
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +42 -1
- data/lib/pubid/etsi/components/code.rb +9 -2
- data/lib/pubid/etsi/identifiers/base.rb +1 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +2 -9
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +42 -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 +10 -18
- data/lib/pubid/identifier_facade.rb +114 -0
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +3 -6
- 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 +51 -1
- data/lib/pubid/iec/builder.rb +48 -65
- data/lib/pubid/iec/components/code.rb +9 -32
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +276 -3
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -28
- 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 +27 -30
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -26
- 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 +21 -15
- 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 +5 -34
- data/lib/pubid/iec/identifiers/vap_identifier.rb +26 -23
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +4 -48
- data/lib/pubid/iec/identifiers.rb +30 -0
- data/lib/pubid/iec/parser.rb +20 -14
- 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 +57 -171
- data/lib/pubid/iec/urn_parser.rb +53 -252
- data/lib/pubid/iec.rb +40 -68
- 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 +6 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +1 -6
- data/lib/pubid/ieee/identifiers/base.rb +101 -458
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/corrigendum.rb +1 -9
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +1 -7
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +1 -1
- data/lib/pubid/ieee/identifiers/dual_published.rb +1 -1
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +1 -6
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -15
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +1 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +1 -35
- 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 +62 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +8 -0
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/identifiers/bibliographic.rb +0 -4
- data/lib/pubid/iho/identifiers/circular_letter.rb +0 -4
- data/lib/pubid/iho/identifiers/miscellaneous.rb +0 -4
- data/lib/pubid/iho/identifiers/publication.rb +0 -4
- data/lib/pubid/iho/identifiers/standard.rb +0 -4
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +59 -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 +233 -6
- 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 +26 -6
- data/lib/pubid/iso/single_identifier.rb +6 -3
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +74 -176
- data/lib/pubid/iso/urn_parser.rb +28 -9
- data/lib/pubid/iso.rb +173 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +8 -0
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +6 -39
- 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 +0 -6
- 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 +42 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifiers/amendment.rb +2 -7
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +2 -10
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +1 -5
- 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 +132 -3
- 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 +122 -1761
- 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/edition.rb +16 -0
- data/lib/pubid/nist/components/supplement.rb +88 -21
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +25 -0
- data/lib/pubid/nist/identifiers/base.rb +206 -64
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +3 -2
- 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 -11
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -16
- 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 -3
- 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 +67 -424
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +416 -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 +11 -25
- data/lib/pubid/nist/urn_generator.rb +14 -8
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +83 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifiers/annex.rb +3 -45
- data/lib/pubid/oiml/identifiers/base.rb +2 -17
- data/lib/pubid/oiml/renderer.rb +161 -0
- data/lib/pubid/oiml/single_identifier.rb +6 -45
- data/lib/pubid/oiml/supplement_identifier.rb +4 -19
- 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 +23 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -3
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +1 -1
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +44 -1
- data/lib/pubid/renderers/base.rb +34 -0
- data/lib/pubid/renderers/directives_renderer.rb +27 -14
- data/lib/pubid/renderers/guide_renderer.rb +7 -1
- data/lib/pubid/renderers/human_readable.rb +31 -8
- data/lib/pubid/renderers/iwa_renderer.rb +5 -1
- data/lib/pubid/renderers/supplement_renderer.rb +4 -1
- data/lib/pubid/rendering/context.rb +33 -21
- 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/identifiers/base.rb +2 -16
- 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 +29 -7
- data/lib/tasks/website-data.json +1940 -1882
- metadata +77 -43
- 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/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 -187
- 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/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 -207
|
@@ -5,7 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
# Publicly Available Specification", Identifier
|
|
7
7
|
class Pas < SingleIdentifier
|
|
8
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
9
8
|
|
|
10
9
|
TYPED_STAGES = [
|
|
11
10
|
::Pubid::Components::TypedStage.new(
|
|
@@ -85,7 +84,8 @@ module Pubid
|
|
|
85
84
|
].freeze
|
|
86
85
|
|
|
87
86
|
def self.type
|
|
88
|
-
{ key: :pas,
|
|
87
|
+
{ key: :pas,
|
|
88
|
+
web: :publicly_available_specification, title: "Publicly Available Specification", short: "PAS" }
|
|
89
89
|
end
|
|
90
90
|
end
|
|
91
91
|
end
|
|
@@ -4,7 +4,6 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Recommendation < SingleIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
|
|
9
8
|
TYPED_STAGES = [
|
|
10
9
|
::Pubid::Components::TypedStage.new(
|
|
@@ -32,7 +31,8 @@ module Pubid
|
|
|
32
31
|
].freeze
|
|
33
32
|
|
|
34
33
|
def self.type
|
|
35
|
-
{ key: :rec,
|
|
34
|
+
{ key: :rec,
|
|
35
|
+
web: :recommendation, title: "Recommendation", short: "R" }
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
# Override URN type code - Recommendation uses 'r' in URN (RFC 5141)
|
|
@@ -4,9 +4,16 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Supplement < SupplementIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
|
|
9
8
|
TYPED_STAGES = [
|
|
9
|
+
::Pubid::Components::TypedStage.new(
|
|
10
|
+
code: :pwisuppl,
|
|
11
|
+
stage_code: :pwi,
|
|
12
|
+
type_code: :suppl,
|
|
13
|
+
abbr: ["PWI Suppl"],
|
|
14
|
+
name: "Proposed Work Item for Supplement",
|
|
15
|
+
harmonized_stages: %w[00.00 00.20 00.60 00.92 00.93 00.98 00.99],
|
|
16
|
+
),
|
|
10
17
|
::Pubid::Components::TypedStage.new(
|
|
11
18
|
code: :npsuppl,
|
|
12
19
|
stage_code: :np,
|
|
@@ -43,7 +50,7 @@ module Pubid
|
|
|
43
50
|
code: :dsuppl,
|
|
44
51
|
stage_code: :dsuppl,
|
|
45
52
|
type_code: :suppl,
|
|
46
|
-
abbr: ["DSuppl"],
|
|
53
|
+
abbr: ["DSuppl", "DIS Suppl"],
|
|
47
54
|
name: "Draft Supplement",
|
|
48
55
|
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93 40.98 40.99],
|
|
49
56
|
),
|
|
@@ -79,7 +86,8 @@ module Pubid
|
|
|
79
86
|
end
|
|
80
87
|
|
|
81
88
|
def self.type
|
|
82
|
-
{ key: :suppl,
|
|
89
|
+
{ key: :suppl,
|
|
90
|
+
web: :supplement, title: "Supplement", short: "suppl" }
|
|
83
91
|
end
|
|
84
92
|
end
|
|
85
93
|
end
|
|
@@ -5,7 +5,7 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
# Technical Committee Document
|
|
7
7
|
# Format: TC 184/SC 4/WG 3 N 123, JTC 1 N 456, TC 184 N 100
|
|
8
|
-
class TcDocument <
|
|
8
|
+
class TcDocument < Identifier
|
|
9
9
|
# TC type (TC, JTC, PC, IT, etc.)
|
|
10
10
|
attribute :tc_type, ::Pubid::Components::Code
|
|
11
11
|
# TC number
|
|
@@ -33,8 +33,36 @@ module Pubid
|
|
|
33
33
|
# TC documents don't use typed stages like other identifiers
|
|
34
34
|
TYPED_STAGES = [].freeze
|
|
35
35
|
|
|
36
|
+
# Serialize the committee structure (all plain-string Codes) on top of
|
|
37
|
+
# the inherited ISO mapping; TC documents have no stage.
|
|
38
|
+
key_value do
|
|
39
|
+
map "tc_type", with: { to: :tc_type_to_kv, from: :tc_type_from_kv }
|
|
40
|
+
map "tc_number", with: { to: :tc_number_to_kv, from: :tc_number_from_kv }
|
|
41
|
+
map "sc_type", with: { to: :sc_type_to_kv, from: :sc_type_from_kv }
|
|
42
|
+
map "sc_number", with: { to: :sc_number_to_kv, from: :sc_number_from_kv }
|
|
43
|
+
map "wg_type", with: { to: :wg_type_to_kv, from: :wg_type_from_kv }
|
|
44
|
+
map "wg_number", with: { to: :wg_number_to_kv, from: :wg_number_from_kv }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# TC documents have no stage; suppress the inherited stage emission.
|
|
48
|
+
def stage_to_kv(_model, _doc); end
|
|
49
|
+
|
|
50
|
+
def tc_type_to_kv(m, doc) = emit_code(doc, "tc_type", m.tc_type)
|
|
51
|
+
def tc_type_from_kv(m, v) = m.tc_type = build_code(v)
|
|
52
|
+
def tc_number_to_kv(m, doc) = emit_code(doc, "tc_number", m.tc_number)
|
|
53
|
+
def tc_number_from_kv(m, v) = m.tc_number = build_code(v)
|
|
54
|
+
def sc_type_to_kv(m, doc) = emit_code(doc, "sc_type", m.sc_type)
|
|
55
|
+
def sc_type_from_kv(m, v) = m.sc_type = build_code(v)
|
|
56
|
+
def sc_number_to_kv(m, doc) = emit_code(doc, "sc_number", m.sc_number)
|
|
57
|
+
def sc_number_from_kv(m, v) = m.sc_number = build_code(v)
|
|
58
|
+
def wg_type_to_kv(m, doc) = emit_code(doc, "wg_type", m.wg_type)
|
|
59
|
+
def wg_type_from_kv(m, v) = m.wg_type = build_code(v)
|
|
60
|
+
def wg_number_to_kv(m, doc) = emit_code(doc, "wg_number", m.wg_number)
|
|
61
|
+
def wg_number_from_kv(m, v) = m.wg_number = build_code(v)
|
|
62
|
+
|
|
36
63
|
def self.type
|
|
37
|
-
{ key: :tc,
|
|
64
|
+
{ key: :tc,
|
|
65
|
+
web: :tc_document, title: "Technical Committee Document", short: "TC" }
|
|
38
66
|
end
|
|
39
67
|
|
|
40
68
|
def self.typed_stages
|
|
@@ -45,26 +73,26 @@ module Pubid
|
|
|
45
73
|
result = publisher.to_s if publisher
|
|
46
74
|
|
|
47
75
|
# Add TC type and number
|
|
48
|
-
result += "/#{tc_type.
|
|
49
|
-
result += tc_number.
|
|
76
|
+
result += "/#{tc_type.render} " if tc_type&.value
|
|
77
|
+
result += tc_number.render.to_s if tc_number&.value
|
|
50
78
|
|
|
51
79
|
# Add SC type and number
|
|
52
80
|
if sc_type&.value && sc_number&.value
|
|
53
|
-
result += "/#{sc_type.
|
|
54
|
-
result += sc_number.
|
|
81
|
+
result += "/#{sc_type.render} "
|
|
82
|
+
result += sc_number.render.to_s
|
|
55
83
|
end
|
|
56
84
|
|
|
57
85
|
# Add WG type and number
|
|
58
86
|
if wg_type&.value && wg_number&.value
|
|
59
|
-
result += "/#{wg_type.
|
|
60
|
-
result += wg_number.
|
|
87
|
+
result += "/#{wg_type.render} "
|
|
88
|
+
result += wg_number.render.to_s
|
|
61
89
|
end
|
|
62
90
|
|
|
63
91
|
# Add document number
|
|
64
|
-
result += " N #{number.
|
|
92
|
+
result += " N #{number.render}" if number&.value
|
|
65
93
|
|
|
66
94
|
# Add year if present
|
|
67
|
-
result += ":#{date.
|
|
95
|
+
result += ":#{date.render}" if date&.year
|
|
68
96
|
|
|
69
97
|
result
|
|
70
98
|
end
|
|
@@ -72,20 +100,21 @@ module Pubid
|
|
|
72
100
|
# Generate URN for TC document
|
|
73
101
|
# Format: urn:iso:doc:iso:tc:184:sc-4:wg-3:123
|
|
74
102
|
def to_urn
|
|
103
|
+
urn_ctx = Rendering::RenderingContext.urn
|
|
75
104
|
parts = ["urn:iso:doc"]
|
|
76
|
-
parts << publisher.
|
|
105
|
+
parts << publisher.render(context: urn_ctx) if publisher
|
|
77
106
|
|
|
78
107
|
# Add TC
|
|
79
|
-
parts << "tc:#{tc_number.
|
|
108
|
+
parts << "tc:#{tc_number.render(context: urn_ctx)}" if tc_number&.value
|
|
80
109
|
|
|
81
110
|
# Add SC
|
|
82
|
-
parts << "sc-#{sc_number.
|
|
111
|
+
parts << "sc-#{sc_number.render(context: urn_ctx)}" if sc_number&.value
|
|
83
112
|
|
|
84
113
|
# Add WG
|
|
85
|
-
parts << "wg-#{wg_number.
|
|
114
|
+
parts << "wg-#{wg_number.render(context: urn_ctx)}" if wg_number&.value
|
|
86
115
|
|
|
87
116
|
# Add document number
|
|
88
|
-
parts << number.
|
|
117
|
+
parts << number.render(context: urn_ctx) if number&.value
|
|
89
118
|
|
|
90
119
|
parts.join(":")
|
|
91
120
|
end
|
|
@@ -4,7 +4,6 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class TechnicalReport < SingleIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
|
|
9
8
|
TYPED_STAGES = [
|
|
10
9
|
::Pubid::Components::TypedStage.new(
|
|
@@ -64,7 +63,7 @@ module Pubid
|
|
|
64
63
|
code: :dtr,
|
|
65
64
|
stage_code: :draft,
|
|
66
65
|
type_code: :tr,
|
|
67
|
-
abbr: ["DTR"],
|
|
66
|
+
abbr: ["DTR", "DIS TR"],
|
|
68
67
|
name: "Draft Technical Report",
|
|
69
68
|
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93 40.98 40.99],
|
|
70
69
|
),
|
|
@@ -72,7 +71,7 @@ module Pubid
|
|
|
72
71
|
code: :fdtr,
|
|
73
72
|
stage_code: :final_draft,
|
|
74
73
|
type_code: :tr,
|
|
75
|
-
abbr: ["FDTR"],
|
|
74
|
+
abbr: ["FDTR", "FDIS TR"],
|
|
76
75
|
name: "Final Draft Technical Report",
|
|
77
76
|
harmonized_stages: %w[50.00 50.20 50.60 50.92 50.98 50.99],
|
|
78
77
|
),
|
|
@@ -95,7 +94,8 @@ module Pubid
|
|
|
95
94
|
].freeze
|
|
96
95
|
|
|
97
96
|
def self.type
|
|
98
|
-
{ key: :tr,
|
|
97
|
+
{ key: :tr,
|
|
98
|
+
web: :technical_report, title: "Technical Report", short: "TR" }
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
end
|
|
@@ -4,7 +4,6 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class TechnicalSpecification < SingleIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
TYPED_STAGES = [
|
|
9
8
|
::Pubid::Components::TypedStage.new(
|
|
10
9
|
code: :pwits,
|
|
@@ -94,7 +93,8 @@ module Pubid
|
|
|
94
93
|
].freeze
|
|
95
94
|
|
|
96
95
|
def self.type
|
|
97
|
-
{ key: :ts,
|
|
96
|
+
{ key: :ts,
|
|
97
|
+
web: :technical_specification, title: "Technical Specification", short: "TS" }
|
|
98
98
|
end
|
|
99
99
|
end
|
|
100
100
|
end
|
|
@@ -4,7 +4,6 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class TechnologyTrendsAssessments < SingleIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
|
|
9
8
|
TYPED_STAGES = [
|
|
10
9
|
::Pubid::Components::TypedStage.new(
|
|
@@ -87,7 +86,8 @@ module Pubid
|
|
|
87
86
|
].freeze
|
|
88
87
|
|
|
89
88
|
def self.type
|
|
90
|
-
{ key: :tta,
|
|
89
|
+
{ key: :tta,
|
|
90
|
+
web: :technology_trends_assessments, title: "Technology Trends Assessments", short: "TTA" }
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
end
|
|
@@ -5,7 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
autoload :Addendum, "#{__dir__}/identifiers/addendum"
|
|
7
7
|
autoload :Amendment, "#{__dir__}/identifiers/amendment"
|
|
8
|
-
autoload :Base, "#{__dir__}/identifiers/base"
|
|
9
8
|
autoload :Corrigendum, "#{__dir__}/identifiers/corrigendum"
|
|
10
9
|
autoload :Data, "#{__dir__}/identifiers/data"
|
|
11
10
|
autoload :Directives, "#{__dir__}/identifiers/directives"
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Iso
|
|
5
|
+
# Applies pre-parse normalizations to ISO identifier strings, then dispatches
|
|
6
|
+
# to the parser/builder. Handles Cyrillic (Russian) translations, legacy
|
|
7
|
+
# update_codes regex rewrites, and the DAD/FDAM pattern that the PEG
|
|
8
|
+
# parser cannot recognize because it treats "/" as a copublisher separator.
|
|
9
|
+
class Normalizer
|
|
10
|
+
DAD_PATTERN = /^(.+?)\/(F?DAD)\s+(\d+)(?::(\d{4}))?$/.freeze
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
# Apply all normalizations to an identifier string and return the
|
|
14
|
+
# parsed identifier object.
|
|
15
|
+
# @param identifier [String]
|
|
16
|
+
# @return [Pubid::Iso::Identifier]
|
|
17
|
+
def apply(identifier)
|
|
18
|
+
if (match = identifier.match(DAD_PATTERN))
|
|
19
|
+
parse_dad_pattern(match)
|
|
20
|
+
else
|
|
21
|
+
normalized = Core::UpdateCodes.apply(identifier, :iso)
|
|
22
|
+
normalized = normalize_cyrillic(normalized)
|
|
23
|
+
parse_with_builder(normalized)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def parse_with_builder(string)
|
|
30
|
+
parsed = Pubid::Iso.parser.parse(string)
|
|
31
|
+
Pubid::Iso.builder.build(parsed)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Normalize Cyrillic (Russian) ISO identifiers to Latin equivalents.
|
|
35
|
+
# ИСО = ISO, МЭК = IEC, Руководство/Руководства = Guide,
|
|
36
|
+
# ОПМС = FDIS, ПМС = DIS, ТО = TR, ТС = TS.
|
|
37
|
+
# @return [String]
|
|
38
|
+
def normalize_cyrillic(identifier)
|
|
39
|
+
return identifier unless identifier.match?(/[а-яА-Я]/)
|
|
40
|
+
|
|
41
|
+
normalized = identifier.dup
|
|
42
|
+
# Remove inline comments (Russian style comments with #)
|
|
43
|
+
normalized = normalized.gsub(/\s*#\s*.*$/, "")
|
|
44
|
+
# Translate Russian abbreviations (order matters: longer first)
|
|
45
|
+
normalized = normalized.gsub("Руководства", "GUIDE")
|
|
46
|
+
normalized = normalized.gsub("Руководство", "GUIDE")
|
|
47
|
+
normalized = normalized.gsub("ИСО/МЭК", "ISO/IEC")
|
|
48
|
+
normalized = normalized.gsub("ИСО/ОПМС", "ISO/FDIS")
|
|
49
|
+
normalized = normalized.gsub("ИСО/ПМС", "ISO/DIS")
|
|
50
|
+
normalized = normalized.gsub("ИСО/ТО", "ISO/TR")
|
|
51
|
+
normalized = normalized.gsub("ИСО/ТС", "ISO/TS")
|
|
52
|
+
normalized = normalized.gsub("ИСО", "ISO")
|
|
53
|
+
normalized = normalized.gsub("МЭК", "IEC")
|
|
54
|
+
# Standalone Cyrillic stage abbreviations (after publisher replacements)
|
|
55
|
+
normalized = normalized.gsub("ТО", "TR")
|
|
56
|
+
normalized = normalized.gsub("ТС", "TS")
|
|
57
|
+
normalized = normalized.gsub("ОПМС", "FDIS")
|
|
58
|
+
normalized = normalized.gsub("ПМС", "DIS")
|
|
59
|
+
normalized.strip
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Parse the DAD/FDAM pattern manually. The parser fails because it
|
|
63
|
+
# treats "/" as a copublisher separator.
|
|
64
|
+
# Pattern: "ISO 2631/DAD 1" or "ISO 2553/DAD 1:1987"
|
|
65
|
+
def parse_dad_pattern(match)
|
|
66
|
+
base_str = match[1] # "ISO 2631" or "ISO 2553"
|
|
67
|
+
stage_abbr = match[2] # "DAD" or "FDAD"
|
|
68
|
+
supplement_number = match[3] # "1"
|
|
69
|
+
supplement_year = match[4] # "1987" or nil
|
|
70
|
+
|
|
71
|
+
base_parsed = Pubid::Iso.parser.parse(base_str)
|
|
72
|
+
base_identifier = Pubid::Iso.builder.build(base_parsed)
|
|
73
|
+
|
|
74
|
+
addendum = Identifiers::Addendum.new
|
|
75
|
+
addendum.base_identifier = base_identifier
|
|
76
|
+
addendum.number = Iso::Components::Code.new(value: supplement_number)
|
|
77
|
+
addendum.date = Pubid::Components::Date.new(year: supplement_year) if supplement_year
|
|
78
|
+
|
|
79
|
+
typed_stage = Pubid::Iso.locate_stage(stage_abbr)
|
|
80
|
+
addendum.typed_stage = typed_stage
|
|
81
|
+
addendum.stage = typed_stage.to_stage
|
|
82
|
+
addendum.type = typed_stage.to_type
|
|
83
|
+
|
|
84
|
+
addendum
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
data/lib/pubid/iso/parser.rb
CHANGED
|
@@ -9,10 +9,19 @@ module Pubid
|
|
|
9
9
|
|
|
10
10
|
DASH_CHARS = ["-", "‑", "‐"].freeze
|
|
11
11
|
|
|
12
|
+
# Supplement identifier type keys (kept as a hard-coded list to match
|
|
13
|
+
# the previous identifier split; only the base identifier registry
|
|
14
|
+
# is auto-discovered from the Identifiers namespace).
|
|
15
|
+
SUPPLEMENT_TYPE_KEYS = %i[amd cor suppl ext add].freeze
|
|
16
|
+
|
|
12
17
|
# We need to sort by length to match longest first because that's how Parslet works
|
|
13
|
-
TYPED_STAGES = Pubid::Iso
|
|
18
|
+
TYPED_STAGES = Pubid::Iso.identifier_types
|
|
19
|
+
.reject { |k| SUPPLEMENT_TYPE_KEYS.include?(k.type[:key]) }
|
|
20
|
+
.flat_map { |k| k.const_defined?(:TYPED_STAGES) ? k.const_get(:TYPED_STAGES) : [] }
|
|
14
21
|
.map(&:abbr).flatten.sort_by(&:length).reverse
|
|
15
|
-
TYPED_STAGES_SUPPLEMENTS = Pubid::Iso
|
|
22
|
+
TYPED_STAGES_SUPPLEMENTS = Pubid::Iso.identifier_types
|
|
23
|
+
.select { |k| SUPPLEMENT_TYPE_KEYS.include?(k.type[:key]) }
|
|
24
|
+
.flat_map { |k| k.const_defined?(:TYPED_STAGES) ? k.const_get(:TYPED_STAGES) : [] }
|
|
16
25
|
.map(&:abbr).flatten.sort_by(&:length).reverse
|
|
17
26
|
|
|
18
27
|
root :identifier
|
|
@@ -45,7 +54,9 @@ module Pubid
|
|
|
45
54
|
# ISO/JTC 1 N 456
|
|
46
55
|
# ISO/TC 184/SC 4 N 789 (TC and SC only, no WG)
|
|
47
56
|
rule(:tc_document) do
|
|
48
|
-
|
|
57
|
+
# Accept either "ISO/TC 184…" or the lenient space form "ISO TC 184…"
|
|
58
|
+
# (the latter was valid in pubid 1.x via an optional slash).
|
|
59
|
+
prefix_sole_publisher >> (str("/") | space) >> tc_type >> space >> tc_number.as(:tc_number) >>
|
|
49
60
|
tc_subcommittee_part.maybe >>
|
|
50
61
|
space >> str("N") >> space? >> digits.as(:number) >>
|
|
51
62
|
(str(":") >> year_digits.as(:year)).maybe
|
|
@@ -64,7 +75,9 @@ module Pubid
|
|
|
64
75
|
end
|
|
65
76
|
|
|
66
77
|
rule(:sc_type) do
|
|
67
|
-
|
|
78
|
+
# "SC" plus the "SC/QC" quality-committee variant
|
|
79
|
+
# (e.g. ISO/TC 184/SC/QC 4 N 246). Longest first for Parslet.
|
|
80
|
+
(str("SC/QC") | str("SC")).as(:sc_type)
|
|
68
81
|
end
|
|
69
82
|
|
|
70
83
|
rule(:wg_type) do
|
|
@@ -325,7 +338,9 @@ module Pubid
|
|
|
325
338
|
rule(:supplement_identifier_no_third) do
|
|
326
339
|
identifier_copublishers_no_third.as(:base_identifier) >>
|
|
327
340
|
str("/") >> supplement_type_with_stage >>
|
|
328
|
-
|
|
341
|
+
# The trailing number/date is optional: some draft supplements have no
|
|
342
|
+
# number yet, e.g. "ISO/IEC 9579/WD Amd".
|
|
343
|
+
((space? >> second_part) | (str(".") >> digits.as(:number)) | (space? >> date)).maybe
|
|
329
344
|
end
|
|
330
345
|
|
|
331
346
|
rule(:supplement_identifier) do
|
|
@@ -378,9 +393,14 @@ module Pubid
|
|
|
378
393
|
|
|
379
394
|
DIRECTIVES_TYPED_STAGES = Identifiers::Directives::TYPED_STAGES.map(&:abbr).flatten.sort_by(&:length).reverse
|
|
380
395
|
rule(:directives_identifier_no_third) do
|
|
381
|
-
prefix_with_copublishers >> space >>
|
|
396
|
+
prefix_with_copublishers >> space? >>
|
|
382
397
|
(directives_publisher_subgroup >> space).maybe >>
|
|
383
398
|
array_to_str(DIRECTIVES_TYPED_STAGES).as(:type_with_stage) >>
|
|
399
|
+
# The subgroup may also follow the type, e.g. "ISO/IEC DIR JTC 1"
|
|
400
|
+
# (canonical form is "ISO/IEC JTC 1 DIR"). Guard against a trailing
|
|
401
|
+
# supplement, where "JTC 1" is the supplement publisher instead
|
|
402
|
+
# (e.g. "ISO/IEC DIR JTC 1 SUP").
|
|
403
|
+
(space >> directives_publisher_subgroup >> (space >> str("SUP")).absent?).maybe >>
|
|
384
404
|
(
|
|
385
405
|
(space >> directives_number_with_part).maybe >>
|
|
386
406
|
(str(":") >> date).maybe
|
|
@@ -11,7 +11,8 @@ module Pubid
|
|
|
11
11
|
|
|
12
12
|
def build_rendering_context(_renderer, format:, with_edition: false,
|
|
13
13
|
lang: :en, lang_single: false,
|
|
14
|
-
stage_format_long: nil, with_date: nil
|
|
14
|
+
stage_format_long: nil, with_date: nil,
|
|
15
|
+
annotated: false)
|
|
15
16
|
if format == :mr_string
|
|
16
17
|
nil
|
|
17
18
|
elsif lang_single || stage_format_long || !with_date.nil?
|
|
@@ -19,17 +20,19 @@ module Pubid
|
|
|
19
20
|
with_language_code: lang_single ? :single : :none,
|
|
20
21
|
stage_format_long: stage_format_long || false,
|
|
21
22
|
with_date: with_date.nil? || with_date,
|
|
23
|
+
annotated: annotated,
|
|
22
24
|
)
|
|
23
25
|
else
|
|
24
|
-
detect_rendering_context
|
|
26
|
+
detect_rendering_context(annotated: annotated)
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
29
|
|
|
28
|
-
def detect_rendering_context
|
|
30
|
+
def detect_rendering_context(annotated: false)
|
|
29
31
|
Rendering::RenderingContext.new(
|
|
30
32
|
with_language_code: detect_language_code_format,
|
|
31
33
|
stage_format_long: detect_stage_format_long,
|
|
32
34
|
with_date: true,
|
|
35
|
+
annotated: annotated,
|
|
33
36
|
)
|
|
34
37
|
end
|
|
35
38
|
|
|
@@ -7,14 +7,27 @@ module Pubid
|
|
|
7
7
|
polymorphic: true
|
|
8
8
|
|
|
9
9
|
key_value do
|
|
10
|
-
|
|
10
|
+
# Serialized key is "base" (matches JIS); the attribute/method stays
|
|
11
|
+
# `base_identifier`, which relaton-index's get_id_number depends on.
|
|
12
|
+
map "base", to: :base_identifier, polymorphic: {
|
|
11
13
|
attribute: "_type",
|
|
12
14
|
class_map: Identifier::ISO_TYPE_MAP,
|
|
13
15
|
}
|
|
14
16
|
end
|
|
15
17
|
|
|
18
|
+
# A supplement carries the publisher/copublishers of the document it
|
|
19
|
+
# supplements. Delegate to the root rather than the immediate base so a
|
|
20
|
+
# nested supplement (e.g. ".../Amd 1/Cor 1") reads identity from the
|
|
21
|
+
# underlying standard in one hop, regardless of chain depth. This keeps a
|
|
22
|
+
# parsed supplement and a from_hash-deserialized one in agreement (== and
|
|
23
|
+
# index matching compare both). Guard on base_identifier: `root` returns
|
|
24
|
+
# self when there is no base, which would otherwise recurse forever.
|
|
16
25
|
def publisher
|
|
17
|
-
base_identifier
|
|
26
|
+
root.publisher if base_identifier
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def copublishers
|
|
30
|
+
root.copublishers if base_identifier
|
|
18
31
|
end
|
|
19
32
|
|
|
20
33
|
def to_s(**opts)
|