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/ieee/builder.rb
CHANGED
|
@@ -3,71 +3,59 @@
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Ieee
|
|
5
5
|
# Builder class for constructing IEEE identifier scheme from parsed data
|
|
6
|
-
# Single Responsibility: Transform parsed data into
|
|
6
|
+
# Single Responsibility: Transform parsed data into Scheme objects
|
|
7
7
|
class Builder
|
|
8
8
|
attr_accessor :original_input
|
|
9
9
|
attr_reader :identifier_class
|
|
10
10
|
|
|
11
|
-
def initialize(identifier_class =
|
|
11
|
+
def initialize(identifier_class = Identifiers::Base)
|
|
12
12
|
@identifier_class = identifier_class
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
# Build a scheme object from parsed data
|
|
16
16
|
# @param parsed [Hash, Array] the parsed identifier data
|
|
17
|
-
# @return [
|
|
17
|
+
# @return [Scheme] the constructed scheme object
|
|
18
18
|
def build(parsed)
|
|
19
|
-
# Parslet returns a top-level *array* of hashes when a repeated capture
|
|
20
|
-
# (e.g. the two subparts in "7.4-3-2") stops the sibling captures from
|
|
21
|
-
# hash-merging. The dispatch checks below need hash access, so read them
|
|
22
|
-
# off a merged view (`d`); build_single_identifier re-handles the array
|
|
23
|
-
# itself (preserving every subpart), so it still gets the original.
|
|
24
|
-
d = parsed.is_a?(Array) ? merge_parsed_array(parsed) : parsed
|
|
25
|
-
|
|
26
19
|
# Handle CSA dual published patterns
|
|
27
|
-
if
|
|
20
|
+
if parsed[:ieee_portion] && parsed[:csa_portion]
|
|
28
21
|
return build_csa_dual_published(parsed)
|
|
29
22
|
end
|
|
30
23
|
|
|
31
|
-
# Handle the historical IEEE/IPCEA cable designation (S-135)
|
|
32
|
-
if d[:s_number]
|
|
33
|
-
return build_s_designation(parsed)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
24
|
# Handle combined AIEE identifiers (from "Nos X and Y" preprocessing)
|
|
37
|
-
if
|
|
25
|
+
if parsed[:first_aiee] && parsed[:second_aiee]
|
|
38
26
|
return build_combined_aiee(parsed)
|
|
39
27
|
end
|
|
40
28
|
|
|
41
29
|
# Handle dual published patterns
|
|
42
|
-
if
|
|
30
|
+
if parsed[:first] && parsed[:second]
|
|
43
31
|
return build_dual_published(parsed)
|
|
44
32
|
end
|
|
45
33
|
|
|
46
34
|
# Handle IEC/IEEE copublished patterns
|
|
47
|
-
if
|
|
35
|
+
if parsed[:content]
|
|
48
36
|
return build_iec_ieee_copublished(parsed)
|
|
49
37
|
end
|
|
50
38
|
|
|
51
39
|
# Handle NESC identifiers (National Electrical Safety Code)
|
|
52
|
-
if
|
|
40
|
+
if parsed[:nesc]
|
|
53
41
|
nesc_builder = Nesc::Builder.new
|
|
54
|
-
return nesc_builder.build(
|
|
42
|
+
return nesc_builder.build(parsed[:nesc])
|
|
55
43
|
end
|
|
56
44
|
|
|
57
45
|
# Handle AIEE identifiers (American Institute of Electrical Engineers)
|
|
58
|
-
if
|
|
46
|
+
if parsed[:aiee]
|
|
59
47
|
aiee_builder = Aiee::Builder.new
|
|
60
|
-
return aiee_builder.build(
|
|
48
|
+
return aiee_builder.build(parsed[:aiee])
|
|
61
49
|
end
|
|
62
50
|
|
|
63
51
|
# Handle IRE identifiers (Institute of Radio Engineers)
|
|
64
|
-
if
|
|
52
|
+
if parsed[:ire]
|
|
65
53
|
ire_builder = Ire::Builder.new
|
|
66
|
-
return ire_builder.build(
|
|
54
|
+
return ire_builder.build(parsed[:ire])
|
|
67
55
|
end
|
|
68
56
|
|
|
69
57
|
# Handle IEEE/ASTM SI/PSI identifiers (Système International)
|
|
70
|
-
if
|
|
58
|
+
if parsed[:si_type]
|
|
71
59
|
return build_si_psi_identifier(parsed)
|
|
72
60
|
end
|
|
73
61
|
|
|
@@ -124,59 +112,13 @@ module Pubid
|
|
|
124
112
|
end
|
|
125
113
|
|
|
126
114
|
Identifiers::IecIeeeCopublished.new(
|
|
115
|
+
copublished_number: copublished_number,
|
|
127
116
|
draft_info: draft_info,
|
|
128
117
|
iec_year: iec_year,
|
|
129
118
|
date_info: date_info,
|
|
130
|
-
**copublished_structured(copublished_number),
|
|
131
119
|
)
|
|
132
120
|
end
|
|
133
121
|
|
|
134
|
-
# Decompose an IEC/IEEE `copublished_number` into the split index columns
|
|
135
|
-
# that reconstruct it losslessly (IecIeeeCopublished#copublished_number is
|
|
136
|
-
# the inverse). First peel a trailing *publication year* (19xx/20xx with
|
|
137
|
-
# its `-`/`:` separator) into `year`/`year_sep` — a bare 4-digit strip
|
|
138
|
-
# would wrongly eat a part like "60076.57-1202" (1202 is a part, not a
|
|
139
|
-
# year). Then tokenise the remainder on `.`/`-`, keeping each part's
|
|
140
|
-
# leading separator (a single code mixes them). So `number` narrows to the
|
|
141
|
-
# bucket, `parts` matches within it, and `separators` renders it back.
|
|
142
|
-
# `year_sep` is omitted when the default `-`. Returns empty for no number.
|
|
143
|
-
def copublished_structured(copublished_number)
|
|
144
|
-
return {} if copublished_number.nil? || copublished_number.empty?
|
|
145
|
-
|
|
146
|
-
remainder, year, year_sep = peel_copublished_year(copublished_number)
|
|
147
|
-
tokens = remainder.scan(/\A[^.\-]+|[.\-][^.\-]+/)
|
|
148
|
-
{ number: tokens.shift }
|
|
149
|
-
.merge(copublished_parts(tokens))
|
|
150
|
-
.merge(copublished_year(year, year_sep))
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
# The `parts`/`separators` columns from the tokens after the number.
|
|
154
|
-
def copublished_parts(tokens)
|
|
155
|
-
return {} if tokens.empty?
|
|
156
|
-
|
|
157
|
-
{ parts: tokens.map { |t| t[1..] }, separators: tokens.map { |t| t[0] } }
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
# The `year`/`year_sep` columns; `year_sep` is omitted when the default `-`.
|
|
161
|
-
def copublished_year(year, year_sep)
|
|
162
|
-
return {} unless year
|
|
163
|
-
|
|
164
|
-
year_sep == "-" ? { year: year } : { year: year, year_sep: year_sep }
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
# Peel a trailing publication year (19xx/20xx with its `-`/`:` separator)
|
|
168
|
-
# off a copublished number, returning [remainder, year, year_sep].
|
|
169
|
-
def peel_copublished_year(copublished_number)
|
|
170
|
-
return [copublished_number, nil, nil] unless
|
|
171
|
-
copublished_number =~ /([-:])((?:19|20)\d\d)\z/
|
|
172
|
-
|
|
173
|
-
year_sep = Regexp.last_match(1)
|
|
174
|
-
year = Regexp.last_match(2)
|
|
175
|
-
trimmed = copublished_number[0...(copublished_number.length -
|
|
176
|
-
year_sep.length - year.length)]
|
|
177
|
-
[trimmed, year, year_sep]
|
|
178
|
-
end
|
|
179
|
-
|
|
180
122
|
# Build dual published identifier
|
|
181
123
|
def build_dual_published(parsed)
|
|
182
124
|
first_id = build_single_identifier(parsed[:first])
|
|
@@ -211,33 +153,6 @@ module Pubid
|
|
|
211
153
|
)
|
|
212
154
|
end
|
|
213
155
|
|
|
214
|
-
# Build the historical IEEE/IPCEA cable designation (e.g. S-135).
|
|
215
|
-
#
|
|
216
|
-
# The "S-135" designation is modelled as a plain Standard whose code holds
|
|
217
|
-
# the whole "S-135" string as `number` (prefix nil). It is passed as the
|
|
218
|
-
# `number:` split column directly — NOT as `code:` — so it bypasses
|
|
219
|
-
# Components::Code.parse, which would peel "S" as a prefix and leave an
|
|
220
|
-
# empty number (breaking the relaton index key and the round-trip). This
|
|
221
|
-
# keeps `root.number` == "S-135" and renders the dash back verbatim.
|
|
222
|
-
#
|
|
223
|
-
# The "/IPCEA …" slash co-designation is stored verbatim in `crossref`
|
|
224
|
-
# (rendered as-is); the "(IPCEA …)" parenthetical variant flows through
|
|
225
|
-
# the normal `parenthetical_content` path.
|
|
226
|
-
def build_s_designation(parsed)
|
|
227
|
-
attributes = {
|
|
228
|
-
number: extract_value(parsed[:s_number]),
|
|
229
|
-
publisher: extract_value(parsed[:publisher]) || "IEEE",
|
|
230
|
-
typed_stage: Pubid::Ieee.locate_stage("Std"),
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
if parsed[:ipcea_copub]
|
|
234
|
-
attributes[:crossref] = extract_value(parsed[:ipcea_copub])
|
|
235
|
-
end
|
|
236
|
-
handle_parameters(parsed, attributes)
|
|
237
|
-
|
|
238
|
-
Identifiers::Standard.new(**attributes)
|
|
239
|
-
end
|
|
240
|
-
|
|
241
156
|
# Build single identifier
|
|
242
157
|
def build_single_identifier(parsed, building_secondary: false)
|
|
243
158
|
# Parslet can return array of hashes - merge them
|
|
@@ -249,59 +164,19 @@ module Pubid
|
|
|
249
164
|
return build_multi_numbered_identifier(parsed_hash)
|
|
250
165
|
end
|
|
251
166
|
|
|
252
|
-
# Handle corrigendum supplements (check for
|
|
167
|
+
# Handle corrigendum supplements (check for base_identifier + cor_number)
|
|
253
168
|
# This enables recursive base identifier parsing like ISO/IEC Amendment
|
|
254
|
-
if parsed_hash[:
|
|
169
|
+
if parsed_hash[:base_identifier] && parsed_hash[:cor_number]
|
|
255
170
|
return build_corrigendum_supplement(parsed_hash)
|
|
256
171
|
end
|
|
257
172
|
|
|
258
|
-
# Handle
|
|
259
|
-
|
|
260
|
-
# `corrigendum` hash alongside `draft`/number with NO `:base` subtree, so
|
|
261
|
-
# the supplement path above is skipped. Rebuild a real base standard
|
|
262
|
-
# (carrying the draft) and wrap it, so `to_s` renders correctly from a
|
|
263
|
-
# fresh parse and after a from_hash round-trip. The `!parsed_hash[:base]`
|
|
264
|
-
# guard keeps this disjoint from the nested-base branch above; a
|
|
265
|
-
# `:base` + nested-`corrigendum`-hash shape is not produced by the
|
|
266
|
-
# grammar, so it would fall through to `extract_attributes` (as before).
|
|
267
|
-
if parsed_hash[:corrigendum].is_a?(Hash) && !parsed_hash[:base]
|
|
268
|
-
return build_flat_corrigendum(parsed_hash)
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
# Handle amendment supplements — mirrors the corrigendum path above.
|
|
272
|
-
# Every amendment the grammar produces is FLAT (a top-level `amendment`
|
|
273
|
-
# hash, no `:base`): the `amendment` rule only ever appears inline via
|
|
274
|
-
# `amendment.maybe`, so `build_flat_amendment` carries all real traffic
|
|
275
|
-
# (`IEEE Std …/Amd N-YYYY` and `ISO/IEC/IEEE 8802.x/AmdN-YYYY`). The
|
|
276
|
-
# recursive-base branch below is kept for structural parity with
|
|
277
|
-
# corrigendum (which has a dedicated `corrigendum_identifier` rule
|
|
278
|
-
# emitting a `:base` + top-level `:amd_number`-style shape); no amendment
|
|
279
|
-
# grammar rule emits it today, so it would only fire if one were added.
|
|
280
|
-
if parsed_hash[:base] && parsed_hash[:amd_number]
|
|
281
|
-
return build_amendment_supplement(parsed_hash)
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
if parsed_hash[:amendment].is_a?(Hash) && !parsed_hash[:base]
|
|
285
|
-
return build_flat_amendment(parsed_hash)
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
# Handle interpretation supplements (check for base + int_year)
|
|
289
|
-
if parsed_hash[:base] && (parsed_hash[:int_year] || parsed_hash[:interpretation])
|
|
173
|
+
# Handle interpretation supplements (check for base_identifier + int_year)
|
|
174
|
+
if parsed_hash[:base_identifier] && (parsed_hash[:int_year] || parsed_hash[:interpretation])
|
|
290
175
|
return build_interpretation_supplement(parsed_hash)
|
|
291
176
|
end
|
|
292
177
|
|
|
293
|
-
#
|
|
294
|
-
|
|
295
|
-
# skipped it and determine_identifier_class built a base-less
|
|
296
|
-
# InterpretationIdentifier that dropped the number, the part and the
|
|
297
|
-
# publisher: "IEEE Std 1003.2-1992/INT, Dec. 1994 Ed." rendered as
|
|
298
|
-
# " 1003.2-1992/INT". Mirrors build_flat_corrigendum / build_flat_amendment.
|
|
299
|
-
if parsed_hash[:interpretation] && !parsed_hash[:base]
|
|
300
|
-
return build_flat_interpretation(parsed_hash)
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
# Handle conformance supplements (check for base + conf_number)
|
|
304
|
-
if parsed_hash[:base] && parsed_hash[:conf_number]
|
|
178
|
+
# Handle conformance supplements (check for base_identifier + conf_number)
|
|
179
|
+
if parsed_hash[:base_identifier] && parsed_hash[:conf_number]
|
|
305
180
|
return build_conformance_supplement(parsed_hash)
|
|
306
181
|
end
|
|
307
182
|
|
|
@@ -319,32 +194,16 @@ module Pubid
|
|
|
319
194
|
|
|
320
195
|
# Route to appropriate identifier class based on content
|
|
321
196
|
identifier_class = determine_identifier_class(attributes)
|
|
322
|
-
rename_supplement_keys(attributes)
|
|
323
197
|
identifier_class.new(**attributes)
|
|
324
198
|
end
|
|
325
199
|
|
|
326
|
-
#
|
|
327
|
-
#
|
|
328
|
-
#
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
# `number`/`year` are never overwritten (it carries none of these keys).
|
|
332
|
-
def rename_supplement_keys(attributes)
|
|
333
|
-
ordinal = attributes.delete(:cor_number) ||
|
|
334
|
-
attributes.delete(:amd_number) || attributes.delete(:conf_number)
|
|
335
|
-
attributes[:number] = ordinal if ordinal
|
|
336
|
-
year = attributes.delete(:cor_year) || attributes.delete(:amd_year) ||
|
|
337
|
-
attributes.delete(:conf_year) || attributes.delete(:int_year)
|
|
338
|
-
attributes[:year] = year if year
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
# Reconstruct the base identifier string from a parsed `:base` subtree
|
|
342
|
-
# (publisher/copublishers + type + number/part/subpart/year), so it can be
|
|
343
|
-
# recursively re-parsed by the supplement builders (corrigendum/amendment).
|
|
344
|
-
# @param base_data [Hash] the `:base` subtree
|
|
345
|
-
# @return [String] e.g. "IEEE Std 802.1AC-2016" or "535-2013"
|
|
346
|
-
def reconstruct_base_string(base_data)
|
|
200
|
+
# Build corrigendum supplement with recursive base parsing
|
|
201
|
+
# @param parsed_hash [Hash] parsed data with base and supplement info
|
|
202
|
+
# @return [Identifiers::Corrigendum] corrigendum identifier
|
|
203
|
+
def build_corrigendum_supplement(parsed_hash)
|
|
204
|
+
# Reconstruct base identifier string from parsed components
|
|
347
205
|
base_parts = []
|
|
206
|
+
base_data = parsed_hash[:base_identifier]
|
|
348
207
|
|
|
349
208
|
# Extract publisher
|
|
350
209
|
if base_data[:publishers]
|
|
@@ -397,118 +256,22 @@ module Pubid
|
|
|
397
256
|
end
|
|
398
257
|
|
|
399
258
|
base_parts << number_str
|
|
400
|
-
base_parts.join(" ")
|
|
401
|
-
end
|
|
402
259
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
base = Identifier.parse(reconstruct_base_string(parsed_hash[:base]))
|
|
260
|
+
# Build base string and recursively parse it
|
|
261
|
+
base_string = base_parts.join(" ")
|
|
262
|
+
|
|
263
|
+
# Recursively parse base identifier using Base.parse
|
|
264
|
+
base_identifier = Identifiers::Base.parse(base_string)
|
|
409
265
|
|
|
410
|
-
# Extract corrigendum attributes
|
|
411
|
-
# identifier stores them as the uniform `number`/`year`).
|
|
266
|
+
# Extract corrigendum attributes
|
|
412
267
|
cor_number = extract_value(parsed_hash[:cor_number])
|
|
413
268
|
cor_year = extract_value(parsed_hash[:cor_year])
|
|
414
269
|
|
|
415
270
|
# Create Corrigendum with parsed base
|
|
416
271
|
Identifiers::Corrigendum.new(
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
)
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
# Build a Corrigendum from the flat parse tree produced by the combined
|
|
424
|
-
# `…/Cor M-YYYY/D N` form, where the corrigendum lives in a top-level
|
|
425
|
-
# `corrigendum` hash and there is no `:base` subtree. Peel the corrigendum
|
|
426
|
-
# off, build the remaining attributes into the base standard (with its
|
|
427
|
-
# draft) via the normal single-identifier path, then wrap.
|
|
428
|
-
# @param parsed_hash [Hash] flat parsed data with a :corrigendum hash
|
|
429
|
-
# @return [Identifiers::Corrigendum]
|
|
430
|
-
def build_flat_corrigendum(parsed_hash)
|
|
431
|
-
cor_data = parsed_hash[:corrigendum]
|
|
432
|
-
cor_number = extract_value(cor_data[:cor_number])
|
|
433
|
-
cor_year = extract_value(cor_data[:cor_year]) if cor_data[:cor_year]
|
|
434
|
-
|
|
435
|
-
base_hash = parsed_hash.reject { |key, _| key == :corrigendum }
|
|
436
|
-
base = build_single_identifier(base_hash)
|
|
437
|
-
|
|
438
|
-
Identifiers::Corrigendum.new(
|
|
439
|
-
base: base,
|
|
440
|
-
number: cor_number,
|
|
441
|
-
year: cor_year,
|
|
442
|
-
)
|
|
443
|
-
end
|
|
444
|
-
|
|
445
|
-
# Build an interpretation from a FLAT parse tree — the trailing-date form,
|
|
446
|
-
# where the :interpretation marker sits beside the base's own keys instead
|
|
447
|
-
# of over a :base subtree.
|
|
448
|
-
#
|
|
449
|
-
# The trailing date is the INTERPRETATION's date (an interpretation of the
|
|
450
|
-
# 1992 edition of 1003.2, issued in Dec 1994), so it goes on the wrapper;
|
|
451
|
-
# the base keeps its own `year`. That matches the nested form, whose
|
|
452
|
-
# `int_year` also lands on the wrapper.
|
|
453
|
-
# @param parsed_hash [Hash] flat parsed data carrying :interpretation
|
|
454
|
-
# @return [Identifiers::InterpretationIdentifier]
|
|
455
|
-
def build_flat_interpretation(parsed_hash)
|
|
456
|
-
int_year = extract_value(parsed_hash[:trailing_year]) if parsed_hash[:trailing_year]
|
|
457
|
-
|
|
458
|
-
base_hash = parsed_hash.reject do |key, _|
|
|
459
|
-
%i[interpretation trailing_month trailing_year].include?(key)
|
|
460
|
-
end
|
|
461
|
-
base = build_single_identifier(base_hash)
|
|
462
|
-
|
|
463
|
-
# The trailing MONTH is deliberately dropped, matching the nested form
|
|
464
|
-
# (whose `int_year` carries no month either). It was not preserved
|
|
465
|
-
# before this change, so nothing is lost; and setting it fed the URN's
|
|
466
|
-
# month_day_component, which put "Dec." — a word with a dot — into a
|
|
467
|
-
# URN segment.
|
|
468
|
-
Identifiers::InterpretationIdentifier.new(
|
|
469
|
-
base: base,
|
|
470
|
-
year: int_year,
|
|
471
|
-
)
|
|
472
|
-
end
|
|
473
|
-
|
|
474
|
-
# Build amendment supplement with recursive base parsing. Mirrors
|
|
475
|
-
# {#build_corrigendum_supplement} — reconstructs the base identifier
|
|
476
|
-
# string, recursively parses it, and wraps it in an Amendment.
|
|
477
|
-
# @param parsed_hash [Hash] parsed data with base and amendment info
|
|
478
|
-
# @return [Identifiers::Amendment] amendment identifier
|
|
479
|
-
def build_amendment_supplement(parsed_hash)
|
|
480
|
-
base = Identifier.parse(reconstruct_base_string(parsed_hash[:base]))
|
|
481
|
-
|
|
482
|
-
amd_number = extract_value(parsed_hash[:amd_number])
|
|
483
|
-
amd_year = extract_value(parsed_hash[:amd_year])
|
|
484
|
-
|
|
485
|
-
Identifiers::Amendment.new(
|
|
486
|
-
base: base,
|
|
487
|
-
number: amd_number,
|
|
488
|
-
year: amd_year,
|
|
489
|
-
)
|
|
490
|
-
end
|
|
491
|
-
|
|
492
|
-
# Build an Amendment from the flat parse tree produced by the common
|
|
493
|
-
# `…/Amd N-YYYY` form, where the amendment lives in a top-level
|
|
494
|
-
# `amendment` hash and there is no `:base` subtree. Peel the amendment
|
|
495
|
-
# off, build the remaining attributes into the base standard via the
|
|
496
|
-
# normal single-identifier path, then wrap. Mirrors
|
|
497
|
-
# {#build_flat_corrigendum}.
|
|
498
|
-
# @param parsed_hash [Hash] flat parsed data with an :amendment hash
|
|
499
|
-
# @return [Identifiers::Amendment]
|
|
500
|
-
def build_flat_amendment(parsed_hash)
|
|
501
|
-
amd_data = parsed_hash[:amendment]
|
|
502
|
-
amd_number = extract_value(amd_data[:amd_number])
|
|
503
|
-
amd_year = extract_value(amd_data[:amd_year]) if amd_data[:amd_year]
|
|
504
|
-
|
|
505
|
-
base_hash = parsed_hash.reject { |key, _| key == :amendment }
|
|
506
|
-
base = build_single_identifier(base_hash)
|
|
507
|
-
|
|
508
|
-
Identifiers::Amendment.new(
|
|
509
|
-
base: base,
|
|
510
|
-
number: amd_number,
|
|
511
|
-
year: amd_year,
|
|
272
|
+
base_identifier: base_identifier,
|
|
273
|
+
cor_number: cor_number,
|
|
274
|
+
cor_year: cor_year,
|
|
512
275
|
)
|
|
513
276
|
end
|
|
514
277
|
|
|
@@ -518,7 +281,7 @@ module Pubid
|
|
|
518
281
|
def build_interpretation_supplement(parsed_hash)
|
|
519
282
|
# Reconstruct base identifier string from parsed components (same logic as corrigendum)
|
|
520
283
|
base_parts = []
|
|
521
|
-
base_data = parsed_hash[:
|
|
284
|
+
base_data = parsed_hash[:base_identifier]
|
|
522
285
|
|
|
523
286
|
# Extract publisher
|
|
524
287
|
if base_data[:publishers]
|
|
@@ -574,15 +337,15 @@ module Pubid
|
|
|
574
337
|
base_string = base_parts.join(" ")
|
|
575
338
|
|
|
576
339
|
# Recursively parse base identifier using Base.parse
|
|
577
|
-
|
|
340
|
+
base_identifier = Identifiers::Base.parse(base_string)
|
|
578
341
|
|
|
579
342
|
# Extract interpretation attributes
|
|
580
343
|
int_year = extract_value(parsed_hash[:int_year])
|
|
581
344
|
|
|
582
|
-
# Create InterpretationIdentifier with parsed base
|
|
345
|
+
# Create InterpretationIdentifier with parsed base
|
|
583
346
|
Identifiers::InterpretationIdentifier.new(
|
|
584
|
-
|
|
585
|
-
|
|
347
|
+
base_identifier: base_identifier,
|
|
348
|
+
int_year: int_year,
|
|
586
349
|
)
|
|
587
350
|
end
|
|
588
351
|
|
|
@@ -592,7 +355,7 @@ module Pubid
|
|
|
592
355
|
def build_conformance_supplement(parsed_hash)
|
|
593
356
|
# Reconstruct base identifier string from parsed components (same logic as corrigendum)
|
|
594
357
|
base_parts = []
|
|
595
|
-
base_data = parsed_hash[:
|
|
358
|
+
base_data = parsed_hash[:base_identifier]
|
|
596
359
|
|
|
597
360
|
# Extract publisher
|
|
598
361
|
if base_data[:publishers]
|
|
@@ -648,17 +411,17 @@ module Pubid
|
|
|
648
411
|
base_string = base_parts.join(" ")
|
|
649
412
|
|
|
650
413
|
# Recursively parse base identifier using Base.parse
|
|
651
|
-
|
|
414
|
+
base_identifier = Identifiers::Base.parse(base_string)
|
|
652
415
|
|
|
653
416
|
# Extract conformance attributes
|
|
654
417
|
conf_number = extract_value(parsed_hash[:conf_number])
|
|
655
418
|
conf_year = extract_value(parsed_hash[:conf_year])
|
|
656
419
|
|
|
657
|
-
# Create ConformanceIdentifier with parsed base
|
|
420
|
+
# Create ConformanceIdentifier with parsed base
|
|
658
421
|
Identifiers::ConformanceIdentifier.new(
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
422
|
+
base_identifier: base_identifier,
|
|
423
|
+
conf_number: conf_number,
|
|
424
|
+
conf_year: conf_year,
|
|
662
425
|
)
|
|
663
426
|
end
|
|
664
427
|
|
|
@@ -682,33 +445,8 @@ module Pubid
|
|
|
682
445
|
end
|
|
683
446
|
attributes[:code] = code_str
|
|
684
447
|
|
|
685
|
-
# Extract year
|
|
686
|
-
|
|
687
|
-
# `edition` rule, whose year is captured as :edition_year (parser.rb);
|
|
688
|
-
# it is promoted to the identity only when no base :year was captured.
|
|
689
|
-
if parsed[:year]
|
|
690
|
-
attributes[:year] = extract_value(parsed[:year])
|
|
691
|
-
elsif parsed[:edition_year]
|
|
692
|
-
attributes[:year] = extract_value(parsed[:edition_year])
|
|
693
|
-
end
|
|
694
|
-
attributes[:month] = extract_value(parsed[:month]) if parsed[:month]
|
|
695
|
-
|
|
696
|
-
# Extract edition, from relaton's "/E-<n>" suffix (normalized to
|
|
697
|
-
# "Edition <n>.0"). nil-residue hand-off item 1.
|
|
698
|
-
attributes[:edition] = extract_value(parsed[:edition]) if parsed[:edition]
|
|
699
|
-
if parsed[:edition_month]
|
|
700
|
-
attributes[:edition_month] = extract_value(parsed[:edition_month])
|
|
701
|
-
end
|
|
702
|
-
|
|
703
|
-
# Extract draft version if present (e.g., D8 from /D8). This applies to
|
|
704
|
-
# both the ISO-led (bucket 5: "…FDIS P15289/D-3-2017") and IEEE-led
|
|
705
|
-
# forms, so it lives before the lead-party split.
|
|
706
|
-
if parsed[:draft_version]
|
|
707
|
-
draft_ver = extract_value(parsed[:draft_version])
|
|
708
|
-
# Remove leading 'D' if present since draft_version already has it
|
|
709
|
-
draft_ver = draft_ver.sub(/^D/, "") if draft_ver
|
|
710
|
-
attributes[:ieee_draft] = "D#{draft_ver}" if draft_ver
|
|
711
|
-
end
|
|
448
|
+
# Extract year
|
|
449
|
+
attributes[:year] = extract_value(parsed[:year]) if parsed[:year]
|
|
712
450
|
|
|
713
451
|
# Detect lead party based on pattern
|
|
714
452
|
if parsed[:iso_stage]
|
|
@@ -720,18 +458,26 @@ module Pubid
|
|
|
720
458
|
stage_abbr = attributes[:iso_stage]
|
|
721
459
|
if stage_abbr
|
|
722
460
|
attributes[:typed_stage] =
|
|
723
|
-
|
|
461
|
+
Ieee::Scheme.locate_typed_stage_by_abbr(stage_abbr)
|
|
724
462
|
end
|
|
725
463
|
else
|
|
726
464
|
# IEEE format - lead party is IEEE
|
|
727
465
|
attributes[:lead_party] = "IEEE"
|
|
728
466
|
|
|
467
|
+
# Extract draft version if present (e.g., D8 from /D8)
|
|
468
|
+
if parsed[:draft_version]
|
|
469
|
+
draft_ver = extract_value(parsed[:draft_version])
|
|
470
|
+
# Remove leading 'D' if present since draft_version already has it
|
|
471
|
+
draft_ver = draft_ver.sub(/^D/, "") if draft_ver
|
|
472
|
+
attributes[:ieee_draft] = "D#{draft_ver}" if draft_ver
|
|
473
|
+
end
|
|
474
|
+
|
|
729
475
|
# Mark as project (P prefix)
|
|
730
476
|
attributes[:type] = "P"
|
|
731
477
|
|
|
732
478
|
# Create typed_stage for IEEE project
|
|
733
479
|
attributes[:typed_stage] =
|
|
734
|
-
|
|
480
|
+
Ieee::Scheme.locate_typed_stage_by_abbr("P")
|
|
735
481
|
end
|
|
736
482
|
|
|
737
483
|
Identifiers::JointDevelopment.new(**attributes)
|
|
@@ -809,14 +555,9 @@ module Pubid
|
|
|
809
555
|
# Pattern: slash >> "C" >> digits >> dot >> digits >> dot >> digits >> dash >> year_digits
|
|
810
556
|
# The parsed crossref is a string - extract the number part
|
|
811
557
|
# Format: C62.22.1-1996 where C is part of the crossref notation
|
|
812
|
-
# The captured slice keeps the leading slash, which is a SEPARATOR in
|
|
813
|
-
# the printed reference, not part of the number. Storing it made the
|
|
814
|
-
# secondary's code "/C62.22.1-1996", which then failed the renderer's
|
|
815
|
-
# own cross-reference test (`/^C\d+\./`) and fell through to the
|
|
816
|
-
# " and " join. Strip it.
|
|
817
558
|
secondary_id = Identifiers::Standard.new(
|
|
818
559
|
publisher: "IEEE",
|
|
819
|
-
number: extract_value(crossref)
|
|
560
|
+
number: extract_value(crossref),
|
|
820
561
|
)
|
|
821
562
|
elsif parsed[:secondary_joint]
|
|
822
563
|
# Joint standard format: ", Std 1177-1989"
|
|
@@ -834,7 +575,7 @@ module Pubid
|
|
|
834
575
|
end
|
|
835
576
|
|
|
836
577
|
# Determine which identifier class to use based on attributes
|
|
837
|
-
# CRITICAL: Use
|
|
578
|
+
# CRITICAL: Use Scheme for type-based decisions, NOT hardcoded logic here
|
|
838
579
|
# Builder's job is ONLY to cast types, not make business decisions
|
|
839
580
|
def determine_identifier_class(attributes)
|
|
840
581
|
# Check for AIEE publisher FIRST (AIEE has its own identifier class)
|
|
@@ -843,12 +584,12 @@ module Pubid
|
|
|
843
584
|
return Ieee::Aiee::Identifier
|
|
844
585
|
end
|
|
845
586
|
|
|
846
|
-
# Get type from attributes and use
|
|
587
|
+
# Get type from attributes and use Scheme to locate class
|
|
847
588
|
type_code = attributes[:type]
|
|
848
589
|
|
|
849
|
-
# Use
|
|
590
|
+
# Use Scheme registry for type-to-class mapping
|
|
850
591
|
if type_code
|
|
851
|
-
klass =
|
|
592
|
+
klass = Ieee::Scheme.locate_identifier_klass_by_type_code(type_code)
|
|
852
593
|
return klass if klass
|
|
853
594
|
end
|
|
854
595
|
|
|
@@ -875,11 +616,6 @@ module Pubid
|
|
|
875
616
|
return Identifiers::Corrigendum
|
|
876
617
|
end
|
|
877
618
|
|
|
878
|
-
# Check for amendment supplements (structural: has amd_number)
|
|
879
|
-
if attributes[:amd_number]
|
|
880
|
-
return Identifiers::Amendment
|
|
881
|
-
end
|
|
882
|
-
|
|
883
619
|
# Check for multi-numbered standards (structural: has crossref or joint patterns)
|
|
884
620
|
# These are handled at the build() method level, not here
|
|
885
621
|
# (cross-reference patterns like /C62.22.1-1996 and joint standards)
|
|
@@ -889,16 +625,13 @@ module Pubid
|
|
|
889
625
|
return Identifiers::AdoptedStandard
|
|
890
626
|
end
|
|
891
627
|
|
|
892
|
-
#
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
628
|
+
# Check for redline standards (structural: has redline flag)
|
|
629
|
+
if attributes[:redline]
|
|
630
|
+
return Identifiers::RedlinedStandard
|
|
631
|
+
end
|
|
896
632
|
|
|
897
|
-
# Default to
|
|
898
|
-
|
|
899
|
-
# Ieee::Identifier — is what lets `number` be a reliable :string index
|
|
900
|
-
# key (see Identifiers::Standard).
|
|
901
|
-
Identifiers::Standard
|
|
633
|
+
# Default to base identifier
|
|
634
|
+
Identifiers::Base
|
|
902
635
|
end
|
|
903
636
|
|
|
904
637
|
# Detect lead party for joint development identifiers
|
|
@@ -945,7 +678,7 @@ module Pubid
|
|
|
945
678
|
|
|
946
679
|
# Extract and normalize attributes from parsed data
|
|
947
680
|
# @param parsed [Hash] the parsed data
|
|
948
|
-
# @return [Hash] normalized attributes for
|
|
681
|
+
# @return [Hash] normalized attributes for Scheme
|
|
949
682
|
def extract_attributes(parsed)
|
|
950
683
|
attributes = {}
|
|
951
684
|
|
|
@@ -1044,26 +777,6 @@ module Pubid
|
|
|
1044
777
|
if parsed[:year]
|
|
1045
778
|
year_str = extract_value(parsed[:year])
|
|
1046
779
|
attributes[:year] = year_str
|
|
1047
|
-
elsif parsed[:edition_year]
|
|
1048
|
-
# The `edition` rule captures its own year under :edition_year (not
|
|
1049
|
-
# :year) so it never collides with the base -YYYY (see parser.rb).
|
|
1050
|
-
# With no base year the edition's year IS the document date and is
|
|
1051
|
-
# promoted to the identity (e.g. "IEEE Std 802.11 Edition 3.0-2009"
|
|
1052
|
-
# -> year 2009). When a base year exists it wins above and
|
|
1053
|
-
# :edition_year is dropped — the edition ordinal is still kept.
|
|
1054
|
-
attributes[:year] = extract_value(parsed[:edition_year])
|
|
1055
|
-
elsif parsed[:trailing_year]
|
|
1056
|
-
# No base -YYYY identity year: the trailing "Month YYYY" IS the
|
|
1057
|
-
# document date (e.g. "IEEE Std 519, May 1993"), so promote it.
|
|
1058
|
-
# When a base year exists it wins (the IEEE approval/identity year)
|
|
1059
|
-
# and the trailing date is intentionally dropped rather than
|
|
1060
|
-
# fabricating a wrong month/year pairing. The trailing captures use
|
|
1061
|
-
# distinct keys (:trailing_month/:trailing_year) so they never collide
|
|
1062
|
-
# with the base :year (Parslet no longer warns "Duplicate subtrees").
|
|
1063
|
-
attributes[:year] = extract_value(parsed[:trailing_year])
|
|
1064
|
-
if parsed[:trailing_month]
|
|
1065
|
-
attributes[:month] = extract_value(parsed[:trailing_month])
|
|
1066
|
-
end
|
|
1067
780
|
end
|
|
1068
781
|
|
|
1069
782
|
# Extract edition_month if parsed separately
|
|
@@ -1072,7 +785,7 @@ module Pubid
|
|
|
1072
785
|
end
|
|
1073
786
|
|
|
1074
787
|
# Set type attribute for backward compatibility (after P extraction)
|
|
1075
|
-
# NOTE: "P" IS a type code that maps to ProjectDraftIdentifier via
|
|
788
|
+
# NOTE: "P" IS a type code that maps to ProjectDraftIdentifier via Scheme
|
|
1076
789
|
# Type can be: "Std", "No", "P" (project draft), etc.
|
|
1077
790
|
attributes[:type] = type_value if type_value
|
|
1078
791
|
|
|
@@ -1081,7 +794,7 @@ module Pubid
|
|
|
1081
794
|
parsed)
|
|
1082
795
|
if typed_stage_abbr
|
|
1083
796
|
attributes[:typed_stage] =
|
|
1084
|
-
|
|
797
|
+
Ieee::Scheme.locate_typed_stage_by_abbr(typed_stage_abbr)
|
|
1085
798
|
end
|
|
1086
799
|
|
|
1087
800
|
attributes[:draft_status] = draft_status_value
|
|
@@ -1100,12 +813,6 @@ module Pubid
|
|
|
1100
813
|
# Handle draft (can be complex)
|
|
1101
814
|
handle_draft(parsed, attributes)
|
|
1102
815
|
|
|
1103
|
-
# Default draft version 1 when the type indicates a Draft but the
|
|
1104
|
-
# parser found no explicit version (issue #205). Real-world IEEE
|
|
1105
|
-
# drafts always have at least version 1; the missing suffix is a
|
|
1106
|
-
# source-data omission, not an undrafted document.
|
|
1107
|
-
apply_default_draft_version(attributes, type_value)
|
|
1108
|
-
|
|
1109
816
|
# Handle corrigendum
|
|
1110
817
|
handle_corrigendum(parsed, attributes)
|
|
1111
818
|
|
|
@@ -1173,7 +880,7 @@ module Pubid
|
|
|
1173
880
|
if version
|
|
1174
881
|
draft_abbr = "D#{version}"
|
|
1175
882
|
# Check if this specific draft stage is in registry
|
|
1176
|
-
stage =
|
|
883
|
+
stage = Ieee::Scheme.locate_typed_stage_by_abbr(draft_abbr)
|
|
1177
884
|
return draft_abbr if stage&.abbr&.include?(draft_abbr)
|
|
1178
885
|
end
|
|
1179
886
|
end
|
|
@@ -1220,36 +927,15 @@ module Pubid
|
|
|
1220
927
|
attributes[key] = value if value
|
|
1221
928
|
end
|
|
1222
929
|
|
|
1223
|
-
# Default draft version to "1" when the identifier type indicates a
|
|
1224
|
-
# Draft but the parser found no explicit version (issue #205).
|
|
1225
|
-
def apply_default_draft_version(attributes, type_value)
|
|
1226
|
-
return if attributes[:draft] || attributes[:draft_obj]
|
|
1227
|
-
return unless type_value.to_s == "Draft Std"
|
|
1228
|
-
|
|
1229
|
-
attributes[:draft] = "D1"
|
|
1230
|
-
# Carry the identifier's year into the draft object so the renderer
|
|
1231
|
-
# doesn't drop it (the renderer suppresses the `-YYYY` suffix when
|
|
1232
|
-
# a draft is attached, expecting the year to live inside /D...).
|
|
1233
|
-
attributes[:draft_obj] =
|
|
1234
|
-
Components::Draft.new(version: "1", year: attributes[:year])
|
|
1235
|
-
end
|
|
1236
|
-
|
|
1237
930
|
# Handle draft information
|
|
1238
931
|
def handle_draft(parsed, attributes)
|
|
1239
932
|
draft_data = parsed[:draft] || parsed[:digit_draft]
|
|
1240
933
|
return unless draft_data
|
|
1241
934
|
|
|
1242
|
-
# Draft can be an array of hash elements or a single hash
|
|
1243
|
-
# `draft_version.repeat(1,2)` splits a dotted designator like "1.2.6"
|
|
1244
|
-
# into ["1.2", ".6"], so DON'T let a plain merge overwrite it (that
|
|
1245
|
-
# dropped every part but the last — "1.2.6" -> ".6"). Collect ALL the
|
|
1246
|
-
# draft_version parts into an array (the version extraction below joins
|
|
1247
|
-
# them back into one verbatim string) and merge the remaining keys.
|
|
935
|
+
# Draft can be an array of hash elements or a single hash
|
|
1248
936
|
if draft_data.is_a?(Array)
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
merged = hashes.inject({}) { |result, elem| result.merge(elem) }
|
|
1252
|
-
merged[:draft_version] = versions unless versions.empty?
|
|
937
|
+
# Merge all elements in the array
|
|
938
|
+
merged = draft_data.inject({}) { |result, elem| result.merge(elem) }
|
|
1253
939
|
draft_data = merged
|
|
1254
940
|
end
|
|
1255
941
|
|
|
@@ -1269,9 +955,6 @@ module Pubid
|
|
|
1269
955
|
else
|
|
1270
956
|
extract_value(dv)
|
|
1271
957
|
end
|
|
1272
|
-
# Normalize a leading hyphen ("/D-3.0" -> "3.0"); the draft
|
|
1273
|
-
# designator is otherwise held verbatim so no digit is lost.
|
|
1274
|
-
version = version.sub(/\A-/, "") if version
|
|
1275
958
|
end
|
|
1276
959
|
|
|
1277
960
|
revision = extract_value(draft_data[:revision]) if draft_data[:revision]
|
|
@@ -1500,7 +1183,7 @@ module Pubid
|
|
|
1500
1183
|
|
|
1501
1184
|
# Parse a list of identifier strings into identifier objects
|
|
1502
1185
|
# @param list_data [Hash, Array, nil] the parsed identifier list data
|
|
1503
|
-
# @return [Array<
|
|
1186
|
+
# @return [Array<Identifiers::Base>] array of parsed identifier objects
|
|
1504
1187
|
def parse_identifier_list(list_data)
|
|
1505
1188
|
return [] unless list_data
|
|
1506
1189
|
|
|
@@ -1509,12 +1192,12 @@ module Pubid
|
|
|
1509
1192
|
|
|
1510
1193
|
# Recursively parse each identifier string
|
|
1511
1194
|
id_strings.map do |id_str|
|
|
1512
|
-
# Use
|
|
1513
|
-
|
|
1195
|
+
# Use Identifiers::Base.parse for recursive parsing
|
|
1196
|
+
Identifiers::Base.parse(id_str)
|
|
1514
1197
|
rescue Parslet::ParseFailed
|
|
1515
1198
|
# If parsing fails, create minimal identifier with just the string
|
|
1516
1199
|
# This maintains graceful degradation
|
|
1517
|
-
|
|
1200
|
+
Identifiers::Base.new(parenthetical_content: id_str)
|
|
1518
1201
|
end
|
|
1519
1202
|
end
|
|
1520
1203
|
|