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,679 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Itu
|
|
7
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
8
|
+
# Basic elements
|
|
9
|
+
rule(:digit) { match["0-9"] }
|
|
10
|
+
rule(:digits) { digit.repeat(1) }
|
|
11
|
+
rule(:letter) { match["A-Z"] }
|
|
12
|
+
rule(:space) { str(" ") }
|
|
13
|
+
rule(:dash) { str("-") }
|
|
14
|
+
rule(:dot) { str(".") }
|
|
15
|
+
|
|
16
|
+
# ITU prefix — accepts an optional leading "Recommendation " long-form
|
|
17
|
+
# prefix that appears in ITU's own citation style (e.g. the twin-text
|
|
18
|
+
# and common-text forms in issues #233 / #234).
|
|
19
|
+
rule(:itu_prefix) do
|
|
20
|
+
(str("Recommendation ") >> str("ITU") >> (dash | space)) |
|
|
21
|
+
(str("ITU") >> (dash | space))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Sector (R, T, or D)
|
|
25
|
+
rule(:sector) do
|
|
26
|
+
(str("R") | str("T") | str("D")).as(:sector)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Series (BO, V, X, etc.)
|
|
30
|
+
rule(:series) do
|
|
31
|
+
(
|
|
32
|
+
# Study groups: SG1, SG12
|
|
33
|
+
(str("SG") >> digits) |
|
|
34
|
+
# Regular series: BO, V, X, etc.
|
|
35
|
+
letter.repeat(1, 3)
|
|
36
|
+
).as(:series)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# A numeric series GROUP rather than a single document — "E-100",
|
|
40
|
+
# "E100-300", "G-100", "Q-500". Deliberately capped at ONE leading
|
|
41
|
+
# letter: two or more letters before the dash is a series-code DOCUMENT
|
|
42
|
+
# (EMC-5, MES-2, IMPL-8, SEC-QKD), handled by series_code_body, and the
|
|
43
|
+
# two must never shadow each other. That split is a corpus regularity,
|
|
44
|
+
# not an ITU rule — see the boundary spec.
|
|
45
|
+
rule(:series_group) do
|
|
46
|
+
(letter >> digits.maybe >> dash >> digits).as(:series)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# The literal word "series" — "ITU-T E-300 series Suppl. 1",
|
|
50
|
+
# "ITU-T E.1100 series Suppl. 1". It is NOT part of the series token (it
|
|
51
|
+
# also follows a dotted code, where folding it in would corrupt the value
|
|
52
|
+
# every index row is keyed on), so it is carried as its own marker.
|
|
53
|
+
rule(:series_word) { space >> str("series").as(:series_word) }
|
|
54
|
+
|
|
55
|
+
# Number
|
|
56
|
+
rule(:number) do
|
|
57
|
+
digits.as(:number)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
rule(:subseries) do
|
|
61
|
+
dot >> digits.as(:subseries)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Edition words. "bis" = 2nd edition, "ter" = 3rd, "quater" = 4th.
|
|
65
|
+
# "quarter" is a real misspelling in ITU's own data, kept verbatim so the
|
|
66
|
+
# two records it appears on stay distinct from their "quater" siblings.
|
|
67
|
+
rule(:series_suffix_word) do
|
|
68
|
+
str("bis") | str("ter") | str("quater") | str("quarter")
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Edition suffix attached directly to the recommendation number.
|
|
72
|
+
# Example: X.50bis, V.8bis, V.31bis.
|
|
73
|
+
rule(:series_suffix) { series_suffix_word.as(:series_suffix) }
|
|
74
|
+
|
|
75
|
+
# The same word separated by a space — "ITU-T E.250 bis (12/1972)",
|
|
76
|
+
# "ITU-T V.25 ter". The captured space IS the marker: its presence sets
|
|
77
|
+
# Code#series_suffix_spaced, so the glued form above still round-trips
|
|
78
|
+
# byte-exactly (locked by recommendation_spec.rb's issue-#231 block).
|
|
79
|
+
rule(:series_suffix_spaced) do
|
|
80
|
+
space.as(:series_suffix_spaced) >> series_suffix_word.as(:series_suffix)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# A single trailing letter distinguishing variants of one Recommendation:
|
|
84
|
+
# "ITU-T D.200 R", "ITU-T Q.2931 B", "ITU-T R.38 A", the glued
|
|
85
|
+
# "ITU-T D.502R" and the lowercase "ITU-T I.256.2a".
|
|
86
|
+
#
|
|
87
|
+
# TWO guards make this safe, and both are load-bearing:
|
|
88
|
+
# * the A-R cap keeps it clear of the "S" of " Suppl." and the "V" of a
|
|
89
|
+
# bare version marker (" V2");
|
|
90
|
+
# * the trailing absent? forbids any further letter/digit, so " Amd."
|
|
91
|
+
# (A then "m"), " Add.", " Annex A" (A then "n"), " App." , " Cor."
|
|
92
|
+
# (C then "o") and " Err." (E then "r") can never be mistaken for a
|
|
93
|
+
# qualifier.
|
|
94
|
+
# It cannot collide with `language` (dash-attached, "-F") nor with
|
|
95
|
+
# date_part/version_part, which both need "(" after the space.
|
|
96
|
+
rule(:qualifier_letter) do
|
|
97
|
+
(match["A-R"] | match["a-r"]).as(:qualifier) >>
|
|
98
|
+
match["A-Za-z0-9"].absent?
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
rule(:qualifier_glued) { qualifier_letter }
|
|
102
|
+
rule(:qualifier_spaced) do
|
|
103
|
+
space.as(:qualifier_spaced) >> qualifier_letter
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Print-form suffixes that may trail a code with a separating space. They
|
|
107
|
+
# cannot live inside `code` itself, because the space would then also be
|
|
108
|
+
# offered to " Suppl." / " Annex" and would have to backtrack out of a
|
|
109
|
+
# rule the wrappers depend on. Spliced after `code` and BEFORE
|
|
110
|
+
# combined_suffixes, since the corpus attaches the primary designation's
|
|
111
|
+
# suffix before the "/" ("ITU-T D.301 R/F.66").
|
|
112
|
+
rule(:code_suffixes) do
|
|
113
|
+
series_suffix_spaced.maybe >> qualifier_spaced.maybe
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# "ITU-T H.350 attachment (08/2003)" — the machine-readable attachment
|
|
117
|
+
# published alongside a Recommendation, a distinct record in ITU's
|
|
118
|
+
# catalogue. A bare marker word: the flag alone reconstructs it.
|
|
119
|
+
rule(:attachment) { space >> str("attachment").as(:attachment) }
|
|
120
|
+
|
|
121
|
+
# A range of Recommendations published as one document —
|
|
122
|
+
# "ITU-T Q.120-Q.139 (11/1988)". No conflict with `parts`, which requires
|
|
123
|
+
# digits after the dash and so cannot match "-Q.139".
|
|
124
|
+
rule(:range_end) do
|
|
125
|
+
dash >> (letter.repeat(1, 3) >> dot >> digits).as(:range_end)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Parts
|
|
129
|
+
rule(:part) do
|
|
130
|
+
dash >> digits.as(:part)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
rule(:parts) { part.repeat(0).as(:parts) }
|
|
134
|
+
|
|
135
|
+
# Code = imp-prefixed code (Implementers' Guide) or standard code.
|
|
136
|
+
# The imp_code alternative is tried first because the standard code's
|
|
137
|
+
# number rule requires digits, which "Imp712" / "ImpOSI" would not
|
|
138
|
+
# satisfy.
|
|
139
|
+
rule(:code) do
|
|
140
|
+
imp_code | standard_code
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# The glued qualifier sits last, after parts, so "BO.600-1" still parses
|
|
144
|
+
# and "D.502R" / "I.256.2a" newly do.
|
|
145
|
+
rule(:standard_code) do
|
|
146
|
+
number >> series_suffix.maybe >> subseries.maybe >> parts >>
|
|
147
|
+
qualifier_glued.maybe
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Implementers' Guide code: "Imp" prefix followed by digits or a
|
|
151
|
+
# short letter string. Examples: Imp712 (G.Imp712), ImpOSI (X.ImpOSI).
|
|
152
|
+
rule(:imp_code) do
|
|
153
|
+
str("Imp").as(:imp_marker) >>
|
|
154
|
+
(digits | letter.repeat(1, 3)).as(:number) >>
|
|
155
|
+
subseries.maybe >>
|
|
156
|
+
parts
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Date
|
|
160
|
+
rule(:date_part) do
|
|
161
|
+
space >> str("(") >>
|
|
162
|
+
(digits.as(:month) >> str("/")).maybe >>
|
|
163
|
+
digit.repeat(4, 4).as(:year) >>
|
|
164
|
+
str(")")
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Version marker — "(V14)" in "ITU-T H.264 (V14) (08/2021)". Always sits
|
|
168
|
+
# between the code and the publication date, so it is spliced in before
|
|
169
|
+
# `date_part.maybe` in every document rule. `date_part` requires digits
|
|
170
|
+
# after "(", so it fails cleanly on "(V…)" and the two never compete.
|
|
171
|
+
# ITU emits four spellings of the same marker: the canonical
|
|
172
|
+
# parenthesised "(V14)" plus the bare "V2", "v10" and "v.1". All land in
|
|
173
|
+
# the same `version` attribute and re-render canonically as " (V##)" —
|
|
174
|
+
# the one deliberate non-byte-exact normalisation in this grammar.
|
|
175
|
+
#
|
|
176
|
+
# The bare branch requires digits immediately after V/v so it cannot fire
|
|
177
|
+
# on a stray word, and it is unreachable by the qualifier_letter rule
|
|
178
|
+
# below, whose A-R cap deliberately excludes "V".
|
|
179
|
+
rule(:version_part) do
|
|
180
|
+
space >>
|
|
181
|
+
(
|
|
182
|
+
(str("(V") >> digits.as(:version) >> str(")")) |
|
|
183
|
+
((str("V") | str("v")) >> dot.maybe >> digits.as(:version))
|
|
184
|
+
)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Language
|
|
188
|
+
rule(:language) do
|
|
189
|
+
dash >> match["EFASCR"].as(:language)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Combined (joint) recommendation — one additional "/SERIES.CODE"
|
|
193
|
+
# designation, e.g. the "/Y.1351" of "G.780/Y.1351". Repeatable, so
|
|
194
|
+
# triple-joint forms ("G.780/Y.1351/Z.1362") are captured as a list.
|
|
195
|
+
# Each designation is a self-contained subtree under :designation; the
|
|
196
|
+
# repeated list is collected under :combined.
|
|
197
|
+
# A designation may carry the same print-form suffixes as the primary
|
|
198
|
+
# code — "ITU-T D.300 R/E.282 R" (both halves qualified),
|
|
199
|
+
# "ITU-T D.81/F.80 bis" and "ITU-T E.211/Q.11 quater" (only the last).
|
|
200
|
+
# The suffix is stored on the designation it printed against; no attempt
|
|
201
|
+
# is made to decide whether it semantically qualifies the joint document.
|
|
202
|
+
#
|
|
203
|
+
# These slots sit INSIDE the .as(:designation) subtree, so they consume
|
|
204
|
+
# " bis" before the outer code_suffixes (which precedes combined_suffixes)
|
|
205
|
+
# can see it — that is what makes "trails the last designation" work
|
|
206
|
+
# without ambiguity.
|
|
207
|
+
rule(:combined_designation) do
|
|
208
|
+
str("/") >>
|
|
209
|
+
(
|
|
210
|
+
series >> dot >> digits.as(:number) >>
|
|
211
|
+
subseries.maybe >> parts >>
|
|
212
|
+
qualifier_glued.maybe >>
|
|
213
|
+
series_suffix_spaced.maybe >>
|
|
214
|
+
qualifier_spaced.maybe
|
|
215
|
+
).as(:designation)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
rule(:combined_suffixes) do
|
|
219
|
+
combined_designation.repeat(1).as(:combined)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# The "Technical" qualifier of a Corrigendum — "ITU-T H.222.0 (1995)
|
|
223
|
+
# Technical Cor. 1 (02/1998)". It is captured as its OWN marker key
|
|
224
|
+
# rather than folded into the supplement_type alternation, so the type
|
|
225
|
+
# token stays the plain "Cor." that Builder#build_supplement's case maps.
|
|
226
|
+
# It is bound to the Cor. branch alone, NOT to the head of
|
|
227
|
+
# supplement_type: only a corrigendum is ever printed "Technical", and
|
|
228
|
+
# only Corrigendum carries the flag. Offered before any token, the
|
|
229
|
+
# marker would be accepted on "Technical Err. 1" / "Technical Amd. 1"
|
|
230
|
+
# and then silently dropped by the builder, collapsing those onto a
|
|
231
|
+
# different document's identifier.
|
|
232
|
+
rule(:technical_marker) do
|
|
233
|
+
str("Technical").as(:technical) >> space
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
# Supplement types. The Cor. branch is its own alternative so the
|
|
237
|
+
# optional "Technical" can precede it without landing inside the
|
|
238
|
+
# .as(:supplement_type) capture — the builder maps that token by string
|
|
239
|
+
# equality. It goes last, which is free: no other branch can match a
|
|
240
|
+
# leading "Technical" or "Cor".
|
|
241
|
+
rule(:supplement_type) do
|
|
242
|
+
(
|
|
243
|
+
str("Suppl.") | str("Suppl") |
|
|
244
|
+
str("Amd.") | str("Amd") |
|
|
245
|
+
str("Add.") | str("Add") |
|
|
246
|
+
str("Err.") | str("Err")
|
|
247
|
+
).as(:supplement_type) |
|
|
248
|
+
(technical_marker.maybe >>
|
|
249
|
+
(str("Cor.") | str("Cor")).as(:supplement_type))
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# Supplement number. ITU omits the space before the ordinal on some
|
|
253
|
+
# listings ("ITU-T E Suppl.1", "ITU-T D.211 Suppl.1") and the ordinal is
|
|
254
|
+
# itself dotted on the M/O series ("ITU-T M Suppl. 1.1"). The absent
|
|
255
|
+
# space is captured as a marker so `to_s` reproduces it; the dotted
|
|
256
|
+
# ordinal lands whole in the :string `number` and cannot run into a
|
|
257
|
+
# following date, because (dot >> digits) stops at the space before "(".
|
|
258
|
+
rule(:supplement_number) do
|
|
259
|
+
space.as(:supplement_space).maybe >>
|
|
260
|
+
(digits >> (dot >> digits).repeat(0)).as(:supplement_number)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Supplement date (separate from base date)
|
|
264
|
+
rule(:supplement_date) do
|
|
265
|
+
space >> str("(") >>
|
|
266
|
+
(digits.as(:supplement_month) >> str("/")).maybe >>
|
|
267
|
+
digit.repeat(4, 4).as(:supplement_year) >>
|
|
268
|
+
str(")")
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
# Base identifier for supplements
|
|
272
|
+
rule(:base_with_series) do
|
|
273
|
+
itu_prefix >>
|
|
274
|
+
sector >>
|
|
275
|
+
space >>
|
|
276
|
+
series >> dot >>
|
|
277
|
+
code >>
|
|
278
|
+
range_end.maybe >>
|
|
279
|
+
code_suffixes >>
|
|
280
|
+
combined_suffixes.maybe >>
|
|
281
|
+
series_word.maybe >>
|
|
282
|
+
attachment.maybe >>
|
|
283
|
+
version_part.maybe >>
|
|
284
|
+
date_part.maybe
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
rule(:base_without_series) do
|
|
288
|
+
itu_prefix >>
|
|
289
|
+
sector >>
|
|
290
|
+
space >>
|
|
291
|
+
code >>
|
|
292
|
+
code_suffixes >>
|
|
293
|
+
attachment.maybe >>
|
|
294
|
+
version_part.maybe >>
|
|
295
|
+
date_part.maybe
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# A series-code document — "EMC-5", "MES-2", "QOS-2", "IMPL-8",
|
|
299
|
+
# "SEC-QKD": a multi-letter mnemonic series dash-joined to a numeric or
|
|
300
|
+
# alphabetic document code. TWO letters minimum is the discriminator
|
|
301
|
+
# against series_group ("E-100", "G-100"), which has exactly one.
|
|
302
|
+
#
|
|
303
|
+
# This rule carries its own letter repeat, so the 1..3 cap on `series`
|
|
304
|
+
# (which stops the series token eating a following word) is untouched
|
|
305
|
+
# and "IMPL" still parses. It is deliberately a flat two-token shape
|
|
306
|
+
# (series + dash + alphanumeric number) rather than an optional middle
|
|
307
|
+
# segment: a greedy `letter.repeat(2)` would take "SEC", an optional
|
|
308
|
+
# "-QKD" would follow, and the required dash would then fail at
|
|
309
|
+
# end-of-input with no backtracking into the satisfied `.maybe`.
|
|
310
|
+
#
|
|
311
|
+
# The number stays in `code.number`, so `root.number` — the field
|
|
312
|
+
# relaton-index bsearches on — is "5" for EMC-5 and "QKD" for SEC-QKD
|
|
313
|
+
# rather than nil.
|
|
314
|
+
# The OB guard keeps "ITU-T OB-1" a clean parse failure. Without it the
|
|
315
|
+
# string reaches Builder#build's Recommendation fallback, whose
|
|
316
|
+
# validate_ob_no_sector! raises an ArgumentError that escapes
|
|
317
|
+
# Identifier.parse's Parslet::ParseFailed rescue — turning a rejected
|
|
318
|
+
# input into a crash for callers. It guards "OB" + dash specifically, so
|
|
319
|
+
# a genuine two-letter mnemonic starting "OB" would still parse.
|
|
320
|
+
rule(:series_code_body) do
|
|
321
|
+
(str("OB") >> dash).absent? >>
|
|
322
|
+
letter.repeat(2).as(:series) >> dash.as(:series_dash) >>
|
|
323
|
+
(digits | letter.repeat(1)).as(:number) >> parts
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
rule(:base_series_code) do
|
|
327
|
+
itu_prefix >>
|
|
328
|
+
sector >>
|
|
329
|
+
space >>
|
|
330
|
+
series_code_body >>
|
|
331
|
+
version_part.maybe >>
|
|
332
|
+
date_part.maybe
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
rule(:series_code_identifier) { base_series_code >> language.maybe }
|
|
336
|
+
|
|
337
|
+
# ITU-R Report — "Report ITU-R BT.2020-1 (2000)". Reports number
|
|
338
|
+
# independently of Recommendations, so the leading word is the ONLY thing
|
|
339
|
+
# distinguishing two real, different documents that share a
|
|
340
|
+
# series/number/edition. It is captured (unlike the decorative
|
|
341
|
+
# "Recommendation " of `itu_prefix`) so it reaches the built object.
|
|
342
|
+
rule(:report_word) { str("Report").as(:report_marker) }
|
|
343
|
+
|
|
344
|
+
# One body for both the with- and without-series shapes: `(series >> dot)`
|
|
345
|
+
# backtracks as a unit, so a numeric code ("Report ITU-R 2205") simply
|
|
346
|
+
# skips it.
|
|
347
|
+
#
|
|
348
|
+
# Deliberately NO combined_suffixes: a joint "Report X/Y" would reach
|
|
349
|
+
# Builder#build's `combined` branch, which builds a CombinedIdentifier and
|
|
350
|
+
# would silently drop the marker — a clean parse failure is better than a
|
|
351
|
+
# Report that comes back as a Recommendation. The OB guard mirrors
|
|
352
|
+
# series_code_body's: an Operational Bulletin is cross-bureau, and
|
|
353
|
+
# "Report ITU-T OB.1" would otherwise route to SpecialPublication (marker
|
|
354
|
+
# dropped) or hit validate_ob_no_sector!, whose ArgumentError escapes
|
|
355
|
+
# Identifier.parse's Parslet::ParseFailed rescue.
|
|
356
|
+
rule(:report_body) do
|
|
357
|
+
(str("OB") >> dot).absent? >>
|
|
358
|
+
(series >> dot).maybe >>
|
|
359
|
+
code >>
|
|
360
|
+
range_end.maybe >>
|
|
361
|
+
code_suffixes >>
|
|
362
|
+
series_word.maybe >>
|
|
363
|
+
attachment.maybe >>
|
|
364
|
+
version_part.maybe >>
|
|
365
|
+
date_part.maybe
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
# Both spellings ITU and downstream bibliographies use. `to_s` renders
|
|
369
|
+
# the leading (ITU's own) form for either.
|
|
370
|
+
rule(:base_report) do
|
|
371
|
+
(report_word >> space >> itu_prefix >> sector >> space >> report_body) |
|
|
372
|
+
(itu_prefix >> sector >> space >> report_word >> space >> report_body)
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
# Slot in `rule(:identifier)`: AFTER supplement/annex/appendix (all of
|
|
376
|
+
# which reach a Report through `base` and match the longer wrapped form
|
|
377
|
+
# "Report ITU-R BT.2020-1 Suppl. 1"), and BEFORE with_series, which would
|
|
378
|
+
# match the infix spelling's "ITU-R" prefix and then fail on the
|
|
379
|
+
# unconsumed " Report ...".
|
|
380
|
+
rule(:report_identifier) { base_report >> language.maybe }
|
|
381
|
+
|
|
382
|
+
# base_series_code goes LAST: it cannot shadow base_with_series (which
|
|
383
|
+
# needs series >> dot — "EMC" then "." fails on "-", and the greedy
|
|
384
|
+
# "IMP" of "IMPL" then fails on "L") nor base_without_series (whose code
|
|
385
|
+
# needs digits or "Imp"), so the last slot is both safe and the smallest
|
|
386
|
+
# blast radius.
|
|
387
|
+
# base_report goes FIRST and is order-free: `itu_prefix` admits only
|
|
388
|
+
# "Recommendation " or "ITU", and `letter` is [A-Z], so neither `series`
|
|
389
|
+
# (of base_with_series) nor `series_code_body` can consume the "Report"
|
|
390
|
+
# token of either spelling. Its presence is what lets a supplement, annex
|
|
391
|
+
# or appendix wrap a Report.
|
|
392
|
+
rule(:base) do
|
|
393
|
+
base_report | base_with_series | base_without_series | base_series_code
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
# Annex label — one series letter, optionally a number ("F3") and/or a
|
|
397
|
+
# "+" ("C+", ITU-T G.729 Annex C+).
|
|
398
|
+
rule(:annex_label) do
|
|
399
|
+
letter >> digits.maybe >> str("+").maybe
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
# A labelled annex of a Recommendation — "ITU-T A.23 Annex A (06/2014)".
|
|
403
|
+
# The annexed document is wrapped in :base so its own date (the leading
|
|
404
|
+
# "(2002)" of "ITU-T X.692 (2002) Annex E (03/2002)") lands one level down
|
|
405
|
+
# and cannot collide with the annex's date — Parslet silently keeps only
|
|
406
|
+
# the last of two same-named keys in one flattened hash.
|
|
407
|
+
rule(:annex_body) do
|
|
408
|
+
base.as(:base) >>
|
|
409
|
+
space >> str("Annex") >> space >>
|
|
410
|
+
annex_label.as(:annex_number) >>
|
|
411
|
+
date_part.maybe
|
|
412
|
+
end
|
|
413
|
+
|
|
414
|
+
rule(:annex_identifier) { annex_body >> language.maybe }
|
|
415
|
+
|
|
416
|
+
# Appendix label — a Roman numeral ("I", "II", "IV", "VI").
|
|
417
|
+
rule(:roman) { match["IVX"].repeat(1) }
|
|
418
|
+
|
|
419
|
+
# A labelled appendix of a Recommendation — "ITU-T G.101 App. I
|
|
420
|
+
# (05/2000)", "ITU-T O.9 App.I (1998)". Structurally identical to
|
|
421
|
+
# annex_body, and for the same reason: the appendixed document is wrapped
|
|
422
|
+
# in :base so its own date (the leading "(1988)" of "ITU-T G.722 (1988)
|
|
423
|
+
# App. IV (11/2006)") lands one level down and cannot collide with the
|
|
424
|
+
# appendix's — Parslet silently keeps only the last of two same-named
|
|
425
|
+
# keys in one flattened hash. The space after "App." is optional in ITU's
|
|
426
|
+
# listings; rendering normalises it back to the spaced spelling.
|
|
427
|
+
rule(:appendix_body) do
|
|
428
|
+
base.as(:base) >>
|
|
429
|
+
space >> str("App.") >> space.maybe >>
|
|
430
|
+
roman.as(:appendix_number) >>
|
|
431
|
+
appendix_material.maybe >>
|
|
432
|
+
date_part.maybe
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
# The companion artefact of an appendix, published as its own record —
|
|
436
|
+
# "ITU-T G.726 App. II test vectors (03/1991)",
|
|
437
|
+
# "ITU-T G.728 App. I Software (07/1995)". A closed set of two literals,
|
|
438
|
+
# not free text, so it cannot swallow an unrelated tail.
|
|
439
|
+
rule(:appendix_material) do
|
|
440
|
+
space >> (str("test vectors") | str("Software")).as(:appendix_material)
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
rule(:appendix_identifier) { appendix_body >> language.maybe }
|
|
444
|
+
|
|
445
|
+
# Supplement with base identifier (has recommendation number).
|
|
446
|
+
# The base may itself be an annex ("... Annex B (1996) Cor. 3 (03/2001)");
|
|
447
|
+
# annex_body is tried first because it is the longer match. When it fails
|
|
448
|
+
# (an ordinary supplement, where " Suppl." follows the code instead of
|
|
449
|
+
# " Annex") the alternation falls through to the plain base.
|
|
450
|
+
rule(:supplement_with_base) do
|
|
451
|
+
(annex_body.as(:base) | appendix_body.as(:base) | base.as(:base)) >>
|
|
452
|
+
space >>
|
|
453
|
+
supplement_type >>
|
|
454
|
+
supplement_number >>
|
|
455
|
+
supplement_date.maybe >>
|
|
456
|
+
language.maybe
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
# A supplement whose base is itself a supplement — e.g. Errata on an
|
|
460
|
+
# Amendment ("G.9701 (2014) Amd. 3 Err. 1 (12/2017)") or Errata on a
|
|
461
|
+
# Corrigendum. The parse tree nests base-inside-base so the builder
|
|
462
|
+
# produces a Supplement whose base is another Supplement.
|
|
463
|
+
# The inner supplement may itself be the base-less, series-only form —
|
|
464
|
+
# "ITU-T G Suppl. 39 (2006) Err. 1 (08/2006)". supplement_with_base is
|
|
465
|
+
# tried first, being the longer match.
|
|
466
|
+
rule(:chained_supplement) do
|
|
467
|
+
(supplement_with_base | supplement_series_only).as(:base) >>
|
|
468
|
+
space >>
|
|
469
|
+
supplement_type >>
|
|
470
|
+
supplement_number >>
|
|
471
|
+
supplement_date.maybe >>
|
|
472
|
+
language.maybe
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
# Supplement without base (series-only, like "ITU-T H Suppl. 1")
|
|
476
|
+
# series_group is tried FIRST: `series` is a greedy, non-backtracking
|
|
477
|
+
# letter.repeat(1,3), so it would match the "E" of "E-100" and then fail
|
|
478
|
+
# on the required space, with no retry at a shorter length.
|
|
479
|
+
rule(:supplement_series_only) do
|
|
480
|
+
itu_prefix >>
|
|
481
|
+
sector >>
|
|
482
|
+
space >>
|
|
483
|
+
(series_group | series) >>
|
|
484
|
+
series_word.maybe >>
|
|
485
|
+
space >>
|
|
486
|
+
supplement_type >>
|
|
487
|
+
supplement_number >>
|
|
488
|
+
supplement_date.maybe >>
|
|
489
|
+
language.maybe
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
# A supplement joined to its predecessor by "/" rather than a space —
|
|
493
|
+
# "ITU-T X.680 (1994) Amd. 1/Technical Cor. 1 (12/1997)": one Technical
|
|
494
|
+
# Corrigendum issued against Amendment 1, sharing the trailing date.
|
|
495
|
+
# Modelled exactly like chained_supplement (base-inside-base) with a
|
|
496
|
+
# :supplement_slash marker so `to_s` reproduces the "/".
|
|
497
|
+
rule(:slash_chained_supplement) do
|
|
498
|
+
supplement_with_base.as(:base) >>
|
|
499
|
+
str("/").as(:supplement_slash) >>
|
|
500
|
+
supplement_type >>
|
|
501
|
+
supplement_number >>
|
|
502
|
+
supplement_date.maybe >>
|
|
503
|
+
language.maybe
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
# Complete supplement identifier. Both chained forms must precede
|
|
507
|
+
# supplement_with_base: it alone matches "ITU-T X.680 (1994) Amd. 1" and
|
|
508
|
+
# would leave "/Technical Cor. 1 (12/1997)" unconsumed, which fails the
|
|
509
|
+
# whole parse — PEG ordered choice never re-enters the alternation once
|
|
510
|
+
# an alternative succeeds. Space- and slash-joined are disjoint at that
|
|
511
|
+
# position, so their relative order is free.
|
|
512
|
+
rule(:supplement_identifier) do
|
|
513
|
+
chained_supplement | slash_chained_supplement |
|
|
514
|
+
supplement_with_base | supplement_series_only
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
# With series: ITU-R BO.600-1
|
|
518
|
+
rule(:with_series) do
|
|
519
|
+
itu_prefix >>
|
|
520
|
+
sector >>
|
|
521
|
+
space >>
|
|
522
|
+
series >> dot >>
|
|
523
|
+
code >>
|
|
524
|
+
range_end.maybe >>
|
|
525
|
+
code_suffixes >>
|
|
526
|
+
combined_suffixes.maybe >>
|
|
527
|
+
series_word.maybe >>
|
|
528
|
+
attachment.maybe >>
|
|
529
|
+
version_part.maybe >>
|
|
530
|
+
date_part.maybe >>
|
|
531
|
+
language.maybe
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
# Without series: ITU-R 20-200
|
|
535
|
+
rule(:without_series) do
|
|
536
|
+
itu_prefix >>
|
|
537
|
+
sector >>
|
|
538
|
+
space >>
|
|
539
|
+
code >>
|
|
540
|
+
code_suffixes >>
|
|
541
|
+
attachment.maybe >>
|
|
542
|
+
version_part.maybe >>
|
|
543
|
+
date_part.maybe >>
|
|
544
|
+
language.maybe
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
# OB (Operational Bulletin) — Special Publication.
|
|
548
|
+
# OB is a cross-bureau ITU publication; sector, when present in legacy
|
|
549
|
+
# strings like "ITU-T OB.1096", is silently dropped by the builder.
|
|
550
|
+
rule(:ob_series) { str("OB").as(:series) }
|
|
551
|
+
|
|
552
|
+
rule(:ob_dot_body) { dot >> number }
|
|
553
|
+
rule(:ob_no_body) { space >> str("No.") >> space >> number }
|
|
554
|
+
|
|
555
|
+
rule(:ob_with_sector) do
|
|
556
|
+
itu_prefix >>
|
|
557
|
+
(sector >> space).maybe >>
|
|
558
|
+
ob_series >>
|
|
559
|
+
(ob_dot_body | ob_no_body) >>
|
|
560
|
+
date_part.maybe >>
|
|
561
|
+
language.maybe
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
# Legacy long form: "ITU-T Operational Bulletin No. 1096".
|
|
565
|
+
# The :_op_bull marker tells the builder to set series=OB.
|
|
566
|
+
rule(:ob_long_form) do
|
|
567
|
+
itu_prefix >>
|
|
568
|
+
(sector >> space).maybe >>
|
|
569
|
+
str("Operational Bulletin").as(:_op_bull) >>
|
|
570
|
+
space >> str("No.") >> space >>
|
|
571
|
+
number >>
|
|
572
|
+
date_part.maybe >>
|
|
573
|
+
language.maybe
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
rule(:special_publication) { ob_with_sector | ob_long_form }
|
|
577
|
+
|
|
578
|
+
# "Annex to ..." — the document IS the annex of a Special Publication
|
|
579
|
+
# (no annex number). The :annex_to wrapping signals to the builder.
|
|
580
|
+
rule(:annex_to_identifier) do
|
|
581
|
+
str("Annex to") >> space >> special_publication.as(:annex_to)
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
# Handbook — "ITU-R 42.HDB". The ".HDB" literal marks a Handbook; it does
|
|
585
|
+
# NOT route through subseries (which is digits-only). The :handbook_marker
|
|
586
|
+
# key tells the builder to build Identifiers::Handbook.
|
|
587
|
+
rule(:handbook) do
|
|
588
|
+
itu_prefix >>
|
|
589
|
+
sector >>
|
|
590
|
+
space >>
|
|
591
|
+
number >>
|
|
592
|
+
dot >> str("HDB").as(:handbook_marker) >>
|
|
593
|
+
date_part.maybe
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
# Numeric Question — "ITU-R 234-1/7:", "ITU-R 237/3:".
|
|
597
|
+
# number(-part)/study-group, always with a trailing ":".
|
|
598
|
+
rule(:numeric_question) do
|
|
599
|
+
itu_prefix >>
|
|
600
|
+
sector >>
|
|
601
|
+
space >>
|
|
602
|
+
number >>
|
|
603
|
+
parts >>
|
|
604
|
+
str("/") >> digits.as(:study_group) >>
|
|
605
|
+
str(":").as(:question_colon).maybe
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
# One "number(/BL)?/study-group" body of a letter-series Question, shared
|
|
609
|
+
# by the bracketed and bare forms.
|
|
610
|
+
rule(:question_tail) do
|
|
611
|
+
number >>
|
|
612
|
+
str("/BL").as(:has_bl).maybe >>
|
|
613
|
+
str("/") >> digits.as(:study_group)
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
# Letter-series Question — "ITU-R P.3/BL/7", "ITU-R SM.1/30",
|
|
617
|
+
# "ITU-R S.[4/BL/2]:". series.number(/BL)?/study-group, optionally
|
|
618
|
+
# bracketed and/or with a trailing ":".
|
|
619
|
+
rule(:letter_question) do
|
|
620
|
+
itu_prefix >>
|
|
621
|
+
sector >>
|
|
622
|
+
space >>
|
|
623
|
+
series >> dot >>
|
|
624
|
+
(
|
|
625
|
+
(str("[").as(:bracketed) >> question_tail >> str("]")) |
|
|
626
|
+
question_tail
|
|
627
|
+
) >>
|
|
628
|
+
str(":").as(:question_colon).maybe
|
|
629
|
+
end
|
|
630
|
+
|
|
631
|
+
# Common-text suffix: "| ISO/IEC ..." or "| ISO ..." — the same
|
|
632
|
+
# document published jointly by ITU and ISO/IEC. Captured as a raw
|
|
633
|
+
# string; the builder parses it with the appropriate flavor.
|
|
634
|
+
rule(:common_text_twin) do
|
|
635
|
+
(space >> str("|") >> space >> match("[^|]").repeat(1)).as(:common_text_twin)
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
rule(:identifier) do
|
|
639
|
+
annex_to_identifier |
|
|
640
|
+
special_publication |
|
|
641
|
+
supplement_identifier |
|
|
642
|
+
# Both neighbours are load-bearing (PEG ordered choice never re-enters
|
|
643
|
+
# the alternation once an alternative succeeds): AFTER
|
|
644
|
+
# supplement_identifier, which matches the longer "<annex> Cor. 3"
|
|
645
|
+
# form, and BEFORE with_series, which would match the "ITU-T A.23"
|
|
646
|
+
# prefix of "ITU-T A.23 Annex A" and then fail on the unconsumed tail.
|
|
647
|
+
annex_identifier |
|
|
648
|
+
# Same slot reasoning as annex_identifier: AFTER supplement_identifier
|
|
649
|
+
# (an appendix can carry a trailing Amd./Err.) and BEFORE with_series
|
|
650
|
+
# (which would match the "ITU-T G.101" prefix and then fail on the
|
|
651
|
+
# unconsumed " App. I").
|
|
652
|
+
appendix_identifier |
|
|
653
|
+
# Slot reasoning at the rule itself.
|
|
654
|
+
report_identifier |
|
|
655
|
+
handbook |
|
|
656
|
+
numeric_question |
|
|
657
|
+
letter_question |
|
|
658
|
+
with_series |
|
|
659
|
+
# Unreachable earlier: special_publication needs the literal "OB",
|
|
660
|
+
# handbook/numeric_question need leading digits, and letter_question
|
|
661
|
+
# needs series >> dot. Before without_series, whose code needs digits.
|
|
662
|
+
series_code_identifier |
|
|
663
|
+
without_series
|
|
664
|
+
end
|
|
665
|
+
|
|
666
|
+
# Common-text form: an ITU identifier followed by "| ISO/IEC ...".
|
|
667
|
+
# Tried last so it doesn't shadow the simpler single-identifier forms.
|
|
668
|
+
rule(:common_text_identifier) do
|
|
669
|
+
identifier >> common_text_twin
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
rule(:root) { common_text_identifier | identifier }
|
|
673
|
+
|
|
674
|
+
def self.parse(input)
|
|
675
|
+
new.parse(input)
|
|
676
|
+
end
|
|
677
|
+
end
|
|
678
|
+
end
|
|
679
|
+
end
|