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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Nist
|
|
5
|
+
# Scheme class for NIST identifier registry
|
|
6
|
+
# Single Responsibility: Identifier class registry and series-to-class mapping
|
|
7
|
+
class Scheme < Pubid::Scheme
|
|
8
|
+
class << self
|
|
9
|
+
# Aggregate TYPED_STAGES from all identifier classes
|
|
10
|
+
# @return [Array<Components::TypedStage>] all typed stages
|
|
11
|
+
def typed_stages
|
|
12
|
+
@typed_stages ||= identifiers
|
|
13
|
+
.reject { |klass| klass == Identifiers::Base } # Skip Base fallback class
|
|
14
|
+
.flat_map(&:typed_stages)
|
|
15
|
+
.freeze
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Locate TypedStage by abbreviation
|
|
19
|
+
# @param abbr [String, Symbol] the type abbreviation
|
|
20
|
+
# @return [Components::TypedStage] the matching typed stage
|
|
21
|
+
# @raise [ArgumentError] if abbreviation not found
|
|
22
|
+
def locate_typed_stage_by_abbr(abbr)
|
|
23
|
+
abbr_str = abbr.to_s.upcase
|
|
24
|
+
typed_stages.find do |ts|
|
|
25
|
+
ts.abbr.any? { |a| a.to_s.upcase == abbr_str }
|
|
26
|
+
end || raise(ArgumentError, "Unknown type abbreviation: #{abbr}")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Locate identifier class by type code
|
|
30
|
+
# @param type_code [String, Symbol] the type code
|
|
31
|
+
# @return [Class] the identifier class
|
|
32
|
+
# @raise [ArgumentError] if type code not found
|
|
33
|
+
def locate_identifier_klass_by_type_code(type_code)
|
|
34
|
+
type_str = type_code.to_s
|
|
35
|
+
identifiers
|
|
36
|
+
.reject { |klass| klass == Identifiers::Base } # Skip Base fallback class
|
|
37
|
+
.find do |klass|
|
|
38
|
+
klass.typed_stages.any? { |ts| ts.type_code.to_s == type_str }
|
|
39
|
+
end || raise(ArgumentError, "Unknown type code: #{type_code}")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Locate identifier class by series and pattern
|
|
43
|
+
# @param parsed_hash [Hash] the parsed identifier data
|
|
44
|
+
# @return [Class] the identifier class
|
|
45
|
+
def locate_identifier_klass(parsed_hash)
|
|
46
|
+
series = parsed_hash[:series]&.to_s
|
|
47
|
+
|
|
48
|
+
# Handle compound series that include publisher (both space and dot separated)
|
|
49
|
+
if series&.start_with?("NBS ")
|
|
50
|
+
simple_series = series.sub("NBS ", "")
|
|
51
|
+
|
|
52
|
+
# Check for CIRC supplement
|
|
53
|
+
if simple_series == "CIRC"
|
|
54
|
+
if has_supplement?(parsed_hash)
|
|
55
|
+
return Identifiers::CircularSupplement
|
|
56
|
+
else
|
|
57
|
+
return Identifiers::Circular
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Use simple series for lookup (TYPED_STAGES abbr handles compound forms)
|
|
62
|
+
series = simple_series
|
|
63
|
+
elsif series&.start_with?("NBS.")
|
|
64
|
+
# Handle dot-separated patterns (e.g., "NBS.LCIRC" after preprocessing)
|
|
65
|
+
simple_series = series.sub("NBS.", "")
|
|
66
|
+
|
|
67
|
+
# Check for LCIRC supplement (dot-separated variant)
|
|
68
|
+
if simple_series == "LCIRC"
|
|
69
|
+
if has_supplement?(parsed_hash)
|
|
70
|
+
return Identifiers::CircularSupplement
|
|
71
|
+
else
|
|
72
|
+
return Identifiers::LetterCircular
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Check for CIRC supplement (dot-separated variant)
|
|
77
|
+
if simple_series == "CIRC"
|
|
78
|
+
if has_supplement?(parsed_hash)
|
|
79
|
+
return Identifiers::CircularSupplement
|
|
80
|
+
else
|
|
81
|
+
return Identifiers::Circular
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Use simple series for lookup
|
|
86
|
+
series = simple_series
|
|
87
|
+
elsif series&.start_with?("NIST.")
|
|
88
|
+
# Handle dot-separated NIST patterns
|
|
89
|
+
simple_series = series.sub("NIST.", "")
|
|
90
|
+
|
|
91
|
+
# Check for LCIRC supplement (dot-separated variant)
|
|
92
|
+
if simple_series == "LCIRC"
|
|
93
|
+
if has_supplement?(parsed_hash)
|
|
94
|
+
return Identifiers::CircularSupplement
|
|
95
|
+
else
|
|
96
|
+
return Identifiers::LetterCircular
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Use simple series for lookup
|
|
101
|
+
series = simple_series
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Check for CS variants (works for both compound "NBS CS" and simple "CS")
|
|
105
|
+
if series == "CS"
|
|
106
|
+
first_num = parsed_hash[:first_number]
|
|
107
|
+
|
|
108
|
+
# Check for CSM (monthly) - v#n# pattern inside first_number hash
|
|
109
|
+
if first_num.is_a?(Hash) && first_num[:volume_number] && first_num[:issue_number]
|
|
110
|
+
return Identifiers::CommercialStandardsMonthly
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Check for CS-E (emergency) - e-prefix with 3+ digits
|
|
114
|
+
# Handle Parslet::Slice by converting to string
|
|
115
|
+
first_num_str = first_num.is_a?(String) ? first_num.to_str : first_num.to_s
|
|
116
|
+
|
|
117
|
+
# Match e104 or e104 (when "e104-43" is split into first+second)
|
|
118
|
+
if /^e\d{3,}/.match?(first_num_str)
|
|
119
|
+
return Identifiers::CommercialStandardEmergency
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Look up using TYPED_STAGES registry (replaces series_to_class_map)
|
|
124
|
+
# This handles simple series, compound series (via abbr array), and all variants
|
|
125
|
+
begin
|
|
126
|
+
typed_stage = locate_typed_stage_by_abbr(series)
|
|
127
|
+
type_code = typed_stage.type_code
|
|
128
|
+
locate_identifier_klass_by_type_code(type_code)
|
|
129
|
+
rescue ArgumentError
|
|
130
|
+
# Fallback to Base for unmapped series (e.g., "AMS", "VTS")
|
|
131
|
+
Identifiers::Base
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Check if parsed hash has supplement indicators
|
|
136
|
+
def has_supplement?(parsed_hash)
|
|
137
|
+
parsed_hash[:supplement] ||
|
|
138
|
+
parsed_hash[:supplement_date_range] ||
|
|
139
|
+
parsed_hash[:supplement_date] ||
|
|
140
|
+
parsed_hash[:supplement_slash_year] ||
|
|
141
|
+
parsed_hash[:supplement_with_rev]
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# All identifier classes
|
|
145
|
+
# @return [Array<Class>] list of all identifier classes
|
|
146
|
+
def identifiers
|
|
147
|
+
@identifiers ||= [
|
|
148
|
+
Identifiers::SpecialPublication,
|
|
149
|
+
Identifiers::FederalInformationProcessingStandards,
|
|
150
|
+
Identifiers::InteragencyReport,
|
|
151
|
+
Identifiers::Handbook,
|
|
152
|
+
Identifiers::TechnicalNote,
|
|
153
|
+
Identifiers::Circular,
|
|
154
|
+
Identifiers::CircularSupplement,
|
|
155
|
+
Identifiers::CrplReport,
|
|
156
|
+
Identifiers::Report,
|
|
157
|
+
Identifiers::Monograph,
|
|
158
|
+
Identifiers::MiscellaneousPublication,
|
|
159
|
+
Identifiers::GrantContractorReport,
|
|
160
|
+
Identifiers::Ncstar,
|
|
161
|
+
Identifiers::Owmwp,
|
|
162
|
+
Identifiers::Nsrds,
|
|
163
|
+
Identifiers::LetterCircular,
|
|
164
|
+
Identifiers::CommercialStandard,
|
|
165
|
+
Identifiers::CommercialStandardEmergency,
|
|
166
|
+
Identifiers::CommercialStandardsMonthly,
|
|
167
|
+
Identifiers::Base, # Fallback for unmapped series
|
|
168
|
+
].freeze
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Check if series is valid
|
|
172
|
+
# @param series_code [String] the series code
|
|
173
|
+
# @return [Boolean] true if series is valid
|
|
174
|
+
def valid_series?(series_code)
|
|
175
|
+
VALID_SERIES.include?(series_code)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# All valid series codes (comprehensive list)
|
|
179
|
+
VALID_SERIES = [
|
|
180
|
+
# Major series with dedicated classes
|
|
181
|
+
"SP", "FIPS", "IR", "HB", "TN",
|
|
182
|
+
# Specialized series with dedicated classes
|
|
183
|
+
"CIRC", "CRPL", "CS", "CSM",
|
|
184
|
+
# Other series (use Base class)
|
|
185
|
+
"GCR", "AMS", "BSS", "BMS", "BH", "MONO", "MP",
|
|
186
|
+
"NCSTAR", "NSRDS", "CSWP", "VTS", "AI", "OWMWP",
|
|
187
|
+
"PC", "RPT", "SIBS", "TIBM", "TTB", "EAB",
|
|
188
|
+
"JPCRD", "JRES", "CIS", "HR", "IRPL", "IP",
|
|
189
|
+
"LC", "PS", "LCIRC",
|
|
190
|
+
# Compound series
|
|
191
|
+
"BRPD-CRPL-D", "CRPL-F-A", "CRPL-F-B", "CS-E",
|
|
192
|
+
"CSRC Building Block", "CSRC Use Case", "CSRC Book",
|
|
193
|
+
"ITL Bulletin", "NIST LC", "NIST PS", "NIST DCI",
|
|
194
|
+
"NIST Other", "NSRDS-NBS"
|
|
195
|
+
].freeze
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
@@ -6,66 +6,65 @@ module Pubid
|
|
|
6
6
|
# Supplements wrap a base identifier with additional edition information
|
|
7
7
|
#
|
|
8
8
|
# Architecture follows ISO pattern:
|
|
9
|
-
# -
|
|
9
|
+
# - base_identifier: The base document being supplemented
|
|
10
10
|
# - edition: Edition information for the supplement
|
|
11
11
|
#
|
|
12
12
|
# Examples:
|
|
13
13
|
# - "NBS CIRC 101e2supp" → CircularSupplement(base: "NBS CIRC 101", edition: e2)
|
|
14
14
|
# - "NBS CIRC 25supp-1924" → CircularSupplement(base: "NBS CIRC 25", edition: 1924)
|
|
15
|
-
class SupplementIdentifier <
|
|
16
|
-
attribute :
|
|
15
|
+
class SupplementIdentifier < Identifiers::Base
|
|
16
|
+
attribute :base_identifier, Identifiers::Base, polymorphic: true
|
|
17
17
|
|
|
18
|
-
# Delegate publisher to
|
|
18
|
+
# Delegate publisher to base_identifier
|
|
19
19
|
def publisher
|
|
20
|
-
|
|
20
|
+
base_identifier&.publisher
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
# Delegate series to
|
|
23
|
+
# Delegate series to base_identifier
|
|
24
24
|
def series
|
|
25
|
-
|
|
25
|
+
base_identifier&.series
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
# Four exits — a date range, a base-less delegation, an update form and
|
|
29
|
-
# the canonical one — so the composition stays whole in its own method
|
|
30
|
-
# and `to_s` wraps its single result. `super` is not reachable from a
|
|
31
|
-
# private method, so it is handed in as a block.
|
|
32
28
|
def to_s(format = :short)
|
|
33
|
-
annotated = format.is_a?(Hash) ? format[:annotated] : nil
|
|
34
|
-
format = format[:format] || :short if format.is_a?(Hash)
|
|
35
|
-
|
|
36
|
-
rendered = render_plain(format) { super(format) }
|
|
37
|
-
|
|
38
|
-
annotate_plain_render(rendered, annotated: annotated)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
private
|
|
42
|
-
|
|
43
|
-
def render_plain(format)
|
|
44
29
|
# Handle date range supplements (no base identifier)
|
|
45
30
|
if supplement_date_range_start && supplement_date_range_end
|
|
46
|
-
return "NBS CIRC
|
|
31
|
+
return "NBS CIRC supp#{supplement_date_range_start}-#{supplement_date_range_end}"
|
|
47
32
|
end
|
|
48
33
|
|
|
49
|
-
return
|
|
34
|
+
return super unless base_identifier
|
|
50
35
|
|
|
51
|
-
result =
|
|
36
|
+
result = base_identifier.to_s(format)
|
|
52
37
|
|
|
53
38
|
# NEW: Handle update attribute (e.g., "Upd12-1926" for supplement patterns)
|
|
54
39
|
if update
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
# (relaton-data-nist uses "sup" across all series).
|
|
40
|
+
# Check if this is an implicit supplement (no explicit "sup/supp" marker, just update)
|
|
41
|
+
# For implicit supplements like "145r11/1925", don't add "sup" before the update
|
|
58
42
|
is_implicit = self.class.attributes.key?(:implicit_supplement) && implicit_supplement == true
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
43
|
+
|
|
44
|
+
if is_implicit
|
|
45
|
+
# Implicit supplement: "{base}/{update}" (e.g., "145/Upd1-192511")
|
|
46
|
+
else
|
|
47
|
+
# Explicit supplement: "{base}sup/{update}" (e.g., "118sup/Upd12-1926")
|
|
48
|
+
is_circ_supplement = ["LCIRC", "CIRC"].include?(series.to_s)
|
|
49
|
+
result += is_circ_supplement ? "sup" : "supp"
|
|
50
|
+
end
|
|
51
|
+
result += "/#{update}"
|
|
63
52
|
return result
|
|
64
53
|
end
|
|
65
54
|
|
|
66
|
-
#
|
|
67
|
-
#
|
|
68
|
-
|
|
55
|
+
# Original supplement rendering
|
|
56
|
+
# For LCIRC/CIRC supplements with update, use "sup"
|
|
57
|
+
# For LCIRC/CIRC supplements without update, normalize "sup" to "supp" for consistency
|
|
58
|
+
is_circ_supplement = ["LCIRC", "CIRC"].include?(series.to_s)
|
|
59
|
+
# When update is present, use "sup" (e.g., "118sup/Upd1-192612")
|
|
60
|
+
# When update is not present, use "supp" (e.g., "378Gsupp" - normalized from "sup")
|
|
61
|
+
result += if is_circ_supplement && !update
|
|
62
|
+
"supp"
|
|
63
|
+
elsif is_circ_supplement
|
|
64
|
+
"sup"
|
|
65
|
+
else
|
|
66
|
+
"supp"
|
|
67
|
+
end
|
|
69
68
|
|
|
70
69
|
# Add edition information if present (just ID, not type prefix)
|
|
71
70
|
if edition&.id
|
|
@@ -61,24 +61,18 @@ module Pubid
|
|
|
61
61
|
identifier_parts << identifier.stage.to_s
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
# Supplement is now a structured component. Preserve the existing URN
|
|
65
|
-
# branching exactly: range → "supp{start}-{end}", revision → "supprev",
|
|
66
|
-
# a valued supplement → "suppX"/"supp-X" (dash unless it starts with an
|
|
67
|
-
# uppercase letter), and — quirk retained — a nil (absent) supplement
|
|
68
|
-
# still emits "supp", while a present-but-empty one emits nothing.
|
|
69
64
|
supp = identifier.supplement
|
|
70
|
-
if
|
|
71
|
-
identifier_parts << "supp#{
|
|
72
|
-
elsif
|
|
65
|
+
if identifier.supplement_date_range_start && identifier.supplement_date_range_end
|
|
66
|
+
identifier_parts << "supp#{identifier.supplement_date_range_start}-#{identifier.supplement_date_range_end}"
|
|
67
|
+
elsif identifier.supplement_has_revision
|
|
73
68
|
identifier_parts << "supprev"
|
|
74
|
-
elsif supp && !supp.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
"supp#{value}"
|
|
69
|
+
elsif supp && !supp.empty?
|
|
70
|
+
identifier_parts << if supp.match?(/^[A-Z]/)
|
|
71
|
+
"supp#{supp}"
|
|
78
72
|
else
|
|
79
|
-
"supp-#{
|
|
73
|
+
"supp-#{supp}"
|
|
80
74
|
end
|
|
81
|
-
elsif supp
|
|
75
|
+
elsif !supp
|
|
82
76
|
identifier_parts << "supp"
|
|
83
77
|
end
|
|
84
78
|
|
data/lib/pubid/nist.rb
CHANGED
|
@@ -2,86 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
module Pubid
|
|
4
4
|
module Nist
|
|
5
|
-
extend Pubid::PrefixesSupport
|
|
6
|
-
|
|
7
|
-
# Publisher prefixes (NBS/NIST) plus the "simple series" tokens that can
|
|
8
|
-
# *begin* a printed reference on their own — mirrors the parser's
|
|
9
|
-
# `publisher` and `simple_series` rules (lib/pubid/nist/parser.rb). Compound
|
|
10
|
-
# series that only appear glued to a publisher (e.g. "NBS CRPL-F-A") are
|
|
11
|
-
# excluded because they never lead a routable reference by themselves.
|
|
12
|
-
PREFIXES = %w[
|
|
13
|
-
NIST NBS
|
|
14
|
-
AMS VTS BSS BMS BH FIPS GCR HB MONO MP NCSTAR NSRDS IR SP TN CSWP
|
|
15
|
-
AI CIRC CS CSM CRPL LCIRC OWMWP PC RPT SIBS TIBM TTB EAB JPCRD JRES
|
|
16
|
-
CHIPS NWIRP RB
|
|
17
|
-
].freeze
|
|
18
|
-
|
|
19
5
|
autoload :Builder, "#{__dir__}/nist/builder"
|
|
20
|
-
autoload :Caster, "#{__dir__}/nist/caster"
|
|
21
|
-
autoload :CircularSupplementBuilder, "#{__dir__}/nist/circular_supplement_builder"
|
|
22
6
|
autoload :Components, "#{__dir__}/nist/components"
|
|
23
7
|
autoload :Configuration, "#{__dir__}/nist/configuration"
|
|
24
|
-
autoload :Identifier, "#{__dir__}/nist/identifiers/base"
|
|
25
8
|
autoload :Identifiers, "#{__dir__}/nist/identifiers"
|
|
26
9
|
autoload :Parser, "#{__dir__}/nist/parser"
|
|
27
|
-
autoload :
|
|
28
|
-
autoload :Preprocessor, "#{__dir__}/nist/preprocessor"
|
|
29
|
-
autoload :Renderer, "#{__dir__}/nist/renderer"
|
|
30
|
-
autoload :Router, "#{__dir__}/nist/router"
|
|
31
|
-
autoload :Series, "#{__dir__}/nist/series"
|
|
10
|
+
autoload :Scheme, "#{__dir__}/nist/scheme"
|
|
32
11
|
autoload :SupplementIdentifier, "#{__dir__}/nist/supplement_identifier"
|
|
33
12
|
autoload :UrnGenerator, "#{__dir__}/nist/urn_generator"
|
|
34
|
-
autoload :UrnParser, "#{__dir__}/nist/urn_parser"
|
|
35
|
-
|
|
36
|
-
# Explicit registry of NIST identifier classes.
|
|
37
|
-
#
|
|
38
|
-
# NIST identifier classes use `typed_stages` (not the `self.type` Hash
|
|
39
|
-
# pattern used by CEN/JCGM/ANSI), so they cannot be auto-discovered.
|
|
40
|
-
# Identifier is the fallback for unmapped series (e.g. AMS, VTS)
|
|
41
|
-
# and must be excluded from typed-stage aggregation.
|
|
42
|
-
IDENTIFIER_TYPES = [
|
|
43
|
-
Identifiers::SpecialPublication,
|
|
44
|
-
Identifiers::FederalInformationProcessingStandards,
|
|
45
|
-
Identifiers::InteragencyReport,
|
|
46
|
-
Identifiers::Handbook,
|
|
47
|
-
Identifiers::TechnicalNote,
|
|
48
|
-
Identifiers::Circular,
|
|
49
|
-
Identifiers::CircularSupplement,
|
|
50
|
-
Identifiers::CrplReport,
|
|
51
|
-
Identifiers::Report,
|
|
52
|
-
Identifiers::Monograph,
|
|
53
|
-
Identifiers::MiscellaneousPublication,
|
|
54
|
-
Identifiers::GrantContractorReport,
|
|
55
|
-
Identifiers::Ncstar,
|
|
56
|
-
Identifiers::Owmwp,
|
|
57
|
-
Identifiers::Nsrds,
|
|
58
|
-
Identifiers::LetterCircular,
|
|
59
|
-
Identifiers::CommercialStandard,
|
|
60
|
-
Identifiers::CommercialStandardEmergency,
|
|
61
|
-
Identifiers::CommercialStandardsMonthly,
|
|
62
|
-
Identifiers::DatedDocument,
|
|
63
|
-
Identifier, # Fallback for unmapped series
|
|
64
|
-
].freeze
|
|
65
13
|
|
|
66
14
|
# Parse a NIST identifier string
|
|
67
15
|
# @param identifier [String] the identifier string to parse
|
|
68
|
-
# @return [
|
|
16
|
+
# @return [Identifiers::Base] the parsed identifier
|
|
69
17
|
def self.parse(identifier)
|
|
70
|
-
unless identifier.is_a?(String)
|
|
71
|
-
raise Pubid::Errors::InvalidInputError,
|
|
72
|
-
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
76
|
-
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
77
|
-
end
|
|
78
|
-
|
|
79
18
|
# Use the Parser class's preprocessing method
|
|
80
19
|
# Note: We call the class method directly to ensure preprocessing is applied
|
|
81
20
|
parsed = Parser.class_parse_with_preprocessing(identifier)
|
|
82
21
|
|
|
83
|
-
#
|
|
84
|
-
|
|
22
|
+
# Use Scheme and Builder for clean architecture
|
|
23
|
+
# ONE CLASS PER SERIES TYPE (like ISO)
|
|
24
|
+
builder = Builder.new(Scheme)
|
|
85
25
|
builder.build(parsed)
|
|
86
26
|
end
|
|
87
27
|
|
|
@@ -90,48 +30,6 @@ module Pubid
|
|
|
90
30
|
def self.configuration
|
|
91
31
|
@configuration ||= Configuration.new
|
|
92
32
|
end
|
|
93
|
-
|
|
94
|
-
# Per-flavor format registry: inherits global formats, overrides :human
|
|
95
|
-
Identifier.format_registry = FormatRegistry.new(parent: ::Pubid::Identifier.format_registry)
|
|
96
|
-
Identifier.format_registry.register(:human, renderer: Nist::Renderer)
|
|
97
|
-
|
|
98
|
-
# All identifier classes for external consumption (export, website).
|
|
99
|
-
# Identifier is the fallback for unmapped series and is excluded
|
|
100
|
-
# from external type listings.
|
|
101
|
-
# @return [Array<Class>] identifier classes
|
|
102
|
-
def self.identifier_types
|
|
103
|
-
IDENTIFIER_TYPES.reject { |klass| klass == Identifier }
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Aggregate TYPED_STAGES from all identifier classes.
|
|
107
|
-
# Identifier is excluded because it has no typed stages and acts
|
|
108
|
-
# as the fallback for unmapped series.
|
|
109
|
-
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
110
|
-
def self.all_typed_stages
|
|
111
|
-
@all_typed_stages ||= identifier_types
|
|
112
|
-
.reject { |klass| klass == Identifier }
|
|
113
|
-
.flat_map(&:typed_stages)
|
|
114
|
-
.freeze
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Lookup: type code -> identifier class.
|
|
118
|
-
# Identifier is excluded so it never gets selected by type code.
|
|
119
|
-
# @param code [String, Symbol] the type code to find
|
|
120
|
-
# @return [Class, nil] the matching identifier class, or nil
|
|
121
|
-
def self.locate_type(code)
|
|
122
|
-
type_str = code.to_s
|
|
123
|
-
identifier_types
|
|
124
|
-
.reject { |klass| klass == Identifier }
|
|
125
|
-
.find { |klass| klass.typed_stages.any? { |ts| ts.type_code.to_s == type_str } }
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
# Lookup: abbreviation -> typed stage
|
|
129
|
-
# @param abbr [String, Symbol] the abbreviation to find
|
|
130
|
-
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
131
|
-
def self.locate_stage(abbr)
|
|
132
|
-
abbr_str = abbr.to_s.upcase
|
|
133
|
-
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
134
|
-
end
|
|
135
33
|
end
|
|
136
34
|
end
|
|
137
35
|
|
data/lib/pubid/oiml/builder.rb
CHANGED
|
@@ -6,7 +6,6 @@ module Pubid
|
|
|
6
6
|
# Type to identifier class mapping (MECE)
|
|
7
7
|
TYPE_CLASS_MAP = {
|
|
8
8
|
"B" => "BasicPublication",
|
|
9
|
-
"Bulletin" => "Bulletin",
|
|
10
9
|
"D" => "Document",
|
|
11
10
|
"E" => "ExpertReport",
|
|
12
11
|
"G" => "Guide",
|
|
@@ -21,8 +20,8 @@ module Pubid
|
|
|
21
20
|
return build_short_amendment(parsed_hash)
|
|
22
21
|
end
|
|
23
22
|
|
|
24
|
-
# Check for supplements first (have
|
|
25
|
-
if parsed_hash[:
|
|
23
|
+
# Check for supplements first (have base_identifier)
|
|
24
|
+
if parsed_hash[:base_identifier]
|
|
26
25
|
return build_supplement(parsed_hash)
|
|
27
26
|
end
|
|
28
27
|
|
|
@@ -53,11 +52,11 @@ module Pubid
|
|
|
53
52
|
end
|
|
54
53
|
|
|
55
54
|
# Build the base document
|
|
56
|
-
|
|
55
|
+
base_identifier = build_base_document(base_hash)
|
|
57
56
|
|
|
58
57
|
# Create amendment
|
|
59
58
|
amendment = Identifiers::Amendment.new
|
|
60
|
-
amendment.
|
|
59
|
+
amendment.base_identifier = base_identifier
|
|
61
60
|
|
|
62
61
|
# Extract year from edition_format if present, otherwise from year directly
|
|
63
62
|
year_value = if parsed_hash[:edition_format].is_a?(Hash)
|
|
@@ -78,27 +77,18 @@ module Pubid
|
|
|
78
77
|
end
|
|
79
78
|
|
|
80
79
|
def build_supplement(parsed_hash)
|
|
81
|
-
|
|
82
|
-
plus_marker = parsed_hash[:plus_marker].to_s if parsed_hash[:plus_marker]
|
|
83
|
-
|
|
84
|
-
# Determine supplement type. The trailing word ("Amendment"/"Errata")
|
|
85
|
-
# selects the class; the concrete class then carries the word via
|
|
86
|
-
# #supplement_type, so only the `trailing` flag needs storing.
|
|
80
|
+
# Determine supplement type
|
|
87
81
|
supplement_class = if parsed_hash[:annex_letter] || parsed_hash[:annex_marker]
|
|
88
82
|
Identifiers::Annex
|
|
89
|
-
elsif marker == "Errata" || plus_marker == "Errata"
|
|
90
|
-
Identifiers::Errata
|
|
91
83
|
else
|
|
92
84
|
Identifiers::Amendment
|
|
93
85
|
end
|
|
94
86
|
|
|
95
87
|
supplement = supplement_class.new
|
|
96
|
-
supplement.trailing = true if marker
|
|
97
|
-
supplement.joined = true if plus_marker
|
|
98
88
|
|
|
99
89
|
# Recursively parse base identifier
|
|
100
|
-
if parsed_hash[:
|
|
101
|
-
supplement.
|
|
90
|
+
if parsed_hash[:base_identifier]
|
|
91
|
+
supplement.base_identifier = build(parsed_hash[:base_identifier])
|
|
102
92
|
end
|
|
103
93
|
|
|
104
94
|
# Extract year from edition_format if present, otherwise from year directly
|
|
@@ -113,13 +103,6 @@ module Pubid
|
|
|
113
103
|
supplement.language = extract_language(parsed_hash[:language]) if parsed_hash[:language]
|
|
114
104
|
supplement.letter = parsed_hash[:annex_letter].to_s if parsed_hash[:annex_letter]
|
|
115
105
|
|
|
116
|
-
# Annex with no year of its own but a dated base ("R 60:2017 Annexes"):
|
|
117
|
-
# the year belongs to the base and must render glued to it.
|
|
118
|
-
if supplement.is_a?(Identifiers::Annex) && !year_value &&
|
|
119
|
-
supplement.base&.date
|
|
120
|
-
supplement.year_on_base = true
|
|
121
|
-
end
|
|
122
|
-
|
|
123
106
|
# Track if supplement itself was parsed with Edition format
|
|
124
107
|
if parsed_hash[:edition_format]
|
|
125
108
|
supplement.parsed_format = "long"
|
|
@@ -136,8 +119,8 @@ module Pubid
|
|
|
136
119
|
|
|
137
120
|
identifier = identifier_class.new
|
|
138
121
|
|
|
139
|
-
# Handle code (number-part-subpart
|
|
140
|
-
if parsed_hash[:number] || parsed_hash[:part] || parsed_hash[:subpart]
|
|
122
|
+
# Handle code (number-part-subpart) specially
|
|
123
|
+
if parsed_hash[:number] || parsed_hash[:part] || parsed_hash[:subpart]
|
|
141
124
|
code_attrs = {}
|
|
142
125
|
if parsed_hash[:number]
|
|
143
126
|
code_attrs[:number] =
|
|
@@ -148,15 +131,7 @@ module Pubid
|
|
|
148
131
|
code_attrs[:subpart] =
|
|
149
132
|
parsed_hash[:subpart].to_s
|
|
150
133
|
end
|
|
151
|
-
|
|
152
|
-
code_attrs[:suffix] = parsed_hash[:code_suffix].to_s
|
|
153
|
-
code_attrs[:space_suffix] = true if parsed_hash.key?(:space_suffix)
|
|
154
|
-
end
|
|
155
|
-
# The code fields are flat index columns on the leaf (see
|
|
156
|
-
# Identifiers::CodeNumber) — `number` is what relaton-index keys on —
|
|
157
|
-
# so they are assigned individually rather than as a Code object.
|
|
158
|
-
# Bulletin has no code columns and never reaches this branch.
|
|
159
|
-
code_attrs.each { |name, value| identifier.public_send(:"#{name}=", value) }
|
|
134
|
+
identifier.code = Components::Code.new(**code_attrs)
|
|
160
135
|
end
|
|
161
136
|
|
|
162
137
|
# Handle other attributes
|
|
@@ -180,26 +155,12 @@ module Pubid
|
|
|
180
155
|
identifier.date = Pubid::Components::Date.new(year: year_value.to_s)
|
|
181
156
|
end
|
|
182
157
|
|
|
183
|
-
# Bulletin-specific locator fields. The structured form captures
|
|
184
|
-
# issue/sequence directly; the citation form captures volume/issue/
|
|
185
|
-
# article_id, which we decode to the same (year, issue, sequence)
|
|
186
|
-
# tuple. Year comes from either the date rule (structured) or the
|
|
187
|
-
# article_id (citation).
|
|
188
|
-
if identifier.is_a?(Identifiers::Bulletin)
|
|
189
|
-
apply_bulletin_locator(identifier, parsed_hash)
|
|
190
|
-
end
|
|
191
|
-
|
|
192
158
|
# Determine parsed format for round-trip fidelity
|
|
193
159
|
# If edition_format was captured, it means "Edition" text was present
|
|
194
160
|
identifier.parsed_format = if parsed_hash[:edition_format]
|
|
195
161
|
"long"
|
|
196
162
|
elsif parsed_hash[:space_before_lang]
|
|
197
163
|
"short_with_space"
|
|
198
|
-
elsif parsed_hash[:article_id]
|
|
199
|
-
# Bulletin citation form — preserve on
|
|
200
|
-
# the identifier so default to_s gives
|
|
201
|
-
# back the citation string verbatim.
|
|
202
|
-
"citation"
|
|
203
164
|
else
|
|
204
165
|
"short"
|
|
205
166
|
end
|
|
@@ -214,48 +175,6 @@ module Pubid
|
|
|
214
175
|
identifier
|
|
215
176
|
end
|
|
216
177
|
|
|
217
|
-
# Populate issue/sequence on a Bulletin from either parse shape.
|
|
218
|
-
# Structured: :issue and :sequence captured directly as zero-padded
|
|
219
|
-
# strings. Citation: :volume_roman, :issue_arabic, :article_id —
|
|
220
|
-
# decode the 8-digit article_id to recover year+issue+sequence.
|
|
221
|
-
#
|
|
222
|
-
# For the citation form, the parsed roman volume is cross-checked
|
|
223
|
-
# against the year decoded from the article_id; a mismatch warns but
|
|
224
|
-
# does not raise (the article_id is the source of truth — the roman
|
|
225
|
-
# volume is redundant display).
|
|
226
|
-
def apply_bulletin_locator(identifier, parsed_hash)
|
|
227
|
-
if parsed_hash[:article_id]
|
|
228
|
-
article_id = parsed_hash[:article_id].to_s
|
|
229
|
-
identifier.date ||= Pubid::Components::Date.new
|
|
230
|
-
identifier.date.year = article_id[0, 4]
|
|
231
|
-
identifier.issue = article_id[4, 2]
|
|
232
|
-
identifier.sequence = article_id[6, 2]
|
|
233
|
-
warn_on_volume_mismatch(identifier, parsed_hash[:volume_roman])
|
|
234
|
-
return
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
identifier.issue = parsed_hash[:issue].to_s if parsed_hash[:issue]
|
|
238
|
-
identifier.sequence = parsed_hash[:sequence].to_s if parsed_hash[:sequence]
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
# Citation form carries the volume in two places: spelled out as a
|
|
242
|
-
# roman numeral ("LXVII") and encoded in the 8-digit article_id
|
|
243
|
-
# (year+issue+sequence, where year - 1959 = volume). They should
|
|
244
|
-
# agree; if they don't, the input was malformed. Warn loudly so the
|
|
245
|
-
# user sees the discrepancy, but continue using the article_id
|
|
246
|
-
# (deterministic) rather than the roman (possibly mistyped).
|
|
247
|
-
def warn_on_volume_mismatch(identifier, parsed_volume_roman)
|
|
248
|
-
return unless parsed_volume_roman && identifier.date&.year
|
|
249
|
-
|
|
250
|
-
declared = parsed_volume_roman.to_s
|
|
251
|
-
computed = Identifiers::Bulletin.to_roman(identifier.date.year.to_i -
|
|
252
|
-
Identifiers::Bulletin::BASE_YEAR_OFFSET)
|
|
253
|
-
return if declared == computed
|
|
254
|
-
|
|
255
|
-
warn "OIML Bulletin citation volume mismatch: parsed '#{declared}' " \
|
|
256
|
-
"but article_id year #{identifier.date.year} implies '#{computed}'"
|
|
257
|
-
end
|
|
258
|
-
|
|
259
178
|
def extract_language(lang_data)
|
|
260
179
|
# Handle both direct string and nested hash from parser
|
|
261
180
|
case lang_data
|