pubid 2.0.0.pre.alpha.1 → 2.0.0.pre.alpha.3
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 +5 -1
- data/data/nist/update_codes.yaml +27 -0
- data/lib/pubid/amca/builder.rb +2 -2
- data/lib/pubid/amca/identifier.rb +7 -0
- data/lib/pubid/amca/identifiers/base.rb +0 -26
- data/lib/pubid/amca/identifiers/interpretation.rb +0 -17
- data/lib/pubid/amca/identifiers/publication.rb +0 -13
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +0 -23
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +42 -1
- data/lib/pubid/ansi/builder.rb +5 -3
- data/lib/pubid/ansi/identifier.rb +1 -1
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +2 -1
- data/lib/pubid/ansi/identifiers/standard.rb +2 -3
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +2 -31
- data/lib/pubid/ansi/urn_generator.rb +3 -38
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +38 -3
- data/lib/pubid/api/builder.rb +29 -74
- data/lib/pubid/api/identifier.rb +0 -4
- data/lib/pubid/api/identifiers/base.rb +0 -2
- data/lib/pubid/api/identifiers/bulletin.rb +0 -2
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +0 -2
- data/lib/pubid/api/identifiers/mpms.rb +1 -17
- data/lib/pubid/api/identifiers/publication.rb +0 -2
- data/lib/pubid/api/identifiers/recommended_practice.rb +0 -2
- data/lib/pubid/api/identifiers/specification.rb +0 -2
- data/lib/pubid/api/identifiers/standard.rb +0 -2
- data/lib/pubid/api/identifiers/technical_report.rb +0 -2
- data/lib/pubid/api/identifiers/typeless_standard.rb +1 -14
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/renderer.rb +89 -0
- data/lib/pubid/api/single_identifier.rb +1 -13
- data/lib/pubid/api/urn_generator.rb +0 -18
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +51 -5
- data/lib/pubid/ashrae/builder.rb +3 -3
- data/lib/pubid/ashrae/identifier.rb +6 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +0 -10
- data/lib/pubid/ashrae/identifiers/addendum.rb +0 -19
- data/lib/pubid/ashrae/identifiers/base.rb +3 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +0 -15
- data/lib/pubid/ashrae/identifiers/errata.rb +0 -10
- data/lib/pubid/ashrae/identifiers/interpretation.rb +0 -10
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +0 -13
- data/lib/pubid/ashrae/urn_generator.rb +0 -8
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +42 -1
- data/lib/pubid/asme/components/code.rb +10 -2
- data/lib/pubid/asme/identifiers/base.rb +0 -60
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +42 -1
- data/lib/pubid/astm/components/code.rb +9 -0
- data/lib/pubid/{jis → astm}/components.rb +1 -1
- data/lib/pubid/astm/identifiers/adjunct.rb +0 -8
- data/lib/pubid/astm/identifiers/data_series.rb +0 -14
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +9 -34
- data/lib/pubid/astm/identifiers/manual.rb +0 -27
- data/lib/pubid/astm/identifiers/monograph.rb +0 -14
- data/lib/pubid/astm/identifiers/research_report.rb +0 -7
- data/lib/pubid/astm/identifiers/standard.rb +0 -39
- data/lib/pubid/astm/identifiers/technical_report.rb +0 -13
- data/lib/pubid/astm/identifiers/work_in_progress.rb +0 -11
- data/lib/pubid/astm/identifiers.rb +18 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +0 -10
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +39 -27
- data/lib/pubid/bsi/builder.rb +21 -12
- data/lib/pubid/bsi/identifier.rb +8 -2
- data/lib/pubid/bsi/identifiers/addendum_document.rb +3 -33
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +11 -47
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +11 -38
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +3 -53
- data/lib/pubid/bsi/identifiers/amendment.rb +3 -19
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +2 -4
- data/lib/pubid/bsi/identifiers/british_standard.rb +2 -1
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/committee_document.rb +1 -14
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +3 -84
- data/lib/pubid/bsi/identifiers/corrigendum.rb +3 -7
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +1 -34
- data/lib/pubid/bsi/identifiers/disc.rb +1 -27
- data/lib/pubid/bsi/identifiers/draft_document.rb +3 -44
- data/lib/pubid/bsi/identifiers/electronic_book.rb +3 -36
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +3 -15
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +1 -45
- data/lib/pubid/bsi/identifiers/flex.rb +1 -33
- data/lib/pubid/bsi/identifiers/handbook.rb +2 -13
- data/lib/pubid/bsi/identifiers/index.rb +1 -30
- data/lib/pubid/bsi/identifiers/method.rb +1 -39
- data/lib/pubid/bsi/identifiers/national_annex.rb +5 -27
- data/lib/pubid/bsi/identifiers/practice_guide.rb +2 -4
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +3 -52
- data/lib/pubid/bsi/identifiers/published_document.rb +3 -52
- data/lib/pubid/bsi/identifiers/section.rb +1 -28
- data/lib/pubid/bsi/identifiers/set.rb +3 -17
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +1 -7
- data/lib/pubid/bsi/identifiers/supplement_document.rb +3 -21
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +1 -44
- data/lib/pubid/bsi/identifiers/technical_specification.rb +3 -45
- data/lib/pubid/bsi/identifiers/test_method.rb +1 -30
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +3 -14
- data/lib/pubid/bsi/identifiers.rb +0 -1
- data/lib/pubid/bsi/renderer.rb +1050 -0
- data/lib/pubid/bsi/single_identifier.rb +6 -70
- data/lib/pubid/bsi/urn_generator.rb +2 -3
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +224 -1
- data/lib/pubid/builder/base.rb +57 -10
- data/lib/pubid/bundled_identifier.rb +0 -1
- data/lib/pubid/ccsds/builder.rb +4 -3
- data/lib/pubid/ccsds/identifier.rb +66 -1
- data/lib/pubid/ccsds/identifiers/base.rb +11 -50
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +7 -6
- data/lib/pubid/ccsds/parser.rb +4 -2
- data/lib/pubid/ccsds/single_identifier.rb +4 -1
- data/lib/pubid/ccsds/supplement_identifier.rb +15 -11
- data/lib/pubid/ccsds/urn_generator.rb +3 -3
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +39 -1
- data/lib/pubid/cen_cenelec/builder.rb +12 -14
- data/lib/pubid/cen_cenelec/identifier.rb +8 -2
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +13 -4
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +2 -8
- data/lib/pubid/cen_cenelec/identifiers/base.rb +5 -41
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +2 -25
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +2 -13
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +4 -7
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +2 -2
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +2 -1
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +11 -89
- data/lib/pubid/cen_cenelec/urn_generator.rb +6 -6
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +168 -1
- data/lib/pubid/cie/components/code.rb +8 -0
- data/lib/pubid/cie/identifier.rb +6 -4
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +43 -1
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +22 -8
- data/lib/pubid/components/date.rb +23 -16
- data/lib/pubid/components/edition.rb +9 -6
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +6 -4
- data/lib/pubid/components/locality.rb +10 -1
- data/lib/pubid/components/publisher.rb +9 -6
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +5 -14
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +5 -15
- data/lib/pubid/components/typed_stage.rb +11 -8
- data/lib/pubid/components.rb +4 -0
- data/lib/pubid/core/update_codes.rb +28 -7
- data/lib/pubid/csa/identifier.rb +0 -3
- data/lib/pubid/csa/identifiers/base.rb +2 -122
- data/lib/pubid/csa/identifiers/cec.rb +2 -101
- data/lib/pubid/csa/identifiers/series.rb +2 -102
- data/lib/pubid/csa/renderer.rb +292 -0
- data/lib/pubid/csa/urn_generator.rb +1 -1
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa.rb +42 -1
- data/lib/pubid/etsi/components/code.rb +9 -2
- data/lib/pubid/etsi/identifiers/base.rb +1 -4
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +2 -9
- data/lib/pubid/etsi/renderer.rb +42 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +42 -1
- data/lib/pubid/export/exporter.rb +4 -46
- data/lib/pubid/export/flavor_exporter.rb +111 -278
- data/lib/pubid/export.rb +0 -6
- data/lib/pubid/identifier.rb +10 -18
- data/lib/pubid/identifier_facade.rb +114 -0
- data/lib/pubid/identifier_metadata.rb +1 -1
- data/lib/pubid/idf/builder.rb +3 -3
- data/lib/pubid/idf/identifier.rb +3 -6
- data/lib/pubid/idf/identifiers/amendment.rb +2 -1
- data/lib/pubid/idf/identifiers/corrigendum.rb +2 -1
- data/lib/pubid/idf/identifiers/international_standard.rb +2 -1
- data/lib/pubid/idf/identifiers/reviewed_method.rb +2 -1
- data/lib/pubid/idf/parser.rb +3 -2
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/supplement_identifier.rb +2 -10
- data/lib/pubid/idf/urn_generator.rb +4 -39
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +51 -1
- data/lib/pubid/iec/builder.rb +48 -65
- data/lib/pubid/iec/components/code.rb +9 -32
- data/lib/pubid/iec/components/publisher.rb +1 -1
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +276 -3
- data/lib/pubid/iec/identifiers/amendment.rb +2 -3
- data/lib/pubid/iec/identifiers/base.rb +8 -28
- data/lib/pubid/iec/identifiers/component_specification.rb +3 -3
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +1 -2
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +27 -30
- data/lib/pubid/iec/identifiers/corrigendum.rb +2 -3
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +37 -26
- data/lib/pubid/iec/identifiers/guide.rb +0 -2
- data/lib/pubid/iec/identifiers/international_standard.rb +2 -3
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +2 -3
- data/lib/pubid/iec/identifiers/operational_document.rb +3 -3
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +21 -15
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +3 -3
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_report.rb +2 -3
- data/lib/pubid/iec/identifiers/technical_specification.rb +2 -3
- data/lib/pubid/iec/identifiers/technology_report.rb +1 -2
- data/lib/pubid/iec/identifiers/test_report_form.rb +5 -34
- data/lib/pubid/iec/identifiers/vap_identifier.rb +26 -23
- data/lib/pubid/iec/identifiers/white_paper.rb +3 -3
- data/lib/pubid/iec/identifiers/working_document.rb +4 -48
- data/lib/pubid/iec/identifiers.rb +30 -0
- data/lib/pubid/iec/parser.rb +20 -14
- data/lib/pubid/iec/renderer.rb +254 -0
- data/lib/pubid/iec/single_identifier.rb +6 -12
- data/lib/pubid/iec/supplement_identifier.rb +58 -54
- data/lib/pubid/iec/urn_generator.rb +57 -171
- data/lib/pubid/iec/urn_parser.rb +53 -252
- data/lib/pubid/iec.rb +40 -68
- data/lib/pubid/ieee/builder.rb +12 -12
- data/lib/pubid/ieee/components/code.rb +8 -0
- data/lib/pubid/ieee/components/draft.rb +14 -0
- data/lib/pubid/ieee/components/relationship.rb +5 -149
- data/lib/pubid/ieee/identifier.rb +6 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +1 -6
- data/lib/pubid/ieee/identifiers/base.rb +101 -458
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/corrigendum.rb +1 -9
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +1 -7
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +1 -1
- data/lib/pubid/ieee/identifiers/dual_published.rb +1 -1
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +1 -6
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +1 -7
- data/lib/pubid/ieee/identifiers/joint_development.rb +2 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +1 -15
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +1 -3
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +15 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +1 -4
- data/lib/pubid/ieee/identifiers/si_standard.rb +1 -35
- data/lib/pubid/ieee/identifiers/standard.rb +1 -1
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +307 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +62 -1
- data/lib/pubid/ieee_debug.rb +0 -1
- data/lib/pubid/iho/builder.rb +2 -2
- data/lib/pubid/iho/identifier.rb +8 -0
- data/lib/pubid/iho/identifiers/base.rb +49 -10
- data/lib/pubid/iho/identifiers/bibliographic.rb +0 -4
- data/lib/pubid/iho/identifiers/circular_letter.rb +0 -4
- data/lib/pubid/iho/identifiers/miscellaneous.rb +0 -4
- data/lib/pubid/iho/identifiers/publication.rb +0 -4
- data/lib/pubid/iho/identifiers/standard.rb +0 -4
- data/lib/pubid/iho/parser.rb +3 -3
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +3 -3
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +50 -1
- data/lib/pubid/iso/builder.rb +59 -53
- data/lib/pubid/iso/bundled_identifier.rb +51 -0
- data/lib/pubid/iso/components/code.rb +7 -19
- data/lib/pubid/iso/components/publisher.rb +10 -8
- data/lib/pubid/iso/components.rb +2 -4
- data/lib/pubid/iso/identifier.rb +233 -6
- data/lib/pubid/iso/identifiers/addendum.rb +9 -6
- data/lib/pubid/iso/identifiers/amendment.rb +8 -4
- data/lib/pubid/iso/identifiers/corrigendum.rb +4 -4
- data/lib/pubid/iso/identifiers/data.rb +0 -1
- data/lib/pubid/iso/identifiers/directives.rb +8 -2
- data/lib/pubid/iso/identifiers/directives_supplement.rb +43 -14
- data/lib/pubid/iso/identifiers/extract.rb +2 -2
- data/lib/pubid/iso/identifiers/guide.rb +0 -1
- 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 +10 -4
- 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 +11 -3
- data/lib/pubid/iso/identifiers/tc_document.rb +44 -15
- 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 +0 -1
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +26 -6
- data/lib/pubid/iso/single_identifier.rb +6 -3
- data/lib/pubid/iso/supplement_identifier.rb +15 -2
- data/lib/pubid/iso/urn_generator.rb +74 -176
- data/lib/pubid/iso/urn_parser.rb +28 -9
- data/lib/pubid/iso.rb +173 -2
- data/lib/pubid/itu/builder.rb +0 -12
- data/lib/pubid/itu/components/code.rb +8 -0
- data/lib/pubid/itu/components.rb +11 -0
- data/lib/pubid/itu/identifier.rb +6 -39
- data/lib/pubid/itu/identifiers/amendment.rb +0 -2
- data/lib/pubid/itu/identifiers/annex.rb +0 -2
- data/lib/pubid/itu/identifiers/base.rb +0 -6
- data/lib/pubid/itu/identifiers/combined_identifier.rb +0 -2
- data/lib/pubid/itu/identifiers/corrigendum.rb +0 -2
- data/lib/pubid/itu/identifiers/recommendation.rb +0 -2
- data/lib/pubid/itu/identifiers/special_publication.rb +0 -2
- data/lib/pubid/itu/identifiers/supplement.rb +0 -2
- data/lib/pubid/itu/urn_parser.rb +23 -0
- data/lib/pubid/itu.rb +42 -1
- data/lib/pubid/jcgm/builder.rb +16 -8
- data/lib/pubid/jcgm/identifiers/amendment.rb +2 -7
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +2 -10
- data/lib/pubid/jcgm/renderer.rb +68 -0
- data/lib/pubid/jcgm/single_identifier.rb +1 -5
- data/lib/pubid/jcgm/urn_generator.rb +4 -6
- data/lib/pubid/jcgm/urn_parser.rb +23 -0
- data/lib/pubid/jcgm.rb +43 -2
- data/lib/pubid/jis/builder.rb +44 -52
- data/lib/pubid/jis/identifier.rb +132 -3
- data/lib/pubid/jis/identifiers/amendment.rb +1 -1
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_report.rb +2 -1
- data/lib/pubid/jis/identifiers/technical_specification.rb +2 -1
- data/lib/pubid/jis/identifiers.rb +1 -1
- data/lib/pubid/jis/parser.rb +31 -5
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +6 -12
- data/lib/pubid/jis/supplement_identifier.rb +17 -14
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +42 -2
- data/lib/pubid/nist/builder.rb +122 -1761
- data/lib/pubid/nist/caster.rb +1272 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +291 -0
- data/lib/pubid/nist/components/code.rb +9 -20
- data/lib/pubid/nist/components/edition.rb +16 -0
- data/lib/pubid/nist/components/supplement.rb +88 -21
- data/lib/pubid/nist/components.rb +0 -1
- data/lib/pubid/nist/identifier.rb +25 -0
- data/lib/pubid/nist/identifiers/base.rb +206 -64
- data/lib/pubid/nist/identifiers/circular.rb +7 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +3 -2
- data/lib/pubid/nist/identifiers/commercial_standard.rb +2 -1
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +6 -4
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +10 -3
- data/lib/pubid/nist/identifiers/crpl_report.rb +8 -11
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +17 -16
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +2 -1
- data/lib/pubid/nist/identifiers/handbook.rb +2 -1
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -1
- data/lib/pubid/nist/identifiers/letter_circular.rb +2 -1
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +5 -4
- data/lib/pubid/nist/identifiers/monograph.rb +7 -3
- data/lib/pubid/nist/identifiers/report.rb +4 -3
- data/lib/pubid/nist/identifiers/special_publication.rb +2 -1
- data/lib/pubid/nist/identifiers/technical_note.rb +3 -2
- data/lib/pubid/nist/identifiers.rb +1 -0
- data/lib/pubid/nist/parser.rb +67 -424
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +416 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +148 -0
- data/lib/pubid/nist/series/base.rb +58 -0
- data/lib/pubid/nist/series/crpl.rb +13 -0
- data/lib/pubid/nist/series/fips.rb +14 -0
- data/lib/pubid/nist/series/ir.rb +60 -0
- data/lib/pubid/nist/series/letter_preserving.rb +15 -0
- data/lib/pubid/nist/series/mono.rb +19 -0
- data/lib/pubid/nist/series/ncstar.rb +20 -0
- data/lib/pubid/nist/series.rb +49 -0
- data/lib/pubid/nist/supplement_identifier.rb +11 -25
- data/lib/pubid/nist/urn_generator.rb +14 -8
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +83 -4
- data/lib/pubid/oiml/components/code.rb +10 -0
- data/lib/pubid/oiml/identifiers/annex.rb +3 -45
- data/lib/pubid/oiml/identifiers/base.rb +2 -17
- data/lib/pubid/oiml/renderer.rb +161 -0
- data/lib/pubid/oiml/single_identifier.rb +6 -45
- data/lib/pubid/oiml/supplement_identifier.rb +4 -19
- data/lib/pubid/oiml/urn_generator.rb +0 -8
- data/lib/pubid/oiml/urn_parser.rb +22 -0
- data/lib/pubid/oiml.rb +42 -1
- data/lib/pubid/plateau/identifier.rb +23 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +1 -3
- data/lib/pubid/plateau/identifiers/technical_report.rb +1 -1
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +1 -1
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +44 -1
- data/lib/pubid/renderers/base.rb +34 -0
- data/lib/pubid/renderers/directives_renderer.rb +27 -14
- data/lib/pubid/renderers/guide_renderer.rb +7 -1
- data/lib/pubid/renderers/human_readable.rb +31 -8
- data/lib/pubid/renderers/iwa_renderer.rb +5 -1
- data/lib/pubid/renderers/supplement_renderer.rb +4 -1
- data/lib/pubid/rendering/context.rb +33 -21
- data/lib/pubid/rendering.rb +0 -3
- data/lib/pubid/sae/components/date.rb +8 -0
- data/lib/pubid/sae/components/type.rb +5 -1
- data/lib/pubid/sae/identifiers/base.rb +2 -16
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +2 -10
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +42 -1
- data/lib/pubid/urn_generator/base.rb +12 -12
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +9 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid.rb +29 -7
- data/lib/tasks/website-data.json +1940 -1882
- metadata +77 -43
- data/lib/pubid/amca/scheme.rb +0 -16
- data/lib/pubid/ansi/scheme.rb +0 -15
- data/lib/pubid/api/scheme.rb +0 -66
- data/lib/pubid/ashrae/scheme.rb +0 -53
- data/lib/pubid/asme/scheme.rb +0 -37
- data/lib/pubid/astm/scheme.rb +0 -55
- data/lib/pubid/bsi/identifiers/base.rb +0 -11
- data/lib/pubid/bsi/scheme.rb +0 -243
- data/lib/pubid/ccsds/scheme.rb +0 -57
- data/lib/pubid/cen_cenelec/scheme.rb +0 -164
- data/lib/pubid/cie/scheme.rb +0 -64
- data/lib/pubid/csa/scheme.rb +0 -44
- data/lib/pubid/etsi/scheme.rb +0 -42
- data/lib/pubid/export/data_class_exporter.rb +0 -59
- data/lib/pubid/export/ieee_exporter.rb +0 -78
- data/lib/pubid/export/itu_exporter.rb +0 -66
- data/lib/pubid/export/nist_exporter.rb +0 -64
- data/lib/pubid/export/registry_exporter.rb +0 -90
- data/lib/pubid/export/scheme_exporter.rb +0 -70
- data/lib/pubid/identifier_registry.rb +0 -198
- data/lib/pubid/idf/scheme.rb +0 -61
- data/lib/pubid/iec/scheme.rb +0 -71
- data/lib/pubid/ieee/scheme.rb +0 -90
- data/lib/pubid/iho/scheme.rb +0 -29
- data/lib/pubid/iso/identifiers/base.rb +0 -115
- data/lib/pubid/iso/scheme.rb +0 -187
- data/lib/pubid/itu/scheme.rb +0 -174
- data/lib/pubid/jcgm/scheme.rb +0 -60
- data/lib/pubid/jis/components/code.rb +0 -59
- data/lib/pubid/jis/identifiers/base.rb +0 -72
- data/lib/pubid/jis/scheme.rb +0 -49
- data/lib/pubid/nist/components/publisher.rb +0 -24
- data/lib/pubid/nist/scheme.rb +0 -199
- data/lib/pubid/oiml/scheme.rb +0 -46
- data/lib/pubid/plateau/scheme.rb +0 -45
- data/lib/pubid/rendering/base.rb +0 -73
- data/lib/pubid/rendering/common.rb +0 -211
- data/lib/pubid/rendering/format.rb +0 -25
- data/lib/pubid/sae/scheme.rb +0 -47
- data/lib/pubid/scheme.rb +0 -207
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ashrae
|
|
5
|
+
# Human-readable renderer for ASHRAE identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "ASHRAE Standard 15-2024"
|
|
9
|
+
# "ASHRAE Guideline 0-2019"
|
|
10
|
+
# "ASHRAE Addendum a to Standard 15-2001"
|
|
11
|
+
# "ASHRAE Standard 52.2-1999: Addenda Supplement Package"
|
|
12
|
+
# "ASHRAE Addenda c and d to Standard 15-1994"
|
|
13
|
+
# "ASHRAE Guideline 0-2005 Errata (September 28, 2011)"
|
|
14
|
+
# "Interpretations for Standard 15.2-2022"
|
|
15
|
+
#
|
|
16
|
+
# The renderer is registered as the +:human+ format in the ASHRAE format
|
|
17
|
+
# registry and invoked via +render(format: :human)+.
|
|
18
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
19
|
+
def render(context: nil, **_opts)
|
|
20
|
+
id = @id
|
|
21
|
+
|
|
22
|
+
case id
|
|
23
|
+
when Identifiers::Addendum
|
|
24
|
+
render_addendum(id)
|
|
25
|
+
when Identifiers::AddendaPackage
|
|
26
|
+
render_addenda_package(id)
|
|
27
|
+
when Identifiers::CombinedAddenda
|
|
28
|
+
render_combined_addenda(id)
|
|
29
|
+
when Identifiers::Errata
|
|
30
|
+
render_errata(id)
|
|
31
|
+
when Identifiers::Interpretation
|
|
32
|
+
render_interpretation(id)
|
|
33
|
+
when SingleIdentifier
|
|
34
|
+
render_single(id)
|
|
35
|
+
else
|
|
36
|
+
render_single(id)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
# SingleIdentifier (Standard, Guideline): "ASHRAE Standard 15-2024"
|
|
43
|
+
def render_single(id)
|
|
44
|
+
parts = []
|
|
45
|
+
parts << id.publisher if id.publisher
|
|
46
|
+
parts << id.type.to_s if id.type
|
|
47
|
+
result = parts.join(" ")
|
|
48
|
+
result += " " if result.length.positive?
|
|
49
|
+
result += id.code.to_s
|
|
50
|
+
result += "-#{id.year}" if id.year
|
|
51
|
+
result += " (#{id.amendment})" if id.amendment
|
|
52
|
+
result += id.suffix if id.suffix
|
|
53
|
+
result += " (RA#{id.reaffirmed})" if id.reaffirmed
|
|
54
|
+
result
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Addendum: "ASHRAE Addendum a to Standard 15-2001"
|
|
58
|
+
def render_addendum(id)
|
|
59
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
60
|
+
|
|
61
|
+
base_type = id.base_identifier.type || "Standard"
|
|
62
|
+
|
|
63
|
+
if id.copublisher
|
|
64
|
+
"#{id.copublisher} Addendum #{id.addendum_code} to #{id.base_identifier}"
|
|
65
|
+
else
|
|
66
|
+
result = "ASHRAE Addendum #{id.addendum_code} to #{base_type} #{id.base_identifier.code}"
|
|
67
|
+
result += "-#{id.base_identifier.year}" if id.base_identifier.year
|
|
68
|
+
result
|
|
69
|
+
end.tap { |r| r << " (#{id.addendum_date})" if id.addendum_date }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# AddendaPackage: "ASHRAE Standard 52.2-1999: Addenda Supplement Package"
|
|
73
|
+
def render_addenda_package(id)
|
|
74
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
75
|
+
|
|
76
|
+
result = "ASHRAE #{id.base_identifier.type || 'Standard'} #{id.base_identifier.code}"
|
|
77
|
+
result += "-#{id.base_identifier.year}" if id.base_identifier.year
|
|
78
|
+
result += ": Addenda #{id.package_description}" if id.package_description
|
|
79
|
+
result
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# CombinedAddenda: "ASHRAE Addenda c and d to Standard 15-1994"
|
|
83
|
+
def render_combined_addenda(id)
|
|
84
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
85
|
+
|
|
86
|
+
base_type = id.base_identifier.type || "Standard"
|
|
87
|
+
if id.addendum_codes
|
|
88
|
+
result = "ASHRAE Addenda #{id.addendum_codes} to #{base_type} #{id.base_identifier.code}"
|
|
89
|
+
else
|
|
90
|
+
result = "ASHRAE Addenda to #{base_type} #{id.base_identifier.code}"
|
|
91
|
+
end
|
|
92
|
+
result += "-#{id.base_identifier.year}" if id.base_identifier.year
|
|
93
|
+
result
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Errata: "ASHRAE Guideline 0-2005 Errata (September 28, 2011)"
|
|
97
|
+
def render_errata(id)
|
|
98
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
99
|
+
|
|
100
|
+
result = id.base_identifier.to_s
|
|
101
|
+
result += " Errata"
|
|
102
|
+
result += " (#{id.errata_date})" if id.errata_date
|
|
103
|
+
result
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Interpretation: "Interpretations for Standard 15.2-2022"
|
|
107
|
+
def render_interpretation(id)
|
|
108
|
+
return id.base_identifier.to_s unless id.base_identifier
|
|
109
|
+
|
|
110
|
+
base_type = id.base_identifier.type || "Standard"
|
|
111
|
+
result = "Interpretations for #{base_type} #{id.base_identifier.code}"
|
|
112
|
+
result += "-#{id.base_identifier.year}" if id.base_identifier.year
|
|
113
|
+
result
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -5,19 +5,6 @@ module Pubid
|
|
|
5
5
|
# Base class for single (non-supplement) ASHRAE identifiers
|
|
6
6
|
# Includes: Guideline, Standard
|
|
7
7
|
class SingleIdentifier < Identifiers::Base
|
|
8
|
-
def to_s
|
|
9
|
-
parts = []
|
|
10
|
-
parts << publisher if publisher
|
|
11
|
-
parts << type.to_s if type
|
|
12
|
-
result = parts.join(" ")
|
|
13
|
-
result += " " if result.length.positive?
|
|
14
|
-
result += code.to_s
|
|
15
|
-
result += "-#{year}" if year
|
|
16
|
-
result += " (#{amendment})" if amendment
|
|
17
|
-
result += suffix if suffix
|
|
18
|
-
result += " (RA#{reaffirmed})" if reaffirmed
|
|
19
|
-
result
|
|
20
|
-
end
|
|
21
8
|
end
|
|
22
9
|
end
|
|
23
10
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ashrae
|
|
5
|
+
# Parses ASHRAE URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:ashrae:{number}:{year}:{type}[:{suffix}][:amd.{N}][:reaff.{Y}]
|
|
9
|
+
#
|
|
10
|
+
# The type token follows the year; the human-readable form prefixes the
|
|
11
|
+
# type ("ASHRAE Standard 90.1-2019"). The year separator is `-`.
|
|
12
|
+
#
|
|
13
|
+
# Examples:
|
|
14
|
+
# - urn:ashrae:90.1:2019:standard → ASHRAE Standard 90.1-2019
|
|
15
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
16
|
+
def parse_urn(urn)
|
|
17
|
+
body = strip_namespace(urn)
|
|
18
|
+
parts = split_parts(body)
|
|
19
|
+
|
|
20
|
+
number, year = parts
|
|
21
|
+
text = "ASHRAE Standard #{number}"
|
|
22
|
+
text += "-#{year}" if year
|
|
23
|
+
flavor_parse(text)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/pubid/ashrae.rb
CHANGED
|
@@ -6,16 +6,57 @@ module Pubid
|
|
|
6
6
|
autoload :Identifier, "#{__dir__}/ashrae/identifier"
|
|
7
7
|
autoload :Identifiers, "#{__dir__}/ashrae/identifiers"
|
|
8
8
|
autoload :Parser, "#{__dir__}/ashrae/parser"
|
|
9
|
-
autoload :
|
|
9
|
+
autoload :Renderer, "#{__dir__}/ashrae/renderer"
|
|
10
10
|
autoload :SingleIdentifier, "#{__dir__}/ashrae/single_identifier"
|
|
11
11
|
autoload :SupplementIdentifier, "#{__dir__}/ashrae/supplement_identifier"
|
|
12
12
|
autoload :UrnGenerator, "#{__dir__}/ashrae/urn_generator"
|
|
13
|
+
autoload :UrnParser, "#{__dir__}/ashrae/urn_parser"
|
|
13
14
|
|
|
14
15
|
def self.parse(identifier)
|
|
15
16
|
Identifier.parse(identifier)
|
|
16
17
|
end
|
|
18
|
+
|
|
19
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
20
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
21
|
+
def self.identifier_types
|
|
22
|
+
@identifier_types ||= Identifiers.constants
|
|
23
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
24
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
25
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Build typed stage index from identifier types
|
|
29
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
30
|
+
def self.all_typed_stages
|
|
31
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
32
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
33
|
+
klass.const_get(:TYPED_STAGES)
|
|
34
|
+
else
|
|
35
|
+
[]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Lookup: type code -> identifier class
|
|
41
|
+
# @param code [String, Symbol] the type key to find
|
|
42
|
+
# @return [Class, nil] the matching identifier class
|
|
43
|
+
def self.locate_type(code)
|
|
44
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Lookup: abbreviation -> typed stage
|
|
48
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
49
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
50
|
+
def self.locate_stage(abbr)
|
|
51
|
+
abbr_str = abbr.to_s.upcase
|
|
52
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
53
|
+
end
|
|
17
54
|
end
|
|
18
55
|
end
|
|
19
56
|
|
|
20
57
|
# Register Uashrae flavor with the registry
|
|
21
58
|
Pubid::Registry.register(:ashrae, Pubid::Ashrae)
|
|
59
|
+
|
|
60
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
61
|
+
Pubid::Ashrae::Identifiers::Base.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
62
|
+
Pubid::Ashrae::Identifiers::Base.format_registry.register(:human, renderer: Pubid::Ashrae::Renderer)
|
|
@@ -5,11 +5,19 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Asme
|
|
7
7
|
module Components
|
|
8
|
+
# Code component for ASME identifiers.
|
|
9
|
+
#
|
|
10
|
+
# Stays independent of Pubid::Components::Code because ASME uses
|
|
11
|
+
# +designator+ (a flavor-specific letter prefix) plus +number+.
|
|
8
12
|
class Code < Lutaml::Model::Serializable
|
|
9
|
-
attribute :designator, :string
|
|
10
|
-
attribute :number, :string
|
|
13
|
+
attribute :designator, :string
|
|
14
|
+
attribute :number, :string
|
|
11
15
|
|
|
12
16
|
def to_s
|
|
17
|
+
render
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def render(context: nil)
|
|
13
21
|
"#{designator}#{number}"
|
|
14
22
|
end
|
|
15
23
|
end
|
|
@@ -4,66 +4,6 @@ module Pubid
|
|
|
4
4
|
module Asme
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Base < SingleIdentifier
|
|
7
|
-
def to_s
|
|
8
|
-
# Handle joint published identifiers
|
|
9
|
-
parts = []
|
|
10
|
-
if first_publisher && first_code
|
|
11
|
-
# CSA B44.10/ASME A17.10 or API 579-2/ASME PTB-14 format
|
|
12
|
-
parts << first_publisher
|
|
13
|
-
parts << first_code
|
|
14
|
-
parts << "/#{second_publisher}" if second_publisher
|
|
15
|
-
parts << code.to_s if code && code.to_s != ""
|
|
16
|
-
|
|
17
|
-
elsif joint_publisher
|
|
18
|
-
# ISO/ASME or ASME/ANS format
|
|
19
|
-
parts << joint_publisher
|
|
20
|
-
parts << code.to_s if code && code.to_s != ""
|
|
21
|
-
|
|
22
|
-
else
|
|
23
|
-
# Standard ASME format
|
|
24
|
-
parts << publisher if publisher
|
|
25
|
-
parts << code.to_s if code
|
|
26
|
-
|
|
27
|
-
end
|
|
28
|
-
result = parts.join(" ")
|
|
29
|
-
|
|
30
|
-
# PTC suffix (space-separated)
|
|
31
|
-
if ptc_suffix
|
|
32
|
-
result += " #{ptc_suffix}"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# CSA dual-published (for ASME/CSA format)
|
|
36
|
-
if csa_number
|
|
37
|
-
result += "/CSA #{csa_number}"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Handbook keyword
|
|
41
|
-
if handbook
|
|
42
|
-
result += " Handbook"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Year
|
|
46
|
-
if draft_year
|
|
47
|
-
result += "-#{draft_year}"
|
|
48
|
-
elsif year
|
|
49
|
-
result += "-#{year}"
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Parenthetical revision (comes after year)
|
|
53
|
-
result += " #{parenthetical_revision}" if parenthetical_revision
|
|
54
|
-
|
|
55
|
-
# Language (can appear in rendered output)
|
|
56
|
-
result += " (#{language})" if language
|
|
57
|
-
|
|
58
|
-
# Reaffirmation
|
|
59
|
-
result += " (#{reaffirmation})" if reaffirmation
|
|
60
|
-
|
|
61
|
-
# Revision note
|
|
62
|
-
result += " #{revision_note}" if revision_note
|
|
63
|
-
|
|
64
|
-
# Normalize all em-dashes (–, —) and en-dashes to regular dash (-)
|
|
65
|
-
result.gsub(/[–—]/, "-")
|
|
66
|
-
end
|
|
67
7
|
end
|
|
68
8
|
end
|
|
69
9
|
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Asme
|
|
5
|
+
# Human-readable renderer for ASME identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "ASME B16.5-2020"
|
|
9
|
+
# "CSA B44.10/ASME A17.10"
|
|
10
|
+
# "ASME BPVC III.1.NB-2023"
|
|
11
|
+
# "ASME PTC 4-2013"
|
|
12
|
+
#
|
|
13
|
+
# The renderer is registered as the `:human` format in the ASME format
|
|
14
|
+
# registry and invoked via `render(format: :human)`.
|
|
15
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
16
|
+
def render(context: nil, **opts)
|
|
17
|
+
id = @id
|
|
18
|
+
parts = []
|
|
19
|
+
|
|
20
|
+
if id.first_publisher && id.first_code
|
|
21
|
+
# CSA B44.10/ASME A17.10 or API 579-2/ASME PTB-14 format
|
|
22
|
+
parts << id.first_publisher
|
|
23
|
+
parts << id.first_code
|
|
24
|
+
parts << "/#{id.second_publisher}" if id.second_publisher
|
|
25
|
+
parts << id.code.to_s if id.code && id.code.to_s != ""
|
|
26
|
+
elsif id.joint_publisher
|
|
27
|
+
# ISO/ASME or ASME/ANS format
|
|
28
|
+
parts << id.joint_publisher
|
|
29
|
+
parts << id.code.to_s if id.code && id.code.to_s != ""
|
|
30
|
+
else
|
|
31
|
+
# Standard ASME format
|
|
32
|
+
parts << id.publisher if id.publisher
|
|
33
|
+
parts << id.code.to_s if id.code
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
result = parts.join(" ")
|
|
37
|
+
|
|
38
|
+
if id.ptc_suffix
|
|
39
|
+
result += " #{id.ptc_suffix}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if id.csa_number
|
|
43
|
+
result += "/CSA #{id.csa_number}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if id.handbook
|
|
47
|
+
result += " Handbook"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if id.draft_year
|
|
51
|
+
result += "-#{id.draft_year}"
|
|
52
|
+
elsif id.year
|
|
53
|
+
result += "-#{id.year}"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
result += " #{id.parenthetical_revision}" if id.parenthetical_revision
|
|
57
|
+
result += " (#{id.language})" if id.language
|
|
58
|
+
result += " (#{id.reaffirmation})" if id.reaffirmation
|
|
59
|
+
result += " #{id.revision_note}" if id.revision_note
|
|
60
|
+
|
|
61
|
+
# Normalize all em-dashes and en-dashes to regular dash
|
|
62
|
+
result.gsub(/[–—]/, "-")
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Asme
|
|
5
|
+
# Parses ASME URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits:
|
|
8
|
+
# urn:asme:{publisher}:{code}:{year}
|
|
9
|
+
#
|
|
10
|
+
# publisher is the lowercase publisher string. code is the alphanumeric
|
|
11
|
+
# designation (e.g., "B16.5", "PTC1", "BPVC-2023"). The year separator
|
|
12
|
+
# in human-readable form is `-`, not `:`.
|
|
13
|
+
#
|
|
14
|
+
# Examples:
|
|
15
|
+
# - urn:asme:asme:B16.5:2020 → ASME B16.5-2020
|
|
16
|
+
# - urn:asme:asme:PTC1:2020 → ASME PTC1-2020
|
|
17
|
+
# - urn:asme:asme:BPVC-2023 → ASME BPVC-2023
|
|
18
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
19
|
+
def parse_urn(urn)
|
|
20
|
+
body = strip_namespace(urn)
|
|
21
|
+
parts = split_parts(body)
|
|
22
|
+
|
|
23
|
+
_publisher, code, year = parts
|
|
24
|
+
|
|
25
|
+
text = "ASME #{code}"
|
|
26
|
+
text += "-#{year}" if year
|
|
27
|
+
flavor_parse(text)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/pubid/asme.rb
CHANGED
|
@@ -7,13 +7,54 @@ module Pubid
|
|
|
7
7
|
autoload :Identifier, "#{__dir__}/asme/identifier"
|
|
8
8
|
autoload :Identifiers, "#{__dir__}/asme/identifiers"
|
|
9
9
|
autoload :Parser, "#{__dir__}/asme/parser"
|
|
10
|
-
autoload :
|
|
10
|
+
autoload :Renderer, "#{__dir__}/asme/renderer"
|
|
11
11
|
autoload :SingleIdentifier, "#{__dir__}/asme/single_identifier"
|
|
12
12
|
autoload :UrnGenerator, "#{__dir__}/asme/urn_generator"
|
|
13
|
+
autoload :UrnParser, "#{__dir__}/asme/urn_parser"
|
|
13
14
|
|
|
14
15
|
def self.parse(str)
|
|
15
16
|
Identifier.parse(str)
|
|
16
17
|
end
|
|
18
|
+
|
|
19
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
20
|
+
SingleIdentifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
21
|
+
SingleIdentifier.format_registry.register(:human, renderer: Asme::Renderer)
|
|
22
|
+
|
|
23
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
24
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
25
|
+
def self.identifier_types
|
|
26
|
+
@identifier_types ||= Identifiers.constants
|
|
27
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
28
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
29
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Build typed stage index from identifier types
|
|
33
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
34
|
+
def self.all_typed_stages
|
|
35
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
36
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
37
|
+
klass.const_get(:TYPED_STAGES)
|
|
38
|
+
else
|
|
39
|
+
[]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Lookup: type code -> identifier class
|
|
45
|
+
# @param code [String, Symbol] the type key to find
|
|
46
|
+
# @return [Class, nil] the matching identifier class
|
|
47
|
+
def self.locate_type(code)
|
|
48
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Lookup: abbreviation -> typed stage
|
|
52
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
53
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
54
|
+
def self.locate_stage(abbr)
|
|
55
|
+
abbr_str = abbr.to_s.upcase
|
|
56
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
57
|
+
end
|
|
17
58
|
end
|
|
18
59
|
end
|
|
19
60
|
|
|
@@ -5,6 +5,11 @@ require "lutaml/model"
|
|
|
5
5
|
module Pubid
|
|
6
6
|
module Astm
|
|
7
7
|
module Components
|
|
8
|
+
# Code component for ASTM identifiers.
|
|
9
|
+
#
|
|
10
|
+
# Stays independent of Pubid::Components::Code because ASTM has a
|
|
11
|
+
# rich taxonomy: +letter+ (A-G for standards), +suffix+ (A/B/C for
|
|
12
|
+
# data series), +subseries+ (S1/S4/S10), and +dual_m+ (metric flag).
|
|
8
13
|
class Code < Lutaml::Model::Serializable
|
|
9
14
|
attribute :letter, :string # A-G for standards
|
|
10
15
|
attribute :number, :string # Main number
|
|
@@ -27,6 +32,10 @@ module Pubid
|
|
|
27
32
|
end
|
|
28
33
|
result
|
|
29
34
|
end
|
|
35
|
+
|
|
36
|
+
def render(context: nil)
|
|
37
|
+
to_s
|
|
38
|
+
end
|
|
30
39
|
end
|
|
31
40
|
end
|
|
32
41
|
end
|
|
@@ -7,14 +7,6 @@ module Pubid
|
|
|
7
7
|
attribute :designation, :string # D2148, F3504, G0088, C062702
|
|
8
8
|
attribute :ea_suffix, :boolean # -EA
|
|
9
9
|
attribute :dvd_suffix, :boolean # DVD
|
|
10
|
-
|
|
11
|
-
def to_s
|
|
12
|
-
result = []
|
|
13
|
-
# Only include publisher for simple adjuncts (no EA or DVD suffix)
|
|
14
|
-
result << publisher if publisher && !ea_suffix && !dvd_suffix
|
|
15
|
-
result << "ADJ#{designation}#{'-EA' if ea_suffix}#{'DVD' if dvd_suffix}"
|
|
16
|
-
result.compact.join(" ")
|
|
17
|
-
end
|
|
18
10
|
end
|
|
19
11
|
end
|
|
20
12
|
end
|
|
@@ -5,20 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
class DataSeries < Base
|
|
7
7
|
attribute :hol_suffix, :boolean # HOL suffix
|
|
8
|
-
|
|
9
|
-
def to_s
|
|
10
|
-
parts = []
|
|
11
|
-
parts << publisher if publisher
|
|
12
|
-
|
|
13
|
-
result = parts.join(" ")
|
|
14
|
-
result += " " if publisher && !result.end_with?(" ")
|
|
15
|
-
|
|
16
|
-
result += "DS"
|
|
17
|
-
result += code.to_s if code
|
|
18
|
-
result += "HOL" if hol_suffix
|
|
19
|
-
result += format_suffix if format_suffix
|
|
20
|
-
result
|
|
21
|
-
end
|
|
22
8
|
end
|
|
23
9
|
end
|
|
24
10
|
end
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "../../iso/components/publisher"
|
|
4
|
-
require_relative "../../components/date"
|
|
5
|
-
|
|
6
3
|
module Pubid
|
|
7
4
|
module Astm
|
|
8
5
|
module Identifiers
|
|
@@ -28,45 +25,23 @@ module Pubid
|
|
|
28
25
|
# Rendering is identical to Standard
|
|
29
26
|
# Example: ASTM 52303-24e1
|
|
30
27
|
|
|
31
|
-
# Convert to ISO/ASTM dual-published format
|
|
32
|
-
#
|
|
28
|
+
# Convert to ISO/ASTM dual-published format.
|
|
29
|
+
# Uses Pubid::Iso.build so this flavor never reaches into ISO's
|
|
30
|
+
# internal class hierarchy.
|
|
31
|
+
# @return [Pubid::Iso::Identifier] ISO version
|
|
33
32
|
#
|
|
34
33
|
# @example Convert ASTM to ISO format
|
|
35
34
|
# astm = Pubid::Astm.parse("ASTM 52303-24e1")
|
|
36
35
|
# iso = astm.to_iso_identifier
|
|
37
36
|
# iso.to_s # => "ISO/ASTM 52303:2024"
|
|
38
37
|
def to_iso_identifier
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
require_relative "../../components/publisher"
|
|
42
|
-
|
|
43
|
-
iso = Pubid::Iso::Identifiers::InternationalStandard.new
|
|
44
|
-
|
|
45
|
-
# Set publisher as ISO with ASTM as copublisher (in Publisher component)
|
|
46
|
-
iso.publisher = Pubid::Iso::Components::Publisher.new(
|
|
38
|
+
Pubid::Iso.build(
|
|
39
|
+
type: :is,
|
|
47
40
|
publisher: "ISO",
|
|
48
|
-
|
|
41
|
+
copublishers: ["ASTM"],
|
|
42
|
+
number: code&.number,
|
|
43
|
+
year: year&.to_s,
|
|
49
44
|
)
|
|
50
|
-
|
|
51
|
-
# Also set copublishers attribute (array of Publisher objects) for rendering
|
|
52
|
-
astm_publisher = ::Pubid::Components::Publisher.new(body: "ASTM")
|
|
53
|
-
iso.copublishers = [astm_publisher]
|
|
54
|
-
|
|
55
|
-
# Set code number (same as ASTM) - use ISO Code component
|
|
56
|
-
if code
|
|
57
|
-
iso_code = Pubid::Iso::Components::Code.new
|
|
58
|
-
iso_code.number = code.number
|
|
59
|
-
iso.number = iso_code
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Set year as date component - use base Date component
|
|
63
|
-
if year
|
|
64
|
-
iso_date = ::Pubid::Components::Date.new
|
|
65
|
-
iso_date.year = year.to_s
|
|
66
|
-
iso.date = iso_date
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
iso
|
|
70
45
|
end
|
|
71
46
|
end
|
|
72
47
|
end
|
|
@@ -7,33 +7,6 @@ module Pubid
|
|
|
7
7
|
attribute :edition, :string # 9TH, 2ND
|
|
8
8
|
attribute :supplement, :boolean # -SUP-
|
|
9
9
|
attribute :tp_designation, :string # TP for technical publications
|
|
10
|
-
|
|
11
|
-
def to_s
|
|
12
|
-
parts = []
|
|
13
|
-
parts << publisher if publisher
|
|
14
|
-
parts << "MNL"
|
|
15
|
-
parts << "TP" if tp_designation
|
|
16
|
-
parts << code.number if code
|
|
17
|
-
|
|
18
|
-
result = parts.join
|
|
19
|
-
|
|
20
|
-
# Edition with dash separator
|
|
21
|
-
result += "-#{edition}" if edition
|
|
22
|
-
|
|
23
|
-
# Add separator after publisher
|
|
24
|
-
if publisher
|
|
25
|
-
# Insert space after publisher
|
|
26
|
-
result = "#{publisher} #{result[publisher.length..]}"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Add supplement if present
|
|
30
|
-
result += "-SUP" if supplement
|
|
31
|
-
|
|
32
|
-
# Add format suffix (already has dash from builder)
|
|
33
|
-
result += format_suffix if format_suffix
|
|
34
|
-
|
|
35
|
-
result
|
|
36
|
-
end
|
|
37
10
|
end
|
|
38
11
|
end
|
|
39
12
|
end
|
|
@@ -5,20 +5,6 @@ module Pubid
|
|
|
5
5
|
module Identifiers
|
|
6
6
|
class Monograph < Base
|
|
7
7
|
attribute :edition, :string # 2ND, 4TH
|
|
8
|
-
|
|
9
|
-
def to_s
|
|
10
|
-
parts = []
|
|
11
|
-
parts << publisher if publisher
|
|
12
|
-
|
|
13
|
-
result = parts.join(" ")
|
|
14
|
-
result += " " if publisher && !result.end_with?(" ")
|
|
15
|
-
|
|
16
|
-
result += "MONO"
|
|
17
|
-
result += code.number if code
|
|
18
|
-
result += "-#{edition}" if edition
|
|
19
|
-
result += format_suffix if format_suffix
|
|
20
|
-
result
|
|
21
|
-
end
|
|
22
8
|
end
|
|
23
9
|
end
|
|
24
10
|
end
|