pubid 2.0.0.alpha.10 → 2.0.0.pre.alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.adoc +51 -54
- data/data/iec/update_codes.yaml +0 -3
- data/data/ieee/update_codes.yaml +1 -107
- data/data/nist/update_codes.yaml +0 -35
- data/lib/pubid/amca/builder.rb +6 -6
- data/lib/pubid/amca/identifier.rb +16 -2
- data/lib/pubid/amca/identifiers/base.rb +46 -74
- data/lib/pubid/amca/identifiers/interpretation.rb +30 -17
- data/lib/pubid/amca/identifiers/publication.rb +27 -14
- data/lib/pubid/amca/identifiers/standard.rb +5 -3
- data/lib/pubid/amca/identifiers.rb +1 -0
- data/lib/pubid/amca/parser.rb +1 -1
- data/lib/pubid/amca/scheme.rb +16 -0
- data/lib/pubid/amca/single_identifier.rb +24 -1
- data/lib/pubid/amca/urn_generator.rb +3 -4
- data/lib/pubid/amca.rb +3 -50
- data/lib/pubid/ansi/builder.rb +5 -7
- data/lib/pubid/ansi/identifier.rb +1 -19
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +1 -2
- data/lib/pubid/ansi/identifiers/standard.rb +3 -2
- data/lib/pubid/ansi/parser.rb +1 -1
- data/lib/pubid/ansi/scheme.rb +15 -0
- data/lib/pubid/ansi/single_identifier.rb +31 -2
- data/lib/pubid/ansi/urn_generator.rb +38 -3
- data/lib/pubid/ansi.rb +6 -47
- data/lib/pubid/api/builder.rb +72 -45
- data/lib/pubid/api/identifier.rb +9 -30
- data/lib/pubid/api/identifiers/base.rb +14 -2
- data/lib/pubid/api/identifiers/bulletin.rb +2 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +2 -0
- data/lib/pubid/api/identifiers/mpms.rb +28 -10
- data/lib/pubid/api/identifiers/publication.rb +2 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +2 -0
- data/lib/pubid/api/identifiers/specification.rb +2 -0
- data/lib/pubid/api/identifiers/standard.rb +2 -0
- data/lib/pubid/api/identifiers/technical_report.rb +2 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +16 -0
- data/lib/pubid/api/parser.rb +1 -1
- data/lib/pubid/api/scheme.rb +66 -0
- data/lib/pubid/api/single_identifier.rb +32 -10
- data/lib/pubid/api/urn_generator.rb +18 -0
- data/lib/pubid/api.rb +5 -56
- data/lib/pubid/ashrae/builder.rb +35 -56
- data/lib/pubid/ashrae/identifier.rb +16 -6
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +11 -7
- data/lib/pubid/ashrae/identifiers/addendum.rb +20 -9
- data/lib/pubid/ashrae/identifiers/base.rb +15 -111
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +16 -8
- data/lib/pubid/ashrae/identifiers/errata.rb +10 -9
- data/lib/pubid/ashrae/identifiers/guideline.rb +0 -3
- data/lib/pubid/ashrae/identifiers/interpretation.rb +10 -16
- data/lib/pubid/ashrae/identifiers/standard.rb +0 -3
- data/lib/pubid/ashrae/identifiers.rb +1 -0
- data/lib/pubid/ashrae/parser.rb +16 -40
- data/lib/pubid/ashrae/scheme.rb +53 -0
- data/lib/pubid/ashrae/single_identifier.rb +14 -1
- data/lib/pubid/ashrae/supplement_identifier.rb +6 -21
- data/lib/pubid/ashrae/urn_generator.rb +10 -8
- data/lib/pubid/ashrae.rb +2 -58
- data/lib/pubid/asme/builder.rb +2 -11
- data/lib/pubid/asme/components/code.rb +2 -10
- data/lib/pubid/asme/identifier.rb +0 -9
- data/lib/pubid/asme/identifiers/base.rb +60 -0
- data/lib/pubid/asme/identifiers/standard.rb +2 -86
- data/lib/pubid/asme/parser.rb +1 -1
- data/lib/pubid/asme/scheme.rb +37 -0
- data/lib/pubid/asme/single_identifier.rb +2 -11
- data/lib/pubid/asme/urn_generator.rb +2 -2
- data/lib/pubid/asme.rb +1 -47
- data/lib/pubid/astm/builder.rb +3 -10
- data/lib/pubid/astm/components/code.rb +0 -9
- data/lib/pubid/astm/identifier.rb +0 -9
- data/lib/pubid/astm/identifiers/adjunct.rb +9 -16
- data/lib/pubid/astm/identifiers/data_series.rb +14 -2
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +34 -25
- data/lib/pubid/astm/identifiers/manual.rb +25 -8
- data/lib/pubid/astm/identifiers/monograph.rb +14 -2
- data/lib/pubid/astm/identifiers/research_report.rb +5 -8
- data/lib/pubid/astm/identifiers/standard.rb +37 -8
- data/lib/pubid/astm/identifiers/technical_report.rb +13 -2
- data/lib/pubid/astm/identifiers/work_in_progress.rb +10 -1
- data/lib/pubid/astm/parser.rb +1 -1
- data/lib/pubid/astm/scheme.rb +55 -0
- data/lib/pubid/astm/single_identifier.rb +10 -32
- data/lib/pubid/astm/urn_generator.rb +5 -7
- data/lib/pubid/astm.rb +27 -44
- data/lib/pubid/bsi/builder.rb +107 -119
- data/lib/pubid/bsi/identifier.rb +25 -4
- data/lib/pubid/bsi/identifiers/addendum_document.rb +37 -3
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +47 -19
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +39 -8
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +55 -2
- data/lib/pubid/bsi/identifiers/amendment.rb +22 -30
- data/lib/pubid/bsi/identifiers/base.rb +11 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +7 -1
- data/lib/pubid/bsi/identifiers/british_standard.rb +1 -2
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +87 -13
- data/lib/pubid/bsi/identifiers/committee_document.rb +17 -10
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +87 -19
- data/lib/pubid/bsi/identifiers/corrigendum.rb +10 -26
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +36 -0
- data/lib/pubid/bsi/identifiers/disc.rb +29 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +46 -2
- data/lib/pubid/bsi/identifiers/electronic_book.rb +38 -2
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +21 -10
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +47 -0
- data/lib/pubid/bsi/identifiers/flex.rb +34 -3
- data/lib/pubid/bsi/identifiers/handbook.rb +17 -1
- data/lib/pubid/bsi/identifiers/index.rb +32 -0
- data/lib/pubid/bsi/identifiers/method.rb +41 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +29 -4
- data/lib/pubid/bsi/identifiers/practice_guide.rb +7 -1
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +54 -2
- data/lib/pubid/bsi/identifiers/published_document.rb +54 -2
- data/lib/pubid/bsi/identifiers/section.rb +30 -0
- data/lib/pubid/bsi/identifiers/set.rb +20 -14
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +10 -10
- data/lib/pubid/bsi/identifiers/supplement_document.rb +25 -3
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +46 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +47 -2
- data/lib/pubid/bsi/identifiers/test_method.rb +32 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +22 -7
- data/lib/pubid/bsi/identifiers.rb +1 -0
- data/lib/pubid/bsi/parser.rb +6 -20
- data/lib/pubid/bsi/scheme.rb +243 -0
- data/lib/pubid/bsi/single_identifier.rb +82 -94
- data/lib/pubid/bsi/urn_generator.rb +5 -13
- data/lib/pubid/bsi.rb +2 -252
- data/lib/pubid/builder/base.rb +13 -62
- data/lib/pubid/bundled_identifier.rb +10 -18
- data/lib/pubid/ccsds/builder.rb +4 -5
- data/lib/pubid/ccsds/identifier.rb +3 -63
- data/lib/pubid/ccsds/identifiers/base.rb +51 -14
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +8 -9
- data/lib/pubid/ccsds/parser.rb +3 -5
- data/lib/pubid/ccsds/scheme.rb +57 -0
- data/lib/pubid/ccsds/single_identifier.rb +3 -6
- data/lib/pubid/ccsds/supplement_identifier.rb +13 -17
- data/lib/pubid/ccsds/urn_generator.rb +6 -6
- data/lib/pubid/ccsds.rb +1 -44
- data/lib/pubid/cen_cenelec/builder.rb +29 -61
- data/lib/pubid/cen_cenelec/identifier.rb +5 -28
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +4 -9
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +12 -2
- data/lib/pubid/cen_cenelec/identifiers/base.rb +46 -5
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +27 -6
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +17 -2
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +4 -62
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +7 -20
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +6 -2
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +1 -2
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +1 -2
- data/lib/pubid/cen_cenelec/parser.rb +1 -1
- data/lib/pubid/cen_cenelec/scheme.rb +164 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +91 -10
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +7 -6
- data/lib/pubid/cen_cenelec/urn_generator.rb +7 -7
- data/lib/pubid/cen_cenelec.rb +1 -188
- data/lib/pubid/cie/builder.rb +24 -149
- data/lib/pubid/cie/components/code.rb +72 -0
- data/lib/pubid/cie/identifier.rb +5 -20
- data/lib/pubid/cie/identifiers/bundle.rb +5 -35
- data/lib/pubid/cie/identifiers/conference.rb +6 -11
- data/lib/pubid/cie/identifiers/corrigendum.rb +23 -17
- data/lib/pubid/cie/identifiers/dual_published.rb +6 -6
- data/lib/pubid/cie/identifiers/identical.rb +9 -9
- data/lib/pubid/cie/identifiers/joint_published.rb +10 -10
- data/lib/pubid/cie/identifiers/standard.rb +8 -43
- data/lib/pubid/cie/identifiers/supplement.rb +25 -27
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +3 -7
- data/lib/pubid/cie/identifiers.rb +0 -2
- data/lib/pubid/cie/parser.rb +6 -55
- data/lib/pubid/cie/scheme.rb +64 -0
- data/lib/pubid/cie/single_identifier.rb +5 -44
- data/lib/pubid/cie/supplement_identifier.rb +16 -29
- data/lib/pubid/cie/urn_generator.rb +8 -11
- data/lib/pubid/cie.rb +2 -57
- data/lib/pubid/components/code.rb +8 -22
- data/lib/pubid/components/date.rb +18 -41
- data/lib/pubid/components/edition.rb +6 -9
- data/lib/pubid/components/language.rb +4 -6
- data/lib/pubid/components/locality.rb +1 -10
- data/lib/pubid/components/publisher.rb +6 -9
- data/lib/pubid/components/stage.rb +14 -5
- data/lib/pubid/components/type.rb +15 -5
- data/lib/pubid/components/typed_stage.rb +8 -11
- data/lib/pubid/components.rb +0 -4
- data/lib/pubid/core/update_codes.rb +7 -28
- data/lib/pubid/csa/builder.rb +48 -48
- data/lib/pubid/csa/composite_identifier.rb +7 -18
- data/lib/pubid/csa/identifier.rb +78 -191
- data/lib/pubid/csa/identifiers/base.rb +123 -0
- data/lib/pubid/csa/identifiers/bundled.rb +9 -25
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +13 -13
- data/lib/pubid/csa/identifiers/cec.rb +103 -40
- data/lib/pubid/csa/identifiers/combined.rb +69 -97
- data/lib/pubid/csa/identifiers/csa_adopted.rb +4 -4
- data/lib/pubid/csa/identifiers/package.rb +4 -4
- data/lib/pubid/csa/identifiers/series.rb +104 -0
- data/lib/pubid/csa/parser.rb +8 -12
- data/lib/pubid/csa/scheme.rb +44 -0
- data/lib/pubid/csa/single_identifier.rb +5 -94
- data/lib/pubid/csa/urn_generator.rb +2 -9
- data/lib/pubid/csa/wrapper_identifier.rb +10 -43
- data/lib/pubid/csa.rb +1 -56
- data/lib/pubid/etsi/builder.rb +4 -13
- data/lib/pubid/etsi/components/code.rb +9 -10
- data/lib/pubid/etsi/components/version.rb +5 -0
- data/lib/pubid/etsi/identifier.rb +12 -2
- data/lib/pubid/etsi/identifiers/base.rb +24 -60
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +4 -207
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +14 -46
- data/lib/pubid/etsi/identifiers.rb +1 -0
- data/lib/pubid/etsi/parser.rb +3 -9
- data/lib/pubid/etsi/scheme.rb +42 -0
- data/lib/pubid/etsi.rb +2 -52
- data/lib/pubid/export/data_class_exporter.rb +59 -0
- data/lib/pubid/export/exporter.rb +47 -6
- data/lib/pubid/export/flavor_exporter.rb +276 -124
- data/lib/pubid/export/ieee_exporter.rb +78 -0
- data/lib/pubid/export/itu_exporter.rb +66 -0
- data/lib/pubid/export/nist_exporter.rb +64 -0
- data/lib/pubid/export/registry_exporter.rb +90 -0
- data/lib/pubid/export/scheme_exporter.rb +70 -0
- data/lib/pubid/export.rb +6 -0
- data/lib/pubid/identifier.rb +37 -920
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/identifier_registry.rb +198 -0
- data/lib/pubid/idf/builder.rb +7 -7
- data/lib/pubid/idf/identifier.rb +13 -23
- data/lib/pubid/idf/identifiers/amendment.rb +1 -2
- data/lib/pubid/idf/identifiers/corrigendum.rb +1 -2
- data/lib/pubid/idf/identifiers/international_standard.rb +1 -2
- data/lib/pubid/idf/identifiers/reviewed_method.rb +1 -2
- data/lib/pubid/idf/parser.rb +5 -6
- data/lib/pubid/idf/scheme.rb +61 -0
- data/lib/pubid/idf/supplement_identifier.rb +13 -5
- data/lib/pubid/idf/urn_generator.rb +39 -4
- data/lib/pubid/idf.rb +1 -65
- data/lib/pubid/iec/builder.rb +91 -92
- data/lib/pubid/iec/components/code.rb +32 -9
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/identifier.rb +8 -328
- data/lib/pubid/iec/identifiers/amendment.rb +5 -8
- data/lib/pubid/iec/identifiers/base.rb +31 -7
- data/lib/pubid/iec/identifiers/component_specification.rb +13 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +12 -1
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +30 -29
- data/lib/pubid/iec/identifiers/corrigendum.rb +5 -4
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +36 -43
- data/lib/pubid/iec/identifiers/guide.rb +18 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +9 -24
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +3 -2
- data/lib/pubid/iec/identifiers/operational_document.rb +13 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +15 -2
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +24 -26
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +13 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +13 -2
- data/lib/pubid/iec/identifiers/technical_report.rb +21 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +21 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +12 -1
- data/lib/pubid/iec/identifiers/test_report_form.rb +46 -3
- data/lib/pubid/iec/identifiers/vap_identifier.rb +34 -33
- data/lib/pubid/iec/identifiers/white_paper.rb +13 -3
- data/lib/pubid/iec/identifiers/working_document.rb +60 -26
- data/lib/pubid/iec/parser.rb +42 -73
- data/lib/pubid/iec/scheme.rb +71 -0
- data/lib/pubid/iec/single_identifier.rb +23 -15
- data/lib/pubid/iec/supplement_identifier.rb +67 -84
- data/lib/pubid/iec/urn_generator.rb +143 -195
- data/lib/pubid/iec/urn_parser.rb +246 -85
- data/lib/pubid/iec.rb +66 -45
- data/lib/pubid/ieee/aiee/builder.rb +3 -17
- data/lib/pubid/ieee/aiee/identifier.rb +62 -46
- data/lib/pubid/ieee/aiee/parser.rb +1 -1
- data/lib/pubid/ieee/builder.rb +81 -398
- data/lib/pubid/ieee/components/code.rb +0 -8
- data/lib/pubid/ieee/components/draft.rb +0 -54
- data/lib/pubid/ieee/components/relationship.rb +149 -5
- data/lib/pubid/ieee/identifier.rb +11 -3
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +14 -62
- data/lib/pubid/ieee/identifiers/base.rb +547 -340
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +12 -6
- data/lib/pubid/ieee/identifiers/corrigendum.rb +12 -15
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +13 -24
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +7 -3
- data/lib/pubid/ieee/identifiers/dual_published.rb +7 -58
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +11 -99
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +11 -25
- data/lib/pubid/ieee/identifiers/joint_development.rb +15 -66
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +24 -58
- data/lib/pubid/ieee/identifiers/nesc/base.rb +19 -90
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +5 -20
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +5 -16
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +2 -11
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +3 -18
- data/lib/pubid/ieee/identifiers/nesc.rb +0 -1
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +9 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +6 -29
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +11 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +39 -4
- data/lib/pubid/ieee/identifiers/standard.rb +2 -5
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +7 -26
- data/lib/pubid/ieee/identifiers.rb +1 -2
- data/lib/pubid/ieee/ire/builder.rb +6 -7
- data/lib/pubid/ieee/ire/identifier.rb +33 -48
- data/lib/pubid/ieee/ire/parser.rb +1 -1
- data/lib/pubid/ieee/nesc/builder.rb +20 -33
- data/lib/pubid/ieee/nesc/parser.rb +15 -16
- data/lib/pubid/ieee/parser.rb +44 -462
- data/lib/pubid/ieee/scheme.rb +90 -0
- data/lib/pubid/ieee/typed_stages.rb +1 -12
- data/lib/pubid/ieee/urn_generator.rb +8 -35
- data/lib/pubid/ieee.rb +2 -133
- data/lib/pubid/ieee_debug.rb +1 -0
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +17 -5
- data/lib/pubid/iho/identifiers/base.rb +30 -64
- data/lib/pubid/iho/identifiers/bibliographic.rb +5 -1
- data/lib/pubid/iho/identifiers/circular_letter.rb +5 -1
- data/lib/pubid/iho/identifiers/miscellaneous.rb +5 -1
- data/lib/pubid/iho/identifiers/publication.rb +5 -1
- data/lib/pubid/iho/identifiers/standard.rb +5 -1
- data/lib/pubid/iho/identifiers.rb +1 -0
- data/lib/pubid/iho/parser.rb +4 -4
- data/lib/pubid/iho/scheme.rb +29 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho.rb +3 -59
- data/lib/pubid/iso/builder.rb +57 -68
- data/lib/pubid/iso/bundled_identifier.rb +3 -56
- data/lib/pubid/iso/combined_identifier.rb +4 -6
- data/lib/pubid/iso/components/code.rb +19 -7
- data/lib/pubid/iso/components/publisher.rb +8 -10
- data/lib/pubid/iso/components.rb +4 -2
- data/lib/pubid/iso/identifier.rb +11 -260
- data/lib/pubid/iso/identifiers/addendum.rb +6 -9
- data/lib/pubid/iso/identifiers/amendment.rb +4 -8
- data/lib/pubid/iso/identifiers/base.rb +115 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +1 -0
- data/lib/pubid/iso/identifiers/directives.rb +2 -8
- data/lib/pubid/iso/identifiers/directives_supplement.rb +26 -55
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +1 -0
- data/lib/pubid/iso/identifiers/international_standard.rb +4 -4
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +4 -4
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +4 -10
- data/lib/pubid/iso/identifiers/pas.rb +2 -2
- data/lib/pubid/iso/identifiers/recommendation.rb +2 -2
- data/lib/pubid/iso/identifiers/supplement.rb +3 -11
- data/lib/pubid/iso/identifiers/tc_document.rb +15 -44
- data/lib/pubid/iso/identifiers/technical_report.rb +4 -4
- data/lib/pubid/iso/identifiers/technical_specification.rb +2 -2
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +2 -2
- data/lib/pubid/iso/identifiers.rb +1 -0
- data/lib/pubid/iso/parser.rb +19 -43
- data/lib/pubid/iso/scheme.rb +187 -0
- data/lib/pubid/iso/single_identifier.rb +7 -6
- data/lib/pubid/iso/supplement_identifier.rb +3 -29
- data/lib/pubid/iso/urn_generator.rb +177 -78
- data/lib/pubid/iso/urn_parser.rb +10 -29
- data/lib/pubid/iso.rb +2 -188
- data/lib/pubid/itu/builder.rb +41 -230
- data/lib/pubid/itu/components/code.rb +12 -57
- data/lib/pubid/itu/components/sector.rb +4 -15
- data/lib/pubid/itu/components/series.rb +4 -0
- data/lib/pubid/itu/identifier.rb +51 -2
- data/lib/pubid/itu/identifiers/amendment.rb +31 -7
- data/lib/pubid/itu/identifiers/annex.rb +4 -13
- data/lib/pubid/itu/identifiers/base.rb +128 -456
- data/lib/pubid/itu/identifiers/combined_identifier.rb +25 -99
- data/lib/pubid/itu/identifiers/corrigendum.rb +25 -16
- data/lib/pubid/itu/identifiers/recommendation.rb +4 -3
- data/lib/pubid/itu/identifiers/special_publication.rb +3 -3
- data/lib/pubid/itu/identifiers/supplement.rb +16 -119
- data/lib/pubid/itu/identifiers.rb +1 -10
- data/lib/pubid/itu/model.rb +1 -1
- data/lib/pubid/itu/parser.rb +27 -481
- data/lib/pubid/itu/scheme.rb +174 -0
- data/lib/pubid/itu/urn_generator.rb +6 -36
- data/lib/pubid/itu.rb +2 -58
- data/lib/pubid/jcgm/builder.rb +19 -37
- data/lib/pubid/jcgm/identifier.rb +0 -10
- data/lib/pubid/jcgm/identifiers/amendment.rb +11 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +15 -3
- data/lib/pubid/jcgm/identifiers.rb +0 -2
- data/lib/pubid/jcgm/parser.rb +7 -74
- data/lib/pubid/jcgm/scheme.rb +60 -0
- data/lib/pubid/jcgm/single_identifier.rb +14 -84
- data/lib/pubid/jcgm/supplement_identifier.rb +4 -39
- data/lib/pubid/jcgm/urn_generator.rb +19 -25
- data/lib/pubid/jcgm.rb +2 -57
- data/lib/pubid/jis/builder.rb +52 -44
- data/lib/pubid/jis/components/code.rb +59 -0
- data/lib/pubid/{astm → jis}/components.rb +1 -1
- data/lib/pubid/jis/identifier.rb +5 -181
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/base.rb +72 -0
- data/lib/pubid/jis/identifiers/standard.rb +1 -2
- data/lib/pubid/jis/identifiers/technical_report.rb +1 -2
- data/lib/pubid/jis/identifiers/technical_specification.rb +1 -2
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +6 -32
- data/lib/pubid/jis/scheme.rb +49 -0
- data/lib/pubid/jis/single_identifier.rb +12 -6
- data/lib/pubid/jis/supplement_identifier.rb +14 -17
- data/lib/pubid/jis.rb +2 -48
- data/lib/pubid/nist/builder.rb +1765 -146
- data/lib/pubid/nist/components/code.rb +20 -9
- data/lib/pubid/nist/components/edition.rb +0 -16
- data/lib/pubid/nist/components/publisher.rb +24 -0
- data/lib/pubid/nist/components/supplement.rb +21 -91
- data/lib/pubid/nist/components.rb +1 -0
- data/lib/pubid/nist/configuration.rb +2 -12
- data/lib/pubid/nist/identifiers/base.rb +417 -662
- data/lib/pubid/nist/identifiers/circular.rb +5 -17
- data/lib/pubid/nist/identifiers/circular_supplement.rb +6 -16
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -3
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +5 -7
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +5 -18
- data/lib/pubid/nist/identifiers/crpl_report.rb +13 -16
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -18
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -3
- data/lib/pubid/nist/identifiers/handbook.rb +4 -12
- data/lib/pubid/nist/identifiers/internal_report.rb +7 -15
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -3
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +11 -20
- data/lib/pubid/nist/identifiers/monograph.rb +11 -22
- data/lib/pubid/nist/identifiers/ncstar.rb +2 -2
- data/lib/pubid/nist/identifiers/nsrds.rb +1 -1
- data/lib/pubid/nist/identifiers/owmwp.rb +1 -1
- data/lib/pubid/nist/identifiers/report.rb +10 -19
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -12
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -4
- data/lib/pubid/nist/identifiers.rb +1 -1
- data/lib/pubid/nist/parser.rb +429 -97
- data/lib/pubid/nist/scheme.rb +199 -0
- data/lib/pubid/nist/supplement_identifier.rb +34 -35
- data/lib/pubid/nist/urn_generator.rb +8 -14
- data/lib/pubid/nist.rb +5 -107
- data/lib/pubid/oiml/builder.rb +10 -91
- data/lib/pubid/oiml/components/code.rb +0 -17
- data/lib/pubid/oiml/identifier.rb +0 -53
- data/lib/pubid/oiml/identifiers/annex.rb +46 -13
- data/lib/pubid/oiml/identifiers/base.rb +36 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +0 -2
- data/lib/pubid/oiml/identifiers/document.rb +0 -2
- data/lib/pubid/oiml/identifiers/expert_report.rb +0 -2
- data/lib/pubid/oiml/identifiers/guide.rb +0 -2
- data/lib/pubid/oiml/identifiers/recommendation.rb +0 -2
- data/lib/pubid/oiml/identifiers/seminar_report.rb +0 -2
- data/lib/pubid/oiml/identifiers/vocabulary.rb +0 -2
- data/lib/pubid/oiml/identifiers.rb +1 -3
- data/lib/pubid/oiml/parser.rb +17 -118
- data/lib/pubid/oiml/scheme.rb +46 -0
- data/lib/pubid/oiml/single_identifier.rb +43 -66
- data/lib/pubid/oiml/supplement_identifier.rb +17 -62
- data/lib/pubid/oiml/urn_generator.rb +8 -22
- data/lib/pubid/oiml.rb +1 -56
- data/lib/pubid/parser.rb +0 -1
- data/lib/pubid/parsers/mr_string.rb +7 -120
- data/lib/pubid/plateau/builder.rb +4 -8
- data/lib/pubid/plateau/identifiers/base.rb +36 -40
- data/lib/pubid/plateau/identifiers/handbook.rb +7 -1
- data/lib/pubid/plateau/identifiers/technical_report.rb +5 -1
- data/lib/pubid/plateau/identifiers.rb +1 -0
- data/lib/pubid/plateau/parser.rb +6 -16
- data/lib/pubid/plateau/scheme.rb +45 -0
- data/lib/pubid/plateau/supplement_identifier.rb +15 -11
- data/lib/pubid/plateau.rb +1 -58
- data/lib/pubid/renderers/base.rb +0 -47
- data/lib/pubid/renderers/directives_renderer.rb +14 -27
- data/lib/pubid/renderers/guide_renderer.rb +1 -7
- data/lib/pubid/renderers/human_readable.rb +9 -34
- data/lib/pubid/renderers/iwa_renderer.rb +1 -5
- data/lib/pubid/renderers/mr_string.rb +6 -54
- data/lib/pubid/renderers/supplement_renderer.rb +2 -5
- data/lib/pubid/renderers.rb +0 -1
- data/lib/pubid/rendering/base.rb +73 -0
- data/lib/pubid/rendering/common.rb +211 -0
- data/lib/pubid/rendering/context.rb +21 -33
- data/lib/pubid/rendering/format.rb +25 -0
- data/lib/pubid/rendering/numbering.rb +7 -25
- data/lib/pubid/rendering/supplement.rb +4 -4
- data/lib/pubid/rendering.rb +3 -0
- data/lib/pubid/sae/builder.rb +1 -1
- data/lib/pubid/sae/components/date.rb +0 -8
- data/lib/pubid/sae/components/type.rb +1 -5
- data/lib/pubid/sae/identifier.rb +12 -2
- data/lib/pubid/sae/identifiers/base.rb +28 -33
- data/lib/pubid/sae/identifiers.rb +1 -0
- data/lib/pubid/sae/parser.rb +1 -1
- data/lib/pubid/sae/scheme.rb +47 -0
- data/lib/pubid/sae/urn_generator.rb +10 -2
- data/lib/pubid/sae.rb +2 -49
- data/lib/pubid/scheme.rb +207 -0
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +10 -424
- data/lib/tasks/export.rake +5 -6
- data/lib/tasks/website-data.json +1796 -1854
- metadata +45 -307
- data/data/bipm/update_codes.yaml +0 -9
- data/data/nist/series.yaml +0 -155
- data/lib/pubid/adobe/builder.rb +0 -52
- data/lib/pubid/adobe/identifier.rb +0 -47
- data/lib/pubid/adobe/identifiers/publication.rb +0 -31
- data/lib/pubid/adobe/identifiers/tech_note.rb +0 -32
- data/lib/pubid/adobe/identifiers.rb +0 -10
- data/lib/pubid/adobe/parser.rb +0 -136
- data/lib/pubid/adobe/renderer.rb +0 -39
- data/lib/pubid/adobe/urn_generator.rb +0 -42
- data/lib/pubid/adobe/urn_parser.rb +0 -69
- data/lib/pubid/adobe.rb +0 -60
- data/lib/pubid/amca/renderer.rb +0 -82
- data/lib/pubid/amca/urn_parser.rb +0 -28
- data/lib/pubid/ansi/renderer.rb +0 -53
- data/lib/pubid/ansi/urn_parser.rb +0 -23
- data/lib/pubid/api/identifiers.rb +0 -18
- data/lib/pubid/api/renderer.rb +0 -98
- data/lib/pubid/api/urn_parser.rb +0 -35
- data/lib/pubid/ashrae/renderer.rb +0 -117
- data/lib/pubid/ashrae/urn_parser.rb +0 -27
- data/lib/pubid/asme/renderer.rb +0 -66
- data/lib/pubid/asme/urn_parser.rb +0 -31
- data/lib/pubid/astm/identifiers/code_number.rb +0 -81
- data/lib/pubid/astm/identifiers.rb +0 -19
- data/lib/pubid/astm/renderer.rb +0 -172
- data/lib/pubid/astm/urn_parser.rb +0 -30
- data/lib/pubid/bipm/builder.rb +0 -163
- data/lib/pubid/bipm/identifier.rb +0 -285
- data/lib/pubid/bipm/identifiers/committee_document.rb +0 -36
- data/lib/pubid/bipm/identifiers/guide.rb +0 -35
- data/lib/pubid/bipm/identifiers/meeting.rb +0 -53
- data/lib/pubid/bipm/identifiers/mep.rb +0 -33
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +0 -48
- data/lib/pubid/bipm/identifiers/si_brochure.rb +0 -33
- data/lib/pubid/bipm/identifiers.rb +0 -15
- data/lib/pubid/bipm/parser.rb +0 -237
- data/lib/pubid/bipm/renderer.rb +0 -118
- data/lib/pubid/bipm/urn_generator.rb +0 -58
- data/lib/pubid/bipm/urn_parser.rb +0 -60
- data/lib/pubid/bipm.rb +0 -91
- data/lib/pubid/bsi/renderer.rb +0 -1064
- data/lib/pubid/bsi/urn_parser.rb +0 -52
- data/lib/pubid/calconnect/builder.rb +0 -38
- data/lib/pubid/calconnect/identifier.rb +0 -121
- data/lib/pubid/calconnect/identifiers/standard.rb +0 -29
- data/lib/pubid/calconnect/identifiers.rb +0 -9
- data/lib/pubid/calconnect/parser.rb +0 -54
- data/lib/pubid/calconnect/renderer.rb +0 -36
- data/lib/pubid/calconnect/urn_generator.rb +0 -33
- data/lib/pubid/calconnect/urn_parser.rb +0 -34
- data/lib/pubid/calconnect.rb +0 -82
- data/lib/pubid/ccsds/urn_parser.rb +0 -20
- data/lib/pubid/cen_cenelec/renderer.rb +0 -261
- data/lib/pubid/cen_cenelec/urn_parser.rb +0 -28
- data/lib/pubid/cie/identifiers/code_attributes.rb +0 -52
- data/lib/pubid/cie/identifiers/proceedings.rb +0 -41
- data/lib/pubid/cie/urn_parser.rb +0 -28
- data/lib/pubid/components/adoption.rb +0 -104
- data/lib/pubid/components/iteration.rb +0 -32
- data/lib/pubid/components/relationship.rb +0 -151
- data/lib/pubid/components/supplement.rb +0 -184
- data/lib/pubid/csa/renderer.rb +0 -300
- data/lib/pubid/csa/urn_parser.rb +0 -33
- data/lib/pubid/doi/builder.rb +0 -18
- data/lib/pubid/doi/identifier.rb +0 -49
- data/lib/pubid/doi/identifiers/resource.rb +0 -30
- data/lib/pubid/doi/identifiers.rb +0 -9
- data/lib/pubid/doi/parser.rb +0 -52
- data/lib/pubid/doi/renderer.rb +0 -13
- data/lib/pubid/doi.rb +0 -55
- data/lib/pubid/easc/builder.rb +0 -55
- data/lib/pubid/easc/identifier.rb +0 -59
- data/lib/pubid/easc/identifiers/pmg.rb +0 -20
- data/lib/pubid/easc/identifiers/rmg.rb +0 -19
- data/lib/pubid/easc/identifiers.rb +0 -10
- data/lib/pubid/easc/parser.rb +0 -88
- data/lib/pubid/easc/renderer.rb +0 -48
- data/lib/pubid/easc/urn_generator.rb +0 -46
- data/lib/pubid/easc/urn_parser.rb +0 -57
- data/lib/pubid/easc.rb +0 -52
- data/lib/pubid/ecma/builder.rb +0 -45
- data/lib/pubid/ecma/identifier.rb +0 -147
- data/lib/pubid/ecma/identifiers/memento.rb +0 -30
- data/lib/pubid/ecma/identifiers/standard.rb +0 -31
- data/lib/pubid/ecma/identifiers/technical_report.rb +0 -31
- data/lib/pubid/ecma/identifiers.rb +0 -11
- data/lib/pubid/ecma/parser.rb +0 -76
- data/lib/pubid/ecma/renderer.rb +0 -67
- data/lib/pubid/ecma/urn_generator.rb +0 -46
- data/lib/pubid/ecma/urn_parser.rb +0 -51
- data/lib/pubid/ecma.rb +0 -67
- data/lib/pubid/errors.rb +0 -79
- data/lib/pubid/etsi/renderer.rb +0 -48
- data/lib/pubid/etsi/urn_parser.rb +0 -34
- data/lib/pubid/gb/builder.rb +0 -45
- data/lib/pubid/gb/identifier.rb +0 -67
- data/lib/pubid/gb/identifiers/standard.rb +0 -34
- data/lib/pubid/gb/identifiers.rb +0 -9
- data/lib/pubid/gb/parser.rb +0 -63
- data/lib/pubid/gb/renderer.rb +0 -35
- data/lib/pubid/gb.rb +0 -87
- data/lib/pubid/gost/builder.rb +0 -148
- data/lib/pubid/gost/identifier.rb +0 -47
- data/lib/pubid/gost/identifiers/foreign_reference.rb +0 -25
- data/lib/pubid/gost/identifiers/harmonized.rb +0 -39
- data/lib/pubid/gost/identifiers/identical_adoption.rb +0 -39
- data/lib/pubid/gost/identifiers/interstate_standard.rb +0 -20
- data/lib/pubid/gost/identifiers/national_standard.rb +0 -19
- data/lib/pubid/gost/identifiers.rb +0 -13
- data/lib/pubid/gost/parser.rb +0 -105
- data/lib/pubid/gost/renderer.rb +0 -48
- data/lib/pubid/gost/urn_generator.rb +0 -46
- data/lib/pubid/gost/urn_parser.rb +0 -52
- data/lib/pubid/gost.rb +0 -49
- data/lib/pubid/iala/builder.rb +0 -102
- data/lib/pubid/iala/identifier.rb +0 -90
- data/lib/pubid/iala/identifiers/advice.rb +0 -15
- data/lib/pubid/iala/identifiers/annex.rb +0 -57
- data/lib/pubid/iala/identifiers/general_assembly.rb +0 -19
- data/lib/pubid/iala/identifiers/guideline.rb +0 -17
- data/lib/pubid/iala/identifiers/letter.rb +0 -16
- data/lib/pubid/iala/identifiers/manual.rb +0 -18
- data/lib/pubid/iala/identifiers/model_course.rb +0 -17
- data/lib/pubid/iala/identifiers/recommendation.rb +0 -17
- data/lib/pubid/iala/identifiers/report.rb +0 -16
- data/lib/pubid/iala/identifiers/resolution.rb +0 -16
- data/lib/pubid/iala/identifiers/standard.rb +0 -17
- data/lib/pubid/iala/identifiers.rb +0 -19
- data/lib/pubid/iala/parser.rb +0 -138
- data/lib/pubid/iala/renderer.rb +0 -36
- data/lib/pubid/iala/urn_generator.rb +0 -49
- data/lib/pubid/iala/urn_parser.rb +0 -67
- data/lib/pubid/iala.rb +0 -71
- data/lib/pubid/iana/builder.rb +0 -22
- data/lib/pubid/iana/identifier.rb +0 -140
- data/lib/pubid/iana/identifiers/registry.rb +0 -69
- data/lib/pubid/iana/identifiers.rb +0 -9
- data/lib/pubid/iana/parser.rb +0 -38
- data/lib/pubid/iana/renderer.rb +0 -32
- data/lib/pubid/iana/urn_generator.rb +0 -19
- data/lib/pubid/iana/urn_parser.rb +0 -24
- data/lib/pubid/iana.rb +0 -69
- data/lib/pubid/idf/renderer.rb +0 -84
- data/lib/pubid/idf/urn_parser.rb +0 -25
- data/lib/pubid/iec/components.rb +0 -14
- data/lib/pubid/iec/identifiers/technical_group.rb +0 -30
- data/lib/pubid/iec/identifiers.rb +0 -31
- data/lib/pubid/iec/renderer.rb +0 -267
- data/lib/pubid/ieee/compaction.rb +0 -121
- data/lib/pubid/ieee/identifiers/amendment.rb +0 -40
- data/lib/pubid/ieee/identifiers/code_number.rb +0 -82
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +0 -32
- data/lib/pubid/ieee/pre_parser.rb +0 -301
- data/lib/pubid/ieee/renderer.rb +0 -408
- data/lib/pubid/ieee/urn_parser.rb +0 -34
- data/lib/pubid/ietf/builder.rb +0 -78
- data/lib/pubid/ietf/identifier.rb +0 -5
- data/lib/pubid/ietf/identifiers/base.rb +0 -72
- data/lib/pubid/ietf/identifiers/bcp.rb +0 -36
- data/lib/pubid/ietf/identifiers/fyi.rb +0 -36
- data/lib/pubid/ietf/identifiers/internet_draft.rb +0 -45
- data/lib/pubid/ietf/identifiers/rfc.rb +0 -27
- data/lib/pubid/ietf/identifiers/serialization.rb +0 -51
- data/lib/pubid/ietf/identifiers/std.rb +0 -36
- data/lib/pubid/ietf/identifiers.rb +0 -14
- data/lib/pubid/ietf/parser.rb +0 -61
- data/lib/pubid/ietf/renderer.rb +0 -64
- data/lib/pubid/ietf/urn_generator.rb +0 -37
- data/lib/pubid/ietf/urn_parser.rb +0 -43
- data/lib/pubid/ietf.rb +0 -85
- data/lib/pubid/iho/renderer.rb +0 -30
- data/lib/pubid/iho/urn_parser.rb +0 -58
- data/lib/pubid/isbn/builder.rb +0 -44
- data/lib/pubid/isbn/check_digit.rb +0 -53
- data/lib/pubid/isbn/identifier.rb +0 -81
- data/lib/pubid/isbn/identifiers/book.rb +0 -30
- data/lib/pubid/isbn/identifiers.rb +0 -9
- data/lib/pubid/isbn/parser.rb +0 -45
- data/lib/pubid/isbn/renderer.rb +0 -16
- data/lib/pubid/isbn.rb +0 -52
- data/lib/pubid/iso/normalizer.rb +0 -89
- data/lib/pubid/itu/components/designation.rb +0 -35
- data/lib/pubid/itu/components.rb +0 -12
- data/lib/pubid/itu/identifiers/addendum.rb +0 -15
- data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +0 -87
- data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +0 -92
- data/lib/pubid/itu/identifiers/errata.rb +0 -15
- data/lib/pubid/itu/identifiers/handbook.rb +0 -38
- data/lib/pubid/itu/identifiers/question.rb +0 -63
- data/lib/pubid/itu/identifiers/report.rb +0 -39
- data/lib/pubid/itu/identifiers/standard_serialization.rb +0 -58
- data/lib/pubid/itu/urn_parser.rb +0 -31
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +0 -34
- data/lib/pubid/jcgm/identifiers/meeting.rb +0 -47
- data/lib/pubid/jcgm/renderer.rb +0 -89
- data/lib/pubid/jcgm/urn_parser.rb +0 -177
- data/lib/pubid/jis/identifiers/corrigendum.rb +0 -16
- data/lib/pubid/jis/renderer.rb +0 -69
- data/lib/pubid/jis/urn_parser.rb +0 -23
- data/lib/pubid/nist/caster.rb +0 -1234
- data/lib/pubid/nist/circular_supplement_builder.rb +0 -293
- data/lib/pubid/nist/identifier.rb +0 -8
- data/lib/pubid/nist/identifiers/dated_document.rb +0 -49
- data/lib/pubid/nist/parser_output_normalizer.rb +0 -233
- data/lib/pubid/nist/preprocessor.rb +0 -443
- data/lib/pubid/nist/renderer.rb +0 -43
- data/lib/pubid/nist/router.rb +0 -149
- data/lib/pubid/nist/series/base.rb +0 -58
- data/lib/pubid/nist/series/crpl.rb +0 -13
- data/lib/pubid/nist/series/fips.rb +0 -14
- data/lib/pubid/nist/series/ir.rb +0 -57
- data/lib/pubid/nist/series/letter_preserving.rb +0 -15
- data/lib/pubid/nist/series/mono.rb +0 -19
- data/lib/pubid/nist/series/ncstar.rb +0 -20
- data/lib/pubid/nist/series.rb +0 -49
- data/lib/pubid/nist/urn_parser.rb +0 -67
- data/lib/pubid/oasis/builder.rb +0 -79
- data/lib/pubid/oasis/identifier.rb +0 -160
- data/lib/pubid/oasis/identifiers/standard.rb +0 -29
- data/lib/pubid/oasis/identifiers.rb +0 -9
- data/lib/pubid/oasis/parser.rb +0 -34
- data/lib/pubid/oasis/renderer.rb +0 -29
- data/lib/pubid/oasis/urn_generator.rb +0 -25
- data/lib/pubid/oasis/urn_parser.rb +0 -22
- data/lib/pubid/oasis.rb +0 -79
- data/lib/pubid/ogc/builder.rb +0 -33
- data/lib/pubid/ogc/identifier.rb +0 -81
- data/lib/pubid/ogc/identifiers/document.rb +0 -26
- data/lib/pubid/ogc/identifiers.rb +0 -10
- data/lib/pubid/ogc/parser.rb +0 -40
- data/lib/pubid/ogc/renderer.rb +0 -33
- data/lib/pubid/ogc/urn_generator.rb +0 -14
- data/lib/pubid/ogc/urn_parser.rb +0 -22
- data/lib/pubid/ogc.rb +0 -71
- data/lib/pubid/oiml/identifiers/bulletin.rb +0 -137
- data/lib/pubid/oiml/identifiers/code_number.rb +0 -90
- data/lib/pubid/oiml/identifiers/errata.rb +0 -15
- data/lib/pubid/oiml/renderer.rb +0 -232
- data/lib/pubid/oiml/urn_parser.rb +0 -39
- data/lib/pubid/omg/builder.rb +0 -19
- data/lib/pubid/omg/identifier.rb +0 -47
- data/lib/pubid/omg/identifiers/specification.rb +0 -32
- data/lib/pubid/omg/identifiers.rb +0 -9
- data/lib/pubid/omg/parser.rb +0 -40
- data/lib/pubid/omg/renderer.rb +0 -19
- data/lib/pubid/omg.rb +0 -51
- data/lib/pubid/parser/grammar.rb +0 -74
- data/lib/pubid/plateau/identifier.rb +0 -4
- data/lib/pubid/plateau/renderer.rb +0 -51
- data/lib/pubid/plateau/urn_parser.rb +0 -43
- data/lib/pubid/prefixes_support.rb +0 -51
- data/lib/pubid/renderers/annotator.rb +0 -233
- data/lib/pubid/sae/renderer.rb +0 -36
- data/lib/pubid/sae/urn_parser.rb +0 -36
- data/lib/pubid/tgpp/builder.rb +0 -41
- data/lib/pubid/tgpp/identifier.rb +0 -107
- data/lib/pubid/tgpp/identifiers/technical_report.rb +0 -32
- data/lib/pubid/tgpp/identifiers/technical_specification.rb +0 -33
- data/lib/pubid/tgpp/identifiers.rb +0 -11
- data/lib/pubid/tgpp/parser.rb +0 -78
- data/lib/pubid/tgpp/renderer.rb +0 -52
- data/lib/pubid/tgpp/urn_generator.rb +0 -39
- data/lib/pubid/tgpp/urn_parser.rb +0 -30
- data/lib/pubid/tgpp.rb +0 -83
- data/lib/pubid/type_resolver.rb +0 -59
- data/lib/pubid/un/builder.rb +0 -42
- data/lib/pubid/un/identifier.rb +0 -40
- data/lib/pubid/un/identifiers/document.rb +0 -24
- data/lib/pubid/un/identifiers.rb +0 -9
- data/lib/pubid/un/parser.rb +0 -25
- data/lib/pubid/un/renderer.rb +0 -11
- data/lib/pubid/un.rb +0 -46
- data/lib/pubid/urn_parser/base.rb +0 -81
- data/lib/pubid/urn_parser/errors.rb +0 -16
- data/lib/pubid/urn_parser.rb +0 -14
- data/lib/pubid/w3c/builder.rb +0 -55
- data/lib/pubid/w3c/identifier.rb +0 -130
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +0 -31
- data/lib/pubid/w3c/identifiers/draft_note.rb +0 -31
- data/lib/pubid/w3c/identifiers/note.rb +0 -30
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/standard.rb +0 -12
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +0 -31
- data/lib/pubid/w3c/identifiers/working_draft.rb +0 -30
- data/lib/pubid/w3c/identifiers.rb +0 -25
- data/lib/pubid/w3c/parser.rb +0 -43
- data/lib/pubid/w3c/renderer.rb +0 -35
- data/lib/pubid/w3c/urn_generator.rb +0 -18
- data/lib/pubid/w3c/urn_parser.rb +0 -36
- data/lib/pubid/w3c.rb +0 -67
- data/lib/pubid/xsf/builder.rb +0 -17
- data/lib/pubid/xsf/identifier.rb +0 -66
- data/lib/pubid/xsf/identifiers/xep.rb +0 -31
- data/lib/pubid/xsf/identifiers.rb +0 -9
- data/lib/pubid/xsf/parser.rb +0 -25
- data/lib/pubid/xsf/renderer.rb +0 -23
- data/lib/pubid/xsf/urn_generator.rb +0 -13
- data/lib/pubid/xsf/urn_parser.rb +0 -18
- data/lib/pubid/xsf.rb +0 -81
|
@@ -4,6 +4,129 @@ 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
|
|
7
130
|
end
|
|
8
131
|
end
|
|
9
132
|
end
|
|
@@ -5,33 +5,17 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Csa
|
|
7
7
|
module Identifiers
|
|
8
|
-
class Bundled <
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
# WrapperIdentifier#base — because a bundle's base is routinely a Cec,
|
|
12
|
-
# which is not a Standard subclass. #root is inherited: it walks
|
|
13
|
-
# `base` to the origin document.
|
|
14
|
-
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
15
|
-
attribute :bundled_with, ::Pubid::Identifier, polymorphic: true,
|
|
16
|
-
collection: true
|
|
8
|
+
class Bundled < Lutaml::Model::Serializable
|
|
9
|
+
attribute :base, Standard
|
|
10
|
+
attribute :bundled_with, Standard, collection: true
|
|
17
11
|
attribute :reaffirmation, :string
|
|
18
12
|
attribute :original_reaffirmation_4digit, :boolean, default: -> {
|
|
19
13
|
false
|
|
20
14
|
}
|
|
21
15
|
attribute :year_format, :string # Add for compatibility with identifier.rb
|
|
22
16
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def base_document
|
|
26
|
-
base ? base.base_document : self
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def drop_supplements
|
|
30
|
-
base || self
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def to_s(**opts)
|
|
34
|
-
# For Cec identifiers, use normalized form (number instead of cec_part + NO.)
|
|
17
|
+
def to_s
|
|
18
|
+
# For Cec identifiers, use normalized form (code instead of cec_part + NO.)
|
|
35
19
|
# This is used for "normalized form" rendering in bundled identifiers
|
|
36
20
|
if base.is_a?(Cec)
|
|
37
21
|
# Render base with normalized code format
|
|
@@ -47,7 +31,7 @@ module Pubid
|
|
|
47
31
|
end
|
|
48
32
|
end
|
|
49
33
|
base_str = (needs_space ? "#{prefix} " : prefix) +
|
|
50
|
-
base.
|
|
34
|
+
base.code.value.to_s + # Use normalized code (e.g., "C22.2-1")
|
|
51
35
|
":#{year_display}"
|
|
52
36
|
parts = [base_str]
|
|
53
37
|
else
|
|
@@ -60,7 +44,7 @@ module Pubid
|
|
|
60
44
|
bundled_with.each do |bundled|
|
|
61
45
|
# For Cec identifiers, use normalized code format
|
|
62
46
|
if bundled.is_a?(Cec)
|
|
63
|
-
bundled_part = bundled.
|
|
47
|
+
bundled_part = bundled.code.value.to_s # Normalized code (e.g., "C22.2-2")
|
|
64
48
|
if bundled.year
|
|
65
49
|
# Use dash if year_format is dash, otherwise colon
|
|
66
50
|
separator = bundled.year_format == "dash" ? "-" : ":"
|
|
@@ -78,7 +62,7 @@ module Pubid
|
|
|
78
62
|
else
|
|
79
63
|
# Standard rendering for other identifier types
|
|
80
64
|
bundled_part = ""
|
|
81
|
-
bundled_part += bundled.
|
|
65
|
+
bundled_part += bundled.code.to_s if bundled.code
|
|
82
66
|
|
|
83
67
|
if bundled.year
|
|
84
68
|
# Use dash if year_format is dash, otherwise colon
|
|
@@ -133,7 +117,7 @@ module Pubid
|
|
|
133
117
|
end
|
|
134
118
|
end
|
|
135
119
|
|
|
136
|
-
|
|
120
|
+
result
|
|
137
121
|
end
|
|
138
122
|
end
|
|
139
123
|
end
|
|
@@ -12,40 +12,40 @@ module Pubid
|
|
|
12
12
|
#
|
|
13
13
|
# This is a wrapper pattern where:
|
|
14
14
|
# - CAN/ indicates Canadian adoption
|
|
15
|
-
# - The
|
|
15
|
+
# - The wrapped_identifier is the actual CSA standard being adopted
|
|
16
16
|
#
|
|
17
17
|
# This is semantically different from a string prefix because:
|
|
18
18
|
# - CAN/ wraps an entire identifier (which may itself be complex)
|
|
19
19
|
# - The wrapped identifier is recursively parsed as a full CSA identifier
|
|
20
20
|
# - Proper object composition, not string manipulation
|
|
21
21
|
class CanadianAdopted < WrapperIdentifier
|
|
22
|
-
def to_s
|
|
22
|
+
def to_s
|
|
23
23
|
# For CAN3- identifiers, don't add CAN/ prefix (CAN3- is already complete)
|
|
24
24
|
# For Series with CAN/CSA- prefix, don't add CAN/ (it's already complete)
|
|
25
25
|
# For CAN/CSA- identifiers, CAN/ wraps CSA- part
|
|
26
|
-
if
|
|
27
|
-
prefix =
|
|
26
|
+
if wrapped_identifier.class.attributes.key?(:publisher_prefix) && wrapped_identifier.publisher_prefix
|
|
27
|
+
prefix = wrapped_identifier.publisher_prefix
|
|
28
28
|
# CAN3- is standalone, just render wrapped identifier
|
|
29
29
|
# CAN/CSA- is already complete for Series identifiers
|
|
30
|
-
if prefix == "CAN3-" || (prefix == "CAN/CSA-" &&
|
|
31
|
-
result =
|
|
30
|
+
if prefix == "CAN3-" || (prefix == "CAN/CSA-" && wrapped_identifier.is_a?(Identifiers::Series))
|
|
31
|
+
result = wrapped_identifier.to_s
|
|
32
32
|
else
|
|
33
33
|
# For other cases, prepend CAN/ prefix
|
|
34
|
-
result = "CAN/#{
|
|
34
|
+
result = "CAN/#{wrapped_identifier}"
|
|
35
35
|
end
|
|
36
36
|
else
|
|
37
37
|
# No publisher_prefix, prepend CAN/
|
|
38
|
-
result = "CAN/#{
|
|
38
|
+
result = "CAN/#{wrapped_identifier}"
|
|
39
39
|
end
|
|
40
|
-
# Only add reaffirmation from wrapper if
|
|
40
|
+
# Only add reaffirmation from wrapper if wrapped_identifier doesn't have one
|
|
41
41
|
# (to avoid duplicates - Identifier.parse sets it on both)
|
|
42
|
-
if reaffirmation && !(
|
|
42
|
+
if reaffirmation && !(wrapped_identifier.class.attributes.key?(:reaffirmation) && wrapped_identifier.reaffirmation)
|
|
43
43
|
# Determine if space is needed before reaffirmation
|
|
44
44
|
# Space needed if year is 2-digit and reaffirmation is 4-digit (original format)
|
|
45
45
|
# No space if both year and reaffirmation are 2-digit
|
|
46
46
|
# Check original_year_4digit flag - if false, year was originally 2-digit
|
|
47
|
-
year_was_2digit =
|
|
48
|
-
!
|
|
47
|
+
year_was_2digit = wrapped_identifier.class.attributes.key?(:original_year_4digit) &&
|
|
48
|
+
!wrapped_identifier.original_year_4digit
|
|
49
49
|
# Check original_reaffirmation_4digit flag
|
|
50
50
|
reaffirmation_was_4digit = original_reaffirmation_4digit
|
|
51
51
|
|
|
@@ -74,7 +74,7 @@ module Pubid
|
|
|
74
74
|
result += "(R#{reaffirmation_str})"
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
|
-
|
|
77
|
+
result
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
end
|
|
@@ -13,52 +13,115 @@ module Pubid
|
|
|
13
13
|
attribute :cec_part, Components::Code # C22.2, C22.3, C22.4, C22.6
|
|
14
14
|
attribute :no_number, Components::Code # Number after NO.
|
|
15
15
|
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def annotation_tokens
|
|
21
|
-
super + [
|
|
22
|
-
[:publisher_prefix, "publisher"],
|
|
23
|
-
[:cec_part, "docnumber"],
|
|
24
|
-
[:no_number, "docnumber"],
|
|
25
|
-
]
|
|
26
|
-
end
|
|
16
|
+
# Combined code attribute for compatibility
|
|
17
|
+
# Returns cec_part + "-" + no_number (e.g., "C22.2-1")
|
|
18
|
+
def code
|
|
19
|
+
return nil unless cec_part && no_number
|
|
27
20
|
|
|
28
|
-
|
|
29
|
-
# key_value block with a subclass one), so this adds only the half of
|
|
30
|
-
# the code that Cec keeps separately.
|
|
31
|
-
key_value do
|
|
32
|
-
map "cec_part",
|
|
33
|
-
with: { to: :cec_part_to_kv, from: :cec_part_from_kv }
|
|
21
|
+
@code ||= Components::Code.new(value: "#{cec_part.value}-#{no_number.value}")
|
|
34
22
|
end
|
|
35
23
|
|
|
36
|
-
def
|
|
37
|
-
|
|
38
|
-
end
|
|
24
|
+
def to_s
|
|
25
|
+
parts = []
|
|
39
26
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
end
|
|
27
|
+
# Publisher prefix (CSA, CAN/CSA-, CAN3-)
|
|
28
|
+
prefix = publisher_prefix || "CSA"
|
|
43
29
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
|
60
123
|
|
|
61
|
-
|
|
124
|
+
result
|
|
62
125
|
end
|
|
63
126
|
end
|
|
64
127
|
end
|
|
@@ -5,23 +5,16 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Csa
|
|
7
7
|
module Identifiers
|
|
8
|
-
#
|
|
8
|
+
# CombinedIdentifier represents CSA identifiers combined with "/" separator
|
|
9
9
|
# Examples:
|
|
10
10
|
# CSA A23.1:24/CSA A23.2:24
|
|
11
11
|
# CSA N285.0:23/CSA N285.6 SERIES:23
|
|
12
12
|
# CSA A123.1-05/A123.5-05 (R2015)
|
|
13
13
|
# CSA B44:19/B44.1:19/B44.2:19 (triple combined)
|
|
14
|
-
class Combined <
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
# not the historical first/second/third triple, which hard-capped the
|
|
19
|
-
# form at three and froze a non-standard hash shape. The first member
|
|
20
|
-
# is the primary designation, which is what #root walks so the index
|
|
21
|
-
# key is non-empty. Typed cross-flavor for the same reason as
|
|
22
|
-
# WrapperIdentifier#base.
|
|
23
|
-
attribute :identifiers, ::Pubid::Identifier, polymorphic: true,
|
|
24
|
-
collection: true
|
|
14
|
+
class Combined < Lutaml::Model::Serializable
|
|
15
|
+
attribute :first, Standard
|
|
16
|
+
attribute :second, Standard
|
|
17
|
+
attribute :third, Standard
|
|
25
18
|
attribute :reaffirmation, :string
|
|
26
19
|
attribute :original_reaffirmation_4digit, :boolean, default: -> {
|
|
27
20
|
false
|
|
@@ -30,74 +23,61 @@ module Pubid
|
|
|
30
23
|
attribute :year_format, :string # Dummy for compatibility
|
|
31
24
|
attribute :separator, :string, default: -> { "/" } # "/" or ", "
|
|
32
25
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
26
|
+
def to_s
|
|
27
|
+
# For comma separator, render both parts with full prefix
|
|
28
|
+
# For slash separator, second/third parts without prefix
|
|
29
|
+
if separator == ", "
|
|
30
|
+
# Comma: Both with full CSA prefix
|
|
31
|
+
parts = [first.to_s, second.to_s]
|
|
32
|
+
parts << third.to_s if third
|
|
33
|
+
else
|
|
34
|
+
# Slash: Second and third without CSA prefix (continuation)
|
|
35
|
+
parts = [first.to_s]
|
|
36
|
+
parts << render_continuation(second)
|
|
37
|
+
parts << render_continuation(third) if third
|
|
38
|
+
end
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
# primary one — the Iec::Identifiers::ConsolidatedIdentifier shape.
|
|
42
|
-
def base_document
|
|
43
|
-
identifiers&.first&.base_document || self
|
|
44
|
-
end
|
|
40
|
+
result = parts.join(separator || "/")
|
|
45
41
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
# Reaffirmation - preserve original format and determine spacing
|
|
43
|
+
if reaffirmation
|
|
44
|
+
# For combined identifiers, check year format from first identifier
|
|
45
|
+
# to determine spacing
|
|
46
|
+
year_was_2digit = first.class.attributes.key?(:original_year_4digit) && !first.original_year_4digit
|
|
47
|
+
|
|
48
|
+
# Check if reaffirmation was originally 4-digit
|
|
49
|
+
# Note: We need to track this at the Combined level, but for now
|
|
50
|
+
# assume 4-digit if the value is 4 digits and starts with 19/20
|
|
51
|
+
reaffirmation_was_4digit = reaffirmation.to_s.length == 4 &&
|
|
52
|
+
reaffirmation.to_s.start_with?("19", "20")
|
|
53
|
+
|
|
54
|
+
# Determine spacing based on original formats
|
|
55
|
+
# Space needed if year is 2-digit and reaffirmation is 4-digit
|
|
56
|
+
result += if year_was_2digit && reaffirmation_was_4digit
|
|
57
|
+
" (R#{reaffirmation})"
|
|
58
|
+
else
|
|
59
|
+
"(R#{reaffirmation})"
|
|
60
|
+
end
|
|
61
|
+
end
|
|
49
62
|
|
|
50
|
-
def to_s(**opts)
|
|
51
|
-
parts = render_parts
|
|
52
|
-
result = parts.join(separator || "/")
|
|
53
|
-
result += render_reaffirmation if reaffirmation
|
|
54
63
|
result += package if package
|
|
55
|
-
|
|
64
|
+
result
|
|
56
65
|
end
|
|
57
66
|
|
|
58
67
|
private
|
|
59
68
|
|
|
60
|
-
# With a comma separator every designation carries its full prefix;
|
|
61
|
-
# with a slash the trailing ones are continuations printed bare.
|
|
62
|
-
def render_parts
|
|
63
|
-
return identifiers.map(&:to_s) if separator == ", "
|
|
64
|
-
|
|
65
|
-
identifiers.each_with_index.map do |identifier, index|
|
|
66
|
-
index.zero? ? identifier.to_s : render_continuation(identifier)
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Reaffirmation - preserve original format and determine spacing.
|
|
71
|
-
# A space is needed when the year was printed 2-digit and the
|
|
72
|
-
# reaffirmation 4-digit; the year format comes from the primary
|
|
73
|
-
# designation.
|
|
74
|
-
def render_reaffirmation
|
|
75
|
-
primary = identifiers&.first
|
|
76
|
-
year_was_2digit =
|
|
77
|
-
primary &&
|
|
78
|
-
primary.class.attributes.key?(:original_year_4digit) &&
|
|
79
|
-
!primary.original_year_4digit
|
|
80
|
-
|
|
81
|
-
reaffirmation_was_4digit = reaffirmation.to_s.length == 4 &&
|
|
82
|
-
reaffirmation.to_s.start_with?("19", "20")
|
|
83
|
-
|
|
84
|
-
if year_was_2digit && reaffirmation_was_4digit
|
|
85
|
-
" (R#{reaffirmation})"
|
|
86
|
-
else
|
|
87
|
-
"(R#{reaffirmation})"
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
69
|
# Render identifier without CSA prefix (unless has_publisher is true)
|
|
92
70
|
def render_continuation(identifier)
|
|
93
71
|
parts = []
|
|
94
72
|
|
|
95
73
|
# Add CSA prefix if present in original
|
|
96
74
|
if identifier.has_publisher
|
|
97
|
-
|
|
75
|
+
prefix = identifier.publisher_prefix || "CSA"
|
|
76
|
+
!prefix.end_with?("-")
|
|
77
|
+
parts << prefix
|
|
98
78
|
end
|
|
99
79
|
|
|
100
|
-
code_part = identifier.
|
|
80
|
+
code_part = identifier.code.to_s if identifier.code
|
|
101
81
|
|
|
102
82
|
# NO. keyword
|
|
103
83
|
if identifier.no_number
|
|
@@ -112,42 +92,34 @@ module Pubid
|
|
|
112
92
|
code_part += " SERIES"
|
|
113
93
|
end
|
|
114
94
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if identifier.french && identifier.year_format != "dash" &&
|
|
130
|
-
!identifier.year_prefix
|
|
131
|
-
year_part += "F"
|
|
95
|
+
# Year with proper format (colon or dash)
|
|
96
|
+
if identifier.year
|
|
97
|
+
separator = identifier.year_format == "dash" ? "-" : ":"
|
|
98
|
+
year_part = separator
|
|
99
|
+
year_part += identifier.year_prefix if identifier.year_prefix # Add M or F prefix
|
|
100
|
+
year_part += "F" if identifier.french && identifier.year_format != "dash" && !identifier.year_prefix # Only add F if no prefix
|
|
101
|
+
# Convert 4-digit year back to 2-digit
|
|
102
|
+
year_str = identifier.year.to_s
|
|
103
|
+
year_part += if year_str.length == 4 && year_str.start_with?("20")
|
|
104
|
+
year_str[2..3]
|
|
105
|
+
else
|
|
106
|
+
year_str
|
|
107
|
+
end
|
|
108
|
+
code_part += year_part
|
|
132
109
|
end
|
|
133
|
-
# Convert 4-digit year back to 2-digit
|
|
134
|
-
year_str = identifier.year.to_s
|
|
135
|
-
year_part + if year_str.length == 4 && year_str.start_with?("20")
|
|
136
|
-
year_str[2..3]
|
|
137
|
-
else
|
|
138
|
-
year_str
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
110
|
|
|
142
|
-
|
|
143
|
-
def join_continuation(identifier, parts)
|
|
144
|
-
return parts.join(" ") unless identifier.has_publisher &&
|
|
145
|
-
parts.length > 1
|
|
111
|
+
parts << code_part if code_part
|
|
146
112
|
|
|
147
|
-
|
|
148
|
-
if
|
|
149
|
-
|
|
150
|
-
|
|
113
|
+
# Join with proper spacing based on prefix
|
|
114
|
+
if identifier.has_publisher && parts.length > 1
|
|
115
|
+
prefix = parts[0]
|
|
116
|
+
needs_space = !prefix.end_with?("-")
|
|
117
|
+
if needs_space
|
|
118
|
+
parts.join(" ")
|
|
119
|
+
else
|
|
120
|
+
# No space after dash-ending prefix
|
|
121
|
+
parts[0] + parts[1..].join(" ")
|
|
122
|
+
end
|
|
151
123
|
else
|
|
152
124
|
parts.join(" ")
|
|
153
125
|
end
|
|
@@ -18,16 +18,16 @@ module Pubid
|
|
|
18
18
|
#
|
|
19
19
|
# This is a wrapper pattern where:
|
|
20
20
|
# - CSA prefix indicates adoption
|
|
21
|
-
# - The
|
|
21
|
+
# - The wrapped_identifier is the external standard (ISO/IEC/CISPR)
|
|
22
22
|
# - Wrapped identifier is recursively parsed using external flavor parsers
|
|
23
23
|
class CsaAdopted < WrapperIdentifier
|
|
24
24
|
# Publisher prefix (e.g., "CSA-", "CAN3-") for rendering
|
|
25
25
|
# When set, uses dash format without space (e.g., "CSA-ISO" not "CSA ISO")
|
|
26
26
|
attribute :publisher_prefix, :string
|
|
27
27
|
|
|
28
|
-
def to_s
|
|
28
|
+
def to_s
|
|
29
29
|
# Get string representation from wrapped identifier
|
|
30
|
-
base_str =
|
|
30
|
+
base_str = wrapped_identifier.to_s
|
|
31
31
|
|
|
32
32
|
# Convert 4-digit years to 2-digit for CSA adoption format
|
|
33
33
|
# ISO/IEC TR 12785-3:2015 → ISO/IEC TR 12785-3:15
|
|
@@ -70,7 +70,7 @@ module Pubid
|
|
|
70
70
|
# Append reaffirmation if present
|
|
71
71
|
result += " (R#{reaffirmation})" if reaffirmation
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
result
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
end
|