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
data/lib/pubid/csa/builder.rb
CHANGED
|
@@ -53,7 +53,7 @@ module Pubid
|
|
|
53
53
|
# Build base identifier (without package_portion)
|
|
54
54
|
base_data = parsed_hash.dup
|
|
55
55
|
base_data.delete(:package_portion)
|
|
56
|
-
package.
|
|
56
|
+
package.base_identifier = build_single(base_data)
|
|
57
57
|
|
|
58
58
|
# Set package materials
|
|
59
59
|
if parsed_hash[:package_portion]
|
|
@@ -101,7 +101,7 @@ module Pubid
|
|
|
101
101
|
else
|
|
102
102
|
begin
|
|
103
103
|
Pubid::Iso.parse(base_str)
|
|
104
|
-
rescue
|
|
104
|
+
rescue Pubid::Errors::ParseError
|
|
105
105
|
Pubid::Iec.parse(base_str)
|
|
106
106
|
end
|
|
107
107
|
end
|
|
@@ -128,17 +128,17 @@ module Pubid
|
|
|
128
128
|
end
|
|
129
129
|
amendment_str = "#{base_str}/Amd #{parsed_hash[:adoption_amendment]}:#{wrapped_amendment_year}"
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
131
|
+
wrapped_identifier = if adoption_org.start_with?("ISO", "CEI")
|
|
132
|
+
Pubid::Iso.parse(amendment_str)
|
|
133
|
+
elsif adoption_org.start_with?("IEC")
|
|
134
|
+
Pubid::Iec.parse(amendment_str)
|
|
135
|
+
else
|
|
136
|
+
begin
|
|
137
|
+
Pubid::Iso.parse(amendment_str)
|
|
138
|
+
rescue Pubid::Errors::ParseError
|
|
139
|
+
Pubid::Iec.parse(amendment_str)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
142
|
else
|
|
143
143
|
# No amendment, simple base identifier
|
|
144
144
|
wrapped_id_str = "#{adoption_org} #{adoption_number}#{year_sep}#{wrapped_year}"
|
|
@@ -148,20 +148,20 @@ module Pubid
|
|
|
148
148
|
wrapped_id_str = wrapped_id_str.sub("CEI/IEC", "IEC")
|
|
149
149
|
end
|
|
150
150
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
151
|
+
wrapped_identifier = if adoption_org.start_with?("ISO", "CEI")
|
|
152
|
+
Pubid::Iso.parse(wrapped_id_str)
|
|
153
|
+
elsif adoption_org.start_with?("IEC")
|
|
154
|
+
Pubid::Iec.parse(wrapped_id_str)
|
|
155
|
+
else
|
|
156
|
+
begin
|
|
157
|
+
Pubid::Iso.parse(wrapped_id_str)
|
|
158
|
+
rescue Pubid::Errors::ParseError
|
|
159
|
+
Pubid::Iec.parse(wrapped_id_str)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
-
adoption.
|
|
164
|
+
adoption.wrapped_identifier = wrapped_identifier
|
|
165
165
|
|
|
166
166
|
# Handle reaffirmation
|
|
167
167
|
if parsed_hash[:reaffirmation]
|
|
@@ -195,25 +195,23 @@ module Pubid
|
|
|
195
195
|
# SERIES matched - build Series identifier with CAN/CSA- prefix
|
|
196
196
|
# The Series.to_s will handle rendering as "CAN/CSA-A220 SERIES-06"
|
|
197
197
|
# (keeping the full prefix instead of "CAN/CSA-A220...")
|
|
198
|
-
|
|
198
|
+
wrapped_identifier = build_series(wrapped_data)
|
|
199
199
|
# Set the full publisher_prefix on the wrapped Series for proper rendering
|
|
200
|
-
# The test expects
|
|
200
|
+
# The test expects wrapped_identifier.publisher_prefix to be "CAN/CSA-"
|
|
201
201
|
elsif parsed_hash.key?(:cec_part)
|
|
202
202
|
# CEC matched - build Cec identifier
|
|
203
|
-
|
|
203
|
+
wrapped_identifier = build_cec(wrapped_data)
|
|
204
204
|
else
|
|
205
205
|
# Standard CSA identifier
|
|
206
|
-
|
|
206
|
+
wrapped_identifier = build_single(wrapped_data)
|
|
207
207
|
end
|
|
208
|
-
|
|
208
|
+
wrapped_identifier.publisher_prefix = original_prefix if original_prefix && wrapped_identifier.class.attributes.key?(:publisher_prefix)
|
|
209
209
|
|
|
210
|
-
canadian_adopted.
|
|
210
|
+
canadian_adopted.wrapped_identifier = wrapped_identifier
|
|
211
211
|
|
|
212
|
-
# Handle reaffirmation - supports both 2-digit and 4-digit years
|
|
213
|
-
#
|
|
214
|
-
#
|
|
215
|
-
# carries no reaffirmation of its own, and Series/Cec track the printed
|
|
216
|
-
# width themselves.
|
|
212
|
+
# Handle reaffirmation - supports both 2-digit and 4-digit years
|
|
213
|
+
# Note: CanadianAdopted (WrapperIdentifier) doesn't track original_reaffirmation_4digit
|
|
214
|
+
# That's only for Series/Cec identifiers
|
|
217
215
|
if parsed_hash[:reaffirmation_4digit]
|
|
218
216
|
# Original was 4-digit (e.g., "R2019")
|
|
219
217
|
canadian_adopted.reaffirmation = parsed_hash[:reaffirmation_4digit].to_s
|
|
@@ -253,7 +251,7 @@ module Pubid
|
|
|
253
251
|
|
|
254
252
|
# Code
|
|
255
253
|
if parsed_hash[:code]
|
|
256
|
-
series.
|
|
254
|
+
series.code = Components::Code.new(value: parsed_hash[:code].to_s)
|
|
257
255
|
end
|
|
258
256
|
|
|
259
257
|
# Year format and year
|
|
@@ -453,10 +451,10 @@ module Pubid
|
|
|
453
451
|
def build_combined(parsed_hash)
|
|
454
452
|
combined = Identifiers::Combined.new
|
|
455
453
|
|
|
456
|
-
# Build each
|
|
457
|
-
combined.
|
|
458
|
-
|
|
459
|
-
|
|
454
|
+
# Build each part
|
|
455
|
+
combined.first = build_single(parsed_hash[:first])
|
|
456
|
+
combined.second = build_single(parsed_hash[:second])
|
|
457
|
+
combined.third = build_single(parsed_hash[:third]) if parsed_hash[:third]
|
|
460
458
|
|
|
461
459
|
# Detect separator from parser marker
|
|
462
460
|
combined.separator = if parsed_hash[:comma_separator]
|
|
@@ -497,13 +495,15 @@ module Pubid
|
|
|
497
495
|
identifier_class = select_identifier_class(data)
|
|
498
496
|
identifier = identifier_class.new
|
|
499
497
|
|
|
500
|
-
# Publisher prefix (CAN/CSA-, CAN3-, or CSA)
|
|
501
|
-
#
|
|
502
|
-
#
|
|
498
|
+
# Publisher prefix (CAN/CSA-, CAN3-, or CSA)
|
|
499
|
+
# For code_only identifiers (no prefix in original), set to empty string
|
|
500
|
+
# to prevent default "CSA" from being added in rendering
|
|
503
501
|
if data[:publisher_prefix]
|
|
504
502
|
identifier.publisher_prefix = data[:publisher_prefix].to_s
|
|
505
|
-
elsif data[:code]
|
|
506
|
-
|
|
503
|
+
elsif data[:code] && !data[:publisher_prefix]
|
|
504
|
+
# Code exists but no publisher_prefix = code_only identifier
|
|
505
|
+
# Use empty string to indicate "no prefix wanted"
|
|
506
|
+
identifier.publisher_prefix = ""
|
|
507
507
|
end
|
|
508
508
|
|
|
509
509
|
# Publisher presence flag
|
|
@@ -520,13 +520,13 @@ module Pubid
|
|
|
520
520
|
# Pattern: "C22.1-15" should become code="C22.1", year="2015"
|
|
521
521
|
if !data[:year] && code_value =~ /^(.+)-(\d{2})$/
|
|
522
522
|
# Split code and year
|
|
523
|
-
identifier.
|
|
523
|
+
identifier.code = Components::Code.new(value: $1)
|
|
524
524
|
# Convert 2-digit year to 4-digit
|
|
525
525
|
year_2digit = $2
|
|
526
526
|
identifier.year = "20#{year_2digit}"
|
|
527
527
|
identifier.year_format = "dash"
|
|
528
528
|
else
|
|
529
|
-
identifier.
|
|
529
|
+
identifier.code = Components::Code.new(value: code_value)
|
|
530
530
|
end
|
|
531
531
|
end
|
|
532
532
|
|
|
@@ -8,31 +8,20 @@ module Pubid
|
|
|
8
8
|
# collections of other identifiers or package materials.
|
|
9
9
|
#
|
|
10
10
|
# Examples:
|
|
11
|
-
# -
|
|
11
|
+
# - PackageIdentifier: Base + package materials
|
|
12
|
+
# - Future: BundleIdentifier refactor to use composite
|
|
12
13
|
#
|
|
13
14
|
# This follows the Composite pattern where an identifier can contain
|
|
14
15
|
# other identifiers or additional metadata as a collection.
|
|
15
|
-
class CompositeIdentifier <
|
|
16
|
-
# The primary/base identifier
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
# ::Pubid::Identifier.
|
|
20
|
-
attribute :base, ::Pubid::Identifier, polymorphic: true
|
|
16
|
+
class CompositeIdentifier < Lutaml::Model::Serializable
|
|
17
|
+
# The primary/base identifier
|
|
18
|
+
# Use attr_accessor since it can be any identifier object
|
|
19
|
+
attr_accessor :base_identifier
|
|
21
20
|
|
|
22
21
|
# Subclasses MUST implement to_s to define how they render
|
|
23
|
-
def to_s
|
|
22
|
+
def to_s
|
|
24
23
|
raise NotImplementedError, "Subclasses must implement to_s method"
|
|
25
24
|
end
|
|
26
|
-
|
|
27
|
-
# A package peels to the standard it packages — see
|
|
28
|
-
# WrapperIdentifier#base_document.
|
|
29
|
-
def base_document
|
|
30
|
-
base ? base.base_document : self
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def drop_supplements
|
|
34
|
-
base || self
|
|
35
|
-
end
|
|
36
25
|
end
|
|
37
26
|
end
|
|
38
27
|
end
|
data/lib/pubid/csa/identifier.rb
CHANGED
|
@@ -2,38 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Csa
|
|
5
|
-
|
|
6
|
-
# through SingleIdentifier, and the container types (WrapperIdentifier,
|
|
7
|
-
# CompositeIdentifier, Bundled, Combined) directly. So every CSA identifier
|
|
8
|
-
# is `is_a?(Pubid::Csa::Identifier)` natively and gets the shared
|
|
9
|
-
# polymorphic `from_hash`, `#root`, `#exclude` and MR rendering. The
|
|
10
|
-
# containers used to be separate Lutaml::Model types, which is what made
|
|
11
|
-
# `root.number` raise rather than return the relaton index key.
|
|
12
|
-
class Identifier < ::Pubid::Identifier
|
|
5
|
+
class Identifier
|
|
13
6
|
def self.parse(input)
|
|
14
|
-
unless input.is_a?(String)
|
|
15
|
-
raise Pubid::Errors::InvalidInputError,
|
|
16
|
-
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
if input.length > Pubid::MAX_INPUT_LENGTH
|
|
20
|
-
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
21
|
-
end
|
|
22
|
-
|
|
23
7
|
# Filter out comments
|
|
24
|
-
if input.start_with?("#")
|
|
25
|
-
raise Pubid::Errors::ParseError.new(
|
|
26
|
-
"Not a CSA identifier (comment): #{input}",
|
|
27
|
-
input: input, flavor: "csa",
|
|
28
|
-
)
|
|
29
|
-
end
|
|
8
|
+
return nil if input.start_with?("#")
|
|
30
9
|
|
|
31
|
-
# Filter out non-standards
|
|
32
|
-
if input.match?(/^CSA (Communities|Group|Learning|OnDemand|Update)/)
|
|
33
|
-
raise Pubid::Errors::ParseError.new(
|
|
34
|
-
"Not a CSA standard: #{input}", input: input, flavor: "csa"
|
|
35
|
-
)
|
|
36
|
-
end
|
|
10
|
+
# Filter out non-standards
|
|
11
|
+
return nil if input.match?(/^CSA (Communities|Group|Learning|OnDemand|Update)/)
|
|
37
12
|
|
|
38
13
|
# Preprocessing: normalize CEI to IEC (French name)
|
|
39
14
|
input = input.gsub("CEI/IEC", "IEC").gsub(/\bCEI\b/, "IEC")
|
|
@@ -62,14 +37,16 @@ module Pubid
|
|
|
62
37
|
|
|
63
38
|
# Parse normally (will create Bundled or Combined identifier)
|
|
64
39
|
tree = Parser.new.parse(normalized)
|
|
65
|
-
result = build
|
|
40
|
+
result = Builder.new.build(tree)
|
|
66
41
|
|
|
67
42
|
# Apply CAN/CSA- prefix to the appropriate parts
|
|
68
|
-
|
|
43
|
+
if result
|
|
44
|
+
set_publisher_prefix(result, "CAN/CSA-")
|
|
69
45
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
46
|
+
# Handle reaffirmation if present
|
|
47
|
+
if (wrapped_input =~ /\(R(\d{4})\)/) && result.class.attributes.key?(:reaffirmation)
|
|
48
|
+
result.reaffirmation = $1
|
|
49
|
+
end
|
|
73
50
|
end
|
|
74
51
|
|
|
75
52
|
return result
|
|
@@ -105,7 +82,8 @@ module Pubid
|
|
|
105
82
|
wrapped_input = wrapped_input.sub(/^CSA-/, "CSA ")
|
|
106
83
|
|
|
107
84
|
# Parse the wrapped identifier recursively
|
|
108
|
-
|
|
85
|
+
wrapped_identifier = parse(wrapped_input)
|
|
86
|
+
return nil unless wrapped_identifier
|
|
109
87
|
|
|
110
88
|
# NOTE: Series identifiers should be wrapped in CanadianAdopted when
|
|
111
89
|
# they have CAN/CSA- prefix. The Series will handle rendering correctly.
|
|
@@ -114,35 +92,32 @@ module Pubid
|
|
|
114
92
|
# Set publisher prefix on wrapped identifier
|
|
115
93
|
# For Series identifiers with CAN/ wrapper, use full "CAN/CSA-" prefix
|
|
116
94
|
# For other identifiers, use the detected original_prefix ("CSA-" or "CSA")
|
|
117
|
-
if
|
|
118
|
-
if is_can_csa &&
|
|
95
|
+
if wrapped_identifier.class.attributes.key?(:publisher_prefix)
|
|
96
|
+
if is_can_csa && wrapped_identifier.is_a?(Identifiers::Series)
|
|
119
97
|
# Series gets full "CAN/CSA-" prefix for proper rendering
|
|
120
|
-
|
|
98
|
+
wrapped_identifier.publisher_prefix = "CAN/CSA-"
|
|
121
99
|
elsif original_prefix
|
|
122
|
-
# For Combined identifiers, set on
|
|
123
|
-
if
|
|
124
|
-
|
|
125
|
-
if primary.class.attributes.key?(:publisher_prefix)
|
|
126
|
-
primary.publisher_prefix = original_prefix
|
|
127
|
-
end
|
|
100
|
+
# For Combined identifiers, set on first identifier
|
|
101
|
+
if wrapped_identifier.is_a?(Identifiers::Combined) && wrapped_identifier.first
|
|
102
|
+
wrapped_identifier.first.publisher_prefix = original_prefix if wrapped_identifier.first.class.attributes.key?(:publisher_prefix)
|
|
128
103
|
else
|
|
129
104
|
# For non-Combined identifiers, set directly
|
|
130
|
-
|
|
105
|
+
wrapped_identifier.publisher_prefix = original_prefix
|
|
131
106
|
end
|
|
132
107
|
end
|
|
133
108
|
end
|
|
134
109
|
|
|
135
|
-
# Set reaffirmation on
|
|
136
|
-
if
|
|
137
|
-
|
|
138
|
-
if
|
|
139
|
-
|
|
110
|
+
# Set reaffirmation on wrapped_identifier if it has the attribute
|
|
111
|
+
if wrapped_identifier.class.attributes.key?(:reaffirmation) && reaffirm_year
|
|
112
|
+
wrapped_identifier.reaffirmation = reaffirm_year
|
|
113
|
+
if wrapped_identifier.class.attributes.key?(:original_reaffirmation_4digit)
|
|
114
|
+
wrapped_identifier.original_reaffirmation_4digit = reaffirmation_was_4digit
|
|
140
115
|
end
|
|
141
116
|
end
|
|
142
117
|
|
|
143
118
|
# Create CanadianAdoptedIdentifier wrapper
|
|
144
119
|
result = Identifiers::CanadianAdopted.new
|
|
145
|
-
result.
|
|
120
|
+
result.wrapped_identifier = wrapped_identifier
|
|
146
121
|
result.reaffirmation = reaffirm_year if reaffirm_year
|
|
147
122
|
|
|
148
123
|
return result
|
|
@@ -173,43 +148,44 @@ module Pubid
|
|
|
173
148
|
end
|
|
174
149
|
|
|
175
150
|
# Parse the wrapped identifier recursively
|
|
176
|
-
|
|
151
|
+
wrapped_identifier = parse(wrapped_input)
|
|
152
|
+
return nil unless wrapped_identifier
|
|
177
153
|
|
|
178
154
|
# Set year_format for dash format identifiers (preserve original 2-digit year)
|
|
179
|
-
if has_dash_year &&
|
|
180
|
-
|
|
155
|
+
if has_dash_year && wrapped_identifier.class.attributes.key?(:year_format)
|
|
156
|
+
wrapped_identifier.year_format = "dash"
|
|
181
157
|
# Mark original year as 2-digit so renderer converts back (1986 → 86)
|
|
182
|
-
if
|
|
183
|
-
|
|
158
|
+
if wrapped_identifier.class.attributes.key?(:original_year_4digit)
|
|
159
|
+
wrapped_identifier.original_year_4digit = false
|
|
184
160
|
end
|
|
185
161
|
end
|
|
186
162
|
|
|
187
163
|
# Check if this is a Series identifier - return it directly with CAN3- prefix
|
|
188
164
|
# Series identifiers are complete identifier types and handle the prefix themselves
|
|
189
165
|
# They don't need to be wrapped in CanadianAdopted
|
|
190
|
-
if
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return
|
|
166
|
+
if wrapped_identifier.is_a?(Identifiers::Series)
|
|
167
|
+
wrapped_identifier.publisher_prefix = "CAN3-"
|
|
168
|
+
wrapped_identifier.reaffirmation = reaffirm_year if reaffirm_year
|
|
169
|
+
wrapped_identifier.original_reaffirmation_4digit = reaffirmation_was_4digit
|
|
170
|
+
return wrapped_identifier
|
|
195
171
|
end
|
|
196
172
|
|
|
197
173
|
# Set CAN3- as publisher prefix on wrapped identifier
|
|
198
|
-
if
|
|
199
|
-
|
|
174
|
+
if wrapped_identifier.class.attributes.key?(:publisher_prefix)
|
|
175
|
+
wrapped_identifier.publisher_prefix = "CAN3-"
|
|
200
176
|
end
|
|
201
177
|
|
|
202
|
-
# Set reaffirmation on
|
|
203
|
-
if
|
|
204
|
-
|
|
205
|
-
if
|
|
206
|
-
|
|
178
|
+
# Set reaffirmation on wrapped_identifier if it has the attribute
|
|
179
|
+
if wrapped_identifier.class.attributes.key?(:reaffirmation) && reaffirm_year
|
|
180
|
+
wrapped_identifier.reaffirmation = reaffirm_year
|
|
181
|
+
if wrapped_identifier.class.attributes.key?(:original_reaffirmation_4digit)
|
|
182
|
+
wrapped_identifier.original_reaffirmation_4digit = reaffirmation_was_4digit
|
|
207
183
|
end
|
|
208
184
|
end
|
|
209
185
|
|
|
210
186
|
# Create CanadianAdoptedIdentifier wrapper
|
|
211
187
|
result = Identifiers::CanadianAdopted.new
|
|
212
|
-
result.
|
|
188
|
+
result.wrapped_identifier = wrapped_identifier
|
|
213
189
|
result.reaffirmation = reaffirm_year if reaffirm_year
|
|
214
190
|
|
|
215
191
|
return result
|
|
@@ -265,20 +241,13 @@ module Pubid
|
|
|
265
241
|
"/Amd #{amendment_num}#{separator}#{amend_full_year}"
|
|
266
242
|
end
|
|
267
243
|
|
|
268
|
-
# Parse with appropriate flavor parser
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
base = parse_external_standard(wrapped_input)
|
|
272
|
-
unless base
|
|
273
|
-
raise Pubid::Errors::ParseError.new(
|
|
274
|
-
"Unparseable adopted standard: #{input}",
|
|
275
|
-
input: input, flavor: "csa",
|
|
276
|
-
)
|
|
277
|
-
end
|
|
244
|
+
# Parse with appropriate flavor parser
|
|
245
|
+
wrapped_identifier = parse_external_standard(wrapped_input)
|
|
246
|
+
return nil unless wrapped_identifier
|
|
278
247
|
|
|
279
248
|
# Create CsaAdoptedIdentifier wrapper
|
|
280
249
|
result = Identifiers::CsaAdopted.new
|
|
281
|
-
result.
|
|
250
|
+
result.wrapped_identifier = wrapped_identifier
|
|
282
251
|
result.reaffirmation = reaffirm_year if reaffirm_year
|
|
283
252
|
|
|
284
253
|
return result
|
|
@@ -359,9 +328,12 @@ module Pubid
|
|
|
359
328
|
break if token.match?(/^PACKAGE$/i)
|
|
360
329
|
|
|
361
330
|
test_input = base_input.empty? ? token : "#{base_input} #{token}"
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
331
|
+
parsed = parse(test_input)
|
|
332
|
+
if parsed
|
|
333
|
+
base_input = test_input
|
|
334
|
+
else
|
|
335
|
+
break
|
|
336
|
+
end
|
|
365
337
|
end
|
|
366
338
|
|
|
367
339
|
# Extract materials as everything between base and PACKAGE
|
|
@@ -373,20 +345,13 @@ module Pubid
|
|
|
373
345
|
end
|
|
374
346
|
end
|
|
375
347
|
|
|
376
|
-
# Parse
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
raise Pubid::Errors::ParseError.new(
|
|
380
|
-
"Unparseable package base: #{input}",
|
|
381
|
-
input: input, flavor: "csa",
|
|
382
|
-
)
|
|
383
|
-
end
|
|
384
|
-
|
|
385
|
-
base = parse(base_input)
|
|
348
|
+
# Parse base identifier recursively
|
|
349
|
+
base_identifier = base_input ? parse(base_input) : nil
|
|
350
|
+
return nil unless base_identifier
|
|
386
351
|
|
|
387
352
|
# Create PackageIdentifier
|
|
388
353
|
result = Identifiers::Package.new
|
|
389
|
-
result.
|
|
354
|
+
result.base_identifier = base_identifier
|
|
390
355
|
# Set materials if present
|
|
391
356
|
if package_materials && !package_materials.empty?
|
|
392
357
|
result.package_materials = package_materials
|
|
@@ -419,61 +384,39 @@ module Pubid
|
|
|
419
384
|
normalized = normalized.gsub("CAN3-", "CSA ")
|
|
420
385
|
|
|
421
386
|
tree = Parser.new.parse(normalized)
|
|
422
|
-
result = build
|
|
387
|
+
result = Builder.new.build(tree)
|
|
423
388
|
|
|
424
389
|
# Set publisher prefix if detected
|
|
425
|
-
|
|
390
|
+
if result && publisher_prefix
|
|
391
|
+
set_publisher_prefix(result, publisher_prefix)
|
|
392
|
+
end
|
|
426
393
|
|
|
427
394
|
# Set year format if detected as dash and not already set
|
|
428
|
-
result
|
|
395
|
+
if result && has_dash_year && result.year_format.nil?
|
|
396
|
+
result.year_format = "dash"
|
|
397
|
+
end
|
|
429
398
|
|
|
430
399
|
result
|
|
431
400
|
rescue Parslet::ParseFailed => e
|
|
432
401
|
raise e
|
|
433
402
|
end
|
|
434
403
|
|
|
435
|
-
# Build a parse tree into an identifier, or fail loudly.
|
|
436
|
-
#
|
|
437
|
-
# Builder#build can return nil for a tree it recognises but cannot map
|
|
438
|
-
# to a class. `parse` must return an identifier or raise — every flavor
|
|
439
|
-
# but `api` already honours that — because a nil surfaces in the caller
|
|
440
|
-
# as a NoMethodError far from the input that caused it, rather than as a
|
|
441
|
-
# catchable parse failure.
|
|
442
|
-
def self.build!(tree, input)
|
|
443
|
-
built = Builder.new.build(tree)
|
|
444
|
-
return built if built
|
|
445
|
-
|
|
446
|
-
raise Pubid::Errors::ParseError.new(
|
|
447
|
-
"Unparseable CSA identifier: #{input}",
|
|
448
|
-
input: input, flavor: "csa",
|
|
449
|
-
)
|
|
450
|
-
end
|
|
451
|
-
|
|
452
|
-
# Probe whether a string parses. The package base scan walks
|
|
453
|
-
# progressively longer prefixes and keeps the longest that succeeds, so
|
|
454
|
-
# it is the one caller that genuinely wants a nil rather than a raise.
|
|
455
|
-
def self.try_parse(input)
|
|
456
|
-
parse(input)
|
|
457
|
-
rescue Parslet::ParseFailed, ArgumentError
|
|
458
|
-
nil
|
|
459
|
-
end
|
|
460
|
-
|
|
461
404
|
def self.set_publisher_prefix(obj, prefix)
|
|
462
405
|
# Set on main object if it has the attribute
|
|
463
406
|
if obj.class.attributes.key?(:publisher_prefix)
|
|
464
407
|
obj.publisher_prefix = prefix
|
|
465
408
|
end
|
|
466
409
|
|
|
467
|
-
# Set on combined identifier parts
|
|
468
|
-
# takes the prefix; a trailing one only when it printed a publisher of
|
|
469
|
-
# its own (a bare continuation must stay bare).
|
|
410
|
+
# Set on combined identifier parts
|
|
470
411
|
if obj.is_a?(Identifiers::Combined)
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
412
|
+
if obj.first&.class&.attributes&.key?(:publisher_prefix)
|
|
413
|
+
obj.first.publisher_prefix = prefix
|
|
414
|
+
end
|
|
415
|
+
if obj.second && obj.second.class.attributes.key?(:has_publisher) && obj.second.has_publisher && obj.second.class.attributes.key?(:publisher_prefix)
|
|
416
|
+
obj.second.publisher_prefix = prefix
|
|
417
|
+
end
|
|
418
|
+
if obj.third && obj.third.class.attributes.key?(:has_publisher) && obj.third.has_publisher && obj.third.class.attributes.key?(:publisher_prefix)
|
|
419
|
+
obj.third.publisher_prefix = prefix
|
|
477
420
|
end
|
|
478
421
|
end
|
|
479
422
|
|
|
@@ -484,6 +427,9 @@ module Pubid
|
|
|
484
427
|
end
|
|
485
428
|
|
|
486
429
|
def self.parse_external_standard(input)
|
|
430
|
+
# Ensure full Pubid is loaded (handles Scheme and all flavors)
|
|
431
|
+
require_relative "../../pubid" unless defined?(Pubid::Iso) && defined?(Pubid::Iec)
|
|
432
|
+
|
|
487
433
|
# Try ISO/IEC first (most common)
|
|
488
434
|
if input.match?(/^(ISO\/IEC|ISO|IEC|CEI|CEI\/IEC)\s/)
|
|
489
435
|
begin
|
|
@@ -506,65 +452,6 @@ module Pubid
|
|
|
506
452
|
|
|
507
453
|
nil
|
|
508
454
|
end
|
|
509
|
-
|
|
510
|
-
# CSA stores the publication year in its own plain `year` string
|
|
511
|
-
# attribute (not a `Components::Date`), so the base `#exclude`'s
|
|
512
|
-
# `:year`->`:date` remap nils the unused inherited `date` and leaves
|
|
513
|
-
# `year` intact. Override to nil `year` (and its formatting metadata)
|
|
514
|
-
# when `:year`/`:date` is excluded, so a partial (year-less) CSA
|
|
515
|
-
# reference is a year wildcard under `matches?(row, ignore: [:year])`.
|
|
516
|
-
# The metadata attrs (`year_format`, `year_prefix`,
|
|
517
|
-
# `original_year_4digit`, `french`) are year-derived — a year-less
|
|
518
|
-
# parse leaves them nil/false, so they must be reset here too or `==`
|
|
519
|
-
# would still differ. `french` in particular is only ever set from a
|
|
520
|
-
# `:F` year prefix (the French-edition form `CSA B149.1:F20`), so a
|
|
521
|
-
# bare `CSA B149.1` reference must wildcard it to match both the
|
|
522
|
-
# English and French editions of a document number. `super` preserves
|
|
523
|
-
# the base recursion into nested identifiers (adoption wrappers
|
|
524
|
-
# delegate their year to an inner id and lack a `year` accessor, hence
|
|
525
|
-
# the `respond_to?` guard). Mirrors BIPM.
|
|
526
|
-
def exclude(*args)
|
|
527
|
-
result = super
|
|
528
|
-
year_keys = args & %i[year date]
|
|
529
|
-
if !year_keys.empty? && result.respond_to?(:year=)
|
|
530
|
-
result.year = nil
|
|
531
|
-
result.year_format = nil
|
|
532
|
-
result.year_prefix = nil
|
|
533
|
-
result.original_year_4digit = false
|
|
534
|
-
result.french = nil
|
|
535
|
-
end
|
|
536
|
-
result
|
|
537
|
-
end
|
|
538
|
-
|
|
539
|
-
# CSA encodes its identity across many shape-specific attributes
|
|
540
|
-
# (`publisher_prefix`, `number`, `no_number`, `series`, `series_prefix`,
|
|
541
|
-
# `package`, `reaffirmation`, `year` with prefix/format/French markers,
|
|
542
|
-
# etc.) that the generic MrString renderer doesn't know about. The
|
|
543
|
-
# CSA `to_s` already round-trips losslessly through the CSA parser, so
|
|
544
|
-
# MR mirrors it: ` ` → `.`, `:` → `.` (so the year never looks like
|
|
545
|
-
# another code segment), `/` → `-` (CAN/CSA- prefix), then lowercased
|
|
546
|
-
# to match the all-lowercase MR convention (issue #142).
|
|
547
|
-
#
|
|
548
|
-
# Those three are the SEMANTIC mappings — they carry CSA's segment
|
|
549
|
-
# structure. Everything else is then neutralised by CHARSET, not by an
|
|
550
|
-
# enumerated escape list, so a character that appears in a future
|
|
551
|
-
# reference cannot leak into what `to_slug` hands a filesystem. CSA
|
|
552
|
-
# references really do carry `(`, `)`, `,`, `&` and `+` today
|
|
553
|
-
# (`CSA C22.2 NO. 100:14 (R2024)`, `… Code, Handbook & Training
|
|
554
|
-
# Package`, `… + A1:15`), and the old `tr` chain let all of them
|
|
555
|
-
# through — 601 of 816 slugs were not filename-safe. The BIPM `mr_slug`
|
|
556
|
-
# precedent.
|
|
557
|
-
def to_mr_string
|
|
558
|
-
to_s
|
|
559
|
-
.downcase
|
|
560
|
-
.tr(" ", ".").tr(":", ".").tr("/", "-")
|
|
561
|
-
.gsub(/[^a-z0-9._-]+/, "-")
|
|
562
|
-
.gsub(/\A[-.]+|[-.]+\z/, "")
|
|
563
|
-
end
|
|
564
|
-
|
|
565
|
-
def to_slug
|
|
566
|
-
to_mr_string
|
|
567
|
-
end
|
|
568
455
|
end
|
|
569
456
|
end
|
|
570
457
|
end
|