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
|
@@ -1,443 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
# Owns all regex-based normalization applied to NIST identifier strings
|
|
6
|
-
# before the Parslet grammar sees them.
|
|
7
|
-
#
|
|
8
|
-
# The Parser entry point delegates to Preprocessor#call; the grammar
|
|
9
|
-
# itself never inspects raw user input. Each private method below is a
|
|
10
|
-
# named stage of normalization, applied in the order declared in #call.
|
|
11
|
-
# Stages are kept in the historically validated sequence — reordering
|
|
12
|
-
# them risks regressions because later stages often match patterns
|
|
13
|
-
# produced by earlier ones.
|
|
14
|
-
#
|
|
15
|
-
# Format detection (:mr vs :short) is also owned here because it is a
|
|
16
|
-
# property of the original input, not of the parsed tree.
|
|
17
|
-
class Preprocessor
|
|
18
|
-
# Outcome of preprocessing.
|
|
19
|
-
# cleaned - the normalized identifier string ready for the grammar
|
|
20
|
-
# format - :mr if the input uses dot-separators, :short otherwise
|
|
21
|
-
Result = Struct.new(:cleaned, :format, keyword_init: true)
|
|
22
|
-
|
|
23
|
-
# Convert Roman numerals to Arabic numbers per NIST spec.
|
|
24
|
-
ROMAN_TO_ARABIC = {
|
|
25
|
-
"I" => "1",
|
|
26
|
-
"II" => "2",
|
|
27
|
-
"III" => "3",
|
|
28
|
-
"IV" => "4",
|
|
29
|
-
"V" => "5",
|
|
30
|
-
"VI" => "6",
|
|
31
|
-
"VII" => "7",
|
|
32
|
-
"VIII" => "8",
|
|
33
|
-
"IX" => "9",
|
|
34
|
-
"X" => "10",
|
|
35
|
-
}.freeze
|
|
36
|
-
|
|
37
|
-
def initialize(input)
|
|
38
|
-
@input = input.to_s.strip
|
|
39
|
-
@cleaned = Core::UpdateCodes.apply(@input, :nist)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Run every normalization stage and return a Result.
|
|
43
|
-
#
|
|
44
|
-
# Stage order is load-bearing — later stages match patterns produced
|
|
45
|
-
# by earlier ones. Reordering requires running the full NIST fixture
|
|
46
|
-
# suite to verify no regression.
|
|
47
|
-
def call
|
|
48
|
-
run_stages
|
|
49
|
-
Result.new(cleaned: @cleaned, format: detected_format)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Sequence of normalization stages in historically validated order.
|
|
53
|
-
# Extracted so rubocop can scope length/ABC metrics narrowly.
|
|
54
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
55
|
-
def run_stages
|
|
56
|
-
normalize_spurious_u_suffix!
|
|
57
|
-
normalize_publisher_and_series!
|
|
58
|
-
normalize_lcirc_supplement_contexts!
|
|
59
|
-
normalize_revision_spacing!
|
|
60
|
-
normalize_letter_suffix_casing!
|
|
61
|
-
normalize_draft_and_volume!
|
|
62
|
-
convert_roman_volumes!
|
|
63
|
-
normalize_supplement_and_part!
|
|
64
|
-
normalize_version_notation!
|
|
65
|
-
normalize_edition_year_suffix!
|
|
66
|
-
normalize_revision_with_letter!
|
|
67
|
-
normalize_version_dotted_spaces!
|
|
68
|
-
normalize_update_markers!
|
|
69
|
-
normalize_supplement_variants!
|
|
70
|
-
normalize_revision_language!
|
|
71
|
-
normalize_mr_translation_codes!
|
|
72
|
-
convert_dashyear_to_edition!
|
|
73
|
-
revert_dashyear_for_series!
|
|
74
|
-
normalize_version_verbose!
|
|
75
|
-
normalize_part_notation!
|
|
76
|
-
normalize_series_specific_spacing!
|
|
77
|
-
normalize_verbose_keywords!
|
|
78
|
-
end
|
|
79
|
-
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
80
|
-
|
|
81
|
-
# Detect input format: :mr (dot-separated machine-readable) or :short.
|
|
82
|
-
def detected_format
|
|
83
|
-
@input.include?(".") && !@input.match?(/\s/) ? :mr : :short
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
private
|
|
87
|
-
|
|
88
|
-
# Strip the spurious "U" a bad v2 data migration prefixed onto real
|
|
89
|
-
# letter/revision suffixes (e.g. "800-38a" → "800-38Ua",
|
|
90
|
-
# "73-197r" → "73-197Ur"). NIST's authoritative records
|
|
91
|
-
# (allrecords.xml, DOIs) carry no such "U"; it exists only in the
|
|
92
|
-
# migrated corpus. Removing it here lets the remainder parse through
|
|
93
|
-
# the normal letter-suffix / revision path — "U<letter>" is never a
|
|
94
|
-
# real NIST suffix, so this only ever undoes the corruption.
|
|
95
|
-
def normalize_spurious_u_suffix!
|
|
96
|
-
@cleaned = @cleaned.gsub(/(\d)U([a-z])/, '\1\2')
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
# Lowercase publishers, publisher+series concatenations, lowercase
|
|
100
|
-
# series codes, and the lone "LC" → "LCIRC" expansion.
|
|
101
|
-
def normalize_publisher_and_series!
|
|
102
|
-
@cleaned = @cleaned.sub(/^nbs\b/i, "NBS")
|
|
103
|
-
@cleaned = @cleaned.sub(/^nist\b/i, "NIST")
|
|
104
|
-
@cleaned = @cleaned.gsub(
|
|
105
|
-
/^(NBS|NIST)(IR|FIPS|GCR|HB|MONO|MP|NCSTAR|NSRDS)/i, '\1 \2'
|
|
106
|
-
)
|
|
107
|
-
@cleaned = @cleaned.sub(/\b(ir|sp|tn|hb|fips|ams|vts)\b/i, &:upcase)
|
|
108
|
-
@cleaned = @cleaned.gsub(/\bLC\b(?!IRC)/, "LCIRC")
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# LCIRC series: combine with NBS prefix when a supplement marker
|
|
112
|
-
# follows, and convert MR-format dots to spaces so the grammar's
|
|
113
|
-
# circ_supplement_identifier rule can match.
|
|
114
|
-
def normalize_lcirc_supplement_contexts!
|
|
115
|
-
@cleaned = @cleaned.gsub(
|
|
116
|
-
/\bNBS LCIRC\b(?=.*\b(?:supp?|sup\+|r\d+\/)\d)/, "NBS.LCIRC"
|
|
117
|
-
)
|
|
118
|
-
@cleaned = @cleaned.gsub(
|
|
119
|
-
/\bNBS\.LCIRC\.(\d+r\d+\/\d{4})/, "NBS LCIRC \\1"
|
|
120
|
-
)
|
|
121
|
-
@cleaned = @cleaned.gsub(/\bNBS\.LCIRC\.(\d+r\d+)\b/, "NBS LCIRC \\1")
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
# Separate revision markers from adjacent digits. LCIRC and CIRC
|
|
125
|
-
# series keep their compact revision form because their grammar
|
|
126
|
-
# rules expect it.
|
|
127
|
-
def normalize_revision_spacing!
|
|
128
|
-
@cleaned = @cleaned.gsub(/([-\d]+[IVX]+[-\d]+)\s+(\d+)/, '\1.\2')
|
|
129
|
-
@cleaned = @cleaned.gsub(/(?<!e)(\d)(rev\d{4})/, '\1 \2')
|
|
130
|
-
# Re-parse round-trip: fold dotted edition-date back to canonical
|
|
131
|
-
# "rev" form so pubid can re-read its own output.
|
|
132
|
-
@cleaned = @cleaned.gsub(/(\d+e\d+)\.([A-Za-z]{3,9}\d{4})/, '\1rev\2')
|
|
133
|
-
# IR revision with slash+year is a V1 Update, not a revision.
|
|
134
|
-
# Must run BEFORE the LCIRC slash rule below so it never adds
|
|
135
|
-
# a space here.
|
|
136
|
-
normalize_ir_slash_year_to_update!
|
|
137
|
-
unless @cleaned.include?("LCIRC") || @cleaned.include?("CIRC")
|
|
138
|
-
@cleaned = @cleaned.gsub(/(\d)(r\d+\/\d{4})/, '\1 \2')
|
|
139
|
-
end
|
|
140
|
-
@cleaned = @cleaned.gsub(/\b(r(?!v)\d{4})\b/, ' \1')
|
|
141
|
-
@cleaned = @cleaned.gsub(/(\d)(r[A-Z][a-z]{2,8}\d{4})/, '\1 \2')
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# "5058r04/98" → "5058/Upd1-199804" (mirrors archived v1 NistIr
|
|
145
|
-
# parser). A 2-digit year normalizes to 19YY. Only applies to IR
|
|
146
|
-
# series; CIRC/LCIRC keep their slash-year form.
|
|
147
|
-
def normalize_ir_slash_year_to_update!
|
|
148
|
-
return unless @cleaned =~ /\bIR\b/ && !@cleaned.include?("CIRC")
|
|
149
|
-
|
|
150
|
-
@cleaned = @cleaned.gsub(%r{(\d)r(\d{1,2})/(\d{2,4})}) do
|
|
151
|
-
num, mon, yr = ::Regexp.last_match(1), ::Regexp.last_match(2), ::Regexp.last_match(3)
|
|
152
|
-
yyyy = yr.length == 2 ? "19#{yr}" : yr
|
|
153
|
-
"#{num}/Upd1-#{yyyy}#{format('%02d', mon.to_i)}"
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
# Uppercase lone letter suffixes attached to numbers. NCSTAR keeps
|
|
158
|
-
# lowercase volume letters (e.g. "1-1av1") per its grammar.
|
|
159
|
-
def normalize_letter_suffix_casing!
|
|
160
|
-
uppercase_dash_letter!
|
|
161
|
-
uppercase_trailing_letter!
|
|
162
|
-
uppercase_revision_letter!
|
|
163
|
-
uppercase_letter_before_revision!
|
|
164
|
-
uppercase_letter_before_volume! unless @cleaned.include?("NCSTAR")
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
# Trailing "-a" → "-A" at end of identifier.
|
|
168
|
-
def uppercase_dash_letter!
|
|
169
|
-
@cleaned = @cleaned.gsub(/(\d)-([a-z])$/) { "#{$1}-#{$2.upcase}" }
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
# Trailing "a" → "A" when attached directly to a digit (excludes
|
|
173
|
-
# "r" to preserve revision+year patterns like "73-197r").
|
|
174
|
-
def uppercase_trailing_letter!
|
|
175
|
-
@cleaned = @cleaned.gsub(/(\d)([a-z&&[^r]])$/) { "#{$1}#{$2.upcase}" }
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
# Letter suffix on revision: "22r1a" → "22r1A".
|
|
179
|
-
def uppercase_revision_letter!
|
|
180
|
-
@cleaned = @cleaned.gsub(/(\d)(r)(\d+)([a-z])$/) do
|
|
181
|
-
"#{$1}#{$2}#{$3}#{$4.upcase}"
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
# Letter between number and revision: "53ar1" → "53Ar1".
|
|
186
|
-
def uppercase_letter_before_revision!
|
|
187
|
-
@cleaned = @cleaned.gsub(/(\d)([a-z])(r\d)/) do
|
|
188
|
-
"#{$1}#{$2.upcase}#{$3}"
|
|
189
|
-
end
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
# Letter between number and volume: "1-2bv1" → "1-2Bv1". Skipped
|
|
193
|
-
# for NCSTAR which preserves lowercase letters per its grammar.
|
|
194
|
-
def uppercase_letter_before_volume!
|
|
195
|
-
@cleaned = @cleaned.gsub(/(\d)([a-z&&[^r]])(v\d+)/) do
|
|
196
|
-
"#{$1}#{$2.upcase}#{$3}"
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
# Volume/draft spacing and supplement typo fixes that must run
|
|
201
|
-
# before the more general draft and supplement normalizations.
|
|
202
|
-
def normalize_draft_and_volume!
|
|
203
|
-
@cleaned = @cleaned.gsub(/(\d{2}-\d{4})\s+(\d)$/, '\1 v\2')
|
|
204
|
-
@cleaned = @cleaned.gsub(/(\d)-draft(\d)/, '\1 -draft \2')
|
|
205
|
-
@cleaned = @cleaned.gsub(/(\d)draft(\d)/, '\1 -draft \2')
|
|
206
|
-
@cleaned = @cleaned.gsub(/(\d)suprev/, '\1supprev')
|
|
207
|
-
@cleaned = @cleaned.gsub(
|
|
208
|
-
/(\d{2,})([A-Z])(r\d+)([-\s]draft\d*)/, '\1\2 \3\4'
|
|
209
|
-
)
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
# Roman numeral volumes → "v<arabic> ver<version>" per NIST spec.
|
|
213
|
-
def convert_roman_volumes!
|
|
214
|
-
@cleaned = @cleaned.gsub(/(\d+)-([IVX]+)-(\d+(?:\.\d+)*)/) do
|
|
215
|
-
"#{Regexp.last_match(1)} v#{roman_to_arabic(Regexp.last_match(2))} " \
|
|
216
|
-
"ver#{Regexp.last_match(3)}"
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
# LCIRC supplement with slash-year separator, and "Pt" part prefix
|
|
221
|
-
# with revision.
|
|
222
|
-
def normalize_supplement_and_part!
|
|
223
|
-
@cleaned = @cleaned.gsub(/(\d)(supp\d+\/\d{4})/, '\1 \2')
|
|
224
|
-
@cleaned = @cleaned.gsub(/(\d)Pt(\d+)(r\d+)/, '\1 pt\2 \3')
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
# Version notation: insert spaces between digits and "ver" / "v",
|
|
228
|
-
# split combined fields, normalize volume ranges.
|
|
229
|
-
def normalize_version_notation!
|
|
230
|
-
@cleaned = @cleaned.gsub(/(\d)ver(\d)/, '\1 ver \2')
|
|
231
|
-
@cleaned = @cleaned.gsub(/ver(\d+)e(\d{4})/, 'ver\1 e\2')
|
|
232
|
-
@cleaned = @cleaned.gsub(/ver(\d+)v(\d+)/, 'ver\1 v\2')
|
|
233
|
-
@cleaned = @cleaned.gsub(/(\d)(v\d+\.\d+)/, '\1 \2')
|
|
234
|
-
@cleaned = @cleaned.gsub(/(\d)(v\d+\.\d+)/, '\1 \2')
|
|
235
|
-
@cleaned = @cleaned.gsub(/(\d)(v\d+)\s+(\d+)$/, '\1 \2.\3')
|
|
236
|
-
@cleaned = @cleaned.gsub(/(\d)(v\d+)\s+(\d+)\s+(\d+)$/, '\1 \2.\3.\4')
|
|
237
|
-
@cleaned = @cleaned.gsub(/(\d)(v\d+[a-z]-[a-z])/, '\1 \2')
|
|
238
|
-
@cleaned = @cleaned.gsub(/(\d)(v\d+[A-Z])/, '\1 \2')
|
|
239
|
-
@cleaned = @cleaned.gsub(/(v\d+)([A-Z])-([A-Z])/, '\1\2-\3'.downcase)
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
# Edition year suffix shorthand: "2006ed." → "e2006".
|
|
243
|
-
def normalize_edition_year_suffix!
|
|
244
|
-
@cleaned = @cleaned.gsub(/(\d{4})ed\./, 'e\1')
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
# Revision attached to a number with optional letter suffix. When
|
|
248
|
-
# a letter suffix is present, keep them together for the
|
|
249
|
-
# second_number grammar rule; otherwise insert a space before
|
|
250
|
-
# following uppercase letters or update keywords.
|
|
251
|
-
def normalize_revision_with_letter!
|
|
252
|
-
@cleaned = @cleaned.gsub(/(\d+)(r\d{1,2})([a-z])(?=-|[A-Z]|$)/) do
|
|
253
|
-
"#{Regexp.last_match(1)}#{Regexp.last_match(2)}" \
|
|
254
|
-
"#{Regexp.last_match(3).upcase}"
|
|
255
|
-
end
|
|
256
|
-
# rubocop:disable Layout/LineLength
|
|
257
|
-
@cleaned = @cleaned.gsub(/(\d+)(r\d{1,2})(?![a-zA-Z])(?=[A-Z]|-(?=[A-Z])|\/(?:upd|errata|insert))/) do
|
|
258
|
-
"#{Regexp.last_match(1)} #{Regexp.last_match(2)}"
|
|
259
|
-
end
|
|
260
|
-
# rubocop:enable Layout/LineLength
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
# Dotted versions with internal spaces ("v1 1" → "v1.1"). Negative
|
|
264
|
-
# lookahead prevents swallowing draft stage digits ("189 2pd").
|
|
265
|
-
def normalize_version_dotted_spaces!
|
|
266
|
-
# rubocop:disable Layout/LineLength
|
|
267
|
-
@cleaned = @cleaned.gsub(/(\b(?:v|\d)[v\d]*[-A-Z]*)\s+(\d+)(?!(?i:pd|wd|prd)\b)\s+(\d+)(?!(?i:pd|wd|prd)\b)/, '\1.\2.\3')
|
|
268
|
-
@cleaned = @cleaned.gsub(/(\b(?:v|\d)[v\d]*)\s+(\d+)(?!(?i:pd|wd|prd)\b)/, '\1.\2')
|
|
269
|
-
# rubocop:enable Layout/LineLength
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
# Update markers ("-upd", "/upd") need a space before them so the
|
|
273
|
-
# grammar's update rule can match.
|
|
274
|
-
def normalize_update_markers!
|
|
275
|
-
@cleaned = @cleaned.gsub(/(\d+)-upd(\d*)/, '\1 -upd\2')
|
|
276
|
-
@cleaned = @cleaned.gsub(/(\d+)\/upd(\d*)/, '\1 /upd\2')
|
|
277
|
-
@cleaned = @cleaned.gsub(/([a-z]\d+)-upd/, '\1 -upd')
|
|
278
|
-
@cleaned = @cleaned.gsub(/([a-z]\d+)\/upd/, '\1 /upd')
|
|
279
|
-
@cleaned = @cleaned.gsub(/(\d+[A-Z])-upd(\d*)/, '\1 -upd\2')
|
|
280
|
-
@cleaned = @cleaned.gsub(/(\d+[A-Z])\/upd(\d*)/, '\1 /upd\2')
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
# Supplement prefix variants ("sup", "sup+", "supp") all need a
|
|
284
|
-
# space before them; the "sup" form is normalized to "supp" when
|
|
285
|
-
# attached to a letter suffix or slash-year.
|
|
286
|
-
def normalize_supplement_variants!
|
|
287
|
-
@cleaned = @cleaned.gsub(/(\d)(sup\d)/, '\1 \2')
|
|
288
|
-
@cleaned = @cleaned.gsub(/(\d)(sup+)(\d)/, '\1 \2\3')
|
|
289
|
-
@cleaned = @cleaned.gsub(/(\d)(sup\+)(\d)/, '\1 \2\3')
|
|
290
|
-
@cleaned = @cleaned.gsub(/(\d)(sup\d+)/, '\1 \2')
|
|
291
|
-
@cleaned = @cleaned.gsub(/(\d)(sup\d+\b)/, '\1 \2')
|
|
292
|
-
@cleaned = @cleaned.gsub(/(\d+[A-Z])sup(\b)/, '\1supp\2')
|
|
293
|
-
@cleaned = @cleaned.gsub(/(\d+)sup(\d+\/\d{4})/, '\1supp\2')
|
|
294
|
-
@cleaned = @cleaned.gsub(/(\d)(supp?)-(\d{4})(?![\d\/])/, '\1supp\3')
|
|
295
|
-
end
|
|
296
|
-
|
|
297
|
-
# Standalone "r" between number-letter and revision, bare trailing
|
|
298
|
-
# "r" → "r1" (V1 empty-revision normalization), and revision
|
|
299
|
-
# directly followed by a language code.
|
|
300
|
-
def normalize_revision_language!
|
|
301
|
-
@cleaned = @cleaned.gsub(/(\d[a-z])r\b/, '\1 r')
|
|
302
|
-
@cleaned = @cleaned.gsub(/(\d)r\z/, '\1r1')
|
|
303
|
-
@cleaned = @cleaned.gsub(
|
|
304
|
-
/(r\d+)(es|pt|chi|viet|port|esp)\b/, '\1 \2'
|
|
305
|
-
)
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
# MR-format translation codes (".spa", ".por", ".ind") would be
|
|
309
|
-
# misparsed as letter suffixes — convert the trailing dot to a space.
|
|
310
|
-
def normalize_mr_translation_codes!
|
|
311
|
-
@cleaned = @cleaned.gsub(
|
|
312
|
-
/^([A-Z]+)\.SP\.(\d+)\.([a-z]{2,4})$/, '\1.SP.\2 \3'
|
|
313
|
-
)
|
|
314
|
-
@cleaned = @cleaned.gsub(
|
|
315
|
-
/^([A-Z]+)\.([A-Z]+)\.(\d+)\.([a-z]{2,4})$/, '\1.\2.\3 \4'
|
|
316
|
-
)
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
# Trailing "-YYYY" → "eYYYY" edition marker, but only when the
|
|
320
|
-
# four-digit group is plausibly a year (1901–2099). Part numbers
|
|
321
|
-
# outside that range (e.g. SP 250-1039) are left untouched.
|
|
322
|
-
#
|
|
323
|
-
# The letter suffix may be lower- or uppercase (e.g. SP 800-38b-2005);
|
|
324
|
-
# it is upcased so the year edition splits off cleanly and the letter
|
|
325
|
-
# becomes a Part component ("800-38Be2005"), matching how a letter
|
|
326
|
-
# suffix without a year (800-38a → 800-38A) is already normalized.
|
|
327
|
-
# "e"/"E" are excluded from the letter so they cannot be confused with
|
|
328
|
-
# the edition marker itself.
|
|
329
|
-
def convert_dashyear_to_edition!
|
|
330
|
-
@cleaned = @cleaned.gsub(
|
|
331
|
-
/(?<!e\d)(?<![eE-])(\d(?:[A-DF-Za-df-z]?))-(\d{4})(?=\s|$)/,
|
|
332
|
-
) do |match|
|
|
333
|
-
prefix = Regexp.last_match(1)
|
|
334
|
-
year = Regexp.last_match(2).to_i
|
|
335
|
-
year.between?(1901, 2099) ? "#{prefix.upcase}e#{year}" : match
|
|
336
|
-
end
|
|
337
|
-
end
|
|
338
|
-
|
|
339
|
-
# Series-specific reverts: HB handbooks, OWMWP dates, and RPT year
|
|
340
|
-
# ranges use dash-year structurally (not as an edition marker), so
|
|
341
|
-
# the broad convert_dashyear_to_edition! rule would corrupt them.
|
|
342
|
-
def revert_dashyear_for_series!
|
|
343
|
-
revert_handbook_edition!
|
|
344
|
-
revert_owmwp_date!
|
|
345
|
-
revert_report_year_range!
|
|
346
|
-
revert_circ_supplement_year_range!
|
|
347
|
-
end
|
|
348
|
-
|
|
349
|
-
# CIRC/LCIRC year-only series supplements: "NBS CIRC sup1925-1926" is a
|
|
350
|
-
# supplement spanning a year range, so the trailing "-1926" is a range
|
|
351
|
-
# end, not an edition. convert_dashyear_to_edition! would have rewritten
|
|
352
|
-
# it to "sup1925e1926"; restore the dash so the circ_supplement_identifier
|
|
353
|
-
# grammar can read the range (pubid/pubid#152).
|
|
354
|
-
def revert_circ_supplement_year_range!
|
|
355
|
-
return unless @cleaned.include?("CIRC")
|
|
356
|
-
|
|
357
|
-
# Anchor on the series prefix ("CIRC " / "CIRC." / "LCIRC ") so only the
|
|
358
|
-
# whole-series form (sup right after the series, no base number) is
|
|
359
|
-
# reverted — a based "24sup1940e1950" keeps its genuine edition.
|
|
360
|
-
@cleaned = @cleaned.gsub(/(CIRC[ .])(supp?)(\d{4})e(\d{4})(?=\s|$)/, '\1\2\3-\4')
|
|
361
|
-
end
|
|
362
|
-
|
|
363
|
-
# HB handbooks: "HB 130e1979" → "HB 130-1979" (year is part of
|
|
364
|
-
# the handbook designation, not an edition marker).
|
|
365
|
-
def revert_handbook_edition!
|
|
366
|
-
@cleaned = @cleaned.gsub(
|
|
367
|
-
/\b(HB|HB\s+)[^:\s.]*?(\d+)e(\d{4})(?=\s|$)/, '\1\2-\3'
|
|
368
|
-
)
|
|
369
|
-
end
|
|
370
|
-
|
|
371
|
-
# OWMWP series: dates use MM-DD-YYYY format, so "OWMWP 06-13e2018"
|
|
372
|
-
# reverts to "OWMWP 06-13-2018".
|
|
373
|
-
def revert_owmwp_date!
|
|
374
|
-
@cleaned = @cleaned.gsub(
|
|
375
|
-
/\b(OWMWP|OWMWP\s*)[^:\s]*?(\d{2})-(\d{2})e(\d{4})(?=\s|$)/,
|
|
376
|
-
'\1\2-\3-\4',
|
|
377
|
-
)
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
# RPT series: year ranges "1946-1947" should not be reinterpreted as
|
|
381
|
-
# editions. Only revert when the first year precedes the second.
|
|
382
|
-
def revert_report_year_range!
|
|
383
|
-
@cleaned = @cleaned.gsub(
|
|
384
|
-
/\b(RPT|RPT\s*)([^:\s]*?)(\d{4})e(\d{4})(?=\s|$)/,
|
|
385
|
-
) { |m| build_report_year_range(m, Regexp.last_match.captures) }
|
|
386
|
-
end
|
|
387
|
-
|
|
388
|
-
# Build the reverted year-range form from the gsub captures, or
|
|
389
|
-
# return the original match when the years are not a forward range.
|
|
390
|
-
def build_report_year_range(match, captures)
|
|
391
|
-
prefix, separator, first, second = captures
|
|
392
|
-
return match unless first.to_i < second.to_i
|
|
393
|
-
|
|
394
|
-
"#{prefix}#{separator}#{first}-#{second}"
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
# Verbose version markers ("v1.1" → "ver1.1", "Ver. 2.0" →
|
|
398
|
-
# "ver2.0"), MR-format "-v" → ".ver".
|
|
399
|
-
def normalize_version_verbose!
|
|
400
|
-
@cleaned = @cleaned.gsub(/-v(\d+\.\d+)/, '.ver\1')
|
|
401
|
-
@cleaned = @cleaned.gsub(/\bVer\.\s+(\d+(?:\.\d+)*)/, 'ver\1')
|
|
402
|
-
@cleaned = @cleaned.gsub(/\bv(\d+\.\d+(?:\.\d+)*)/, 'ver\1')
|
|
403
|
-
end
|
|
404
|
-
|
|
405
|
-
# Part notation: uppercase "P" → "p"; lone "p"/"n" → "pt" (unless
|
|
406
|
-
# followed by a 4-digit year, which is part+year not part-prefix).
|
|
407
|
-
def normalize_part_notation!
|
|
408
|
-
@cleaned = @cleaned.gsub(/(\d)P(\d)/, '\1 p\2')
|
|
409
|
-
@cleaned = @cleaned.gsub(/\b([pn])(\d+)(?!\d{4}\b)/, 'pt\2')
|
|
410
|
-
@cleaned = @cleaned.gsub(/(\d)([pP]\d+)/, '\1 \2')
|
|
411
|
-
end
|
|
412
|
-
|
|
413
|
-
# Series-specific spacing rules: CRPL-F needs a space after the
|
|
414
|
-
# letter band; compound report numbers ("17-917v3") need the
|
|
415
|
-
# volume broken out.
|
|
416
|
-
def normalize_series_specific_spacing!
|
|
417
|
-
@cleaned = @cleaned.gsub(/(NBS CRPL-F-[AB])(\d)/, '\1 \2')
|
|
418
|
-
@cleaned = @cleaned.gsub(/(CRPL-F-[AB])(\d)/, '\1 \2')
|
|
419
|
-
@cleaned = @cleaned.gsub(/(\d+-\d+)(v\d+)(?![.\d])/, '\1 \2')
|
|
420
|
-
end
|
|
421
|
-
|
|
422
|
-
# Verbose keyword spellings ("Version", "Revision", "Part", "Add",
|
|
423
|
-
# "Suppl", "report") normalized to their short canonical forms.
|
|
424
|
-
def normalize_verbose_keywords!
|
|
425
|
-
@cleaned = @cleaned.gsub(/(\d+)\s+Suppl\b/, '\1Suppl')
|
|
426
|
-
@cleaned = @cleaned.gsub(/\s+Version\s+(\d+)/, ' ver \1')
|
|
427
|
-
@cleaned = @cleaned.gsub(/\s+Revision\s+\(r\)/, " r")
|
|
428
|
-
@cleaned = @cleaned.gsub(/\s+Part\s+(\d+)/, 'pt\1')
|
|
429
|
-
@cleaned = @cleaned.gsub(/(\d[a-z]?)\s+Add\b\.?/i) do
|
|
430
|
-
"#{Regexp.last_match(1).upcase} Add."
|
|
431
|
-
end
|
|
432
|
-
@cleaned = @cleaned.gsub(/(\d+)\s+rev\s+(\d{4})/, '\1r\2')
|
|
433
|
-
@cleaned = @cleaned.gsub(/\breport\s*;\s*/, "RPT ")
|
|
434
|
-
@cleaned = @cleaned.gsub(/\breport\b/, "RPT")
|
|
435
|
-
end
|
|
436
|
-
|
|
437
|
-
# Translate a Roman numeral into its Arabic equivalent.
|
|
438
|
-
def roman_to_arabic(roman)
|
|
439
|
-
ROMAN_TO_ARABIC.fetch(roman, roman)
|
|
440
|
-
end
|
|
441
|
-
end
|
|
442
|
-
end
|
|
443
|
-
end
|
data/lib/pubid/nist/renderer.rb
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
# Human-readable renderer for NIST identifiers.
|
|
6
|
-
#
|
|
7
|
-
# NIST supports multiple output formats (:full, :long, :abbreviated,
|
|
8
|
-
# :short, :mr). Each series class defines public style methods
|
|
9
|
-
# (to_short_style, to_mr_style, etc.) with series-specific formatting
|
|
10
|
-
# logic, so this renderer delegates to those methods rather than
|
|
11
|
-
# reimplementing them.
|
|
12
|
-
#
|
|
13
|
-
# Registered as the `:human` format in the NIST format registry and
|
|
14
|
-
# invoked via `render(format: :human, nist_format: :short)`.
|
|
15
|
-
class Renderer < ::Pubid::Renderers::Base
|
|
16
|
-
# Render the identifier in the requested NIST format.
|
|
17
|
-
#
|
|
18
|
-
# @param context [Object, nil] rendering context (unused by NIST)
|
|
19
|
-
# @param nist_format [Symbol, nil] NIST output format (:full, :long,
|
|
20
|
-
# :abbreviated, :abbrev, :short, :mr). Defaults to :short.
|
|
21
|
-
# @return [String] formatted identifier string
|
|
22
|
-
def render(context: nil, nist_format: nil, **_opts)
|
|
23
|
-
id = @id
|
|
24
|
-
|
|
25
|
-
effective_format = nist_format || :short
|
|
26
|
-
effective_format = effective_format.to_sym if effective_format.is_a?(String)
|
|
27
|
-
|
|
28
|
-
case effective_format
|
|
29
|
-
when :full, :long
|
|
30
|
-
id.public_send(:to_full_style)
|
|
31
|
-
when :abbreviated, :abbrev
|
|
32
|
-
id.public_send(:to_abbreviated_style)
|
|
33
|
-
when :short
|
|
34
|
-
id.public_send(:to_short_style)
|
|
35
|
-
when :mr
|
|
36
|
-
id.public_send(:to_mr_style)
|
|
37
|
-
else
|
|
38
|
-
id.public_send(:to_short_style)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
data/lib/pubid/nist/router.rb
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Pubid
|
|
4
|
-
module Nist
|
|
5
|
-
# Router class for NIST series-to-class mapping
|
|
6
|
-
# Single Responsibility: Resolve parsed data to the correct identifier class
|
|
7
|
-
#
|
|
8
|
-
# Delegates to Pubid::Nist.locate_stage / Pubid::Nist.locate_type
|
|
9
|
-
# for series-to-class resolution.
|
|
10
|
-
class Router
|
|
11
|
-
# All valid series codes (comprehensive list)
|
|
12
|
-
VALID_SERIES = [
|
|
13
|
-
# Major series with dedicated classes
|
|
14
|
-
"SP", "FIPS", "IR", "HB", "TN",
|
|
15
|
-
# Specialized series with dedicated classes
|
|
16
|
-
"CIRC", "CRPL", "CS", "CSM",
|
|
17
|
-
# Other series (use Base class)
|
|
18
|
-
"GCR", "AMS", "BSS", "BMS", "BH", "MONO", "MP",
|
|
19
|
-
"NCSTAR", "NSRDS", "CSWP", "VTS", "AI", "OWMWP",
|
|
20
|
-
"PC", "RPT", "SIBS", "TIBM", "TTB", "EAB",
|
|
21
|
-
"CHIPS", "NWIRP", "RB",
|
|
22
|
-
"JPCRD", "JRES", "CIS", "HR", "IRPL", "IP",
|
|
23
|
-
"LC", "PS", "LCIRC",
|
|
24
|
-
# Compound series
|
|
25
|
-
"BRPD-CRPL-D", "CRPL-F-A", "CRPL-F-B", "CS-E",
|
|
26
|
-
"CSRC Building Block", "CSRC Use Case", "CSRC Book",
|
|
27
|
-
"ITL Bulletin", "NIST LC", "NIST PS", "NIST DCI",
|
|
28
|
-
"NIST Other", "NSRDS-NBS",
|
|
29
|
-
].freeze
|
|
30
|
-
|
|
31
|
-
# Check if series is valid
|
|
32
|
-
# @param series_code [String] the series code
|
|
33
|
-
# @return [Boolean] true if series is valid
|
|
34
|
-
def valid_series?(series_code)
|
|
35
|
-
VALID_SERIES.include?(series_code)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Locate identifier class by series and pattern
|
|
39
|
-
# @param parsed_hash [Hash] the parsed identifier data
|
|
40
|
-
# @return [Class] the identifier class
|
|
41
|
-
def locate_identifier_klass(parsed_hash)
|
|
42
|
-
# Date-style identifier (no series) dispatches here, not via series lookup.
|
|
43
|
-
if parsed_hash[:dated_date] && parsed_hash[:dated_seq]
|
|
44
|
-
return Identifiers::DatedDocument
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
series = parsed_hash[:series]&.to_s
|
|
48
|
-
|
|
49
|
-
# Handle compound series that include publisher (both space and dot separated)
|
|
50
|
-
if series&.start_with?("NBS ")
|
|
51
|
-
simple_series = series.sub("NBS ", "")
|
|
52
|
-
|
|
53
|
-
# Check for CIRC supplement
|
|
54
|
-
if simple_series == "CIRC"
|
|
55
|
-
if has_supplement?(parsed_hash)
|
|
56
|
-
return Identifiers::CircularSupplement
|
|
57
|
-
else
|
|
58
|
-
return Identifiers::Circular
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Use simple series for lookup (TYPED_STAGES abbr handles compound forms)
|
|
63
|
-
series = simple_series
|
|
64
|
-
elsif series&.start_with?("NBS.")
|
|
65
|
-
# Handle dot-separated patterns (e.g., "NBS.LCIRC" after preprocessing)
|
|
66
|
-
simple_series = series.sub("NBS.", "")
|
|
67
|
-
|
|
68
|
-
# Check for LCIRC supplement (dot-separated variant)
|
|
69
|
-
if simple_series == "LCIRC"
|
|
70
|
-
if has_supplement?(parsed_hash)
|
|
71
|
-
return Identifiers::CircularSupplement
|
|
72
|
-
else
|
|
73
|
-
return Identifiers::LetterCircular
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Check for CIRC supplement (dot-separated variant)
|
|
78
|
-
if simple_series == "CIRC"
|
|
79
|
-
if has_supplement?(parsed_hash)
|
|
80
|
-
return Identifiers::CircularSupplement
|
|
81
|
-
else
|
|
82
|
-
return Identifiers::Circular
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# Use simple series for lookup
|
|
87
|
-
series = simple_series
|
|
88
|
-
elsif series&.start_with?("NIST.")
|
|
89
|
-
# Handle dot-separated NIST patterns
|
|
90
|
-
simple_series = series.sub("NIST.", "")
|
|
91
|
-
|
|
92
|
-
# Check for LCIRC supplement (dot-separated variant)
|
|
93
|
-
if simple_series == "LCIRC"
|
|
94
|
-
if has_supplement?(parsed_hash)
|
|
95
|
-
return Identifiers::CircularSupplement
|
|
96
|
-
else
|
|
97
|
-
return Identifiers::LetterCircular
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Use simple series for lookup
|
|
102
|
-
series = simple_series
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
# Check for CS variants (works for both compound "NBS CS" and simple "CS")
|
|
106
|
-
if series == "CS"
|
|
107
|
-
first_num = parsed_hash[:first_number]
|
|
108
|
-
|
|
109
|
-
# Check for CSM (monthly) - v#n# pattern inside first_number hash
|
|
110
|
-
if first_num.is_a?(Hash) && first_num[:volume_number] && first_num[:issue_number]
|
|
111
|
-
return Identifiers::CommercialStandardsMonthly
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# Check for CS-E (emergency) - e-prefix with 3+ digits
|
|
115
|
-
# Handle Parslet::Slice by converting to string
|
|
116
|
-
first_num_str = first_num.is_a?(String) ? first_num.to_str : first_num.to_s
|
|
117
|
-
|
|
118
|
-
# Match e104 or e104 (when "e104-43" is split into first+second)
|
|
119
|
-
if /^e\d{3,}/.match?(first_num_str)
|
|
120
|
-
return Identifiers::CommercialStandardEmergency
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
# Look up using TYPED_STAGES registry (replaces series_to_class_map)
|
|
125
|
-
# This handles simple series, compound series (via abbr array), and all variants
|
|
126
|
-
# Delegates to Pubid::Nist.locate_stage / Pubid::Nist.locate_type
|
|
127
|
-
# instead of an injected dependency.
|
|
128
|
-
typed_stage = Pubid::Nist.locate_stage(series)
|
|
129
|
-
if typed_stage
|
|
130
|
-
Pubid::Nist.locate_type(typed_stage.type_code) || Identifier
|
|
131
|
-
else
|
|
132
|
-
# Fallback to Base for unmapped series (e.g., "AMS", "VTS")
|
|
133
|
-
Identifier
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
# Check if parsed hash has supplement indicators
|
|
138
|
-
# @param parsed_hash [Hash] the parsed identifier data
|
|
139
|
-
# @return [Boolean] true if supplement indicators are present
|
|
140
|
-
def has_supplement?(parsed_hash)
|
|
141
|
-
parsed_hash[:supplement] ||
|
|
142
|
-
parsed_hash[:supplement_date_range] ||
|
|
143
|
-
parsed_hash[:supplement_date] ||
|
|
144
|
-
parsed_hash[:supplement_slash_year] ||
|
|
145
|
-
parsed_hash[:supplement_with_rev]
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
end
|