pubid 1.15.21 → 2.0.0.alpha.10
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/LICENSE.txt +1 -1
- data/README.adoc +2044 -53
- data/archived-gems/pubid-ccsds/update_codes.yaml +1 -0
- data/archived-gems/pubid-iec/stages.yaml +129 -0
- data/archived-gems/pubid-iec/update_codes.yaml +67 -0
- data/archived-gems/pubid-ieee/update_codes.yaml +104 -0
- data/archived-gems/pubid-iso/stages.yaml +106 -0
- data/archived-gems/pubid-iso/update_codes.yaml +4 -0
- data/archived-gems/pubid-itu/i18n.yaml +13 -0
- data/archived-gems/pubid-itu/series.yaml +42 -0
- data/archived-gems/pubid-nist/publishers.yaml +6 -0
- data/archived-gems/pubid-nist/series.yaml +121 -0
- data/archived-gems/pubid-nist/stages.yaml +16 -0
- data/archived-gems/pubid-nist/update_codes.yaml +93 -0
- data/archived-gems/pubid-plateau/update_codes.yaml +6 -0
- data/data/bipm/update_codes.yaml +9 -0
- data/data/ccsds/update_codes.yaml +1 -0
- data/data/iec/update_codes.yaml +70 -0
- data/data/ieee/update_codes.yaml +210 -0
- data/data/iso/update_codes.yaml +21 -0
- data/data/nist/series.yaml +155 -0
- data/data/nist/update_codes.yaml +122 -0
- data/data/plateau/update_codes.yaml +6 -0
- data/lib/pubid/adobe/builder.rb +52 -0
- data/lib/pubid/adobe/identifier.rb +47 -0
- data/lib/pubid/adobe/identifiers/publication.rb +31 -0
- data/lib/pubid/adobe/identifiers/tech_note.rb +32 -0
- data/lib/pubid/adobe/identifiers.rb +10 -0
- data/lib/pubid/adobe/parser.rb +136 -0
- data/lib/pubid/adobe/renderer.rb +39 -0
- data/lib/pubid/adobe/urn_generator.rb +42 -0
- data/lib/pubid/adobe/urn_parser.rb +69 -0
- data/lib/pubid/adobe.rb +60 -0
- data/lib/pubid/amca/builder.rb +176 -0
- data/lib/pubid/amca/identifier.rb +4 -0
- data/lib/pubid/amca/identifiers/base.rb +92 -0
- data/lib/pubid/amca/identifiers/interpretation.rb +38 -0
- data/lib/pubid/amca/identifiers/publication.rb +34 -0
- data/lib/pubid/amca/identifiers/standard.rb +20 -0
- data/lib/pubid/amca/identifiers.rb +11 -0
- data/lib/pubid/amca/parser.rb +153 -0
- data/lib/pubid/amca/renderer.rb +82 -0
- data/lib/pubid/amca/single_identifier.rb +10 -0
- data/lib/pubid/amca/urn_generator.rb +51 -0
- data/lib/pubid/amca/urn_parser.rb +28 -0
- data/lib/pubid/amca.rb +73 -0
- data/lib/pubid/ansi/builder.rb +54 -0
- data/lib/pubid/ansi/identifier.rb +31 -0
- data/lib/pubid/ansi/identifiers/american_national_standard.rb +13 -0
- data/lib/pubid/ansi/identifiers/standard.rb +15 -0
- data/lib/pubid/ansi/identifiers.rb +11 -0
- data/lib/pubid/ansi/parser.rb +91 -0
- data/lib/pubid/ansi/renderer.rb +53 -0
- data/lib/pubid/ansi/single_identifier.rb +16 -0
- data/lib/pubid/ansi/urn_generator.rb +41 -0
- data/lib/pubid/ansi/urn_parser.rb +23 -0
- data/lib/pubid/ansi.rb +68 -0
- data/lib/pubid/api/builder.rb +58 -0
- data/lib/pubid/api/components/code.rb +9 -0
- data/lib/pubid/api/identifier.rb +42 -0
- data/lib/pubid/api/identifiers/base.rb +12 -0
- data/lib/pubid/api/identifiers/bulletin.rb +13 -0
- data/lib/pubid/api/identifiers/continuous_operations_standard.rb +13 -0
- data/lib/pubid/api/identifiers/mpms.rb +26 -0
- data/lib/pubid/api/identifiers/publication.rb +13 -0
- data/lib/pubid/api/identifiers/recommended_practice.rb +13 -0
- data/lib/pubid/api/identifiers/specification.rb +13 -0
- data/lib/pubid/api/identifiers/standard.rb +13 -0
- data/lib/pubid/api/identifiers/technical_report.rb +13 -0
- data/lib/pubid/api/identifiers/typeless_standard.rb +11 -0
- data/lib/pubid/api/identifiers.rb +18 -0
- data/lib/pubid/api/parser.rb +140 -0
- data/lib/pubid/api/renderer.rb +98 -0
- data/lib/pubid/api/single_identifier.rb +24 -0
- data/lib/pubid/api/urn_generator.rb +23 -0
- data/lib/pubid/api/urn_parser.rb +35 -0
- data/lib/pubid/api.rb +68 -0
- data/lib/pubid/ashrae/builder.rb +519 -0
- data/lib/pubid/ashrae/identifier.rb +8 -0
- data/lib/pubid/ashrae/identifiers/addenda_package.rb +42 -0
- data/lib/pubid/ashrae/identifiers/addendum.rb +44 -0
- data/lib/pubid/ashrae/identifiers/base.rb +119 -0
- data/lib/pubid/ashrae/identifiers/combined_addenda.rb +43 -0
- data/lib/pubid/ashrae/identifiers/errata.rb +39 -0
- data/lib/pubid/ashrae/identifiers/guideline.rb +41 -0
- data/lib/pubid/ashrae/identifiers/interpretation.rb +45 -0
- data/lib/pubid/ashrae/identifiers/standard.rb +41 -0
- data/lib/pubid/ashrae/identifiers.rb +15 -0
- data/lib/pubid/ashrae/parser.rb +748 -0
- data/lib/pubid/ashrae/renderer.rb +117 -0
- data/lib/pubid/ashrae/single_identifier.rb +10 -0
- data/lib/pubid/ashrae/supplement_identifier.rb +38 -0
- data/lib/pubid/ashrae/urn_generator.rb +57 -0
- data/lib/pubid/ashrae/urn_parser.rb +27 -0
- data/lib/pubid/ashrae.rb +77 -0
- data/lib/pubid/asme/builder.rb +162 -0
- data/lib/pubid/asme/components/code.rb +26 -0
- data/lib/pubid/asme/identifier.rb +24 -0
- data/lib/pubid/asme/identifiers/base.rb +10 -0
- data/lib/pubid/asme/identifiers/standard.rb +96 -0
- data/lib/pubid/asme/identifiers.rb +10 -0
- data/lib/pubid/asme/parser.rb +308 -0
- data/lib/pubid/asme/renderer.rb +66 -0
- data/lib/pubid/asme/single_identifier.rb +38 -0
- data/lib/pubid/asme/urn_generator.rb +133 -0
- data/lib/pubid/asme/urn_parser.rb +31 -0
- data/lib/pubid/asme.rb +67 -0
- data/lib/pubid/astm/builder.rb +166 -0
- data/lib/pubid/astm/components/code.rb +42 -0
- data/lib/pubid/astm/components.rb +9 -0
- data/lib/pubid/astm/identifier.rb +24 -0
- data/lib/pubid/astm/identifiers/adjunct.rb +28 -0
- data/lib/pubid/astm/identifiers/base.rb +13 -0
- data/lib/pubid/astm/identifiers/code_number.rb +81 -0
- data/lib/pubid/astm/identifiers/data_series.rb +13 -0
- data/lib/pubid/astm/identifiers/iso_dual_published.rb +65 -0
- data/lib/pubid/astm/identifiers/manual.rb +23 -0
- data/lib/pubid/astm/identifiers/monograph.rb +13 -0
- data/lib/pubid/astm/identifiers/research_report.rb +21 -0
- data/lib/pubid/astm/identifiers/standard.rb +23 -0
- data/lib/pubid/astm/identifiers/technical_report.rb +12 -0
- data/lib/pubid/astm/identifiers/work_in_progress.rb +12 -0
- data/lib/pubid/astm/identifiers.rb +19 -0
- data/lib/pubid/astm/parser.rb +244 -0
- data/lib/pubid/astm/renderer.rb +172 -0
- data/lib/pubid/astm/single_identifier.rb +47 -0
- data/lib/pubid/astm/urn_generator.rb +101 -0
- data/lib/pubid/astm/urn_parser.rb +30 -0
- data/lib/pubid/astm.rb +55 -0
- data/lib/pubid/bipm/builder.rb +163 -0
- data/lib/pubid/bipm/identifier.rb +285 -0
- data/lib/pubid/bipm/identifiers/committee_document.rb +36 -0
- data/lib/pubid/bipm/identifiers/guide.rb +35 -0
- data/lib/pubid/bipm/identifiers/meeting.rb +53 -0
- data/lib/pubid/bipm/identifiers/mep.rb +33 -0
- data/lib/pubid/bipm/identifiers/metrologia_article.rb +48 -0
- data/lib/pubid/bipm/identifiers/si_brochure.rb +33 -0
- data/lib/pubid/bipm/identifiers.rb +15 -0
- data/lib/pubid/bipm/parser.rb +237 -0
- data/lib/pubid/bipm/renderer.rb +118 -0
- data/lib/pubid/bipm/urn_generator.rb +58 -0
- data/lib/pubid/bipm/urn_parser.rb +60 -0
- data/lib/pubid/bipm.rb +91 -0
- data/lib/pubid/bsi/builder.rb +1495 -0
- data/lib/pubid/bsi/components/code.rb +11 -0
- data/lib/pubid/bsi/components/date.rb +11 -0
- data/lib/pubid/bsi/components/publisher.rb +11 -0
- data/lib/pubid/bsi/components/type.rb +11 -0
- data/lib/pubid/bsi/identifier.rb +6 -0
- data/lib/pubid/bsi/identifiers/addendum_document.rb +30 -0
- data/lib/pubid/bsi/identifiers/adopted_european_norm.rb +67 -0
- data/lib/pubid/bsi/identifiers/adopted_international_standard.rb +51 -0
- data/lib/pubid/bsi/identifiers/aerospace_standard.rb +65 -0
- data/lib/pubid/bsi/identifiers/amendment.rb +48 -0
- data/lib/pubid/bsi/identifiers/british_industrial_practice.rb +21 -0
- data/lib/pubid/bsi/identifiers/british_standard.rb +34 -0
- data/lib/pubid/bsi/identifiers/bundled_identifier.rb +40 -0
- data/lib/pubid/bsi/identifiers/committee_document.rb +44 -0
- data/lib/pubid/bsi/identifiers/consolidated_identifier.rb +84 -0
- data/lib/pubid/bsi/identifiers/corrigendum.rb +44 -0
- data/lib/pubid/bsi/identifiers/detailed_specification.rb +33 -0
- data/lib/pubid/bsi/identifiers/disc.rb +27 -0
- data/lib/pubid/bsi/identifiers/draft_document.rb +27 -0
- data/lib/pubid/bsi/identifiers/electronic_book.rb +16 -0
- data/lib/pubid/bsi/identifiers/expert_commentary.rb +36 -0
- data/lib/pubid/bsi/identifiers/explanatory_supplement.rb +35 -0
- data/lib/pubid/bsi/identifiers/flex.rb +30 -0
- data/lib/pubid/bsi/identifiers/handbook.rb +23 -0
- data/lib/pubid/bsi/identifiers/index.rb +30 -0
- data/lib/pubid/bsi/identifiers/method.rb +35 -0
- data/lib/pubid/bsi/identifiers/national_annex.rb +48 -0
- data/lib/pubid/bsi/identifiers/practice_guide.rb +21 -0
- data/lib/pubid/bsi/identifiers/publicly_available_specification.rb +27 -0
- data/lib/pubid/bsi/identifiers/published_document.rb +27 -0
- data/lib/pubid/bsi/identifiers/section.rb +32 -0
- data/lib/pubid/bsi/identifiers/set.rb +40 -0
- data/lib/pubid/bsi/identifiers/standalone_amendment.rb +40 -0
- data/lib/pubid/bsi/identifiers/supplement_document.rb +29 -0
- data/lib/pubid/bsi/identifiers/supplementary_index.rb +35 -0
- data/lib/pubid/bsi/identifiers/technical_specification.rb +34 -0
- data/lib/pubid/bsi/identifiers/test_method.rb +35 -0
- data/lib/pubid/bsi/identifiers/value_added_publication.rb +37 -0
- data/lib/pubid/bsi/identifiers.rb +51 -0
- data/lib/pubid/bsi/model.rb +196 -0
- data/lib/pubid/bsi/parser.rb +673 -0
- data/lib/pubid/bsi/renderer.rb +1064 -0
- data/lib/pubid/bsi/single_identifier.rb +141 -0
- data/lib/pubid/bsi/urn_generator.rb +92 -0
- data/lib/pubid/bsi/urn_parser.rb +52 -0
- data/lib/pubid/bsi.rb +282 -0
- data/lib/pubid/builder/base.rb +187 -0
- data/lib/pubid/bundled_identifier.rb +134 -0
- data/lib/pubid/calconnect/builder.rb +38 -0
- data/lib/pubid/calconnect/identifier.rb +121 -0
- data/lib/pubid/calconnect/identifiers/standard.rb +29 -0
- data/lib/pubid/calconnect/identifiers.rb +9 -0
- data/lib/pubid/calconnect/parser.rb +54 -0
- data/lib/pubid/calconnect/renderer.rb +36 -0
- data/lib/pubid/calconnect/urn_generator.rb +33 -0
- data/lib/pubid/calconnect/urn_parser.rb +34 -0
- data/lib/pubid/calconnect.rb +82 -0
- data/lib/pubid/ccsds/builder.rb +57 -0
- data/lib/pubid/ccsds/identifier.rb +76 -0
- data/lib/pubid/ccsds/identifiers/base.rb +41 -0
- data/lib/pubid/ccsds/identifiers/base_BASE_88929.rb +70 -0
- data/lib/pubid/ccsds/identifiers/corrigendum.rb +40 -0
- data/lib/pubid/ccsds/identifiers.rb +10 -0
- data/lib/pubid/ccsds/parser.rb +73 -0
- data/lib/pubid/ccsds/single_identifier.rb +77 -0
- data/lib/pubid/ccsds/supplement_identifier.rb +37 -0
- data/lib/pubid/ccsds/urn_generator.rb +115 -0
- data/lib/pubid/ccsds/urn_parser.rb +20 -0
- data/lib/pubid/ccsds.rb +64 -0
- data/lib/pubid/cen_cenelec/builder.rb +362 -0
- data/lib/pubid/cen_cenelec/identifier.rb +38 -0
- data/lib/pubid/cen_cenelec/identifiers/adopted_european_norm.rb +45 -0
- data/lib/pubid/cen_cenelec/identifiers/amendment.rb +19 -0
- data/lib/pubid/cen_cenelec/identifiers/base.rb +34 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_report.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/cen_workshop_agreement.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/cenelec_harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/consolidated_identifier.rb +40 -0
- data/lib/pubid/cen_cenelec/identifiers/corrigendum.rb +20 -0
- data/lib/pubid/cen_cenelec/identifiers/european_norm.rb +99 -0
- data/lib/pubid/cen_cenelec/identifiers/european_prestandard.rb +50 -0
- data/lib/pubid/cen_cenelec/identifiers/european_specification.rb +29 -0
- data/lib/pubid/cen_cenelec/identifiers/fragment.rb +18 -0
- data/lib/pubid/cen_cenelec/identifiers/guide.rb +27 -0
- data/lib/pubid/cen_cenelec/identifiers/harmonization_document.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_report.rb +28 -0
- data/lib/pubid/cen_cenelec/identifiers/technical_specification.rb +36 -0
- data/lib/pubid/cen_cenelec/identifiers.rb +32 -0
- data/lib/pubid/cen_cenelec/parser.rb +144 -0
- data/lib/pubid/cen_cenelec/renderer.rb +261 -0
- data/lib/pubid/cen_cenelec/single_identifier.rb +49 -0
- data/lib/pubid/cen_cenelec/supplement_identifier.rb +47 -0
- data/lib/pubid/cen_cenelec/urn_generator.rb +129 -0
- data/lib/pubid/cen_cenelec/urn_parser.rb +28 -0
- data/lib/pubid/cen_cenelec.rb +208 -0
- data/lib/pubid/cie/builder.rb +524 -0
- data/lib/pubid/cie/components/language.rb +58 -0
- data/lib/pubid/cie/identifier.rb +33 -0
- data/lib/pubid/cie/identifiers/bundle.rb +50 -0
- data/lib/pubid/cie/identifiers/code_attributes.rb +52 -0
- data/lib/pubid/cie/identifiers/conference.rb +37 -0
- data/lib/pubid/cie/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/cie/identifiers/dual_published.rb +41 -0
- data/lib/pubid/cie/identifiers/identical.rb +64 -0
- data/lib/pubid/cie/identifiers/joint_published.rb +52 -0
- data/lib/pubid/cie/identifiers/proceedings.rb +41 -0
- data/lib/pubid/cie/identifiers/standard.rb +93 -0
- data/lib/pubid/cie/identifiers/supplement.rb +47 -0
- data/lib/pubid/cie/identifiers/tutorial_bundle.rb +24 -0
- data/lib/pubid/cie/identifiers.rb +19 -0
- data/lib/pubid/cie/parser.rb +396 -0
- data/lib/pubid/cie/single_identifier.rb +69 -0
- data/lib/pubid/cie/supplement_identifier.rb +39 -0
- data/lib/pubid/cie/urn_generator.rb +126 -0
- data/lib/pubid/cie/urn_parser.rb +28 -0
- data/lib/pubid/cie.rb +83 -0
- data/lib/pubid/components/adoption.rb +104 -0
- data/lib/pubid/components/code.rb +47 -0
- data/lib/pubid/components/date.rb +72 -0
- data/lib/pubid/components/edition.rb +35 -0
- data/lib/pubid/components/iteration.rb +32 -0
- data/lib/pubid/components/language.rb +39 -0
- data/lib/pubid/components/locality.rb +19 -0
- data/lib/pubid/components/publisher.rb +39 -0
- data/lib/pubid/components/relationship.rb +151 -0
- data/lib/pubid/components/stage.rb +45 -0
- data/lib/pubid/components/supplement.rb +184 -0
- data/lib/pubid/components/type.rb +48 -0
- data/lib/pubid/components/typed_stage.rb +58 -0
- data/lib/pubid/components.rb +19 -0
- data/lib/pubid/core/pattern_doc_generator.rb +272 -0
- data/lib/pubid/core/update_codes.rb +98 -0
- data/lib/pubid/core.rb +8 -0
- data/lib/pubid/csa/builder.rb +671 -0
- data/lib/pubid/csa/components/code.rb +9 -0
- data/lib/pubid/csa/components.rb +9 -0
- data/lib/pubid/csa/composite_identifier.rb +38 -0
- data/lib/pubid/csa/identifier.rb +570 -0
- data/lib/pubid/csa/identifiers/base.rb +10 -0
- data/lib/pubid/csa/identifiers/bundled.rb +141 -0
- data/lib/pubid/csa/identifiers/canadian_adopted.rb +82 -0
- data/lib/pubid/csa/identifiers/cec.rb +66 -0
- data/lib/pubid/csa/identifiers/combined.rb +158 -0
- data/lib/pubid/csa/identifiers/csa_adopted.rb +78 -0
- data/lib/pubid/csa/identifiers/package.rb +65 -0
- data/lib/pubid/csa/identifiers/series.rb +23 -0
- data/lib/pubid/csa/identifiers/standard.rb +10 -0
- data/lib/pubid/csa/identifiers.rb +17 -0
- data/lib/pubid/csa/parser.rb +449 -0
- data/lib/pubid/csa/renderer.rb +300 -0
- data/lib/pubid/csa/single_identifier.rb +119 -0
- data/lib/pubid/csa/urn_generator.rb +87 -0
- data/lib/pubid/csa/urn_parser.rb +33 -0
- data/lib/pubid/csa/wrapper_identifier.rb +64 -0
- data/lib/pubid/csa.rb +80 -0
- data/lib/pubid/doi/builder.rb +18 -0
- data/lib/pubid/doi/identifier.rb +49 -0
- data/lib/pubid/doi/identifiers/resource.rb +30 -0
- data/lib/pubid/doi/identifiers.rb +9 -0
- data/lib/pubid/doi/parser.rb +52 -0
- data/lib/pubid/doi/renderer.rb +13 -0
- data/lib/pubid/doi.rb +55 -0
- data/lib/pubid/easc/builder.rb +55 -0
- data/lib/pubid/easc/identifier.rb +59 -0
- data/lib/pubid/easc/identifiers/pmg.rb +20 -0
- data/lib/pubid/easc/identifiers/rmg.rb +19 -0
- data/lib/pubid/easc/identifiers.rb +10 -0
- data/lib/pubid/easc/parser.rb +88 -0
- data/lib/pubid/easc/renderer.rb +48 -0
- data/lib/pubid/easc/urn_generator.rb +46 -0
- data/lib/pubid/easc/urn_parser.rb +57 -0
- data/lib/pubid/easc.rb +52 -0
- data/lib/pubid/ecma/builder.rb +45 -0
- data/lib/pubid/ecma/identifier.rb +147 -0
- data/lib/pubid/ecma/identifiers/memento.rb +30 -0
- data/lib/pubid/ecma/identifiers/standard.rb +31 -0
- data/lib/pubid/ecma/identifiers/technical_report.rb +31 -0
- data/lib/pubid/ecma/identifiers.rb +11 -0
- data/lib/pubid/ecma/parser.rb +76 -0
- data/lib/pubid/ecma/renderer.rb +67 -0
- data/lib/pubid/ecma/urn_generator.rb +46 -0
- data/lib/pubid/ecma/urn_parser.rb +51 -0
- data/lib/pubid/ecma.rb +67 -0
- data/lib/pubid/errors.rb +79 -0
- data/lib/pubid/etsi/builder.rb +142 -0
- data/lib/pubid/etsi/components/code.rb +43 -0
- data/lib/pubid/etsi/components/version.rb +32 -0
- data/lib/pubid/etsi/components.rb +10 -0
- data/lib/pubid/etsi/identifier.rb +4 -0
- data/lib/pubid/etsi/identifiers/amendment.rb +15 -0
- data/lib/pubid/etsi/identifiers/base.rb +74 -0
- data/lib/pubid/etsi/identifiers/corrigendum.rb +15 -0
- data/lib/pubid/etsi/identifiers/etsi_standard.rb +222 -0
- data/lib/pubid/etsi/identifiers/supplement_identifier.rb +123 -0
- data/lib/pubid/etsi/identifiers.rb +13 -0
- data/lib/pubid/etsi/parser.rb +139 -0
- data/lib/pubid/etsi/renderer.rb +48 -0
- data/lib/pubid/etsi/urn_generator.rb +76 -0
- data/lib/pubid/etsi/urn_parser.rb +34 -0
- data/lib/pubid/etsi.rb +71 -0
- data/lib/pubid/export/auditor.rb +89 -0
- data/lib/pubid/export/exporter.rb +33 -0
- data/lib/pubid/export/flavor_exporter.rb +250 -0
- data/lib/pubid/export/result.rb +97 -0
- data/lib/pubid/export.rb +12 -0
- data/lib/pubid/format_detector.rb +16 -0
- data/lib/pubid/format_registry.rb +42 -0
- data/lib/pubid/gb/builder.rb +45 -0
- data/lib/pubid/gb/identifier.rb +67 -0
- data/lib/pubid/gb/identifiers/standard.rb +34 -0
- data/lib/pubid/gb/identifiers.rb +9 -0
- data/lib/pubid/gb/parser.rb +63 -0
- data/lib/pubid/gb/renderer.rb +35 -0
- data/lib/pubid/gb.rb +87 -0
- data/lib/pubid/gost/builder.rb +148 -0
- data/lib/pubid/gost/identifier.rb +47 -0
- data/lib/pubid/gost/identifiers/foreign_reference.rb +25 -0
- data/lib/pubid/gost/identifiers/harmonized.rb +39 -0
- data/lib/pubid/gost/identifiers/identical_adoption.rb +39 -0
- data/lib/pubid/gost/identifiers/interstate_standard.rb +20 -0
- data/lib/pubid/gost/identifiers/national_standard.rb +19 -0
- data/lib/pubid/gost/identifiers.rb +13 -0
- data/lib/pubid/gost/parser.rb +105 -0
- data/lib/pubid/gost/renderer.rb +48 -0
- data/lib/pubid/gost/urn_generator.rb +46 -0
- data/lib/pubid/gost/urn_parser.rb +52 -0
- data/lib/pubid/gost.rb +49 -0
- data/lib/pubid/iala/builder.rb +102 -0
- data/lib/pubid/iala/identifier.rb +90 -0
- data/lib/pubid/iala/identifiers/advice.rb +15 -0
- data/lib/pubid/iala/identifiers/annex.rb +57 -0
- data/lib/pubid/iala/identifiers/general_assembly.rb +19 -0
- data/lib/pubid/iala/identifiers/guideline.rb +17 -0
- data/lib/pubid/iala/identifiers/letter.rb +16 -0
- data/lib/pubid/iala/identifiers/manual.rb +18 -0
- data/lib/pubid/iala/identifiers/model_course.rb +17 -0
- data/lib/pubid/iala/identifiers/recommendation.rb +17 -0
- data/lib/pubid/iala/identifiers/report.rb +16 -0
- data/lib/pubid/iala/identifiers/resolution.rb +16 -0
- data/lib/pubid/iala/identifiers/standard.rb +17 -0
- data/lib/pubid/iala/identifiers.rb +19 -0
- data/lib/pubid/iala/parser.rb +138 -0
- data/lib/pubid/iala/renderer.rb +36 -0
- data/lib/pubid/iala/urn_generator.rb +49 -0
- data/lib/pubid/iala/urn_parser.rb +67 -0
- data/lib/pubid/iala.rb +71 -0
- data/lib/pubid/iana/builder.rb +22 -0
- data/lib/pubid/iana/identifier.rb +140 -0
- data/lib/pubid/iana/identifiers/registry.rb +69 -0
- data/lib/pubid/iana/identifiers.rb +9 -0
- data/lib/pubid/iana/parser.rb +38 -0
- data/lib/pubid/iana/renderer.rb +32 -0
- data/lib/pubid/iana/urn_generator.rb +19 -0
- data/lib/pubid/iana/urn_parser.rb +24 -0
- data/lib/pubid/iana.rb +69 -0
- data/lib/pubid/identifier.rb +1118 -0
- data/lib/pubid/identifier_metadata.rb +148 -0
- data/lib/pubid/idf/builder.rb +82 -0
- data/lib/pubid/idf/identifier.rb +79 -0
- data/lib/pubid/idf/identifiers/amendment.rb +28 -0
- data/lib/pubid/idf/identifiers/corrigendum.rb +28 -0
- data/lib/pubid/idf/identifiers/international_standard.rb +124 -0
- data/lib/pubid/idf/identifiers/reviewed_method.rb +101 -0
- data/lib/pubid/idf/identifiers.rb +13 -0
- data/lib/pubid/idf/parser.rb +144 -0
- data/lib/pubid/idf/renderer.rb +84 -0
- data/lib/pubid/idf/single_identifier.rb +19 -0
- data/lib/pubid/idf/supplement_identifier.rb +35 -0
- data/lib/pubid/idf/urn_generator.rb +49 -0
- data/lib/pubid/idf/urn_parser.rb +25 -0
- data/lib/pubid/idf.rb +89 -0
- data/lib/pubid/iec/builder.rb +458 -0
- data/lib/pubid/iec/components/code.rb +36 -0
- data/lib/pubid/iec/components/consolidated_amendment.rb +59 -0
- data/lib/pubid/iec/components/publisher.rb +35 -0
- data/lib/pubid/iec/components/sheet.rb +32 -0
- data/lib/pubid/iec/components/trf_info.rb +38 -0
- data/lib/pubid/iec/components/vap_suffix.rb +41 -0
- data/lib/pubid/iec/components.rb +14 -0
- data/lib/pubid/iec/identifier.rb +341 -0
- data/lib/pubid/iec/identifiers/amendment.rb +97 -0
- data/lib/pubid/iec/identifiers/base.rb +54 -0
- data/lib/pubid/iec/identifiers/component_specification.rb +29 -0
- data/lib/pubid/iec/identifiers/conformity_assessment.rb +28 -0
- data/lib/pubid/iec/identifiers/consolidated_identifier.rb +85 -0
- data/lib/pubid/iec/identifiers/corrigendum.rb +93 -0
- data/lib/pubid/iec/identifiers/fragment_identifier.rb +148 -0
- data/lib/pubid/iec/identifiers/guide.rb +86 -0
- data/lib/pubid/iec/identifiers/international_standard.rb +162 -0
- data/lib/pubid/iec/identifiers/interpretation_sheet.rb +103 -0
- data/lib/pubid/iec/identifiers/operational_document.rb +29 -0
- data/lib/pubid/iec/identifiers/publicly_available_specification.rb +88 -0
- data/lib/pubid/iec/identifiers/sheet_identifier.rb +68 -0
- data/lib/pubid/iec/identifiers/societal_technology_trend_report.rb +30 -0
- data/lib/pubid/iec/identifiers/systems_reference_document.rb +29 -0
- data/lib/pubid/iec/identifiers/technical_group.rb +30 -0
- data/lib/pubid/iec/identifiers/technical_report.rb +114 -0
- data/lib/pubid/iec/identifiers/technical_specification.rb +114 -0
- data/lib/pubid/iec/identifiers/technology_report.rb +28 -0
- data/lib/pubid/iec/identifiers/test_report_form.rb +35 -0
- data/lib/pubid/iec/identifiers/vap_identifier.rb +76 -0
- data/lib/pubid/iec/identifiers/white_paper.rb +29 -0
- data/lib/pubid/iec/identifiers/working_document.rb +62 -0
- data/lib/pubid/iec/identifiers.rb +31 -0
- data/lib/pubid/iec/parser.rb +443 -0
- data/lib/pubid/iec/renderer.rb +267 -0
- data/lib/pubid/iec/rendering_style.rb +113 -0
- data/lib/pubid/iec/single_identifier.rb +72 -0
- data/lib/pubid/iec/supplement_identifier.rb +178 -0
- data/lib/pubid/iec/urn_generator.rb +245 -0
- data/lib/pubid/iec/urn_parser.rb +128 -0
- data/lib/pubid/iec.rb +64 -0
- data/lib/pubid/ieee/aiee/builder.rb +85 -0
- data/lib/pubid/ieee/aiee/identifier.rb +89 -0
- data/lib/pubid/ieee/aiee/parser.rb +130 -0
- data/lib/pubid/ieee/aiee.rb +11 -0
- data/lib/pubid/ieee/builder.rb +1554 -0
- data/lib/pubid/ieee/compaction.rb +121 -0
- data/lib/pubid/ieee/components/code.rb +110 -0
- data/lib/pubid/ieee/components/draft.rb +147 -0
- data/lib/pubid/ieee/components/relationship.rb +13 -0
- data/lib/pubid/ieee/components/typed_stage.rb +100 -0
- data/lib/pubid/ieee/identifier.rb +5 -0
- data/lib/pubid/ieee/identifiers/adopted_standard.rb +81 -0
- data/lib/pubid/ieee/identifiers/amendment.rb +40 -0
- data/lib/pubid/ieee/identifiers/base.rb +384 -0
- data/lib/pubid/ieee/identifiers/code_number.rb +82 -0
- data/lib/pubid/ieee/identifiers/conformance_identifier.rb +29 -0
- data/lib/pubid/ieee/identifiers/corrigendum.rb +40 -0
- data/lib/pubid/ieee/identifiers/csa_dual_published.rb +62 -0
- data/lib/pubid/ieee/identifiers/dual_identifier.rb +14 -0
- data/lib/pubid/ieee/identifiers/dual_published.rb +79 -0
- data/lib/pubid/ieee/identifiers/iec_ieee_copublished.rb +115 -0
- data/lib/pubid/ieee/identifiers/interpretation_identifier.rb +48 -0
- data/lib/pubid/ieee/identifiers/joint_development.rb +223 -0
- data/lib/pubid/ieee/identifiers/multi_numbered_identifier.rb +85 -0
- data/lib/pubid/ieee/identifiers/nesc/base.rb +127 -0
- data/lib/pubid/ieee/identifiers/nesc/draft.rb +43 -0
- data/lib/pubid/ieee/identifiers/nesc/edition.rb +32 -0
- data/lib/pubid/ieee/identifiers/nesc/handbook.rb +43 -0
- data/lib/pubid/ieee/identifiers/nesc/redline.rb +35 -0
- data/lib/pubid/ieee/identifiers/nesc/standard.rb +41 -0
- data/lib/pubid/ieee/identifiers/nesc.rb +16 -0
- data/lib/pubid/ieee/identifiers/parenthetical_identifier.rb +14 -0
- data/lib/pubid/ieee/identifiers/project_draft_identifier.rb +49 -0
- data/lib/pubid/ieee/identifiers/redlined_standard.rb +26 -0
- data/lib/pubid/ieee/identifiers/si_standard.rb +38 -0
- data/lib/pubid/ieee/identifiers/standard.rb +44 -0
- data/lib/pubid/ieee/identifiers/supplement_identifier.rb +42 -0
- data/lib/pubid/ieee/identifiers.rb +34 -0
- data/lib/pubid/ieee/ire/builder.rb +62 -0
- data/lib/pubid/ieee/ire/identifier.rb +73 -0
- data/lib/pubid/ieee/ire/parser.rb +91 -0
- data/lib/pubid/ieee/ire.rb +11 -0
- data/lib/pubid/ieee/nesc/builder.rb +114 -0
- data/lib/pubid/ieee/nesc/parser.rb +155 -0
- data/lib/pubid/ieee/nesc.rb +10 -0
- data/lib/pubid/ieee/parser.rb +1644 -0
- data/lib/pubid/ieee/pre_parser.rb +301 -0
- data/lib/pubid/ieee/renderer.rb +408 -0
- data/lib/pubid/ieee/typed_stages.rb +183 -0
- data/lib/pubid/ieee/urn_generator.rb +215 -0
- data/lib/pubid/ieee/urn_parser.rb +34 -0
- data/lib/pubid/ieee.rb +163 -0
- data/lib/pubid/ieee_debug.rb +30 -0
- data/lib/pubid/ietf/builder.rb +78 -0
- data/lib/pubid/ietf/identifier.rb +5 -0
- data/lib/pubid/ietf/identifiers/base.rb +72 -0
- data/lib/pubid/ietf/identifiers/bcp.rb +36 -0
- data/lib/pubid/ietf/identifiers/fyi.rb +36 -0
- data/lib/pubid/ietf/identifiers/internet_draft.rb +45 -0
- data/lib/pubid/ietf/identifiers/rfc.rb +27 -0
- data/lib/pubid/ietf/identifiers/serialization.rb +51 -0
- data/lib/pubid/ietf/identifiers/std.rb +36 -0
- data/lib/pubid/ietf/identifiers.rb +14 -0
- data/lib/pubid/ietf/parser.rb +61 -0
- data/lib/pubid/ietf/renderer.rb +64 -0
- data/lib/pubid/ietf/urn_generator.rb +37 -0
- data/lib/pubid/ietf/urn_parser.rb +43 -0
- data/lib/pubid/ietf.rb +85 -0
- data/lib/pubid/iho/builder.rb +37 -0
- data/lib/pubid/iho/identifier.rb +7 -0
- data/lib/pubid/iho/identifiers/base.rb +75 -0
- data/lib/pubid/iho/identifiers/bibliographic.rb +16 -0
- data/lib/pubid/iho/identifiers/circular_letter.rb +15 -0
- data/lib/pubid/iho/identifiers/miscellaneous.rb +16 -0
- data/lib/pubid/iho/identifiers/publication.rb +15 -0
- data/lib/pubid/iho/identifiers/standard.rb +15 -0
- data/lib/pubid/iho/identifiers.rb +13 -0
- data/lib/pubid/iho/parser.rb +68 -0
- data/lib/pubid/iho/renderer.rb +30 -0
- data/lib/pubid/iho/urn_generator.rb +29 -0
- data/lib/pubid/iho/urn_parser.rb +58 -0
- data/lib/pubid/iho.rb +77 -0
- data/lib/pubid/isbn/builder.rb +44 -0
- data/lib/pubid/isbn/check_digit.rb +53 -0
- data/lib/pubid/isbn/identifier.rb +81 -0
- data/lib/pubid/isbn/identifiers/book.rb +30 -0
- data/lib/pubid/isbn/identifiers.rb +9 -0
- data/lib/pubid/isbn/parser.rb +45 -0
- data/lib/pubid/isbn/renderer.rb +16 -0
- data/lib/pubid/isbn.rb +52 -0
- data/lib/pubid/iso/builder.rb +316 -0
- data/lib/pubid/iso/bundled_identifier.rb +138 -0
- data/lib/pubid/iso/combined_identifier.rb +24 -0
- data/lib/pubid/iso/components/code.rb +24 -0
- data/lib/pubid/iso/components/publisher.rb +62 -0
- data/lib/pubid/iso/components.rb +10 -0
- data/lib/pubid/iso/format_resolver.rb +45 -0
- data/lib/pubid/iso/identifier.rb +318 -0
- data/lib/pubid/iso/identifiers/addendum.rb +107 -0
- data/lib/pubid/iso/identifiers/amendment.rb +132 -0
- data/lib/pubid/iso/identifiers/corrigendum.rb +108 -0
- data/lib/pubid/iso/identifiers/data.rb +75 -0
- data/lib/pubid/iso/identifiers/directives.rb +65 -0
- data/lib/pubid/iso/identifiers/directives_supplement.rb +148 -0
- data/lib/pubid/iso/identifiers/extract.rb +30 -0
- data/lib/pubid/iso/identifiers/guide.rb +99 -0
- data/lib/pubid/iso/identifiers/international_standard.rb +168 -0
- data/lib/pubid/iso/identifiers/international_standardized_profile.rb +94 -0
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +95 -0
- data/lib/pubid/iso/identifiers/pas.rb +93 -0
- data/lib/pubid/iso/identifiers/recommendation.rb +45 -0
- data/lib/pubid/iso/identifiers/supplement.rb +95 -0
- data/lib/pubid/iso/identifiers/tc_document.rb +137 -0
- data/lib/pubid/iso/identifiers/technical_report.rb +103 -0
- data/lib/pubid/iso/identifiers/technical_specification.rb +102 -0
- data/lib/pubid/iso/identifiers/technology_trends_assessments.rb +95 -0
- data/lib/pubid/iso/identifiers.rb +32 -0
- data/lib/pubid/iso/normalizer.rb +89 -0
- data/lib/pubid/iso/parser.rb +534 -0
- data/lib/pubid/iso/rendering_style.rb +120 -0
- data/lib/pubid/iso/single_identifier.rb +60 -0
- data/lib/pubid/iso/supplement_identifier.rb +53 -0
- data/lib/pubid/iso/urn_generator.rb +313 -0
- data/lib/pubid/iso/urn_parser.rb +442 -0
- data/lib/pubid/iso/utilities.rb +86 -0
- data/lib/pubid/iso.rb +236 -0
- data/lib/pubid/itu/builder.rb +360 -0
- data/lib/pubid/itu/components/code.rb +84 -0
- data/lib/pubid/itu/components/designation.rb +35 -0
- data/lib/pubid/itu/components/sector.rb +46 -0
- data/lib/pubid/itu/components/series.rb +25 -0
- data/lib/pubid/itu/components.rb +12 -0
- data/lib/pubid/itu/i18n.rb +9 -0
- data/lib/pubid/itu/i18n.yaml +30 -0
- data/lib/pubid/itu/identifier.rb +4 -0
- data/lib/pubid/itu/identifiers/addendum.rb +15 -0
- data/lib/pubid/itu/identifiers/amendment.rb +19 -0
- data/lib/pubid/itu/identifiers/annex.rb +83 -0
- data/lib/pubid/itu/identifiers/annex_of_recommendation.rb +87 -0
- data/lib/pubid/itu/identifiers/appendix_of_recommendation.rb +92 -0
- data/lib/pubid/itu/identifiers/base.rb +482 -0
- data/lib/pubid/itu/identifiers/combined_identifier.rb +121 -0
- data/lib/pubid/itu/identifiers/corrigendum.rb +35 -0
- data/lib/pubid/itu/identifiers/errata.rb +15 -0
- data/lib/pubid/itu/identifiers/handbook.rb +38 -0
- data/lib/pubid/itu/identifiers/question.rb +63 -0
- data/lib/pubid/itu/identifiers/recommendation.rb +15 -0
- data/lib/pubid/itu/identifiers/report.rb +39 -0
- data/lib/pubid/itu/identifiers/special_publication.rb +31 -0
- data/lib/pubid/itu/identifiers/standard_serialization.rb +58 -0
- data/lib/pubid/itu/identifiers/supplement.rb +149 -0
- data/lib/pubid/itu/identifiers.rb +25 -0
- data/lib/pubid/itu/model.rb +111 -0
- data/lib/pubid/itu/parser.rb +679 -0
- data/lib/pubid/itu/urn_generator.rb +135 -0
- data/lib/pubid/itu/urn_parser.rb +31 -0
- data/lib/pubid/itu.rb +78 -0
- data/lib/pubid/jcgm/builder.rb +106 -0
- data/lib/pubid/jcgm/components/publisher.rb +20 -0
- data/lib/pubid/jcgm/components.rb +9 -0
- data/lib/pubid/jcgm/identifier.rb +21 -0
- data/lib/pubid/jcgm/identifiers/amendment.rb +24 -0
- data/lib/pubid/jcgm/identifiers/corrigendum.rb +34 -0
- data/lib/pubid/jcgm/identifiers/guide.rb +21 -0
- data/lib/pubid/jcgm/identifiers/gum_guide.rb +39 -0
- data/lib/pubid/jcgm/identifiers/meeting.rb +47 -0
- data/lib/pubid/jcgm/identifiers.rb +13 -0
- data/lib/pubid/jcgm/parser.rb +151 -0
- data/lib/pubid/jcgm/renderer.rb +89 -0
- data/lib/pubid/jcgm/single_identifier.rb +118 -0
- data/lib/pubid/jcgm/supplement_identifier.rb +51 -0
- data/lib/pubid/jcgm/urn_generator.rb +116 -0
- data/lib/pubid/jcgm/urn_parser.rb +177 -0
- data/lib/pubid/jcgm.rb +86 -0
- data/lib/pubid/jis/builder.rb +116 -0
- data/lib/pubid/jis/identifier.rb +194 -0
- data/lib/pubid/jis/identifiers/amendment.rb +16 -0
- data/lib/pubid/jis/identifiers/corrigendum.rb +16 -0
- data/lib/pubid/jis/identifiers/explanation.rb +22 -0
- data/lib/pubid/jis/identifiers/japanese_industrial_standard.rb +16 -0
- data/lib/pubid/jis/identifiers/standard.rb +28 -0
- data/lib/pubid/jis/identifiers/technical_report.rb +32 -0
- data/lib/pubid/jis/identifiers/technical_specification.rb +32 -0
- data/lib/pubid/jis/identifiers.rb +17 -0
- data/lib/pubid/jis/parser.rb +135 -0
- data/lib/pubid/jis/renderer.rb +69 -0
- data/lib/pubid/jis/single_identifier.rb +31 -0
- data/lib/pubid/jis/supplement_identifier.rb +50 -0
- data/lib/pubid/jis/urn_generator.rb +25 -0
- data/lib/pubid/jis/urn_parser.rb +23 -0
- data/lib/pubid/jis.rb +69 -0
- data/lib/pubid/lutaml/no_store_registration.rb +30 -0
- data/lib/pubid/nist/builder.rb +481 -0
- data/lib/pubid/nist/caster.rb +1234 -0
- data/lib/pubid/nist/circular_supplement_builder.rb +293 -0
- data/lib/pubid/nist/components/code.rb +27 -0
- data/lib/pubid/nist/components/edition.rb +134 -0
- data/lib/pubid/nist/components/issue_number.rb +28 -0
- data/lib/pubid/nist/components/part.rb +77 -0
- data/lib/pubid/nist/components/stage.rb +53 -0
- data/lib/pubid/nist/components/supplement.rb +191 -0
- data/lib/pubid/nist/components/translation.rb +42 -0
- data/lib/pubid/nist/components/update.rb +103 -0
- data/lib/pubid/nist/components/version.rb +35 -0
- data/lib/pubid/nist/components/volume.rb +32 -0
- data/lib/pubid/nist/components.rb +18 -0
- data/lib/pubid/nist/configuration.rb +87 -0
- data/lib/pubid/nist/identifier.rb +8 -0
- data/lib/pubid/nist/identifiers/base.rb +744 -0
- data/lib/pubid/nist/identifiers/circular.rb +80 -0
- data/lib/pubid/nist/identifiers/circular_supplement.rb +60 -0
- data/lib/pubid/nist/identifiers/commercial_standard.rb +42 -0
- data/lib/pubid/nist/identifiers/commercial_standard_emergency.rb +58 -0
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +69 -0
- data/lib/pubid/nist/identifiers/crpl_report.rb +138 -0
- data/lib/pubid/nist/identifiers/dated_document.rb +49 -0
- data/lib/pubid/nist/identifiers/federal_information_processing_standards.rb +95 -0
- data/lib/pubid/nist/identifiers/grant_contractor_report.rb +36 -0
- data/lib/pubid/nist/identifiers/handbook.rb +58 -0
- data/lib/pubid/nist/identifiers/internal_report.rb +64 -0
- data/lib/pubid/nist/identifiers/letter_circular.rb +46 -0
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +74 -0
- data/lib/pubid/nist/identifiers/monograph.rb +80 -0
- data/lib/pubid/nist/identifiers/ncstar.rb +41 -0
- data/lib/pubid/nist/identifiers/nsrds.rb +41 -0
- data/lib/pubid/nist/identifiers/owmwp.rb +35 -0
- data/lib/pubid/nist/identifiers/report.rb +77 -0
- data/lib/pubid/nist/identifiers/special_publication.rb +46 -0
- data/lib/pubid/nist/identifiers/technical_note.rb +91 -0
- data/lib/pubid/nist/identifiers.rb +33 -0
- data/lib/pubid/nist/parser.rb +752 -0
- data/lib/pubid/nist/parser_output_normalizer.rb +233 -0
- data/lib/pubid/nist/preprocessor.rb +443 -0
- data/lib/pubid/nist/renderer.rb +43 -0
- data/lib/pubid/nist/router.rb +149 -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 +57 -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 +84 -0
- data/lib/pubid/nist/urn_generator.rb +133 -0
- data/lib/pubid/nist/urn_parser.rb +67 -0
- data/lib/pubid/nist.rb +138 -0
- data/lib/pubid/oasis/builder.rb +79 -0
- data/lib/pubid/oasis/identifier.rb +160 -0
- data/lib/pubid/oasis/identifiers/standard.rb +29 -0
- data/lib/pubid/oasis/identifiers.rb +9 -0
- data/lib/pubid/oasis/parser.rb +34 -0
- data/lib/pubid/oasis/renderer.rb +29 -0
- data/lib/pubid/oasis/urn_generator.rb +25 -0
- data/lib/pubid/oasis/urn_parser.rb +22 -0
- data/lib/pubid/oasis.rb +79 -0
- data/lib/pubid/ogc/builder.rb +33 -0
- data/lib/pubid/ogc/identifier.rb +81 -0
- data/lib/pubid/ogc/identifiers/document.rb +26 -0
- data/lib/pubid/ogc/identifiers.rb +10 -0
- data/lib/pubid/ogc/parser.rb +40 -0
- data/lib/pubid/ogc/renderer.rb +33 -0
- data/lib/pubid/ogc/urn_generator.rb +14 -0
- data/lib/pubid/ogc/urn_parser.rb +22 -0
- data/lib/pubid/ogc.rb +71 -0
- data/lib/pubid/oiml/builder.rb +270 -0
- data/lib/pubid/oiml/components/code.rb +37 -0
- data/lib/pubid/oiml/components.rb +9 -0
- data/lib/pubid/oiml/identifier.rb +64 -0
- data/lib/pubid/oiml/identifiers/amendment.rb +13 -0
- data/lib/pubid/oiml/identifiers/annex.rb +29 -0
- data/lib/pubid/oiml/identifiers/basic_publication.rb +15 -0
- data/lib/pubid/oiml/identifiers/bulletin.rb +137 -0
- data/lib/pubid/oiml/identifiers/code_number.rb +90 -0
- data/lib/pubid/oiml/identifiers/document.rb +15 -0
- data/lib/pubid/oiml/identifiers/errata.rb +15 -0
- data/lib/pubid/oiml/identifiers/expert_report.rb +15 -0
- data/lib/pubid/oiml/identifiers/guide.rb +15 -0
- data/lib/pubid/oiml/identifiers/recommendation.rb +15 -0
- data/lib/pubid/oiml/identifiers/seminar_report.rb +15 -0
- data/lib/pubid/oiml/identifiers/vocabulary.rb +15 -0
- data/lib/pubid/oiml/identifiers.rb +20 -0
- data/lib/pubid/oiml/parser.rb +274 -0
- data/lib/pubid/oiml/renderer.rb +232 -0
- data/lib/pubid/oiml/single_identifier.rb +113 -0
- data/lib/pubid/oiml/supplement_identifier.rb +88 -0
- data/lib/pubid/oiml/urn_generator.rb +78 -0
- data/lib/pubid/oiml/urn_parser.rb +39 -0
- data/lib/pubid/oiml.rb +81 -0
- data/lib/pubid/omg/builder.rb +19 -0
- data/lib/pubid/omg/identifier.rb +47 -0
- data/lib/pubid/omg/identifiers/specification.rb +32 -0
- data/lib/pubid/omg/identifiers.rb +9 -0
- data/lib/pubid/omg/parser.rb +40 -0
- data/lib/pubid/omg/renderer.rb +19 -0
- data/lib/pubid/omg.rb +51 -0
- data/lib/pubid/parser/common_parse_methods.rb +13 -0
- data/lib/pubid/parser/common_parse_rules.rb +56 -0
- data/lib/pubid/parser/grammar.rb +74 -0
- data/lib/pubid/parser.rb +9 -0
- data/lib/pubid/parsers/base.rb +11 -0
- data/lib/pubid/parsers/mr_string.rb +206 -0
- data/lib/pubid/plateau/builder.rb +54 -0
- data/lib/pubid/plateau/identifier.rb +4 -0
- data/lib/pubid/plateau/identifiers/annex.rb +16 -0
- data/lib/pubid/plateau/identifiers/base.rb +55 -0
- data/lib/pubid/plateau/identifiers/handbook.rb +28 -0
- data/lib/pubid/plateau/identifiers/technical_report.rb +16 -0
- data/lib/pubid/plateau/identifiers.rb +11 -0
- data/lib/pubid/plateau/parser.rb +73 -0
- data/lib/pubid/plateau/renderer.rb +51 -0
- data/lib/pubid/plateau/supplement_identifier.rb +68 -0
- data/lib/pubid/plateau/urn_generator.rb +29 -0
- data/lib/pubid/plateau/urn_parser.rb +43 -0
- data/lib/pubid/plateau.rb +82 -0
- data/lib/pubid/prefixes_support.rb +51 -0
- data/lib/pubid/renderers/annotator.rb +233 -0
- data/lib/pubid/renderers/base.rb +66 -0
- data/lib/pubid/renderers/directives_renderer.rb +75 -0
- data/lib/pubid/renderers/guide_renderer.rb +26 -0
- data/lib/pubid/renderers/human_readable.rb +83 -0
- data/lib/pubid/renderers/iwa_renderer.rb +20 -0
- data/lib/pubid/renderers/mr_string.rb +64 -0
- data/lib/pubid/renderers/supplement_renderer.rb +36 -0
- data/lib/pubid/renderers/urn.rb +11 -0
- data/lib/pubid/renderers.rb +15 -0
- data/lib/pubid/rendering/context.rb +168 -0
- data/lib/pubid/rendering/date.rb +27 -0
- data/lib/pubid/rendering/language.rb +21 -0
- data/lib/pubid/rendering/numbering.rb +42 -0
- data/lib/pubid/rendering/publisher.rb +25 -0
- data/lib/pubid/rendering/stage.rb +38 -0
- data/lib/pubid/rendering/supplement.rb +46 -0
- data/lib/pubid/rendering.rb +13 -0
- data/lib/pubid/sae/builder.rb +32 -0
- data/lib/pubid/sae/components/code.rb +9 -0
- data/lib/pubid/sae/components/date.rb +27 -0
- data/lib/pubid/sae/components/type.rb +23 -0
- data/lib/pubid/sae/components.rb +11 -0
- data/lib/pubid/sae/identifier.rb +4 -0
- data/lib/pubid/sae/identifiers/base.rb +47 -0
- data/lib/pubid/sae/identifiers.rb +8 -0
- data/lib/pubid/sae/parser.rb +55 -0
- data/lib/pubid/sae/renderer.rb +36 -0
- data/lib/pubid/sae/urn_generator.rb +30 -0
- data/lib/pubid/sae/urn_parser.rb +36 -0
- data/lib/pubid/sae.rb +66 -0
- data/lib/pubid/tgpp/builder.rb +41 -0
- data/lib/pubid/tgpp/identifier.rb +107 -0
- data/lib/pubid/tgpp/identifiers/technical_report.rb +32 -0
- data/lib/pubid/tgpp/identifiers/technical_specification.rb +33 -0
- data/lib/pubid/tgpp/identifiers.rb +11 -0
- data/lib/pubid/tgpp/parser.rb +78 -0
- data/lib/pubid/tgpp/renderer.rb +52 -0
- data/lib/pubid/tgpp/urn_generator.rb +39 -0
- data/lib/pubid/tgpp/urn_parser.rb +30 -0
- data/lib/pubid/tgpp.rb +83 -0
- data/lib/pubid/type_resolver.rb +59 -0
- data/lib/pubid/un/builder.rb +42 -0
- data/lib/pubid/un/identifier.rb +40 -0
- data/lib/pubid/un/identifiers/document.rb +24 -0
- data/lib/pubid/un/identifiers.rb +9 -0
- data/lib/pubid/un/parser.rb +25 -0
- data/lib/pubid/un/renderer.rb +11 -0
- data/lib/pubid/un.rb +46 -0
- data/lib/pubid/urn_generator/base.rb +110 -0
- data/lib/pubid/urn_parser/base.rb +81 -0
- data/lib/pubid/urn_parser/errors.rb +16 -0
- data/lib/pubid/urn_parser.rb +14 -0
- data/lib/pubid/utils/string_normalizer.rb +196 -0
- data/lib/pubid/utils.rb +7 -0
- data/lib/pubid/version.rb +3 -1
- data/lib/pubid/w3c/builder.rb +55 -0
- data/lib/pubid/w3c/identifier.rb +130 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/candidate_recommendation_draft.rb +31 -0
- data/lib/pubid/w3c/identifiers/draft_note.rb +31 -0
- data/lib/pubid/w3c/identifiers/note.rb +30 -0
- data/lib/pubid/w3c/identifiers/obsolete_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_edited_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/proposed_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/standard.rb +12 -0
- data/lib/pubid/w3c/identifiers/superseded_recommendation.rb +31 -0
- data/lib/pubid/w3c/identifiers/working_draft.rb +30 -0
- data/lib/pubid/w3c/identifiers.rb +25 -0
- data/lib/pubid/w3c/parser.rb +43 -0
- data/lib/pubid/w3c/renderer.rb +35 -0
- data/lib/pubid/w3c/urn_generator.rb +18 -0
- data/lib/pubid/w3c/urn_parser.rb +36 -0
- data/lib/pubid/w3c.rb +67 -0
- data/lib/pubid/xsf/builder.rb +17 -0
- data/lib/pubid/xsf/identifier.rb +66 -0
- data/lib/pubid/xsf/identifiers/xep.rb +31 -0
- data/lib/pubid/xsf/identifiers.rb +9 -0
- data/lib/pubid/xsf/parser.rb +25 -0
- data/lib/pubid/xsf/renderer.rb +23 -0
- data/lib/pubid/xsf/urn_generator.rb +13 -0
- data/lib/pubid/xsf/urn_parser.rb +18 -0
- data/lib/pubid/xsf.rb +81 -0
- data/lib/pubid.rb +551 -13
- data/lib/tasks/docs.rake +37 -0
- data/lib/tasks/export.rake +39 -0
- data/lib/tasks/website-data.json +7546 -0
- metadata +875 -171
- data/lib/pubid/registry.rb +0 -30
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
6
|
+
def generate
|
|
7
|
+
parts = ["urn", "ieee"]
|
|
8
|
+
|
|
9
|
+
parts << publisher_component
|
|
10
|
+
|
|
11
|
+
special_type = special_identifier_type_component
|
|
12
|
+
parts << special_type if special_type
|
|
13
|
+
|
|
14
|
+
tc = type_component
|
|
15
|
+
parts << tc if tc
|
|
16
|
+
|
|
17
|
+
cc = code_component
|
|
18
|
+
parts << cc if cc
|
|
19
|
+
|
|
20
|
+
yc = year_component
|
|
21
|
+
parts << yc if yc
|
|
22
|
+
|
|
23
|
+
dc = draft_component
|
|
24
|
+
parts << dc if dc
|
|
25
|
+
|
|
26
|
+
ec = edition_component
|
|
27
|
+
parts << ec if ec
|
|
28
|
+
|
|
29
|
+
md = month_day_component
|
|
30
|
+
parts << md if md
|
|
31
|
+
|
|
32
|
+
ds = draft_status_component
|
|
33
|
+
parts << ds if ds
|
|
34
|
+
|
|
35
|
+
if !special_type && identifier.redline
|
|
36
|
+
parts << "redline"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
if !special_type && identifier.interpretation
|
|
40
|
+
parts << "int"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Conformance is always a ConformanceIdentifier wrapper (special_type
|
|
44
|
+
# "conformance"), never inline on a base standard — the base no longer
|
|
45
|
+
# carries a conf_number attribute, so there is no inline conf part.
|
|
46
|
+
|
|
47
|
+
if identifier.ashrae_number
|
|
48
|
+
ashrae = "ashrae.#{identifier.ashrae_number}"
|
|
49
|
+
ashrae += "-#{identifier.ashrae_year}" if identifier.ashrae_year
|
|
50
|
+
parts << ashrae
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
if identifier.crossref
|
|
54
|
+
parts << "xref.#{identifier.crossref}"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
if identifier.relationships&.any?
|
|
58
|
+
rel = identifier.relationships.join("/")
|
|
59
|
+
parts << "rel.#{rel}"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
if identifier.revision_of
|
|
63
|
+
parts << "revof.#{identifier.revision_of}"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
if identifier.amendment_to
|
|
67
|
+
parts << "amdto.#{identifier.amendment_to}"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
if identifier.adoption
|
|
71
|
+
parts << "adopt.#{identifier.adoption}"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
reaffirmed = maybe(:reaffirmed)
|
|
75
|
+
if reaffirmed
|
|
76
|
+
parts << "reaff.#{reaffirmed}"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
if identifier.note
|
|
80
|
+
parts << "note.#{identifier.note}"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
if identifier.nickname
|
|
84
|
+
parts << "nick.#{identifier.nickname}"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
parts.join(":")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
def special_identifier_type_component
|
|
93
|
+
class_name = identifier.class.name.to_s
|
|
94
|
+
|
|
95
|
+
case class_name
|
|
96
|
+
when /RedlinedStandard/
|
|
97
|
+
"redlined"
|
|
98
|
+
when /SiStandard/
|
|
99
|
+
"si"
|
|
100
|
+
when /ConformanceIdentifier/
|
|
101
|
+
"conformance"
|
|
102
|
+
when /InterpretationIdentifier/
|
|
103
|
+
"interpretation"
|
|
104
|
+
when /SupplementIdentifier/
|
|
105
|
+
if identifier.typed_stage
|
|
106
|
+
type_code = identifier.typed_stage.type_code
|
|
107
|
+
case type_code.to_s
|
|
108
|
+
when "amd"
|
|
109
|
+
"amendment"
|
|
110
|
+
when "cor"
|
|
111
|
+
"corrigendum"
|
|
112
|
+
when "errata"
|
|
113
|
+
"errata"
|
|
114
|
+
else
|
|
115
|
+
type_code.to_s
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
else
|
|
119
|
+
if identifier.typed_stage
|
|
120
|
+
type_code = identifier.typed_stage.type_code
|
|
121
|
+
case type_code.to_s
|
|
122
|
+
when "SI"
|
|
123
|
+
"si"
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def publisher_component
|
|
130
|
+
pub = normalized_publisher
|
|
131
|
+
|
|
132
|
+
if identifier.copublisher&.any?
|
|
133
|
+
copubs = identifier.copublisher.map(&:to_s).map(&:downcase)
|
|
134
|
+
pub = [pub, *copubs].join("-")
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
pub
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# A dual-published document has TWO publishers, and
|
|
141
|
+
# DualPublished#publisher returns them as an Array — which `to_s`
|
|
142
|
+
# rendered into the URN as a literal Ruby array literal, brackets and
|
|
143
|
+
# quotes included: `urn:ieee:["ieee", "asme"]`. Join them the same way a
|
|
144
|
+
# copublisher list is joined above.
|
|
145
|
+
def normalized_publisher
|
|
146
|
+
names = Array(identifier.publisher)
|
|
147
|
+
.map { |p| p.to_s.downcase }.reject(&:empty?)
|
|
148
|
+
|
|
149
|
+
names.empty? ? "ieee" : names.join("-")
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def type_component
|
|
153
|
+
return nil unless identifier.type
|
|
154
|
+
|
|
155
|
+
type = identifier.type
|
|
156
|
+
return nil if !type || type.to_s.strip.empty? || type.to_s == "Std"
|
|
157
|
+
|
|
158
|
+
type.to_s.downcase.gsub(" ", ".")
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def code_component
|
|
162
|
+
return nil unless identifier.code_obj
|
|
163
|
+
|
|
164
|
+
identifier.code_obj.to_s
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# A multi-designation wrapper (AdoptedStandard, DualPublished,
|
|
168
|
+
# MultiNumberedIdentifier) carries no year of its own — the year sits on
|
|
169
|
+
# the designation it wraps — so the URN dropped it and two editions of
|
|
170
|
+
# one document produced the SAME urn: "AIEE No 15-1944" and
|
|
171
|
+
# "AIEE No 15-1959" both gave urn:ieee:aiee:15.
|
|
172
|
+
#
|
|
173
|
+
# Fixed here, in the one place that reads the year, rather than by
|
|
174
|
+
# defining a `#year` method on each wrapper: `year` is a lutaml attribute
|
|
175
|
+
# on the base and a method of that name would shadow its generated
|
|
176
|
+
# accessor. `#root` already walks to the wrapped designation.
|
|
177
|
+
def year_component
|
|
178
|
+
return identifier.year if identifier.year
|
|
179
|
+
|
|
180
|
+
root = identifier.root
|
|
181
|
+
root.equal?(identifier) ? nil : root.year
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def draft_component
|
|
185
|
+
return nil unless identifier.draft_obj
|
|
186
|
+
|
|
187
|
+
"draft.#{identifier.draft_obj}"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def edition_component
|
|
191
|
+
return nil unless identifier.edition
|
|
192
|
+
|
|
193
|
+
"ed.#{identifier.edition}"
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def month_day_component
|
|
197
|
+
parts = []
|
|
198
|
+
|
|
199
|
+
parts << identifier.month if identifier.month
|
|
200
|
+
parts << identifier.day if identifier.day
|
|
201
|
+
|
|
202
|
+
return nil if parts.empty?
|
|
203
|
+
|
|
204
|
+
parts.join("-")
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def draft_status_component
|
|
208
|
+
return nil unless identifier.draft_status
|
|
209
|
+
|
|
210
|
+
status = identifier.draft_status.downcase
|
|
211
|
+
status.gsub(" ", ".")
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
# Parses IEEE URNs back into identifiers.
|
|
6
|
+
#
|
|
7
|
+
# UrnGenerator emits many fields; this parser handles the common
|
|
8
|
+
# published-standard shape:
|
|
9
|
+
# urn:ieee:{publisher}:{code}:{year}
|
|
10
|
+
#
|
|
11
|
+
# publisher is the lowercase publisher (with optional copublishers
|
|
12
|
+
# joined by `-`). code is the alphanumeric designation (period is the
|
|
13
|
+
# part separator within the code). The year separator in human-readable
|
|
14
|
+
# form is `-`.
|
|
15
|
+
#
|
|
16
|
+
# Examples:
|
|
17
|
+
# - urn:ieee:ieee:802.3:2018 → IEEE Std 802.3-2018
|
|
18
|
+
# - urn:ieee:ieee:1018:2019 → IEEE Std 1018-2019
|
|
19
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
20
|
+
PUBLISHER_LABEL = "IEEE"
|
|
21
|
+
|
|
22
|
+
def parse_urn(urn)
|
|
23
|
+
body = strip_namespace(urn)
|
|
24
|
+
parts = split_parts(body)
|
|
25
|
+
|
|
26
|
+
_publisher, code, year = parts
|
|
27
|
+
|
|
28
|
+
text = "#{PUBLISHER_LABEL} Std #{code}"
|
|
29
|
+
text += "-#{year}" if year
|
|
30
|
+
flavor_parse(text)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/pubid/ieee.rb
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# Publisher prefix. The private PreParser::PUBLISHERS list also holds adopted
|
|
8
|
+
# co-org names (ANSI, AIEE, ASA, ...) that are not leading routing tokens for
|
|
9
|
+
# an IEEE reference, so they are deliberately excluded. The joint ISO/IEC/IEEE
|
|
10
|
+
# form comes from Pubid::JOINT_PREFIXES.
|
|
11
|
+
PREFIXES = ["IEEE"].freeze
|
|
12
|
+
|
|
13
|
+
autoload :Aiee, "#{__dir__}/ieee/aiee"
|
|
14
|
+
autoload :Builder, "#{__dir__}/ieee/builder"
|
|
15
|
+
autoload :Identifier, "#{__dir__}/ieee/identifiers/base"
|
|
16
|
+
autoload :Identifiers, "#{__dir__}/ieee/identifiers"
|
|
17
|
+
autoload :Ire, "#{__dir__}/ieee/ire"
|
|
18
|
+
autoload :Nesc, "#{__dir__}/ieee/nesc"
|
|
19
|
+
autoload :Parser, "#{__dir__}/ieee/parser"
|
|
20
|
+
autoload :PreParser, "#{__dir__}/ieee/pre_parser"
|
|
21
|
+
autoload :Compaction, "#{__dir__}/ieee/compaction"
|
|
22
|
+
autoload :Renderer, "#{__dir__}/ieee/renderer"
|
|
23
|
+
autoload :TypedStages, "#{__dir__}/ieee/typed_stages"
|
|
24
|
+
autoload :UrnGenerator, "#{__dir__}/ieee/urn_generator"
|
|
25
|
+
autoload :UrnParser, "#{__dir__}/ieee/urn_parser"
|
|
26
|
+
|
|
27
|
+
# Components submodule
|
|
28
|
+
module Components
|
|
29
|
+
autoload :Code, "#{__dir__}/ieee/components/code"
|
|
30
|
+
autoload :Draft, "#{__dir__}/ieee/components/draft"
|
|
31
|
+
autoload :Relationship, "#{__dir__}/ieee/components/relationship"
|
|
32
|
+
autoload :TypedStage, "#{__dir__}/ieee/components/typed_stage"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Document-number series carrying an IEEE registered trademark ("®").
|
|
36
|
+
# 8802 is the ISO/IEC co-published form of the 802 series.
|
|
37
|
+
REGISTERED_SERIES = %w[802 8802 2030].freeze
|
|
38
|
+
|
|
39
|
+
# The ISO/IEC adoption of IEEE 802: the number alone identifies the series,
|
|
40
|
+
# whatever publishers are printed.
|
|
41
|
+
ISO_ADOPTED_SERIES = "8802"
|
|
42
|
+
|
|
43
|
+
class << self
|
|
44
|
+
def parse(input)
|
|
45
|
+
unless input.is_a?(String)
|
|
46
|
+
raise Pubid::Errors::InvalidInputError,
|
|
47
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if input.length > Pubid::MAX_INPUT_LENGTH
|
|
51
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
Identifier.parse(input)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# True when the document number belongs to a registered-trademark series.
|
|
58
|
+
# A project number keeps its series identity, so a leading "P" is
|
|
59
|
+
# stripped. `prefix` is the code's letter series, which must be absent
|
|
60
|
+
# (or the bare project "P") — "C802.1" is a different series that merely
|
|
61
|
+
# starts with the same digits. `publishers` guards against claiming an
|
|
62
|
+
# IEEE registered mark for another body that happens to have numbered a
|
|
63
|
+
# document 802 or 2030 — "AIEE Std No. 802" predates the IEEE 802 series
|
|
64
|
+
# by two decades. It is optional: with no publishers given the number
|
|
65
|
+
# decides, which keeps the plain number lookup usable on its own.
|
|
66
|
+
# @param number [String, nil] bare document number ("802", "P802")
|
|
67
|
+
# @param prefix [String, nil] letter series of the code ("C" for C37.09)
|
|
68
|
+
# @param publishers [Array<String>, String, nil] printed publisher tokens
|
|
69
|
+
def registered_series?(number, prefix = nil, publishers: nil)
|
|
70
|
+
return false unless prefix.nil? || prefix.to_s.empty? ||
|
|
71
|
+
prefix.to_s == "P"
|
|
72
|
+
|
|
73
|
+
bare = number.to_s.delete_prefix("P")
|
|
74
|
+
return false unless REGISTERED_SERIES.include?(bare)
|
|
75
|
+
return true if bare == ISO_ADOPTED_SERIES || publishers.nil?
|
|
76
|
+
|
|
77
|
+
Array(publishers).any? { |p| p.to_s.split("/").include?("IEEE") }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# IEEE trademark symbol for a document number: ® for the registered
|
|
81
|
+
# series, ™ for everything else. This is the entry point render sites
|
|
82
|
+
# use, because they hold the identifier and so know its number — the
|
|
83
|
+
# symbol must not depend on where in the rendered string the mark lands.
|
|
84
|
+
def trademark_symbol_for(number, prefix = nil, publishers: nil)
|
|
85
|
+
if registered_series?(number, prefix, publishers: publishers)
|
|
86
|
+
"®"
|
|
87
|
+
else
|
|
88
|
+
"™"
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# IEEE trademark symbol for a rendered identifier string. Kept for
|
|
93
|
+
# external callers only — every render site inside pubid passes the
|
|
94
|
+
# document number to #trademark_symbol_for instead, because the first
|
|
95
|
+
# numeric token of a rendered string is not reliably the document number
|
|
96
|
+
# (a NESC or IRE string starts with the publication year).
|
|
97
|
+
def trademark_symbol(rendered)
|
|
98
|
+
trademark_symbol_for(rendered.to_s[/(?<![0-9A-Za-z])P?(\d+)/, 1])
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
102
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
103
|
+
def identifier_types
|
|
104
|
+
@identifier_types ||= Identifiers.constants
|
|
105
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
106
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
107
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Build typed stage index from TypedStages module
|
|
111
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
112
|
+
def all_typed_stages
|
|
113
|
+
@all_typed_stages ||= TypedStages::TYPED_STAGES
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Lookup: type code -> identifier class
|
|
117
|
+
# @param code [String, Symbol] the type key to find
|
|
118
|
+
# @return [Class, nil] the matching identifier class
|
|
119
|
+
def locate_type(code)
|
|
120
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Lookup: abbreviation -> typed stage
|
|
124
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
125
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
126
|
+
def locate_stage(abbr)
|
|
127
|
+
abbr_str = abbr.to_s.upcase
|
|
128
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Lookup: IEEE draft notation -> typed stage
|
|
132
|
+
# @param draft [String] IEEE draft notation (e.g., "D1", "D5", "P")
|
|
133
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
134
|
+
def locate_stage_by_ieee_draft(draft)
|
|
135
|
+
return nil if draft.nil? || draft.to_s.strip.empty?
|
|
136
|
+
|
|
137
|
+
draft_str = draft.to_s.strip
|
|
138
|
+
|
|
139
|
+
# Try exact match on abbreviation first
|
|
140
|
+
ts = all_typed_stages.find { |t| t.abbr.include?(draft_str) }
|
|
141
|
+
return ts if ts
|
|
142
|
+
|
|
143
|
+
# Try match on ieee_draft_equivalent
|
|
144
|
+
all_typed_stages.find { |t| t.ieee_draft_equivalent == draft_str }
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Lookup: ISO stage code -> typed stage
|
|
148
|
+
# @param stage [String] ISO stage code (e.g., "WD", "CD", "DIS", "FDIS")
|
|
149
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
150
|
+
def locate_stage_by_iso_stage(stage)
|
|
151
|
+
return nil if stage.nil? || stage.to_s.strip.empty?
|
|
152
|
+
|
|
153
|
+
all_typed_stages.find { |ts| ts.iso_stage_equivalent == stage.to_s.strip }
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
Pubid::Registry.register(:ieee, Pubid::Ieee)
|
|
160
|
+
|
|
161
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
162
|
+
Pubid::Ieee::Identifier.format_registry = Pubid::FormatRegistry.new(parent: Pubid::Identifier.format_registry)
|
|
163
|
+
Pubid::Ieee::Identifier.format_registry.register(:human, renderer: Pubid::Ieee::Renderer)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ieee
|
|
5
|
+
autoload :Aiee, "#{__dir__}/aiee"
|
|
6
|
+
autoload :Builder, "#{__dir__}/builder"
|
|
7
|
+
autoload :Identifier,
|
|
8
|
+
"#{__dir__}/identifier (DEBUG: __dir__ is \#{__dir__})"
|
|
9
|
+
autoload :Identifiers, "#{__dir__}/identifiers"
|
|
10
|
+
autoload :Ire, "#{__dir__}/ire"
|
|
11
|
+
autoload :Nesc, "#{__dir__}/nesc"
|
|
12
|
+
autoload :Parser, "#{__dir__}/parser"
|
|
13
|
+
autoload :TypedStages, "#{__dir__}/typed_stages"
|
|
14
|
+
autoload :UrnGenerator, "#{__dir__}/urn_generator"
|
|
15
|
+
|
|
16
|
+
# Components submodule
|
|
17
|
+
module Components
|
|
18
|
+
autoload :Code, "#{__dir__}/components/code"
|
|
19
|
+
autoload :Draft, "#{__dir__}/components/draft"
|
|
20
|
+
autoload :Relationship, "#{__dir__}/components/relationship"
|
|
21
|
+
autoload :TypedStage, "#{__dir__}/components/typed_stage"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class << self
|
|
25
|
+
def parse(input)
|
|
26
|
+
Identifier.parse(input)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ietf
|
|
5
|
+
# Turns the Parser's parse tree into a concrete identifier object, choosing
|
|
6
|
+
# the class from which fields are present.
|
|
7
|
+
class Builder
|
|
8
|
+
SUBSERIES_CLASSES = {
|
|
9
|
+
"BCP" => "Bcp",
|
|
10
|
+
"STD" => "Std",
|
|
11
|
+
"FYI" => "Fyi",
|
|
12
|
+
}.freeze
|
|
13
|
+
|
|
14
|
+
def self.build(parsed_data)
|
|
15
|
+
new.build(parsed_data)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def build(data)
|
|
19
|
+
if data.key?(:draft_rest)
|
|
20
|
+
build_draft(data)
|
|
21
|
+
elsif data[:series]
|
|
22
|
+
build_subseries(data)
|
|
23
|
+
else
|
|
24
|
+
build_rfc(data)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def build_rfc(data)
|
|
31
|
+
Identifiers::Rfc.new(number: unpad(data[:number]))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# The series token only selects the class: it is derived back from the
|
|
35
|
+
# class (Identifiers::Std::SERIES) rather than stored, since `_type`
|
|
36
|
+
# already carries it.
|
|
37
|
+
def build_subseries(data)
|
|
38
|
+
klass = Identifiers.const_get(
|
|
39
|
+
SUBSERIES_CLASSES.fetch(data[:series].to_s),
|
|
40
|
+
)
|
|
41
|
+
klass.new(number: unpad(data[:number]))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Strip the zero-padding the RFC editor's rfc-index.xml writes ("STD0066",
|
|
45
|
+
# "RFC0001") so the canonical printed form is the unpadded one. The
|
|
46
|
+
# look-ahead keeps the last digit, so an all-zero number stays "0" rather
|
|
47
|
+
# than becoming empty.
|
|
48
|
+
def unpad(number)
|
|
49
|
+
number.to_s.sub(/\A0+(?=\d)/, "")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def build_draft(data)
|
|
53
|
+
full = "draft-#{data[:draft_rest]}"
|
|
54
|
+
slug, version = split_draft_version(full)
|
|
55
|
+
Identifiers::InternetDraft.new(number: slug, version: version)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# An Internet-Draft version is a trailing "-NN" of *exactly* two digits at
|
|
59
|
+
# the very end of the slug. A three-digit topic tail (e.g. "...-256") is
|
|
60
|
+
# NOT a version: there the char before the last two digits is itself a
|
|
61
|
+
# digit, not "-", so the guard below leaves it in the slug. This also
|
|
62
|
+
# means a (non-existent in practice) revision >= 100 would be read as part
|
|
63
|
+
# of the slug — IETF drafts are always two-digit-versioned, so that case
|
|
64
|
+
# never arises. Either way the printed string round-trips exactly.
|
|
65
|
+
#
|
|
66
|
+
# Dotted slugs need no special handling here: only the final three
|
|
67
|
+
# characters are inspected, so "draft-ietf-pilc-2.5g3g-12" splits into
|
|
68
|
+
# ("draft-ietf-pilc-2.5g3g", "12").
|
|
69
|
+
def split_draft_version(full)
|
|
70
|
+
if full.length > 3 && full[-3] == "-" && full[-2..].match?(/\A\d\d\z/)
|
|
71
|
+
[full[0...-3], full[-2..]]
|
|
72
|
+
else
|
|
73
|
+
[full, nil]
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ietf
|
|
5
|
+
# Base class for every IETF identifier AND the flavor's parse/create entry
|
|
6
|
+
# point (mirrors Pubid::Jis::Identifier). Concrete identifiers under
|
|
7
|
+
# Pubid::Ietf::Identifiers descend from this class, so a parsed IETF id is
|
|
8
|
+
# an instance of Pubid::Ietf::Identifier.
|
|
9
|
+
#
|
|
10
|
+
# All families are flat, supplement-free, and use plain string attributes.
|
|
11
|
+
# Those attributes are declared on the LEAVES by Identifiers::Serialization
|
|
12
|
+
# (see the determinism note there — never re-add `attribute :number` here):
|
|
13
|
+
# * Rfc -> number ("2119")
|
|
14
|
+
# * Bcp/Std/Fyi -> number ("3") + a derived `series` reader
|
|
15
|
+
# * InternetDraft -> number ("draft-giuliano-treedn") + optional version
|
|
16
|
+
class Identifier < ::Pubid::Identifier
|
|
17
|
+
# Polymorphic type map for lutaml::Model key_value (de)serialization: maps
|
|
18
|
+
# each subclass's polymorphic_name to its class name so a stored hash
|
|
19
|
+
# rebuilds the correct identifier type via the shared from_hash dispatch.
|
|
20
|
+
IETF_TYPE_MAP = {
|
|
21
|
+
"pubid:ietf:rfc" => "Pubid::Ietf::Identifiers::Rfc",
|
|
22
|
+
"pubid:ietf:bcp" => "Pubid::Ietf::Identifiers::Bcp",
|
|
23
|
+
"pubid:ietf:std" => "Pubid::Ietf::Identifiers::Std",
|
|
24
|
+
"pubid:ietf:fyi" => "Pubid::Ietf::Identifiers::Fyi",
|
|
25
|
+
"pubid:ietf:internet-draft" =>
|
|
26
|
+
"Pubid::Ietf::Identifiers::InternetDraft",
|
|
27
|
+
}.freeze
|
|
28
|
+
|
|
29
|
+
# NOTE: no `key_value` block here on purpose. The mapping lives on the
|
|
30
|
+
# leaves (Identifiers::Serialization); a block on this shared parent would
|
|
31
|
+
# be inherited-and-merged by every leaf and re-emit keys the leaf did not
|
|
32
|
+
# declare.
|
|
33
|
+
|
|
34
|
+
# Publisher is always "IETF". A plain constant (not a `publisher` method)
|
|
35
|
+
# so it doesn't shadow the inherited lutaml `publisher` attribute, which
|
|
36
|
+
# would otherwise fail serialization type validation.
|
|
37
|
+
PUBLISHER = "IETF"
|
|
38
|
+
|
|
39
|
+
# Basic string representation. Delegates to the flavor renderer.
|
|
40
|
+
def to_s(**opts)
|
|
41
|
+
render(format: :human, **opts)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# from_hash is the shared polymorphic dispatch on Pubid::Identifier; the
|
|
45
|
+
# IETF_TYPE_MAP above serves as its key_value polymorphic_map.
|
|
46
|
+
|
|
47
|
+
# Parse an IETF identifier string into the appropriate identifier object.
|
|
48
|
+
# @param identifier [String] the IETF identifier string to parse
|
|
49
|
+
# @return [Identifier] the concrete identifier object
|
|
50
|
+
# @raise [Pubid::Errors::InvalidInputError] if the input exceeds
|
|
51
|
+
# Pubid::MAX_INPUT_LENGTH
|
|
52
|
+
# @raise [Pubid::Errors::ParseError] if parsing fails
|
|
53
|
+
def self.parse(identifier)
|
|
54
|
+
# Inline length guard (CodeQL rb/polynomial-redos barrier) — must be
|
|
55
|
+
# the first statement. This class-level funnel is what relaton reaches
|
|
56
|
+
# directly through `pubid_class: ::Pubid::Ietf::Identifier`, so it
|
|
57
|
+
# cannot rely on the guard in Pubid::Ietf.parse.
|
|
58
|
+
unless identifier.is_a?(String)
|
|
59
|
+
raise Pubid::Errors::InvalidInputError,
|
|
60
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
64
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
parsed = Parser.parse(identifier)
|
|
68
|
+
Builder.build(parsed)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ietf
|
|
5
|
+
module Identifiers
|
|
6
|
+
# A BCP (Best Current Practice) sub-series id, e.g. "BCP 3".
|
|
7
|
+
class Bcp < Identifier
|
|
8
|
+
include Serialization
|
|
9
|
+
|
|
10
|
+
# The series token is derived from the class, not stored:
|
|
11
|
+
# `_type` already encodes it, so serializing `series` would
|
|
12
|
+
# duplicate the type in every index row.
|
|
13
|
+
SERIES = "BCP"
|
|
14
|
+
|
|
15
|
+
def series
|
|
16
|
+
SERIES
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
TYPED_STAGES = [
|
|
20
|
+
Pubid::Components::TypedStage.new(
|
|
21
|
+
code: :bcp,
|
|
22
|
+
stage_code: :published,
|
|
23
|
+
type_code: :bcp,
|
|
24
|
+
abbr: ["BCP"],
|
|
25
|
+
name: "Best Current Practice",
|
|
26
|
+
harmonized_stages: [],
|
|
27
|
+
),
|
|
28
|
+
].freeze
|
|
29
|
+
|
|
30
|
+
def self.type
|
|
31
|
+
{ key: :bcp, web: :bcp, title: "Best Current Practice", short: "BCP" }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ietf
|
|
5
|
+
module Identifiers
|
|
6
|
+
# An FYI (For Your Information) sub-series id, e.g. "FYI 1".
|
|
7
|
+
class Fyi < Identifier
|
|
8
|
+
include Serialization
|
|
9
|
+
|
|
10
|
+
# The series token is derived from the class, not stored:
|
|
11
|
+
# `_type` already encodes it, so serializing `series` would
|
|
12
|
+
# duplicate the type in every index row.
|
|
13
|
+
SERIES = "FYI"
|
|
14
|
+
|
|
15
|
+
def series
|
|
16
|
+
SERIES
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
TYPED_STAGES = [
|
|
20
|
+
Pubid::Components::TypedStage.new(
|
|
21
|
+
code: :fyi,
|
|
22
|
+
stage_code: :published,
|
|
23
|
+
type_code: :fyi,
|
|
24
|
+
abbr: ["FYI"],
|
|
25
|
+
name: "For Your Information",
|
|
26
|
+
harmonized_stages: [],
|
|
27
|
+
),
|
|
28
|
+
].freeze
|
|
29
|
+
|
|
30
|
+
def self.type
|
|
31
|
+
{ key: :fyi, web: :fyi, title: "For Your Information", short: "FYI" }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|