pubid 2.0.0.pre.alpha.2 → 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 +25 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -39
- 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 -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 +29 -74
- data/lib/pubid/api/identifier.rb +0 -51
- 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 -39
- 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/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/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 +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 -62
- 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 +63 -66
- 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 +7 -38
- 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 -57
- 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 +10 -11
- data/lib/pubid/components.rb +4 -1
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -59
- 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/identifier.rb +0 -43
- 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 +2 -17
- 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 -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 +51 -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 +8 -32
- 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 -26
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -22
- 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 -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 +5 -34
- data/lib/pubid/iec/identifiers/vap_identifier.rb +26 -19
- 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 +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 +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 -41
- 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 -42
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- 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 +50 -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 +218 -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/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 +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 -104
- 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/identifier.rb +0 -43
- 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 -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 +11 -48
- data/lib/pubid/nist/identifiers/base.rb +110 -47
- 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 +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 +3 -1
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +82 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifier.rb +0 -50
- 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 +7 -41
- 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 +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 +0 -23
- 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 +75 -44
- 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/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
|
@@ -4,7 +4,6 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Corrigendum < SupplementIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
|
|
9
8
|
TYPED_STAGES = [
|
|
10
9
|
::Pubid::Components::TypedStage.new(
|
|
@@ -59,7 +58,7 @@ module Pubid
|
|
|
59
58
|
),
|
|
60
59
|
::Pubid::Components::TypedStage.new(
|
|
61
60
|
code: :dcor,
|
|
62
|
-
abbr: ["DCor", "DCOR"],
|
|
61
|
+
abbr: ["DCor", "DCOR", "DIS Cor"],
|
|
63
62
|
short_abbr: "DCOR",
|
|
64
63
|
long_abbr: "DCor",
|
|
65
64
|
type_code: :cor,
|
|
@@ -69,7 +68,7 @@ module Pubid
|
|
|
69
68
|
),
|
|
70
69
|
::Pubid::Components::TypedStage.new(
|
|
71
70
|
code: :fdcor,
|
|
72
|
-
abbr: ["FDCor", "FDCOR", "FCOR"],
|
|
71
|
+
abbr: ["FDCor", "FDCOR", "FCOR", "FDIS Cor"],
|
|
73
72
|
short_abbr: "FDCOR",
|
|
74
73
|
long_abbr: "FDCor",
|
|
75
74
|
type_code: :cor,
|
|
@@ -100,7 +99,8 @@ module Pubid
|
|
|
100
99
|
].freeze
|
|
101
100
|
|
|
102
101
|
def self.type
|
|
103
|
-
{ key: :cor,
|
|
102
|
+
{ key: :cor,
|
|
103
|
+
web: :corrigendum, title: "Corrigendum", short: "COR" }
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
end
|
|
@@ -4,9 +4,14 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Directives < SingleIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
attribute :subgroup, ::Pubid::Components::Code
|
|
9
8
|
|
|
9
|
+
# Merges with Identifier's block (base attributes); only adds the
|
|
10
|
+
# Directives-specific subgroup so it survives to_hash/from_hash.
|
|
11
|
+
key_value do
|
|
12
|
+
map "subgroup", to: :subgroup
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
TYPED_STAGES = [
|
|
11
16
|
::Pubid::Components::TypedStage.new(
|
|
12
17
|
code: :pubguide,
|
|
@@ -22,7 +27,8 @@ module Pubid
|
|
|
22
27
|
].freeze
|
|
23
28
|
|
|
24
29
|
def self.type
|
|
25
|
-
{ key: :dir,
|
|
30
|
+
{ key: :dir,
|
|
31
|
+
web: :directives, title: "Directives", short: "DIR" }
|
|
26
32
|
end
|
|
27
33
|
|
|
28
34
|
def to_s(**opts)
|
|
@@ -4,9 +4,35 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class DirectivesSupplement < SupplementIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
attribute :supplement_publisher, ::Pubid::Components::Publisher
|
|
9
8
|
|
|
9
|
+
# supplement_publisher (e.g. "IEC" in "ISO/IEC DIR 1 IEC SUP") is needed
|
|
10
|
+
# by to_s/to_urn; serialize its body under "publisher" (the supplement's
|
|
11
|
+
# own publisher; the base's publisher lives in the nested base). This
|
|
12
|
+
# overrides the inherited publisher map, whose delegated value is nil or
|
|
13
|
+
# the omitted ISO default here.
|
|
14
|
+
key_value do
|
|
15
|
+
map "publisher",
|
|
16
|
+
with: { to: :supplement_publisher_to_kv, from: :supplement_publisher_from_kv }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def supplement_publisher_to_kv(model, doc)
|
|
20
|
+
body = model.supplement_publisher&.body
|
|
21
|
+
return if body.nil? || body.to_s.empty?
|
|
22
|
+
|
|
23
|
+
doc.add_child(
|
|
24
|
+
Lutaml::KeyValue::DataModel::Element.new("publisher", body.to_s),
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def supplement_publisher_from_kv(model, value)
|
|
29
|
+
model.supplement_publisher = ::Pubid::Components::Publisher.new(body: value.to_s)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# copublishers here is the base's (delegated), redundant with the nested
|
|
33
|
+
# base; don't duplicate it at the supplement level.
|
|
34
|
+
def copublishers_to_kv(_model, _doc); end
|
|
35
|
+
|
|
10
36
|
# Delegate base identifier attributes for easier access
|
|
11
37
|
def copublishers
|
|
12
38
|
base_identifier&.copublishers
|
|
@@ -28,7 +54,8 @@ module Pubid
|
|
|
28
54
|
].freeze
|
|
29
55
|
|
|
30
56
|
def self.type
|
|
31
|
-
{ key: :"dir-sup",
|
|
57
|
+
{ key: :"dir-sup",
|
|
58
|
+
web: :directives_supplement, title: "Directives Supplement", short: "SUP" }
|
|
32
59
|
end
|
|
33
60
|
|
|
34
61
|
# def render_directives_supplement_identifier(identifier)
|
|
@@ -47,10 +74,10 @@ format: nil, stage_format_long: nil, with_date: nil)
|
|
|
47
74
|
[
|
|
48
75
|
base_identifier.to_s(lang: lang, lang_single: lang_single,
|
|
49
76
|
with_edition: with_edition, format: format, stage_format_long: stage_format_long, with_date: with_date),
|
|
50
|
-
" #{supplement_publisher.
|
|
77
|
+
" #{supplement_publisher.render}",
|
|
51
78
|
" SUP", # Always render as "SUP" even though typed_stage.abbreviation is "DIR SUP"
|
|
52
|
-
(date ? ":#{date.
|
|
53
|
-
(edition ? " Edition #{edition.
|
|
79
|
+
(date ? ":#{date.render}" : ""),
|
|
80
|
+
(edition ? " Edition #{edition.value}" : ""),
|
|
54
81
|
].join
|
|
55
82
|
else
|
|
56
83
|
# Simplified rendering for bundled identifiers (just the supplement part)
|
|
@@ -63,13 +90,13 @@ format: nil, stage_format_long: nil, with_date: nil)
|
|
|
63
90
|
format: nil, stage_format_long: nil, with_date: nil)
|
|
64
91
|
date_str = if date
|
|
65
92
|
month_part = date.month ? "-#{date.month}" : ""
|
|
66
|
-
":#{date.
|
|
93
|
+
":#{date.render}#{month_part}"
|
|
67
94
|
else
|
|
68
95
|
""
|
|
69
96
|
end
|
|
70
97
|
|
|
71
98
|
[
|
|
72
|
-
supplement_publisher.
|
|
99
|
+
supplement_publisher.render,
|
|
73
100
|
" SUP",
|
|
74
101
|
date_str,
|
|
75
102
|
].join
|
|
@@ -78,13 +105,15 @@ format: nil, stage_format_long: nil, with_date: nil)
|
|
|
78
105
|
# DirectivesSupplement use urn:iso:doc scheme (not urn:iso:std)
|
|
79
106
|
# Format: urn:iso:doc:{base_urn_parts}:jtc:X:sup[:{year}][:{edition}]
|
|
80
107
|
def to_urn
|
|
108
|
+
urn_ctx = Rendering::RenderingContext.urn
|
|
109
|
+
|
|
81
110
|
# If this is a standalone supplement (no base_identifier), build URN directly
|
|
82
111
|
unless base_identifier
|
|
83
112
|
parts = ["urn", "iso", "doc"]
|
|
84
|
-
parts << supplement_publisher.
|
|
113
|
+
parts << supplement_publisher.render(context: urn_ctx) if supplement_publisher
|
|
85
114
|
parts << "sup"
|
|
86
|
-
parts << date.
|
|
87
|
-
parts <<
|
|
115
|
+
parts << date.render(context: urn_ctx) if date
|
|
116
|
+
parts << edition.render(context: urn_ctx) if edition&.number
|
|
88
117
|
return parts.join(":")
|
|
89
118
|
end
|
|
90
119
|
|
|
@@ -94,7 +123,7 @@ format: nil, stage_format_long: nil, with_date: nil)
|
|
|
94
123
|
# Handle JTC pattern specially
|
|
95
124
|
if supplement_publisher&.body&.match?(/^JTC\s+(\d+)$/i)
|
|
96
125
|
# Extract JTC number: "JTC 1" -> ["jtc", "1"]
|
|
97
|
-
jtc_parts = supplement_publisher.
|
|
126
|
+
jtc_parts = supplement_publisher.render(context: urn_ctx).split
|
|
98
127
|
# Insert JTC parts before "sup"
|
|
99
128
|
parts = base_urn.split(":")
|
|
100
129
|
parts.concat(jtc_parts) # Add "jtc" and "1"
|
|
@@ -102,14 +131,14 @@ format: nil, stage_format_long: nil, with_date: nil)
|
|
|
102
131
|
else
|
|
103
132
|
# Normal supplement
|
|
104
133
|
parts = [base_urn, "sup"]
|
|
105
|
-
parts << supplement_publisher.
|
|
134
|
+
parts << supplement_publisher.render(context: urn_ctx) if supplement_publisher
|
|
106
135
|
end
|
|
107
136
|
|
|
108
137
|
# Year (if present)
|
|
109
|
-
parts << date.
|
|
138
|
+
parts << date.render(context: urn_ctx) if date
|
|
110
139
|
|
|
111
140
|
# Edition (if present)
|
|
112
|
-
parts <<
|
|
141
|
+
parts << edition.render(context: urn_ctx) if edition&.number
|
|
113
142
|
|
|
114
143
|
parts.join(":")
|
|
115
144
|
end
|
|
@@ -4,7 +4,6 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Extract < SupplementIdentifier
|
|
7
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
8
7
|
|
|
9
8
|
TYPED_STAGES = [
|
|
10
9
|
::Pubid::Components::TypedStage.new(
|
|
@@ -18,7 +17,8 @@ module Pubid
|
|
|
18
17
|
].freeze
|
|
19
18
|
|
|
20
19
|
def self.type
|
|
21
|
-
{ key: :ext,
|
|
20
|
+
{ key: :ext,
|
|
21
|
+
web: :extract, title: "Extract", short: "Ext" }
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
# def self.get_renderer_class
|
|
@@ -8,7 +8,6 @@ module Pubid
|
|
|
8
8
|
include IdentifierMetadata
|
|
9
9
|
|
|
10
10
|
# Note: type attribute uses shared Components::Type from Pubid namespace
|
|
11
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
12
11
|
|
|
13
12
|
TYPED_STAGES = [
|
|
14
13
|
::Pubid::Components::TypedStage.new(
|
|
@@ -142,7 +141,8 @@ module Pubid
|
|
|
142
141
|
].freeze
|
|
143
142
|
|
|
144
143
|
def self.type
|
|
145
|
-
{ key: :is,
|
|
144
|
+
{ key: :is,
|
|
145
|
+
web: :international_standard, title: "International Standard", short: nil }
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
# Define machine-readable metadata
|
|
@@ -164,5 +164,5 @@ module Pubid
|
|
|
164
164
|
end
|
|
165
165
|
end
|
|
166
166
|
|
|
167
|
-
# NOTE: Identifiers are now registered in the ISO
|
|
168
|
-
# The global registry has been removed in favor of
|
|
167
|
+
# NOTE: Identifiers are now registered in the ISO flavor module
|
|
168
|
+
# The global registry has been removed in favor of self-describing types
|
|
@@ -5,7 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
# International Standardized Profile Identifier
|
|
7
7
|
class InternationalStandardizedProfile < SingleIdentifier
|
|
8
|
-
attribute :type, ::Pubid::Components::Type, default: -> { self.class.type[:key] }
|
|
9
8
|
|
|
10
9
|
TYPED_STAGES = [
|
|
11
10
|
::Pubid::Components::TypedStage.new(
|
|
@@ -52,7 +51,7 @@ module Pubid
|
|
|
52
51
|
code: :disp,
|
|
53
52
|
stage_code: :disp,
|
|
54
53
|
type_code: :isp,
|
|
55
|
-
abbr: ["DISP"],
|
|
54
|
+
abbr: ["DISP", "DIS ISP"],
|
|
56
55
|
name: "Draft International Standardized Profile",
|
|
57
56
|
harmonized_stages: %w[40.00 40.20 40.60 40.92 40.93 40.98 40.99],
|
|
58
57
|
),
|
|
@@ -61,7 +60,7 @@ module Pubid
|
|
|
61
60
|
code: :fdisp,
|
|
62
61
|
stage_code: :fdis,
|
|
63
62
|
type_code: :isp,
|
|
64
|
-
abbr: ["FDISP"],
|
|
63
|
+
abbr: ["FDISP", "FDIS ISP"],
|
|
65
64
|
name: "Final Draft International Standardized Profile",
|
|
66
65
|
harmonized_stages: %w[50.00 50.20 50.60 50.92],
|
|
67
66
|
),
|
|
@@ -85,7 +84,8 @@ module Pubid
|
|
|
85
84
|
].freeze
|
|
86
85
|
|
|
87
86
|
def self.type
|
|
88
|
-
{ key: :isp,
|
|
87
|
+
{ key: :isp,
|
|
88
|
+
web: :international_standardized_profile, title: "International Standardized Profile",
|
|
89
89
|
short: "ISP" }
|
|
90
90
|
end
|
|
91
91
|
end
|
|
@@ -4,12 +4,17 @@ module Pubid
|
|
|
4
4
|
module Iso
|
|
5
5
|
module Identifiers
|
|
6
6
|
class InternationalWorkshopAgreement < SingleIdentifier
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
# IWA identifiers have no publisher prefix (rendered "IWA 1", not
|
|
9
|
+
# "ISO IWA 1"), so there is no implied publisher to default on load.
|
|
10
|
+
def self.default_publisher
|
|
11
|
+
nil
|
|
12
|
+
end
|
|
8
13
|
|
|
9
14
|
TYPED_STAGES = [
|
|
10
15
|
::Pubid::Components::TypedStage.new(
|
|
11
|
-
code: :
|
|
12
|
-
stage_code: :
|
|
16
|
+
code: :pwiiwa,
|
|
17
|
+
stage_code: :pwi,
|
|
13
18
|
type_code: :iwa,
|
|
14
19
|
abbr: ["PWI IWA"],
|
|
15
20
|
name: "Proposed Work Item for International Workshop Agreement",
|
|
@@ -75,7 +80,8 @@ module Pubid
|
|
|
75
80
|
].freeze
|
|
76
81
|
|
|
77
82
|
def self.type
|
|
78
|
-
{ key: :iwa,
|
|
83
|
+
{ key: :iwa,
|
|
84
|
+
web: :international_workshop_agreement, title: "International Workshop Agreement", short: "IWA" }
|
|
79
85
|
end
|
|
80
86
|
|
|
81
87
|
def to_s(**opts)
|
|
@@ -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
|