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/parser.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Pubid
|
|
|
7
7
|
# Parser class for IEEE identifiers
|
|
8
8
|
# Single Responsibility: Parsing IEEE identifier syntax
|
|
9
9
|
# Note: IEEE is extremely complex with many edge cases
|
|
10
|
-
class Parser < ::
|
|
10
|
+
class Parser < Parslet::Parser
|
|
11
11
|
# Basic building blocks
|
|
12
12
|
rule(:space) { str(" ") }
|
|
13
13
|
rule(:space?) { space.maybe }
|
|
@@ -57,24 +57,6 @@ module Pubid
|
|
|
57
57
|
date_with_month_text | date_with_month_numeric | date_year_only
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
# Trailing print/reaffirm date "<sep>Month YYYY" — captured under the
|
|
61
|
-
# distinct :trailing_month/:trailing_year keys so it never collides with a
|
|
62
|
-
# base -YYYY identity year (the builder promotes it only when no base year
|
|
63
|
-
# exists). Accepts BOTH a month name ("May 2014") and a month-first numeric
|
|
64
|
-
# month ("05 2014"). The two variants are unambiguous: month_name never
|
|
65
|
-
# starts with a digit, and month_numeric (01-12) never matches a bare
|
|
66
|
-
# 19xx/20xx year — so a bare trailing year still falls through to callers'
|
|
67
|
-
# own bare-year clause.
|
|
68
|
-
rule(:trailing_month_year) do
|
|
69
|
-
# The numeric branch accepts `-` as well as space before the year:
|
|
70
|
-
# preprocessing (the `(\d)\s+(\d{4})` gsub) rewrites a trailing
|
|
71
|
-
# "05 2014" → "05-2014", so a numeric month reaches the grammar
|
|
72
|
-
# dash-joined; the month-name branch escapes that gsub (the char before
|
|
73
|
-
# the space is a letter) and stays space-joined.
|
|
74
|
-
((comma | space) >> month_name.as(:trailing_month) >> space >> year_digits.as(:trailing_year)) |
|
|
75
|
-
((comma | space) >> month_numeric.as(:trailing_month) >> (space | dash) >> year_digits.as(:trailing_year))
|
|
76
|
-
end
|
|
77
|
-
|
|
78
60
|
# Month patterns
|
|
79
61
|
rule(:month_name) do
|
|
80
62
|
# Period-suffixed abbreviations (longest first)
|
|
@@ -93,17 +75,9 @@ module Pubid
|
|
|
93
75
|
# Organizations
|
|
94
76
|
rule(:organization) do
|
|
95
77
|
str("IEEE") | str("AIEE") | str("ANSI") | str("ASA") |
|
|
96
|
-
# ANS (American Nuclear Society) — a third co-publisher on nuclear
|
|
97
|
-
# standards ("ANSI/IEEE/ANS 7.4-3-2-1982"). Listed AFTER ANSI so it
|
|
98
|
-
# never shadows the longer token.
|
|
99
|
-
str("ANS") |
|
|
100
78
|
str("IEC") | str("ISO") | str("ASTM") | str("CSA") | str("ASME") |
|
|
101
79
|
str("NACE") | str("NSF") | str("ASHRAE") | str("NCTA") | str("AESC") |
|
|
102
|
-
str("EIA")
|
|
103
|
-
# Historical / foreign co-publishers seen in relaton-data-ieee
|
|
104
|
-
# (bucket 4): AMPP, USAS (both standalone), and the IEEE sub-board /
|
|
105
|
-
# partner co-publishers USEMCSC, EAB, MPAI.
|
|
106
|
-
str("USEMCSC") | str("AMPP") | str("USAS") | str("EAB") | str("MPAI")
|
|
80
|
+
str("EIA") # NEW Session 224: Add EIA support
|
|
107
81
|
end
|
|
108
82
|
|
|
109
83
|
# Complex organization prefixes (Category 5: ANSI Complex)
|
|
@@ -156,42 +130,12 @@ module Pubid
|
|
|
156
130
|
(slash >> str("C") >> digits >> dot >> digits >> dot >> digits >> dash >> year_digits).as(:ieee_crossref)
|
|
157
131
|
end
|
|
158
132
|
|
|
159
|
-
# IPCEA co-designation suffix (/IPCEA P-46-426-1962). Captured verbatim
|
|
160
|
-
# (leading slash included) so it round-trips through the `crossref`
|
|
161
|
-
# attribute. Used only by the S-designation rule below.
|
|
162
|
-
rule(:ipcea_copub) do
|
|
163
|
-
(slash >> str("IPCEA") >> space >>
|
|
164
|
-
match('[A-Za-z0-9.\-]').repeat(1)).as(:ipcea_copub)
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
# Historical IEEE/IPCEA co-published cable designation (e.g. S-135).
|
|
168
|
-
# The "S-<digits>" number has a dash between the letter series and the
|
|
169
|
-
# digits, which the shared `number` rule deliberately rejects (that
|
|
170
|
-
# tightening is what keeps a bare "IEEE S" from parsing). So this one-off
|
|
171
|
-
# family gets its own rule rather than loosening `number` and risking the
|
|
172
|
-
# 12k-row corpus. Requiring `str("S") >> dash >> digits` keeps "IEEE S"
|
|
173
|
-
# (no dash+digit) rejected. Handles: "IEEE Std S-135", "IEEE S-135",
|
|
174
|
-
# bare "S-135", the "/IPCEA …" slash co-designation, and the
|
|
175
|
-
# "(IPCEA …)" parenthetical variant.
|
|
176
|
-
rule(:s_designation) do
|
|
177
|
-
(publisher >> space).maybe >>
|
|
178
|
-
(type_word.as(:type) >> space?).maybe >>
|
|
179
|
-
(str("S") >> dash >> digits).as(:s_number) >>
|
|
180
|
-
ipcea_copub.maybe >>
|
|
181
|
-
parenthetical.maybe
|
|
182
|
-
end
|
|
183
|
-
|
|
184
133
|
# Document number - support letters and digits, with optional prefix P
|
|
185
134
|
# Complex multi-part numbers like P11073-10404-10419 should be fully captured
|
|
186
135
|
# But simple cases like "623-1976" should not consume the dash before year
|
|
187
136
|
rule(:number) do
|
|
188
137
|
(str("P").maybe >>
|
|
189
|
-
# The
|
|
190
|
-
# prefix (C, S, …) then a required `digits` run, then any digit/letter
|
|
191
|
-
# tail. The old `(digits | upper).repeat(1)` wrongly accepted an
|
|
192
|
-
# all-letter token like a bare "S" (a prefix with no number — e.g.
|
|
193
|
-
# "IEEE S"), which is not a valid IEEE identifier.
|
|
194
|
-
upper.repeat(0) >> digits >> (digits | upper).repeat(0) >>
|
|
138
|
+
(digits | upper).repeat(1) >> # The first component must be at least one digit
|
|
195
139
|
# Only consume dash+digits if followed by another dash+digits (multi-part pattern)
|
|
196
140
|
# OR if the digits don't look like a year (not 4 digits starting with 19/20)
|
|
197
141
|
# This prevents consuming "623-1976" as a number but allows "P11073-10404-10419"
|
|
@@ -226,14 +170,7 @@ module Pubid
|
|
|
226
170
|
|
|
227
171
|
# Draft patterns
|
|
228
172
|
rule(:draft_status) do
|
|
229
|
-
|
|
230
|
-
# "IEEE Active Std P… /D…" parses like the "Unapproved" forms, without
|
|
231
|
-
# touching ieee_approved_draft_identifier (which would break the
|
|
232
|
-
# issue-#209 unapproved-drops-Std rendering). "Active Approved" completes
|
|
233
|
-
# the two-word matrix alongside "Active Unapproved" (draft-grammar
|
|
234
|
-
# coverage: the "<status> Draft P…/D…" prefix forms). Longest token first.
|
|
235
|
-
(str("Active Unapproved") | str("Active Approved") | str("Unapproved") |
|
|
236
|
-
str("Approved") | str("Active")) >> space
|
|
173
|
+
(str("Active Unapproved") | str("Unapproved") | str("Approved")) >> space
|
|
237
174
|
end
|
|
238
175
|
|
|
239
176
|
rule(:draft_prefix) do
|
|
@@ -243,11 +180,7 @@ module Pubid
|
|
|
243
180
|
rule(:draft_version) do
|
|
244
181
|
# Enhanced to handle multiple draft notation patterns
|
|
245
182
|
# D is optional to handle /08 style drafts (e.g., IEEE P1052/08)
|
|
246
|
-
|
|
247
|
-
# (revision_suffix rule); guard so the D-less path doesn't swallow a
|
|
248
|
-
# bare "/R-<id>" (e.g. the no-draft "P1722/R-1") as a draft.
|
|
249
|
-
(str("R") >> dash).absent? >>
|
|
250
|
-
(str("D") >> str("IS").absent?).maybe >> # Avoid matching "DIS" (ISO stage)
|
|
183
|
+
(str("D") >> str("IS").absent?).maybe >> # Avoid matching "DIS" (ISO stage)
|
|
251
184
|
(
|
|
252
185
|
# Pattern: D3.1 (decimal with 1-2 digits on each side) - MOST COMMON, put first
|
|
253
186
|
# Also handles trailing letter: D7.3A, D2.0E
|
|
@@ -269,17 +202,8 @@ module Pubid
|
|
|
269
202
|
rule(:draft_date) do
|
|
270
203
|
# Enhanced to handle: ", Sept 2008" or " Sept 2008" or ", Month Year"
|
|
271
204
|
((comma | space) >> month_name.as(:month) >> space >> year_digits.as(:year)) |
|
|
272
|
-
# Numeric-month form ", 05 2007" / " 05 2007" — no text month name. The
|
|
273
|
-
# year separator may be a dash: preprocessing (parser.rb ~1278) rewrites
|
|
274
|
-
# a trailing " <digits> <year>" to "<digits>-<year>", so "05 2007"
|
|
275
|
-
# reaches the grammar as "05-2007".
|
|
276
|
-
((comma | space) >> month_numeric.as(:month) >> (space | dash) >> year_digits.as(:year)) |
|
|
277
205
|
(((space? >> comma >> space?) | space) >> month_name.as(:month) >>
|
|
278
206
|
(
|
|
279
|
-
# "Month DD, Year" (day then comma) and "Month DD Year" (day, no
|
|
280
|
-
# comma) — the day/year separator may be a dash for the same
|
|
281
|
-
# preprocessing reason ("July 15 2012" → "July 15-2012").
|
|
282
|
-
((space >> digits.as(:day)) >> ((comma | space | dash) >> year_digits.as(:year))) |
|
|
283
207
|
((space >> digits.as(:day)).maybe >> comma >> year_digits.as(:year)) |
|
|
284
208
|
(comma >> space? >> year_digits.as(:year)) |
|
|
285
209
|
(space >> year_digits.as(:year))
|
|
@@ -305,32 +229,13 @@ module Pubid
|
|
|
305
229
|
draft_date.maybe).as(:draft)
|
|
306
230
|
end
|
|
307
231
|
|
|
308
|
-
# Trailing revision suffix "/R-<id>". Normalization funnels every revision
|
|
309
|
-
# spelling here — IEEE's native inline "Rev<n>" (repositioned) and
|
|
310
|
-
# relaton's synthetic "/R-<x>" (kept in place) — so a single trailing rule
|
|
311
|
-
# captures them all. The id is alphanumeric ("2", "18", "i").
|
|
312
|
-
rule(:revision_suffix) do
|
|
313
|
-
slash >> str("R") >> dash >> match('[0-9A-Za-z]').repeat(1).as(:revision)
|
|
314
|
-
end
|
|
315
|
-
|
|
316
232
|
# Edition - enhanced to support IEC formats like "Edition 1.0 2015-03"
|
|
317
|
-
#
|
|
318
|
-
# The edition's own year is captured as :edition_year (NOT :year). The
|
|
319
|
-
# generic Std branch carries a base "-YYYY" slot AND a separate trailing
|
|
320
|
-
# `edition.maybe`; a bare :year here would collide with the base :year
|
|
321
|
-
# when both fire, so Parslet warns "Duplicate subtrees … keys: [:year]"
|
|
322
|
-
# and drops the base identity year (the same failure #299 fixed for the
|
|
323
|
-
# trailing month/year clause). The builder promotes :edition_year to the
|
|
324
|
-
# identity year only when there is no base year.
|
|
325
233
|
rule(:edition) do
|
|
326
|
-
(comma >> year_digits.as(:
|
|
234
|
+
(comma >> year_digits.as(:year) >> str(" Edition")) |
|
|
327
235
|
((space | dash) >> str("Edition ") >>
|
|
328
236
|
(digits >> dot >> digits).as(:edition) >>
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
# normalized "/E-<n>-YYYY" suffix produces — nil-residue item 1).
|
|
332
|
-
(str(" - ") | space | dash) >>
|
|
333
|
-
year_digits.as(:edition_year) >>
|
|
237
|
+
(space | str(" - ")) >>
|
|
238
|
+
year_digits.as(:year) >>
|
|
334
239
|
(dash >> digit.repeat(2, 2).as(:edition_month)).maybe) # Capture -MM as edition_month
|
|
335
240
|
end
|
|
336
241
|
|
|
@@ -356,16 +261,10 @@ module Pubid
|
|
|
356
261
|
((dash | str(":") | space) >> year_digits.as(:cor_year)).maybe).as(:corrigendum)
|
|
357
262
|
end
|
|
358
263
|
|
|
359
|
-
# Amendment
|
|
360
|
-
# IEEE-format "/Amd 2-2004" and "/Amd2-2004" parse the same way as
|
|
361
|
-
# their Cor counterparts (issue #210).
|
|
264
|
+
# Amendment
|
|
362
265
|
rule(:amendment) do
|
|
363
|
-
(
|
|
364
|
-
(
|
|
365
|
-
(dash | dot | space).maybe >>
|
|
366
|
-
space? >>
|
|
367
|
-
digits.as(:amd_number).maybe >>
|
|
368
|
-
((dash | str(":") | space) >> year_digits.as(:amd_year)).maybe).as(:amendment)
|
|
266
|
+
(slash >> str("Amd") >> digits.as(:amd_number) >>
|
|
267
|
+
(dash >> year_digits.as(:amd_year)).maybe).as(:amendment)
|
|
369
268
|
end
|
|
370
269
|
|
|
371
270
|
# Interpretation notation (/INT)
|
|
@@ -384,14 +283,9 @@ module Pubid
|
|
|
384
283
|
).as(:reaffirmed)
|
|
385
284
|
end
|
|
386
285
|
|
|
387
|
-
# Redline
|
|
388
|
-
# (space, no dash) and pubid's older " - Redline" (space-dash-space),
|
|
389
|
-
# case-insensitive. Captured (presence only) so the builder sets a
|
|
390
|
-
# `redline: true` flag the renderer restores — a redline is a distinct
|
|
391
|
-
# document and must not collapse to its base standard.
|
|
286
|
+
# Redline
|
|
392
287
|
rule(:redline) do
|
|
393
|
-
(
|
|
394
|
-
(str("Redline") | str("REDLINE") | str("redline"))).as(:redline)
|
|
288
|
+
str(" - Redline").as(:redline)
|
|
395
289
|
end
|
|
396
290
|
|
|
397
291
|
# Book nickname (e.g., "[The Orange Book]", "[IEEE Gold Book]")
|
|
@@ -452,11 +346,8 @@ module Pubid
|
|
|
452
346
|
str(" and ").absent? >>
|
|
453
347
|
str(", ").absent? >>
|
|
454
348
|
str(" as amended by ").absent? >>
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
# slash inside "IEEE Std 525-2007/Cor 1-2015" stay part of the
|
|
458
|
-
# identifier, while the slash before "Incorporates ..." splits.
|
|
459
|
-
relationship_break.absent? >>
|
|
349
|
+
str(" / ").absent? >>
|
|
350
|
+
str("; ").absent? >>
|
|
460
351
|
str(")").absent? >>
|
|
461
352
|
match(".")
|
|
462
353
|
).repeat(1)
|
|
@@ -481,38 +372,15 @@ module Pubid
|
|
|
481
372
|
str(" and its approved amendments").as(:approved_amendments)
|
|
482
373
|
end
|
|
483
374
|
|
|
484
|
-
# A character sequence that may separate two relationships inside the
|
|
485
|
-
# parenthetical: a "/", ";", or "-" with optional surrounding spaces.
|
|
486
|
-
# Standalone it is permissive — the actual decision to split is gated by
|
|
487
|
-
# `relationship_break`, which requires another relationship_type to
|
|
488
|
-
# follow. This way the slash in "IEEE Std 525-2007/Cor 1-2015" stays
|
|
489
|
-
# part of the related identifier.
|
|
490
|
-
rule(:relationship_separator) do
|
|
491
|
-
(space.maybe >> str("/") >> space.maybe) |
|
|
492
|
-
(space.maybe >> str(";") >> space.maybe) |
|
|
493
|
-
(space.maybe >> str("-") >> space.maybe)
|
|
494
|
-
end
|
|
495
|
-
|
|
496
|
-
# Look-ahead: a separator followed by another relationship_type keyword.
|
|
497
|
-
# Used as an absent? guard in identifier_string so the parser stops
|
|
498
|
-
# consuming characters right before a new relationship begins.
|
|
499
|
-
rule(:relationship_break) do
|
|
500
|
-
relationship_separator >> space.maybe >> relationship_type
|
|
501
|
-
end
|
|
502
|
-
|
|
503
375
|
# Relationship clause (handles all relationship types)
|
|
504
376
|
rule(:relationship_clause) do
|
|
505
377
|
space.maybe >> str("(") >>
|
|
506
378
|
relationship_type.as(:relationship_type) >>
|
|
507
379
|
identifier_list.as(:related_ids) >>
|
|
508
380
|
as_amended_by_clause.maybe >>
|
|
509
|
-
#
|
|
510
|
-
# surrounded by spaces). The separator is only honored when followed
|
|
511
|
-
# by another relationship_type — identifier-internal slashes like
|
|
512
|
-
# "/Cor 1-2015" are not mistaken for relationship breaks because
|
|
513
|
-
# identifier_string stops at relationship_break ahead.
|
|
381
|
+
# Handle multiple relationships separated by " / " OR "; "
|
|
514
382
|
(
|
|
515
|
-
|
|
383
|
+
(str(" / ") | str("; ")) >> # Support both separators
|
|
516
384
|
relationship_type.as(:relationship_type) >>
|
|
517
385
|
identifier_list.as(:related_ids) >>
|
|
518
386
|
as_amended_by_clause.maybe
|
|
@@ -567,11 +435,6 @@ module Pubid
|
|
|
567
435
|
str("IEC/IEEE") >>
|
|
568
436
|
space >>
|
|
569
437
|
str("P").absent? >> # NOT a P prefix (would be joint development)
|
|
570
|
-
# The copublished number must contain at least one digit. This rejects
|
|
571
|
-
# an all-letter placeholder like "IEC/IEEE TR" (no real document
|
|
572
|
-
# number) — the same "require a digit" tightening the Standard number
|
|
573
|
-
# rule got, applied to the copublished number grammar.
|
|
574
|
-
(match("[^0-9\n]").repeat >> digit).present? >>
|
|
575
438
|
match("[^\n]").repeat(1).as(:content)
|
|
576
439
|
end
|
|
577
440
|
|
|
@@ -593,100 +456,20 @@ module Pubid
|
|
|
593
456
|
# Variant 2: , CDV1 notation (comma before stage code)
|
|
594
457
|
(comma >> (str("CDV") | str("FDIS") | str("CD") | str("DIS")).as(:iec_stage) >> digits.maybe.as(:stage_iteration))
|
|
595
458
|
).maybe >>
|
|
596
|
-
# Optional edition, from relaton's "/E-<n>" suffix normalized to
|
|
597
|
-
# "Edition <n>.0[ YYYY]" (nil-residue hand-off item 1). The edition
|
|
598
|
-
# rule carries its own year, so the year clause below simply doesn't
|
|
599
|
-
# fire when an edition is present.
|
|
600
|
-
edition.maybe >>
|
|
601
459
|
((dash >> year_digits.as(:year)) | # Either -YEAR
|
|
602
|
-
(comma.maybe >> space >> month_name.as(:month) >> space.maybe >> year_digits.as(:year))).maybe
|
|
603
|
-
revision_suffix.maybe
|
|
460
|
+
(comma.maybe >> space >> month_name.as(:month) >> space.maybe >> year_digits.as(:year))).maybe # Or Month YEAR (with optional comma)
|
|
604
461
|
end
|
|
605
462
|
|
|
606
463
|
rule(:joint_development_iso_format) do
|
|
607
|
-
# ISO
|
|
608
|
-
|
|
609
|
-
# corpus form : "ISO/IEC/IEEE FDIS P26515-2018-05" (historical)
|
|
610
|
-
# The corpus form adds a leading "P" on the number, a trailing
|
|
611
|
-
# "-YYYY[-MM]" date (instead of ":YYYY"), multi-digit committee-draft
|
|
612
|
-
# stage codes (CD1..CD4) plus CDV, and a wider set of joint publishers.
|
|
613
|
-
# (roadmap items 2/3, phase 1). longest publisher token first.
|
|
614
|
-
(str("ISO/IEC/IEEE") | str("IEEE/ISO/IEC") | str("IEEE/IEC/ISO") |
|
|
615
|
-
str("ISO/IEEE") | str("IEC/IEEE") | str("IEEE/IEC") | str("ISO/IEC") |
|
|
616
|
-
str("IEEE")).as(:joint_publishers) >>
|
|
464
|
+
# ISO/IEC/IEEE FDIS 26511:2018 (ISO-led format)
|
|
465
|
+
(str("ISO/IEC/IEEE") | str("ISO/IEEE") | str("IEC/IEEE")).as(:joint_publishers) >>
|
|
617
466
|
space >>
|
|
618
|
-
# ISO stage codes
|
|
619
|
-
|
|
620
|
-
(str("FDIS") | str("FCD") | str("CDV") |
|
|
621
|
-
(str("DIS") >> digit.maybe) |
|
|
622
|
-
(str("CD") >> digit.maybe) |
|
|
623
|
-
str("WD") | str("PWI") | str("NP")).as(:iso_stage) >>
|
|
624
|
-
# optional " Std" noise word after the stage (e.g. "FDIS Std P15288")
|
|
625
|
-
(space >> str("Std")).maybe >>
|
|
467
|
+
# ISO stage codes
|
|
468
|
+
(str("FDIS") | str("DIS") | str("CD") | str("WD") | str("PWI") | str("NP")).as(:iso_stage) >>
|
|
626
469
|
space >>
|
|
627
|
-
str("P").maybe >> # optional project marker on the number
|
|
628
470
|
digits.as(:number) >>
|
|
629
|
-
|
|
630
|
-
((
|
|
631
|
-
(
|
|
632
|
-
(str(":") >> year_digits.as(:year)) |
|
|
633
|
-
(dash >> year_digits.as(:year) >>
|
|
634
|
-
(dash >> month_numeric.as(:month)).maybe) |
|
|
635
|
-
# Trailing text date ", April 2015" / " April 2015" (build_joint_development
|
|
636
|
-
# already reads :month/:year). No :year collision — the iso rule has no
|
|
637
|
-
# other :year capture (edition uses :edition_year).
|
|
638
|
-
((comma | space) >> month_name.as(:month) >> space >> year_digits.as(:year))
|
|
639
|
-
).maybe >>
|
|
640
|
-
# Optional /D<draft> tail. normalize_relaton_suffixes repositions the
|
|
641
|
-
# historical "…/D-3-2017" onto the number as "…-2017/D3", so by the
|
|
642
|
-
# time this rule runs the draft usually trails the date (bucket 5);
|
|
643
|
-
# a date-less "/D-4" keeps its hyphen (bucket 7), hence dash.maybe.
|
|
644
|
-
(slash >> str("D") >> dash.maybe >>
|
|
645
|
-
match('[0-9.]').repeat(1).as(:draft_version)).maybe >>
|
|
646
|
-
# Optional edition, from relaton's "/E-<n>" suffix normalized to
|
|
647
|
-
# "Edition <n>.0[ YYYY]" (nil-residue hand-off item 1).
|
|
648
|
-
edition.maybe >>
|
|
649
|
-
revision_suffix.maybe
|
|
650
|
-
end
|
|
651
|
-
|
|
652
|
-
# Embedded (stage-LAST) ISO-led designations: the corpus writes the ISO
|
|
653
|
-
# stage AFTER the (dotted or dashed) part —
|
|
654
|
-
# "ISO/IEC/IEEE 29119.4.FDIS, April 2015" (dot part .4, stage .FDIS)
|
|
655
|
-
# "ISO/IEC/IEEE 24748-5.CD3, February 2015" (dash part -5, stage .CD3)
|
|
656
|
-
# "IEEE P24748.5.CD3, July 2015" (bare IEEE + P)
|
|
657
|
-
# — rather than before the number (joint_development_iso_format). Same
|
|
658
|
-
# meaning as the stage-first form: `29119.4`/`29119-4` = "29119 part 4" and
|
|
659
|
-
# the trailing `.FDIS` is the ISO stage, NOT a second part. Routes through
|
|
660
|
-
# the same build_joint_development (via :joint_publishers/:iso_stage), so the
|
|
661
|
-
# stage is modeled correctly and the numeric part stays separate.
|
|
662
|
-
rule(:joint_development_embedded_stage) do
|
|
663
|
-
# publisher set mirrors joint_development_iso_format (incl. bare IEEE);
|
|
664
|
-
# longest token first.
|
|
665
|
-
(str("ISO/IEC/IEEE") | str("IEEE/ISO/IEC") | str("IEEE/IEC/ISO") |
|
|
666
|
-
str("ISO/IEEE") | str("IEC/IEEE") | str("IEEE/IEC") | str("ISO/IEC") |
|
|
667
|
-
str("IEEE")).as(:joint_publishers) >>
|
|
668
|
-
space >>
|
|
669
|
-
str("P").maybe >> # optional project marker on the number
|
|
670
|
-
digits.as(:number) >>
|
|
671
|
-
# optional numeric part (dot or dash); must not swallow a year
|
|
672
|
-
((dot | dash) >> year_digits.absent? >> digits.as(:part)).maybe >>
|
|
673
|
-
# the embedded stage, dot-separated, closed vocab (same as iso_stage).
|
|
674
|
-
# The (digit|letter) look-ahead keeps it at a token boundary so "CD"
|
|
675
|
-
# can't match inside a longer token and a glued no-space date
|
|
676
|
-
# (".DISMay2013") is left to fall through.
|
|
677
|
-
dot >>
|
|
678
|
-
(str("FDIS") | str("FCD") | str("CDV") |
|
|
679
|
-
(str("DIS") >> digit.maybe) |
|
|
680
|
-
(str("CD") >> digit.maybe) |
|
|
681
|
-
str("WD") | str("PWI") | str("NP")).as(:iso_stage) >>
|
|
682
|
-
(digit | match("[A-Za-z]")).absent? >>
|
|
683
|
-
# optional trailing date: :YYYY, -YYYY[-MM], or text "Month YYYY"
|
|
684
|
-
(
|
|
685
|
-
(str(":") >> year_digits.as(:year)) |
|
|
686
|
-
(dash >> year_digits.as(:year) >>
|
|
687
|
-
(dash >> month_numeric.as(:month)).maybe) |
|
|
688
|
-
((comma | space) >> month_name.as(:month) >> space >> year_digits.as(:year))
|
|
689
|
-
).maybe
|
|
471
|
+
((dot | dash) >> digits.as(:part)).maybe >> # Optional part
|
|
472
|
+
(str(":") >> year_digits.as(:year)).maybe
|
|
690
473
|
end
|
|
691
474
|
|
|
692
475
|
# Number-first pattern: "1873-2015 IEEE Standard..."
|
|
@@ -710,25 +493,12 @@ module Pubid
|
|
|
710
493
|
(slash >> digits.as(:draft_version)).as(:digit_draft).maybe >>
|
|
711
494
|
# FDIS and other ISO stage codes without D prefix (Pattern 3)
|
|
712
495
|
fdraft.maybe >>
|
|
713
|
-
#
|
|
714
|
-
|
|
715
|
-
# collision made Parslet drop the base year and warn "Duplicate
|
|
716
|
-
# subtrees … keys: [:year]"). The builder promotes it to the identity
|
|
717
|
-
# only when there is no base year.
|
|
718
|
-
trailing_month_year.maybe >>
|
|
496
|
+
# Enhanced: Accept both comma and space before month/year
|
|
497
|
+
((comma | space) >> month_name.as(:month) >> space >> year_digits.as(:year)).maybe >>
|
|
719
498
|
corrigendum.maybe >>
|
|
720
499
|
draft.maybe >>
|
|
721
|
-
# Revision trails the draft (before any date), matching normalization's
|
|
722
|
-
# ".../D<n>/R-<x>" repositioning of "P802.16Rev2/D3 Feb 2008".
|
|
723
|
-
revision_suffix.maybe >>
|
|
724
500
|
# ALSO accept month/year after draft (some patterns like /DX, Month YEAR)
|
|
725
|
-
|
|
726
|
-
# Trailing corrigendum AFTER the draft+date ("…/D1, Jan 2007/Cor. 1").
|
|
727
|
-
# The draft's own draft_date has already consumed the date, leaving
|
|
728
|
-
# "/Cor. 1" here; the resulting flat corrigendum+draft tree routes to
|
|
729
|
-
# build_flat_corrigendum (disjoint from the pre-draft corrigendum slot,
|
|
730
|
-
# which only fires when no draft precedes it).
|
|
731
|
-
corrigendum.maybe >>
|
|
501
|
+
((comma | space) >> month_name.as(:month) >> space >> year_digits.as(:year)).maybe >>
|
|
732
502
|
parenthetical.maybe
|
|
733
503
|
end
|
|
734
504
|
|
|
@@ -738,50 +508,27 @@ module Pubid
|
|
|
738
508
|
str("P") >> space.maybe >> # Make space after P optional
|
|
739
509
|
number >>
|
|
740
510
|
(part_subpart_year | edition).maybe >>
|
|
741
|
-
#
|
|
742
|
-
|
|
743
|
-
trailing_month_year.maybe >>
|
|
511
|
+
# Enhanced: Accept both comma and space before month/year
|
|
512
|
+
((comma | space) >> month_name.as(:month) >> space >> year_digits.as(:year)).maybe >>
|
|
744
513
|
corrigendum.maybe >>
|
|
745
514
|
draft.maybe >>
|
|
746
|
-
revision_suffix.maybe >>
|
|
747
515
|
# ALSO accept month/year after draft
|
|
748
|
-
|
|
516
|
+
((comma | space) >> month_name.as(:month) >> space >> year_digits.as(:year)).maybe >>
|
|
749
517
|
# Accept bare year after draft: ", 2015"
|
|
750
|
-
((comma | space) >> year_digits.as(:
|
|
751
|
-
# Trailing corrigendum after the draft+date (parity with ieee_p_identifier).
|
|
752
|
-
corrigendum.maybe >>
|
|
518
|
+
((comma | space) >> year_digits.as(:year)).maybe >>
|
|
753
519
|
parenthetical.maybe
|
|
754
520
|
end
|
|
755
521
|
|
|
756
522
|
# IEEE Draft P pattern: "IEEE Draft P802.11..." OR "Draft P802.11..." (IEEE prefix optional)
|
|
757
|
-
# An optional status phrase may precede "Draft" — "IEEE Unapproved Draft P…",
|
|
758
|
-
# "IEEE Active Approved Draft P…" — the largest index-v2 draft bucket. The
|
|
759
|
-
# status is captured (draft_status ends in a space, so "Approved Draft"
|
|
760
|
-
# splits cleanly) and round-trips as the draft_status attribute; the literal
|
|
761
|
-
# "Draft" stays a bare marker (dropped on render, like the plain form).
|
|
762
523
|
rule(:ieee_draft_p_identifier) do
|
|
763
524
|
(str("IEEE").as(:publisher) >> space).maybe >> # Make IEEE prefix optional
|
|
764
|
-
draft_status.as(:draft_status).maybe >>
|
|
765
525
|
str("Draft") >> space >>
|
|
766
|
-
|
|
767
|
-
# ("IEEE Unapproved Draft 802.1ah/D4.2"), mirroring
|
|
768
|
-
# ieee_approved_draft_identifier's str("P").maybe. The `number` rule
|
|
769
|
-
# already accepts the bare forms (802.1ah, C57.15, 11073-10471).
|
|
770
|
-
str("P").maybe >>
|
|
526
|
+
str("P") >>
|
|
771
527
|
number >>
|
|
772
528
|
(part_subpart_year | edition).maybe >>
|
|
773
|
-
#
|
|
774
|
-
|
|
775
|
-
((space >> month_name.as(:trailing_month) >> space >> year_digits.as(:trailing_year)) |
|
|
776
|
-
(space >> month_numeric.as(:trailing_month) >> (space | dash) >> year_digits.as(:trailing_year))).maybe >>
|
|
529
|
+
# Enhanced: Accept month/year after draft number
|
|
530
|
+
(space >> month_name.as(:month) >> space >> year_digits.as(:year)).maybe >>
|
|
777
531
|
draft.maybe >>
|
|
778
|
-
revision_suffix.maybe >>
|
|
779
|
-
# Trailing corrigendum after the draft ("…/D2.0/Cor. 1", or
|
|
780
|
-
# "…/D1.0, Dec 2007/Cor. 1" where the draft's own draft_date consumes
|
|
781
|
-
# the date, leaving "/Cor. N"). The flat corrigendum+draft tree (no
|
|
782
|
-
# :base) routes to build_flat_corrigendum, which rebuilds the base
|
|
783
|
-
# standard (carrying the draft + draft_status) and wraps it.
|
|
784
|
-
corrigendum.maybe >>
|
|
785
532
|
parenthetical.maybe
|
|
786
533
|
end
|
|
787
534
|
|
|
@@ -795,7 +542,6 @@ module Pubid
|
|
|
795
542
|
number >>
|
|
796
543
|
(part_subpart_year | edition).maybe >>
|
|
797
544
|
draft.maybe >>
|
|
798
|
-
revision_suffix.maybe >>
|
|
799
545
|
parenthetical.maybe
|
|
800
546
|
end
|
|
801
547
|
|
|
@@ -910,7 +656,7 @@ module Pubid
|
|
|
910
656
|
(type_word.as(:type) >> space?).maybe >>
|
|
911
657
|
number >>
|
|
912
658
|
part_subpart_year.maybe # This captures the full identifier before /Cor
|
|
913
|
-
).as(:
|
|
659
|
+
).as(:base_identifier) >>
|
|
914
660
|
# Now match the corrigendum portion
|
|
915
661
|
(slash | dash | space) >>
|
|
916
662
|
str("Cor") >>
|
|
@@ -931,7 +677,7 @@ module Pubid
|
|
|
931
677
|
(type_word.as(:type) >> space?).maybe >>
|
|
932
678
|
number >>
|
|
933
679
|
part_subpart_year.maybe
|
|
934
|
-
).as(:
|
|
680
|
+
).as(:base_identifier) >>
|
|
935
681
|
# Now match the interpretation portion
|
|
936
682
|
(slash | dash | space) >>
|
|
937
683
|
str("INT") >>
|
|
@@ -949,7 +695,7 @@ module Pubid
|
|
|
949
695
|
(type_word.as(:type) >> space?).maybe >>
|
|
950
696
|
number >>
|
|
951
697
|
part_subpart_year.maybe
|
|
952
|
-
).as(:
|
|
698
|
+
).as(:base_identifier) >>
|
|
953
699
|
# Now match the conformance portion
|
|
954
700
|
(slash | dash | space) >>
|
|
955
701
|
str("Conformance") >>
|
|
@@ -1011,13 +757,11 @@ module Pubid
|
|
|
1011
757
|
ieee_astm_si_psi | # NEW Session 171: Add IEEE/ASTM SI/PSI support
|
|
1012
758
|
multi_numbered_identifier | # NEW: Try multi-numbered identifiers before generic patterns
|
|
1013
759
|
csa_dual_published | # NEW: Try CSA dual published before generic patterns
|
|
1014
|
-
s_designation | # Historical IEEE/IPCEA cable designation (S-135)
|
|
1015
760
|
corrigendum_identifier | # NEW: Try corrigendum before generic patterns
|
|
1016
761
|
interpretation_identifier | # NEW: Try interpretation identifier before generic patterns
|
|
1017
762
|
conformance_identifier | # NEW: Try conformance identifier before generic patterns
|
|
1018
763
|
joint_development_ieee_format |
|
|
1019
764
|
joint_development_iso_format |
|
|
1020
|
-
joint_development_embedded_stage | # stage-LAST embedded form (before generic)
|
|
1021
765
|
iec_ieee_copublished |
|
|
1022
766
|
number_first_identifier |
|
|
1023
767
|
ieee_approved_draft_identifier |
|
|
@@ -1037,16 +781,8 @@ module Pubid
|
|
|
1037
781
|
ashrae_copub.maybe >> # NEW: Add /ASHRAE Guideline support
|
|
1038
782
|
ieee_crossref.maybe >> # NEW: Add /C62.22.1-1996 cross-reference support
|
|
1039
783
|
draft.maybe >>
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
# never collides with the base -YYYY identity year (see
|
|
1043
|
-
# ieee_p_identifier). The builder promotes it only when no base year.
|
|
1044
|
-
trailing_month_year.maybe >>
|
|
1045
|
-
# Trailing corrigendum after the draft+date ("IEEE Approved P1015/D1,
|
|
1046
|
-
# Jan 2007/Cor. 1"): the generic bucket is the only path a status-word
|
|
1047
|
-
# form reaches. Routes via build_flat_corrigendum (disjoint from the
|
|
1048
|
-
# pre-draft corrigendum slot at line 954).
|
|
1049
|
-
corrigendum.maybe >>
|
|
784
|
+
# Enhanced: Accept both comma and space before month/year
|
|
785
|
+
((comma | space) >> month_name.as(:month) >> space >> year_digits.as(:year)).maybe >>
|
|
1050
786
|
edition.maybe >>
|
|
1051
787
|
parenthetical.maybe >> # REVERT: Back to single parenthetical
|
|
1052
788
|
book_nickname.maybe >> # NEW: Add book nickname support
|
|
@@ -1058,133 +794,6 @@ module Pubid
|
|
|
1058
794
|
|
|
1059
795
|
root(:identifier)
|
|
1060
796
|
|
|
1061
|
-
# Rewrite relaton's historical IEEE serialization into canonical pubid
|
|
1062
|
-
# spellings. relaton's own formatter (Relaton::Ieee::PubId::Id#to_s) emits
|
|
1063
|
-
# suffix tokens that differ from pubid's grammar:
|
|
1064
|
-
#
|
|
1065
|
-
# /D-N-YYYY[-MM] draft + trailing numeric date (the dominant form)
|
|
1066
|
-
# /E-N[-YYYY[-MM]] edition
|
|
1067
|
-
# /R-N[-YYYY] revision (pubid has no revision suffix)
|
|
1068
|
-
# " Redline" redline suffix without the " - " pubid expects
|
|
1069
|
-
#
|
|
1070
|
-
# The draft/edition trailing date is repositioned onto the document number
|
|
1071
|
-
# as a base year/month (a form pubid already parses), which also keeps the
|
|
1072
|
-
# draft component clean so it round-trips through to_hash/from_hash.
|
|
1073
|
-
def self.normalize_relaton_suffixes(cleaned)
|
|
1074
|
-
# NOTE: the trailing " Redline"/" - Redline" suffix is NO LONGER stripped
|
|
1075
|
-
# here — the grammar's `redline` rule captures it into a redline flag so
|
|
1076
|
-
# a redline id stays distinct from its base standard.
|
|
1077
|
-
|
|
1078
|
-
# Combined draft + corrigendum: relaton emits "…/D-N/CorM-YYYY" (draft
|
|
1079
|
-
# then corrigendum), but pubid's grammar accepts the corrigendum first.
|
|
1080
|
-
# Swap them so the corrigendum keeps its own year and the draft trails.
|
|
1081
|
-
# The hyphen after "D" is mandatory here: relaton's formatter always
|
|
1082
|
-
# emits "/D-<draft>", whereas pubid's own canonical joint-development
|
|
1083
|
-
# form is "/D<draft>-<year>" (no hyphen, year kept on the draft) — which
|
|
1084
|
-
# already parses and must not be repositioned. A trailing corrigendum
|
|
1085
|
-
# month (the "-MM" in "/CorM-YYYY-MM") is intentionally dropped: pubid's
|
|
1086
|
-
# corrigendum model carries only a year.
|
|
1087
|
-
cleaned = cleaned.sub(
|
|
1088
|
-
%r{\A(.*)/D-([0-9A-Za-z][0-9A-Za-z.+]*?)/Cor\.?[ ]?(\d+)(?:-((?:19|20)\d\d))?(?:-\d\d)?\z},
|
|
1089
|
-
) do
|
|
1090
|
-
base, draft, cor, year = Regexp.last_match.captures
|
|
1091
|
-
"#{base}/Cor #{cor}#{year ? "-#{year}" : ''}/D#{draft}"
|
|
1092
|
-
end
|
|
1093
|
-
|
|
1094
|
-
# Combined draft + revision, and the empty-draft revision-only form:
|
|
1095
|
-
# "…/D-<d>/R-<x>-YYYY[-MM]" and "…/D-/R-<x>-YYYY" (nil-residue #2).
|
|
1096
|
-
# Reposition the base publication date onto the number (pubid's
|
|
1097
|
-
# "-YYYY[-MM]" shape), keep the draft as "/D<d>" (dropped when the draft
|
|
1098
|
-
# is empty), and leave a trailing "/R-<x>" the grammar captures as the
|
|
1099
|
-
# revision. Runs before the plain "/D-…" reposition, which the embedded
|
|
1100
|
-
# "/R-" would otherwise defeat.
|
|
1101
|
-
cleaned = cleaned.sub(
|
|
1102
|
-
%r{\A(.*?)/D-([0-9A-Za-z.+]*)/R-([0-9A-Za-z]+)(?:-((?:19|20)\d\d)(?:-(0[1-9]|1[0-2]))?)?\z},
|
|
1103
|
-
) do
|
|
1104
|
-
base, draft, rev, year, month = Regexp.last_match.captures
|
|
1105
|
-
date = year ? "-#{year}#{month ? "-#{month}" : ''}" : ""
|
|
1106
|
-
draft_part = draft.to_s.empty? ? "" : "/D#{draft}"
|
|
1107
|
-
"#{base}#{date}#{draft_part}/R-#{rev}"
|
|
1108
|
-
end
|
|
1109
|
-
|
|
1110
|
-
# /D-N drafts with a trailing numeric date, when the draft is the last
|
|
1111
|
-
# suffix: reposition the -YYYY[-MM] date onto the number. A following
|
|
1112
|
-
# /Cor, /Amd, /R or /E suffix carries its own year, so the `\z` anchor
|
|
1113
|
-
# keeps this from firing on those combined forms.
|
|
1114
|
-
cleaned = cleaned.sub(
|
|
1115
|
-
%r{\A(.*)/D-([0-9A-Za-z][0-9A-Za-z.+]*?)-((?:19|20)\d\d)(?:-(0[1-9]|1[0-2]))?\z},
|
|
1116
|
-
) do
|
|
1117
|
-
base, draft, year, month = Regexp.last_match.captures
|
|
1118
|
-
"#{base}-#{year}#{month ? "-#{month}" : ''}/D#{draft}"
|
|
1119
|
-
end
|
|
1120
|
-
|
|
1121
|
-
# /E-N editions: relaton's "/E-2-2023-02" → pubid's "Edition 2.0 2023-02".
|
|
1122
|
-
cleaned = cleaned.sub(
|
|
1123
|
-
%r{\A(.*?)/E-(\d+)(?:-((?:19|20)\d\d)(?:-(0[1-9]|1[0-2]))?)?\z},
|
|
1124
|
-
) do
|
|
1125
|
-
base, edition, year, month = Regexp.last_match.captures
|
|
1126
|
-
date = year ? " #{year}#{month ? "-#{month}" : ''}" : ""
|
|
1127
|
-
"#{base} Edition #{edition}.0#{date}"
|
|
1128
|
-
end
|
|
1129
|
-
|
|
1130
|
-
# /R-N revisions: PRESERVE them (the grammar's revision_suffix rule now
|
|
1131
|
-
# captures a trailing "/R-<x>" into the `revision` attribute). Just
|
|
1132
|
-
# reposition any trailing publication year onto the number, keeping the
|
|
1133
|
-
# "/R-<x>" in place for the grammar.
|
|
1134
|
-
cleaned.sub(
|
|
1135
|
-
%r{\A(.*?)/R-([0-9A-Za-z]+)(?:-((?:19|20)\d\d))?\z},
|
|
1136
|
-
) do
|
|
1137
|
-
base, rev, year = Regexp.last_match.captures
|
|
1138
|
-
"#{year ? "#{base}-#{year}" : base}/R-#{rev}"
|
|
1139
|
-
end
|
|
1140
|
-
end
|
|
1141
|
-
|
|
1142
|
-
# Strip the IEEE rawbib revision-notation dialects. `REV`/`Rev`
|
|
1143
|
-
# (case-insensitive) + a trailing revision id `[A-Za-z0-9]+`, glued to the
|
|
1144
|
-
# number or separated by `-`, `/`, `_`, `.`, or a space, and preceding the
|
|
1145
|
-
# draft. pubid's canonical "<num>/D<n>/R-<x>" form already drops the
|
|
1146
|
-
# revision on render (normalize_relaton_suffixes strips a trailing /R-x),
|
|
1147
|
-
# so the revision-less result is *the same identifier* — and stripping
|
|
1148
|
-
# (rather than reordering) leaves any trailing date/parenthetical intact,
|
|
1149
|
-
# which is why forms that already parse (`Draft P…-REVmb/D3.0, Mar 2010`)
|
|
1150
|
-
# are NOT disturbed. Examples:
|
|
1151
|
-
# "P802.16.2-REVa/D8" -> "P802.16.2/D8"
|
|
1152
|
-
# "P802.16/REVd/D5" -> "P802.16/D5"
|
|
1153
|
-
# "P802.15.1REVa/D5" -> "P802.15.1/D5"
|
|
1154
|
-
# "P802.11REVmb" -> "P802.11" (no draft)
|
|
1155
|
-
def self.normalize_revision_notation(cleaned)
|
|
1156
|
-
# NUMBERED revisions ("Rev<digits>") are PRESERVED — repositioned to a
|
|
1157
|
-
# trailing "/R-<n>" suffix the grammar captures as the `revision`
|
|
1158
|
-
# attribute (IEEE's native inline spelling; numbered-revision hand-off).
|
|
1159
|
-
# A "\d+" right after "Rev" both selects the numbered subset and keeps
|
|
1160
|
-
# these off the English word "Revision". Three source positions:
|
|
1161
|
-
# after a draft : "PC37.30.2/D043 Rev 18" -> ".../D043/R-18"
|
|
1162
|
-
cleaned = cleaned.sub(
|
|
1163
|
-
%r{(/D[0-9A-Za-z.]*)\s+[Rr][Ee][Vv]\s*(\d+)}, '\1/R-\2'
|
|
1164
|
-
)
|
|
1165
|
-
# before a draft: "P802.16Rev2/D3" -> "P802.16/D3/R-2"
|
|
1166
|
-
cleaned = cleaned.sub(
|
|
1167
|
-
%r{[-/_.]?\s?[Rr][Ee][Vv][-\s]?(\d+)(/D[0-9A-Za-z.]*)}, '\2/R-\1'
|
|
1168
|
-
)
|
|
1169
|
-
# no draft, trailing: "P1722-rev1" -> "P1722/R-1"
|
|
1170
|
-
cleaned = cleaned.sub(
|
|
1171
|
-
%r{(\d)[-._]?\s?[Rr][Ee][Vv]\s*(\d+)\s*\z}, '\1/R-\2'
|
|
1172
|
-
)
|
|
1173
|
-
|
|
1174
|
-
# LETTERED inline revisions ("REVa", "REVmb") have no pubid model and are
|
|
1175
|
-
# still STRIPPED (unchanged behaviour). The numbered forms above already
|
|
1176
|
-
# became "/R-<n>", so these regexes only see the lettered residue.
|
|
1177
|
-
# Revision token that PRECEDES a draft: drop it (keep the /D…).
|
|
1178
|
-
cleaned = cleaned.sub(
|
|
1179
|
-
%r{[-/_.]?\s?[Rr][Ee][Vv][-\s]?[A-Za-z0-9]+(?=/D[0-9])},
|
|
1180
|
-
"",
|
|
1181
|
-
)
|
|
1182
|
-
# Trailing revision glued to the number with no draft ("P802.11REVmb");
|
|
1183
|
-
# a digit must immediately precede REV so a trailing English word like
|
|
1184
|
-
# "…Revision" can't match.
|
|
1185
|
-
cleaned.sub(%r{(\d)[Rr][Ee][Vv][A-Za-z0-9]+\s*\z}, '\1')
|
|
1186
|
-
end
|
|
1187
|
-
|
|
1188
797
|
def self.parse(string)
|
|
1189
798
|
# Strip .pdf extension if present (Pattern 3: File Extensions)
|
|
1190
799
|
cleaned = string.sub(/\.pdf$/i, "")
|
|
@@ -1202,24 +811,6 @@ module Pubid
|
|
|
1202
811
|
# No valid IEEE identifier pattern needs more than 1 space
|
|
1203
812
|
cleaned = cleaned.gsub(/\s+/, " ")
|
|
1204
813
|
|
|
1205
|
-
# A joint ISO-led publisher list is sometimes crawled with a stray slash
|
|
1206
|
-
# (or slash+space) before the ISO stage code — "ISO/IEC/IEEE/ FDIS …" or
|
|
1207
|
-
# "ISO/IEC/IEEE/FDIS …". Restore the space separator so the stage parses
|
|
1208
|
-
# (bucket 7).
|
|
1209
|
-
cleaned = cleaned.gsub(
|
|
1210
|
-
%r{\b(ISO/IEC/IEEE|IEEE/ISO/IEC|IEEE/IEC/ISO|ISO/IEEE|IEC/IEEE|IEEE/IEC|ISO/IEC)/ ?(FDIS|FCD|CDV|DIS\d?|CD\d?|WD|PWI|NP)\b},
|
|
1211
|
-
'\1 \2',
|
|
1212
|
-
)
|
|
1213
|
-
|
|
1214
|
-
# Rewrite the rawbib revision-notation dialects (REVa/REVd/glued) into
|
|
1215
|
-
# the canonical /R-<x> form before the suffix normalization below.
|
|
1216
|
-
cleaned = normalize_revision_notation(cleaned)
|
|
1217
|
-
|
|
1218
|
-
# Normalize relaton's bespoke historical serialization (the spellings
|
|
1219
|
-
# emitted by Relaton::Ieee::PubId::Id#to_s) into canonical pubid forms
|
|
1220
|
-
# so `relaton-data-ieee` parses. See #normalize_relaton_suffixes.
|
|
1221
|
-
cleaned = normalize_relaton_suffixes(cleaned)
|
|
1222
|
-
|
|
1223
814
|
# NEW Session 171: CONSERVATIVE data quality fixes for TODO.IEEE-MUST-DO.txt
|
|
1224
815
|
# Only fix clear typos: space before dash + 4-digit year, OR dash + space + 4-digit year
|
|
1225
816
|
# Do NOT touch " - " (space-dash-space) which is valid formatting
|
|
@@ -1268,21 +859,10 @@ module Pubid
|
|
|
1268
859
|
# NEW: Convert IEC/IEEE space-separated to semicolon format
|
|
1269
860
|
# Pattern: "IEC 61523-3 First edition 2004-09; IEEE 1497" → already semicolon
|
|
1270
861
|
# Pattern: "IEC 62539 First Edition 2007-07 IEEE 930" → needs semicolon
|
|
1271
|
-
#
|
|
1272
|
-
#
|
|
1273
|
-
# Edition + YYYY-MM) + space + IEEE identifier.
|
|
1274
|
-
cleaned = cleaned.gsub(
|
|
1275
|
-
/(IEC\s+\d+(?:-\d+)?(?::\d{4})?(?:\s+(?:First\s+)?[Ee]dition\s+\d+(?:\.\d+)?\s+\d{4}-\d{2})?)\s+(IEEE\s+Std\s+\S+|IEEE\s+\S+)/,
|
|
1276
|
-
'\1; \2'
|
|
1277
|
-
)
|
|
1278
|
-
|
|
1279
|
-
# Strip ":YYYY" from IEC numbers when an Edition clause follows — the
|
|
1280
|
-
# IEEE parser's number rule doesn't accept the colon-year form, but
|
|
1281
|
-
# the year is preserved in the "Edition N.M YYYY-MM" suffix.
|
|
1282
|
-
# (issue #202)
|
|
862
|
+
# Match: IEC identifier (with edition) + space + IEEE identifier
|
|
863
|
+
# Be conservative: only convert if IEC has "First edition" or similar and followed by IEEE
|
|
1283
864
|
cleaned = cleaned.gsub(
|
|
1284
|
-
|
|
1285
|
-
'\1\2'
|
|
865
|
+
/(IEC\s+\d+(?:-\d+)?(?:\s+First?\s+Edition\s+\d{4}-\d{2})?)\s+(IEEE\s+\S+)/, '\1; \2'
|
|
1286
866
|
)
|
|
1287
867
|
|
|
1288
868
|
# NEW Phase 1 (Session 141): Remove literal trademark symbol
|
|
@@ -1498,6 +1078,8 @@ module Pubid
|
|
|
1498
1078
|
# Remove period after "Std": "IEEE Std." -> "IEEE Std"
|
|
1499
1079
|
cleaned = cleaned.gsub(/\bStd\.\s+/, "Std ")
|
|
1500
1080
|
|
|
1081
|
+
# Redline Suffix Removal: " - Redline" at end
|
|
1082
|
+
cleaned = cleaned.gsub(/\s+-\s+Redline\b.*$/, "")
|
|
1501
1083
|
|
|
1502
1084
|
# Title portion removal after year: "YYYY - IEEE Standard for..."
|
|
1503
1085
|
cleaned = cleaned.gsub(
|