pubid 2.0.0.pre.alpha.2 → 2.0.0.pre.alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.adoc +5 -1
- data/data/nist/update_codes.yaml +25 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +4 -55
- data/lib/pubid/amca/identifiers/base.rb +58 -47
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -21
- data/lib/pubid/amca/identifiers/publication.rb +0 -17
- data/lib/pubid/amca/identifiers/standard.rb +0 -4
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_generator.rb +2 -1
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +42 -1
- data/lib/pubid/ansi/builder.rb +5 -3
- data/lib/pubid/ansi/identifier.rb +1 -43
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
- data/lib/pubid/ansi/identifiers/standard.rb +2 -3
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +2 -31
- data/lib/pubid/ansi/urn_generator.rb +3 -38
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +38 -3
- data/lib/pubid/api/builder.rb +33 -74
- data/lib/pubid/api/identifier.rb +5 -52
- data/lib/pubid/api/identifiers/base.rb +2 -14
- data/lib/pubid/api/identifiers/bulletin.rb +0 -2
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
- data/lib/pubid/api/identifiers/mpms.rb +0 -20
- data/lib/pubid/api/identifiers/publication.rb +0 -2
- data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
- data/lib/pubid/api/identifiers/specification.rb +0 -2
- data/lib/pubid/api/identifiers/standard.rb +0 -2
- data/lib/pubid/api/identifiers/technical_report.rb +0 -2
- data/lib/pubid/api/identifiers/typeless_standard.rb +0 -16
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +5 -20
- data/lib/pubid/api/urn_generator.rb +0 -18
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +51 -5
- data/lib/pubid/ashrae/builder.rb +3 -3
- data/lib/pubid/ashrae/identifier.rb +7 -55
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
- data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
- data/lib/pubid/ashrae/identifiers/base.rb +29 -15
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
- data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
- data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
- data/lib/pubid/ashrae/parser.rb +4 -0
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +0 -13
- data/lib/pubid/ashrae/urn_generator.rb +0 -8
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +46 -1
- data/lib/pubid/asme/components/code.rb +10 -2
- data/lib/pubid/asme/identifier.rb +0 -46
- data/lib/pubid/asme/identifiers/base.rb +0 -60
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/single_identifier.rb +3 -1
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +42 -1
- data/lib/pubid/astm/components/code.rb +9 -0
- data/lib/pubid/{jis → astm}/components.rb +1 -1
- data/lib/pubid/astm/identifier.rb +0 -77
- data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
- data/lib/pubid/astm/identifiers/data_series.rb +0 -14
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
- data/lib/pubid/astm/identifiers/manual.rb +0 -27
- data/lib/pubid/astm/identifiers/monograph.rb +0 -14
- data/lib/pubid/astm/identifiers/research_report.rb +0 -7
- data/lib/pubid/astm/identifiers/standard.rb +0 -39
- data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
- data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
- data/lib/pubid/astm/identifiers.rb +18 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +3 -11
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +39 -27
- data/lib/pubid/bsi/builder.rb +21 -12
- data/lib/pubid/bsi/identifier.rb +5 -85
- data/lib/pubid/bsi/identifiers/addendum_document.rb +2 -36
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +8 -48
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +8 -39
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +2 -55
- data/lib/pubid/bsi/identifiers/amendment.rb +2 -22
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +1 -6
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -87
- data/lib/pubid/bsi/identifiers/committee_document.rb +0 -16
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -87
- data/lib/pubid/bsi/identifiers/corrigendum.rb +2 -10
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +0 -36
- data/lib/pubid/bsi/identifiers/disc.rb +0 -29
- data/lib/pubid/bsi/identifiers/draft_document.rb +2 -46
- data/lib/pubid/bsi/identifiers/electronic_book.rb +2 -38
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +2 -18
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +0 -47
- data/lib/pubid/bsi/identifiers/flex.rb +0 -35
- data/lib/pubid/bsi/identifiers/handbook.rb +1 -15
- data/lib/pubid/bsi/identifiers/index.rb +0 -32
- data/lib/pubid/bsi/identifiers/method.rb +0 -41
- data/lib/pubid/bsi/identifiers/national_annex.rb +4 -29
- data/lib/pubid/bsi/identifiers/practice_guide.rb +1 -6
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +2 -54
- data/lib/pubid/bsi/identifiers/published_document.rb +2 -54
- data/lib/pubid/bsi/identifiers/section.rb +0 -30
- data/lib/pubid/bsi/identifiers/set.rb +3 -20
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +0 -9
- data/lib/pubid/bsi/identifiers/supplement_document.rb +2 -24
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +0 -46
- data/lib/pubid/bsi/identifiers/technical_specification.rb +2 -47
- data/lib/pubid/bsi/identifiers/test_method.rb +0 -32
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +2 -17
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +33 -78
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +232 -2
- data/lib/pubid/builder/base.rb +57 -10
- data/lib/pubid/bundled_identifier.rb +0 -1
- data/lib/pubid/ccsds/builder.rb +4 -3
- data/lib/pubid/ccsds/identifier.rb +53 -68
- data/lib/pubid/ccsds/identifiers/base.rb +11 -61
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +39 -1
- data/lib/pubid/cen_cenelec/builder.rb +12 -14
- data/lib/pubid/cen_cenelec/identifier.rb +11 -40
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +9 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +0 -10
- data/lib/pubid/cen_cenelec/identifiers/base.rb +2 -45
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +0 -27
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +0 -15
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +0 -4
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +9 -90
- data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +172 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +10 -57
- data/lib/pubid/cie/single_identifier.rb +4 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +47 -1
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +22 -8
- data/lib/pubid/components/date.rb +23 -16
- data/lib/pubid/components/edition.rb +9 -6
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +6 -4
- data/lib/pubid/components/locality.rb +10 -1
- data/lib/pubid/components/publisher.rb +9 -6
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +5 -14
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +5 -15
- data/lib/pubid/components/typed_stage.rb +10 -11
- data/lib/pubid/components.rb +4 -1
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +9 -59
- data/lib/pubid/csa/identifiers/base.rb +0 -123
- data/lib/pubid/csa/identifiers/cec.rb +0 -103
- data/lib/pubid/csa/identifiers/series.rb +0 -104
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/single_identifier.rb +1 -1
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +46 -1
- data/lib/pubid/etsi/components/code.rb +10 -9
- data/lib/pubid/etsi/components/version.rb +0 -5
- data/lib/pubid/etsi/identifier.rb +4 -55
- data/lib/pubid/etsi/identifiers/base.rb +31 -27
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +1 -11
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +44 -1
- data/lib/pubid/export/exporter.rb +4 -46
- data/lib/pubid/export/flavor_exporter.rb +111 -278
- data/lib/pubid/export.rb +0 -6
- data/lib/pubid/identifier.rb +92 -18
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +7 -66
- data/lib/pubid/idf/identifiers/amendment.rb +2 -1
- data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
- data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
- data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
- data/lib/pubid/idf/parser.rb +3 -2
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/supplement_identifier.rb +2 -10
- data/lib/pubid/idf/urn_generator.rb +4 -39
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +55 -1
- data/lib/pubid/iec/builder.rb +46 -64
- data/lib/pubid/iec/components/code.rb +8 -32
- data/lib/pubid/iec/components/publisher.rb +0 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +251 -213
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +5 -33
- data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +23 -26
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +35 -24
- data/lib/pubid/iec/identifiers/guide.rb +0 -2
- data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
- data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +17 -11
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
- data/lib/pubid/iec/identifiers/test_report_form.rb +3 -35
- data/lib/pubid/iec/identifiers/vap_identifier.rb +24 -21
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +2 -50
- data/lib/pubid/iec/identifiers.rb +30 -0
- data/lib/pubid/iec/parser.rb +13 -12
- data/lib/pubid/iec/renderer.rb +254 -0
- data/lib/pubid/iec/single_identifier.rb +6 -12
- data/lib/pubid/iec/supplement_identifier.rb +58 -54
- data/lib/pubid/iec/urn_generator.rb +3 -3
- data/lib/pubid/iec/urn_parser.rb +3 -3
- data/lib/pubid/iec.rb +43 -67
- data/lib/pubid/ieee/builder.rb +12 -12
- data/lib/pubid/ieee/components/code.rb +8 -0
- data/lib/pubid/ieee/components/draft.rb +14 -0
- data/lib/pubid/ieee/components/relationship.rb +5 -149
- data/lib/pubid/ieee/identifier.rb +5 -52
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +0 -9
- data/lib/pubid/ieee/identifiers/base.rb +221 -556
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +0 -10
- data/lib/pubid/ieee/identifiers/corrigendum.rb +0 -12
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +0 -10
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +0 -4
- data/lib/pubid/ieee/identifiers/dual_published.rb +0 -4
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +0 -9
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +0 -10
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +0 -18
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +0 -6
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +0 -7
- data/lib/pubid/ieee/identifiers/si_standard.rb +0 -38
- data/lib/pubid/ieee/identifiers/standard.rb +1 -1
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +307 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +66 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +7 -59
- data/lib/pubid/iho/identifiers/base.rb +64 -31
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +2 -2
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +52 -1
- data/lib/pubid/iso/builder.rb +55 -53
- data/lib/pubid/iso/bundled_identifier.rb +51 -0
- data/lib/pubid/iso/components/code.rb +7 -19
- data/lib/pubid/iso/components/publisher.rb +10 -8
- data/lib/pubid/iso/components.rb +2 -4
- data/lib/pubid/iso/identifier.rb +219 -252
- data/lib/pubid/iso/identifiers/addendum.rb +9 -6
- data/lib/pubid/iso/identifiers/amendment.rb +8 -4
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +0 -1
- data/lib/pubid/iso/identifiers/directives.rb +8 -2
- data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +0 -1
- data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +10 -4
- data/lib/pubid/iso/identifiers/pas.rb +2 -2
- data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
- data/lib/pubid/iso/identifiers/supplement.rb +11 -3
- data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
- data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
- data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
- data/lib/pubid/iso/identifiers.rb +0 -1
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +22 -4
- data/lib/pubid/iso/single_identifier.rb +0 -4
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +66 -182
- data/lib/pubid/iso/urn_parser.rb +12 -7
- data/lib/pubid/iso.rb +177 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +9 -7
- data/lib/pubid/itu/components/sector.rb +15 -4
- data/lib/pubid/itu/components/series.rb +0 -4
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +4 -116
- data/lib/pubid/itu/identifiers/amendment.rb +0 -2
- data/lib/pubid/itu/identifiers/annex.rb +0 -2
- data/lib/pubid/itu/identifiers/base.rb +124 -128
- data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
- data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
- data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
- data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
- data/lib/pubid/itu/identifiers/supplement.rb +0 -2
- data/lib/pubid/itu/urn_parser.rb +23 -0
- data/lib/pubid/itu.rb +44 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifier.rb +0 -43
- data/lib/pubid/jcgm/identifiers/amendment.rb +0 -9
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +0 -12
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +0 -8
- data/lib/pubid/jcgm/urn_generator.rb +4 -6
- data/lib/pubid/jcgm/urn_parser.rb +23 -0
- data/lib/pubid/jcgm.rb +43 -2
- data/lib/pubid/jis/builder.rb +44 -52
- data/lib/pubid/jis/identifier.rb +120 -46
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +31 -5
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +6 -12
- data/lib/pubid/jis/supplement_identifier.rb +17 -14
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +42 -2
- data/lib/pubid/nist/builder.rb +63 -1871
- data/lib/pubid/nist/caster.rb +1272 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
- data/lib/pubid/nist/components/code.rb +9 -20
- data/lib/pubid/nist/components/supplement.rb +2 -2
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +8 -60
- data/lib/pubid/nist/identifiers/base.rb +564 -492
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -8
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +15 -24
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
- data/lib/pubid/nist/identifiers/handbook.rb +2 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
- data/lib/pubid/nist/identifiers/monograph.rb +7 -3
- data/lib/pubid/nist/identifiers/report.rb +4 -2
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
- data/lib/pubid/nist/identifiers.rb +1 -0
- data/lib/pubid/nist/parser.rb +62 -452
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +428 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +148 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +60 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +3 -1
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +86 -4
- data/lib/pubid/oiml/builder.rb +21 -3
- data/lib/pubid/oiml/components/code.rb +17 -0
- data/lib/pubid/oiml/identifier.rb +40 -46
- data/lib/pubid/oiml/identifiers/annex.rb +13 -46
- data/lib/pubid/oiml/identifiers/errata.rb +15 -0
- data/lib/pubid/oiml/identifiers.rb +1 -1
- data/lib/pubid/oiml/parser.rb +59 -12
- data/lib/pubid/oiml/renderer.rb +171 -0
- data/lib/pubid/oiml/single_identifier.rb +61 -42
- data/lib/pubid/oiml/supplement_identifier.rb +31 -17
- data/lib/pubid/oiml/urn_generator.rb +0 -8
- data/lib/pubid/oiml/urn_parser.rb +22 -0
- data/lib/pubid/oiml.rb +42 -1
- data/lib/pubid/plateau/identifier.rb +4 -55
- data/lib/pubid/plateau/identifiers/base.rb +45 -36
- data/lib/pubid/plateau/identifiers/handbook.rb +0 -6
- data/lib/pubid/plateau/identifiers/technical_report.rb +0 -4
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +0 -4
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +43 -1
- data/lib/pubid/renderers/directives_renderer.rb +22 -8
- data/lib/pubid/renderers/guide_renderer.rb +4 -2
- data/lib/pubid/renderers/human_readable.rb +18 -7
- data/lib/pubid/rendering/context.rb +28 -19
- data/lib/pubid/rendering.rb +0 -3
- data/lib/pubid/sae/components/date.rb +8 -0
- data/lib/pubid/sae/components/type.rb +5 -1
- data/lib/pubid/sae/identifier.rb +4 -35
- data/lib/pubid/sae/identifiers/base.rb +26 -31
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +2 -10
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +42 -1
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +9 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +45 -7
- data/lib/tasks/export.rake +6 -5
- data/lib/tasks/website-data.json +1940 -1882
- metadata +75 -45
- data/lib/pubid/amca/scheme.rb +0 -16
- data/lib/pubid/ansi/scheme.rb +0 -15
- data/lib/pubid/api/scheme.rb +0 -66
- data/lib/pubid/ashrae/scheme.rb +0 -53
- data/lib/pubid/asme/scheme.rb +0 -37
- data/lib/pubid/astm/scheme.rb +0 -55
- data/lib/pubid/bsi/identifiers/base.rb +0 -11
- data/lib/pubid/bsi/scheme.rb +0 -243
- data/lib/pubid/ccsds/scheme.rb +0 -57
- data/lib/pubid/cen_cenelec/scheme.rb +0 -164
- data/lib/pubid/cie/scheme.rb +0 -64
- data/lib/pubid/components/factory.rb +0 -50
- data/lib/pubid/csa/scheme.rb +0 -44
- data/lib/pubid/etsi/scheme.rb +0 -42
- data/lib/pubid/export/data_class_exporter.rb +0 -59
- data/lib/pubid/export/ieee_exporter.rb +0 -78
- data/lib/pubid/export/itu_exporter.rb +0 -66
- data/lib/pubid/export/nist_exporter.rb +0 -64
- data/lib/pubid/export/registry_exporter.rb +0 -90
- data/lib/pubid/export/scheme_exporter.rb +0 -70
- data/lib/pubid/identifier_registry.rb +0 -198
- data/lib/pubid/idf/scheme.rb +0 -61
- data/lib/pubid/iec/scheme.rb +0 -71
- data/lib/pubid/ieee/scheme.rb +0 -90
- data/lib/pubid/iho/scheme.rb +0 -29
- data/lib/pubid/iso/identifiers/base.rb +0 -115
- data/lib/pubid/iso/scheme.rb +0 -193
- data/lib/pubid/itu/scheme.rb +0 -174
- data/lib/pubid/jcgm/scheme.rb +0 -60
- data/lib/pubid/jis/components/code.rb +0 -59
- data/lib/pubid/jis/identifiers/base.rb +0 -72
- data/lib/pubid/jis/scheme.rb +0 -49
- data/lib/pubid/nist/components/publisher.rb +0 -24
- data/lib/pubid/nist/scheme.rb +0 -199
- data/lib/pubid/oiml/identifiers/base.rb +0 -36
- data/lib/pubid/oiml/scheme.rb +0 -46
- data/lib/pubid/plateau/scheme.rb +0 -45
- data/lib/pubid/rendering/base.rb +0 -73
- data/lib/pubid/rendering/common.rb +0 -211
- data/lib/pubid/rendering/format.rb +0 -25
- data/lib/pubid/sae/scheme.rb +0 -47
- data/lib/pubid/scheme.rb +0 -219
|
@@ -15,18 +15,24 @@ module Pubid
|
|
|
15
15
|
#
|
|
16
16
|
# Format in YAML files:
|
|
17
17
|
# plain string match: "IEC 60285-/1:1989" → "IEC 60285-1:1989"
|
|
18
|
-
# regex match: "/^NBS CIRC sup$/"
|
|
18
|
+
# regex match: "/^NBS CIRC sup$/" → "NBS CIRC 24e7sup"
|
|
19
|
+
# regex with flags: "/^nbs\\b/i" → "NBS"
|
|
19
20
|
#
|
|
20
21
|
# Plain strings use full-line anchoring (^pattern$).
|
|
21
|
-
# Regex patterns are wrapped in /.../ slashes
|
|
22
|
+
# Regex patterns are wrapped in /.../ slashes with optional trailing flags
|
|
23
|
+
# (i = IGNORECASE, m = MULTILINE, x = EXTENDED) and applied via gsub.
|
|
22
24
|
class UpdateCodes
|
|
23
25
|
DATA_DIR = Pathname.new(__dir__).join("../../../data").expand_path
|
|
24
26
|
|
|
27
|
+
# Regex literal: /body/flags where flags is optional (i, m, x).
|
|
28
|
+
REGEX_LITERAL = %r{\A/(.*)/([imx]*)\z}m
|
|
29
|
+
|
|
25
30
|
class << self
|
|
26
31
|
# Apply update_codes substitutions for the given flavor.
|
|
27
32
|
#
|
|
28
33
|
# @param code [String] identifier string to normalize
|
|
29
|
-
# @param flavor [Symbol, String] flavor name
|
|
34
|
+
# @param flavor [Symbol, String] flavor name
|
|
35
|
+
# (e.g., :iso, :iec, :ieee, :nist)
|
|
30
36
|
# @return [String] normalized identifier string
|
|
31
37
|
#
|
|
32
38
|
# @example
|
|
@@ -37,9 +43,7 @@ module Pubid
|
|
|
37
43
|
return code if codes.nil? || codes.empty?
|
|
38
44
|
|
|
39
45
|
codes.each do |from, to|
|
|
40
|
-
code = code.gsub(
|
|
41
|
-
from.match?(%r{^/.*/$}) ? Regexp.new(from[1..-2]) : /^#{Regexp.escape(from)}$/, to
|
|
42
|
-
)
|
|
46
|
+
code = code.gsub(compile_pattern(from), to.to_s)
|
|
43
47
|
end
|
|
44
48
|
code
|
|
45
49
|
end
|
|
@@ -56,13 +60,30 @@ module Pubid
|
|
|
56
60
|
|
|
57
61
|
# Available flavors that have update_codes files.
|
|
58
62
|
#
|
|
59
|
-
# @return [Array<Symbol>]
|
|
63
|
+
# @return [Array<Symbol>] flavors with data/{flavor}/update_codes.yaml
|
|
60
64
|
def flavors
|
|
61
65
|
@flavors ||= DATA_DIR.children.select(&:directory?).map do |dir|
|
|
62
66
|
dir.basename.to_s.to_sym
|
|
63
67
|
end.select { |f| (DATA_DIR / f.to_s / "update_codes.yaml").exist? }
|
|
64
68
|
end
|
|
65
69
|
|
|
70
|
+
# Compile a YAML key into a Regexp. Plain strings are anchored to the
|
|
71
|
+
# full line; regex literals support optional trailing flags.
|
|
72
|
+
def compile_pattern(from)
|
|
73
|
+
match = from.to_s.match(REGEX_LITERAL)
|
|
74
|
+
return /^#{Regexp.escape(from.to_s)}$/ unless match
|
|
75
|
+
|
|
76
|
+
Regexp.new(match[1], compile_options(match[2]))
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def compile_options(flags)
|
|
80
|
+
options = 0
|
|
81
|
+
options |= Regexp::IGNORECASE if flags.include?("i")
|
|
82
|
+
options |= Regexp::MULTILINE if flags.include?("m")
|
|
83
|
+
options |= Regexp::EXTENDED if flags.include?("x")
|
|
84
|
+
options
|
|
85
|
+
end
|
|
86
|
+
|
|
66
87
|
private
|
|
67
88
|
|
|
68
89
|
def load_yaml(flavor)
|
data/lib/pubid/csa/identifier.rb
CHANGED
|
@@ -2,64 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Csa
|
|
5
|
-
class
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
csa_adopted: "CsaAdopted",
|
|
15
|
-
package: "Package",
|
|
16
|
-
series: "Series",
|
|
17
|
-
}.freeze
|
|
18
|
-
|
|
19
|
-
def self.create(type: nil, **opts)
|
|
20
|
-
klass = resolve_create_class(type)
|
|
21
|
-
klass.new(**coerce_create_attrs(opts, klass: klass))
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def self.resolve_create_class(type)
|
|
25
|
-
return Identifiers::Standard if type.nil?
|
|
26
|
-
|
|
27
|
-
klass_name = TYPE_KEY_TO_KLASS[type.to_sym]
|
|
28
|
-
raise ArgumentError, "Unknown CSA type: #{type.inspect}" unless klass_name
|
|
29
|
-
|
|
30
|
-
Identifiers.const_get(klass_name)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def self.coerce_create_attrs(opts, klass:)
|
|
34
|
-
attrs = {}
|
|
35
|
-
|
|
36
|
-
if (v = opts[:code] || opts[:number])
|
|
37
|
-
attrs[:code] = Pubid::Components::Code.new(value: v.to_s)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
if opts[:year]
|
|
41
|
-
year_str = opts[:year].to_s
|
|
42
|
-
attrs[:year] = year_str
|
|
43
|
-
# Preserve 4-digit year rendering (e.g. "B51:2024") rather than
|
|
44
|
-
# collapsing to "B51:24".
|
|
45
|
-
attrs[:original_year_4digit] = year_str.length == 4 unless opts.key?(:original_year_4digit)
|
|
5
|
+
# Common base class for all CSA identifiers. SingleIdentifier (and the
|
|
6
|
+
# concrete Identifiers::* types through it) descends from it, so every CSA
|
|
7
|
+
# identifier is `is_a?(Pubid::Csa::Identifier)` natively and gets the shared
|
|
8
|
+
# polymorphic `from_hash`. (The Wrapper/Composite container models are
|
|
9
|
+
# separate Lutaml::Model types, not identifiers.)
|
|
10
|
+
class Identifier < ::Pubid::Identifier
|
|
11
|
+
def self.parse(input)
|
|
12
|
+
if input.length > Pubid::MAX_INPUT_LENGTH
|
|
13
|
+
raise ArgumentError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
46
14
|
end
|
|
47
|
-
attrs[:original_year_4digit] = opts[:original_year_4digit] if opts.key?(:original_year_4digit)
|
|
48
|
-
attrs[:year_format] = opts[:year_format].to_s if opts[:year_format]
|
|
49
|
-
attrs[:year_prefix] = opts[:year_prefix].to_s if opts[:year_prefix]
|
|
50
|
-
attrs[:reaffirmation] = opts[:reaffirmation].to_s if opts[:reaffirmation]
|
|
51
|
-
attrs[:french] = opts[:french] if opts.key?(:french)
|
|
52
|
-
attrs[:has_publisher] = opts.fetch(:has_publisher, true)
|
|
53
|
-
attrs[:publisher_prefix] = opts[:publisher_prefix].to_s if opts[:publisher_prefix]
|
|
54
|
-
attrs[:series_prefix] = opts[:series_prefix].to_s if opts[:series_prefix]
|
|
55
|
-
attrs[:series] = opts[:series] if opts.key?(:series) && [true, false].include?(opts[:series])
|
|
56
|
-
attrs[:package] = opts[:package].to_s if opts[:package]
|
|
57
|
-
attrs[:no_number] = opts[:no_number].to_s if opts[:no_number]
|
|
58
|
-
attrs
|
|
59
|
-
end
|
|
60
|
-
private_class_method :resolve_create_class, :coerce_create_attrs
|
|
61
15
|
|
|
62
|
-
def self.parse(input)
|
|
63
16
|
# Filter out comments
|
|
64
17
|
return nil if input.start_with?("#")
|
|
65
18
|
|
|
@@ -483,9 +436,6 @@ module Pubid
|
|
|
483
436
|
end
|
|
484
437
|
|
|
485
438
|
def self.parse_external_standard(input)
|
|
486
|
-
# Ensure full Pubid is loaded (handles Scheme and all flavors)
|
|
487
|
-
require_relative "../../pubid" unless defined?(Pubid::Iso) && defined?(Pubid::Iec)
|
|
488
|
-
|
|
489
439
|
# Try ISO/IEC first (most common)
|
|
490
440
|
if input.match?(/^(ISO\/IEC|ISO|IEC|CEI|CEI\/IEC)\s/)
|
|
491
441
|
begin
|
|
@@ -4,129 +4,6 @@ module Pubid
|
|
|
4
4
|
module Csa
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Base < SingleIdentifier
|
|
7
|
-
def to_s
|
|
8
|
-
prefix = publisher_prefix || "CSA"
|
|
9
|
-
|
|
10
|
-
# Handle code_only identifiers (empty string means no prefix)
|
|
11
|
-
if prefix == ""
|
|
12
|
-
# No prefix for code_only identifiers
|
|
13
|
-
parts = []
|
|
14
|
-
else
|
|
15
|
-
# Determine if we need space after prefix
|
|
16
|
-
# CAN/CSA- and CAN3- end with dash, so no space needed
|
|
17
|
-
needs_space = !prefix.end_with?("-")
|
|
18
|
-
|
|
19
|
-
parts = []
|
|
20
|
-
parts << prefix
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Code and year together
|
|
24
|
-
code_part = code.to_s if code
|
|
25
|
-
|
|
26
|
-
# NO. keyword
|
|
27
|
-
if no_number
|
|
28
|
-
code_part += " NO. #{no_number}"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Series prefix and keyword (before year)
|
|
32
|
-
if series_prefix
|
|
33
|
-
code_part += " #{series_prefix} SERIES"
|
|
34
|
-
elsif series
|
|
35
|
-
# SERIES without prefix
|
|
36
|
-
code_part += " SERIES"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
parts << code_part if code_part
|
|
40
|
-
|
|
41
|
-
# Year with proper format (colon or dash)
|
|
42
|
-
if year
|
|
43
|
-
# Use dash if year_format is dash, otherwise colon
|
|
44
|
-
separator = year_format == "dash" ? "-" : ":"
|
|
45
|
-
year_part = separator
|
|
46
|
-
year_part += year_prefix if year_prefix # Add M or F prefix
|
|
47
|
-
year_part += "F" if french && year_format != "dash" && !year_prefix # Only add F if no prefix
|
|
48
|
-
# Convert 4-digit year back to 2-digit for M/F prefix preservation
|
|
49
|
-
# M1983 → M83, F1983 → F83, 1983 → 83, 20xx → xx
|
|
50
|
-
# However, preserve original 4-digit format if the input was 4-digit (original_year_4digit)
|
|
51
|
-
year_str = year.to_s
|
|
52
|
-
year_part += if original_year_4digit
|
|
53
|
-
# Preserve 4-digit format (e.g., "M1981" stays "M1981")
|
|
54
|
-
year_str
|
|
55
|
-
elsif year_prefix&.match?(/^[MF]$/) && year_str.length == 4 && year_str.start_with?("19")
|
|
56
|
-
# M/F + 4-digit year (1900s) → convert to 2-digit with prefix
|
|
57
|
-
year_str[2..3]
|
|
58
|
-
elsif year_str.length == 4 && year_str.start_with?("20")
|
|
59
|
-
# 2000s → just last 2 digits
|
|
60
|
-
year_str[2..3]
|
|
61
|
-
elsif year_str.length == 4 && year_str.start_with?("19") && !original_year_4digit
|
|
62
|
-
# 1900s with no M/F prefix, but original was 2-digit (e.g., CAN3-Z299.0-86)
|
|
63
|
-
# Convert back to 2-digit
|
|
64
|
-
year_str[2..3]
|
|
65
|
-
else
|
|
66
|
-
# Other formats - keep as-is
|
|
67
|
-
year_str
|
|
68
|
-
end
|
|
69
|
-
parts[-1] += year_part
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
result = if prefix == ""
|
|
73
|
-
# No prefix, just join parts
|
|
74
|
-
parts.join(" ")
|
|
75
|
-
elsif needs_space
|
|
76
|
-
parts.join(" ")
|
|
77
|
-
elsif parts.length == 2
|
|
78
|
-
# No space after dash-ending prefix - join first two parts directly
|
|
79
|
-
# If there are more parts after code, they should still have spaces
|
|
80
|
-
parts.join
|
|
81
|
-
else
|
|
82
|
-
# More than 2 parts shouldn't happen in current design
|
|
83
|
-
parts.join
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# Reaffirmation - preserve original format and determine spacing
|
|
87
|
-
if reaffirmation
|
|
88
|
-
# Check if year was originally 2-digit (original_year_4digit flag)
|
|
89
|
-
year_was_2digit = !original_year_4digit
|
|
90
|
-
|
|
91
|
-
# Check if reaffirmation was originally 4-digit (original_reaffirmation_4digit flag)
|
|
92
|
-
reaffirmation_was_4digit = original_reaffirmation_4digit
|
|
93
|
-
|
|
94
|
-
# Preserve original reaffirmation format
|
|
95
|
-
# If original was 4-digit, keep as 4-digit
|
|
96
|
-
# If original was 2-digit, convert from 4-digit storage back to 2-digit
|
|
97
|
-
reaffirmation_str = if reaffirmation_was_4digit
|
|
98
|
-
# Original was 4-digit, keep as-is
|
|
99
|
-
reaffirmation.to_s
|
|
100
|
-
elsif reaffirmation.to_s.length == 4 && reaffirmation.to_s.start_with?(
|
|
101
|
-
"19", "20"
|
|
102
|
-
)
|
|
103
|
-
# Original was 2-digit, convert 4-digit storage back to 2-digit
|
|
104
|
-
# (R2004) → (R04), (R1994) → (R94)
|
|
105
|
-
reaffirmation.to_s[2..3]
|
|
106
|
-
else
|
|
107
|
-
# Already 2-digit or other format
|
|
108
|
-
reaffirmation.to_s
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# Determine spacing based on original formats
|
|
112
|
-
# Space needed if year is 2-digit and reaffirmation is 4-digit (original format)
|
|
113
|
-
# No space if both year and reaffirmation are 2-digit, or both are 4-digit
|
|
114
|
-
if year_was_2digit && reaffirmation_was_4digit
|
|
115
|
-
# Year was 2-digit, reaffirmation was 4-digit → add space
|
|
116
|
-
result += " (R#{reaffirmation_str})"
|
|
117
|
-
else
|
|
118
|
-
# Both 2-digit, both 4-digit, or other cases → no space
|
|
119
|
-
result += "(R#{reaffirmation_str})"
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
# Package (already has leading space from parser)
|
|
124
|
-
if package
|
|
125
|
-
result += package
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
result
|
|
129
|
-
end
|
|
130
7
|
end
|
|
131
8
|
end
|
|
132
9
|
end
|
|
@@ -20,109 +20,6 @@ module Pubid
|
|
|
20
20
|
|
|
21
21
|
@code ||= Components::Code.new(value: "#{cec_part.value}-#{no_number.value}")
|
|
22
22
|
end
|
|
23
|
-
|
|
24
|
-
def to_s
|
|
25
|
-
parts = []
|
|
26
|
-
|
|
27
|
-
# Publisher prefix (CSA, CAN/CSA-, CAN3-)
|
|
28
|
-
prefix = publisher_prefix || "CSA"
|
|
29
|
-
|
|
30
|
-
# Determine if we need space after prefix
|
|
31
|
-
# CAN/CSA- and CAN3- end with dash, so no space needed
|
|
32
|
-
needs_space = !prefix.end_with?("-")
|
|
33
|
-
|
|
34
|
-
parts << prefix unless prefix == ""
|
|
35
|
-
|
|
36
|
-
# CEC Part (C22.2, C22.3, etc.)
|
|
37
|
-
parts << cec_part.value if cec_part
|
|
38
|
-
|
|
39
|
-
# NO. notation - this is the key semantic component
|
|
40
|
-
parts << "NO."
|
|
41
|
-
|
|
42
|
-
# Number after NO.
|
|
43
|
-
parts << no_number.value if no_number
|
|
44
|
-
|
|
45
|
-
# Determine separator based on prefix ending
|
|
46
|
-
result = if prefix == ""
|
|
47
|
-
parts.join(" ")
|
|
48
|
-
elsif needs_space
|
|
49
|
-
parts.join(" ")
|
|
50
|
-
elsif parts.length <= 2
|
|
51
|
-
# No space after dash-ending prefix (CAN/CSA-, CAN3-)
|
|
52
|
-
# Join first two parts directly, rest with spaces
|
|
53
|
-
parts.join
|
|
54
|
-
else
|
|
55
|
-
parts[0] + parts[1..].join(" ")
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Year with proper format (colon or dash)
|
|
59
|
-
if year
|
|
60
|
-
# Use dash if year_format is dash, otherwise colon
|
|
61
|
-
separator = year_format == "dash" ? "-" : ":"
|
|
62
|
-
year_part = separator
|
|
63
|
-
|
|
64
|
-
# Convert 4-digit year back to 2-digit for display
|
|
65
|
-
year_str = year.to_s
|
|
66
|
-
display_year = if year_str.length == 4 && year_str.start_with?("20")
|
|
67
|
-
year_str[2..3]
|
|
68
|
-
elsif year_str.length == 4 && year_str.start_with?("19")
|
|
69
|
-
year_str[2..3]
|
|
70
|
-
else
|
|
71
|
-
year_str
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# Add prefix if present
|
|
75
|
-
year_part += if year_prefix
|
|
76
|
-
year_prefix + display_year
|
|
77
|
-
elsif french && year_format != "dash"
|
|
78
|
-
# Only add F if no prefix already set
|
|
79
|
-
"F#{display_year}"
|
|
80
|
-
else
|
|
81
|
-
display_year
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
result += year_part
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
# Reaffirmation - preserve original format and determine spacing
|
|
88
|
-
if reaffirmation
|
|
89
|
-
# Check if year was originally 2-digit (original_year_4digit flag)
|
|
90
|
-
year_was_2digit = !original_year_4digit
|
|
91
|
-
|
|
92
|
-
# Check if reaffirmation was originally 4-digit (original_reaffirmation_4digit flag)
|
|
93
|
-
reaffirmation_was_4digit = original_reaffirmation_4digit
|
|
94
|
-
|
|
95
|
-
# Preserve original reaffirmation format
|
|
96
|
-
# If original was 4-digit, keep as 4-digit
|
|
97
|
-
# If original was 2-digit, convert from 4-digit storage back to 2-digit
|
|
98
|
-
reaffirmation_str = if reaffirmation_was_4digit
|
|
99
|
-
# Original was 4-digit, keep as-is
|
|
100
|
-
reaffirmation.to_s
|
|
101
|
-
elsif reaffirmation.to_s.length == 4 && reaffirmation.to_s.start_with?(
|
|
102
|
-
"19", "20"
|
|
103
|
-
)
|
|
104
|
-
# Original was 2-digit, convert 4-digit storage back to 2-digit
|
|
105
|
-
# (R2004) → (R04), (R1994) → (R94)
|
|
106
|
-
reaffirmation.to_s[2..3]
|
|
107
|
-
else
|
|
108
|
-
# Already 2-digit or other format
|
|
109
|
-
reaffirmation.to_s
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# Determine spacing based on original formats
|
|
113
|
-
# Space needed if year is 2-digit and reaffirmation is 4-digit (original format)
|
|
114
|
-
# No space if both year and reaffirmation are 2-digit, or both are 4-digit
|
|
115
|
-
if year_was_2digit && reaffirmation_was_4digit
|
|
116
|
-
# Year was 2-digit, reaffirmation was 4-digit → add space
|
|
117
|
-
result += " (R#{reaffirmation_str})"
|
|
118
|
-
else
|
|
119
|
-
# Both 2-digit, both 4-digit, or other cases → no space
|
|
120
|
-
result += "(R#{reaffirmation_str})"
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
result
|
|
125
|
-
end
|
|
126
23
|
end
|
|
127
24
|
end
|
|
128
25
|
end
|
|
@@ -17,110 +17,6 @@ module Pubid
|
|
|
17
17
|
class Series < Base
|
|
18
18
|
# Series prefix (MH, RV, etc.) - optional
|
|
19
19
|
attribute :series_prefix, :string
|
|
20
|
-
|
|
21
|
-
def to_s
|
|
22
|
-
result = publisher_prefix_portion
|
|
23
|
-
|
|
24
|
-
# Add code FIRST (before SERIES keyword)
|
|
25
|
-
result += code.to_s
|
|
26
|
-
|
|
27
|
-
# Add space before series prefix/SERIES keyword
|
|
28
|
-
result += " "
|
|
29
|
-
|
|
30
|
-
# Add series prefix if present
|
|
31
|
-
result += "#{series_prefix} " if series_prefix && !series_prefix.empty?
|
|
32
|
-
|
|
33
|
-
# Add SERIES keyword
|
|
34
|
-
result += "SERIES"
|
|
35
|
-
|
|
36
|
-
# Add year
|
|
37
|
-
result += year_portion
|
|
38
|
-
|
|
39
|
-
# Add language
|
|
40
|
-
result += language_portion
|
|
41
|
-
|
|
42
|
-
# Add reaffirmation
|
|
43
|
-
result += reaffirmation_portion
|
|
44
|
-
|
|
45
|
-
result
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
private
|
|
49
|
-
|
|
50
|
-
def publisher_prefix_portion
|
|
51
|
-
prefix = publisher_prefix || "CSA"
|
|
52
|
-
|
|
53
|
-
# Handle code_only identifiers (empty string means no prefix)
|
|
54
|
-
return "" if prefix == ""
|
|
55
|
-
|
|
56
|
-
# Determine if we need space after prefix
|
|
57
|
-
# CAN/CSA- and CAN3- end with dash, so no space needed
|
|
58
|
-
needs_space = !prefix.end_with?("-")
|
|
59
|
-
|
|
60
|
-
needs_space ? "#{prefix} " : prefix
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def year_portion
|
|
64
|
-
return "" unless year
|
|
65
|
-
|
|
66
|
-
# Use dash if year_format is dash, otherwise colon
|
|
67
|
-
separator = year_format == "dash" ? "-" : ":"
|
|
68
|
-
year_part = separator
|
|
69
|
-
year_part += year_prefix if year_prefix # Add M or F prefix
|
|
70
|
-
year_part += "F" if french && year_format != "dash" && !year_prefix # Only add F if no prefix
|
|
71
|
-
|
|
72
|
-
# Convert 4-digit year back to 2-digit
|
|
73
|
-
year_str = year.to_s
|
|
74
|
-
year_part += if year_str.length == 4 && year_str.start_with?("20")
|
|
75
|
-
year_str[2..3]
|
|
76
|
-
else
|
|
77
|
-
year_str
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
year_part
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def language_portion
|
|
84
|
-
"" # CSA doesn't use language codes in rendering
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def reaffirmation_portion
|
|
88
|
-
return "" unless reaffirmation
|
|
89
|
-
|
|
90
|
-
# Check if year was originally 2-digit (original_year_4digit flag)
|
|
91
|
-
year_was_2digit = !original_year_4digit
|
|
92
|
-
|
|
93
|
-
# Check if reaffirmation was originally 4-digit (original_reaffirmation_4digit flag)
|
|
94
|
-
reaffirmation_was_4digit = original_reaffirmation_4digit
|
|
95
|
-
|
|
96
|
-
# Preserve original reaffirmation format
|
|
97
|
-
# If original was 4-digit, keep as 4-digit
|
|
98
|
-
# If original was 2-digit, convert from 4-digit storage back to 2-digit
|
|
99
|
-
reaffirmation_str = if reaffirmation_was_4digit
|
|
100
|
-
# Original was 4-digit, keep as-is
|
|
101
|
-
reaffirmation.to_s
|
|
102
|
-
elsif reaffirmation.to_s.length == 4 && reaffirmation.to_s.start_with?(
|
|
103
|
-
"19", "20"
|
|
104
|
-
)
|
|
105
|
-
# Original was 2-digit, convert 4-digit storage back to 2-digit
|
|
106
|
-
# (R2004) → (R04), (R1994) → (R94)
|
|
107
|
-
reaffirmation.to_s[2..3]
|
|
108
|
-
else
|
|
109
|
-
# Already 2-digit or other format
|
|
110
|
-
reaffirmation.to_s
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
# Determine spacing based on original formats
|
|
114
|
-
# Space needed if year is 2-digit and reaffirmation is 4-digit (original format)
|
|
115
|
-
# No space if both year and reaffirmation are 2-digit, or both are 4-digit
|
|
116
|
-
if year_was_2digit && reaffirmation_was_4digit
|
|
117
|
-
# Year was 2-digit, reaffirmation was 4-digit → add space
|
|
118
|
-
" (R#{reaffirmation_str})"
|
|
119
|
-
else
|
|
120
|
-
# Both 2-digit, both 4-digit, or other cases → no space
|
|
121
|
-
"(R#{reaffirmation_str})"
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
20
|
end
|
|
125
21
|
end
|
|
126
22
|
end
|