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
data/lib/pubid/easc.rb
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Easc
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# Leading identifier tokens that an EASC document id can start with.
|
|
8
|
+
# Both Cyrillic (canonical — ПМГ, РМГ) and Latin transliterations
|
|
9
|
+
# (PMG, RMG) are accepted; the canonical render is Cyrillic per
|
|
10
|
+
# mgscatalog.by convention.
|
|
11
|
+
PREFIXES = ["ПМГ", "РМГ", "PMG", "RMG"].freeze
|
|
12
|
+
|
|
13
|
+
autoload :Builder, "#{__dir__}/easc/builder"
|
|
14
|
+
autoload :Identifier, "#{__dir__}/easc/identifier"
|
|
15
|
+
autoload :Identifiers, "#{__dir__}/easc/identifiers"
|
|
16
|
+
autoload :Parser, "#{__dir__}/easc/parser"
|
|
17
|
+
autoload :Renderer, "#{__dir__}/easc/renderer"
|
|
18
|
+
autoload :UrnGenerator, "#{__dir__}/easc/urn_generator"
|
|
19
|
+
autoload :UrnParser, "#{__dir__}/easc/urn_parser"
|
|
20
|
+
|
|
21
|
+
# @param identifier [String]
|
|
22
|
+
# @return [Pubid::Easc::Identifier]
|
|
23
|
+
def self.parse(identifier)
|
|
24
|
+
Identifier.parse(identifier)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Per-flavor format registry.
|
|
28
|
+
Identifier.format_registry = FormatRegistry.new(parent: ::Pubid::Identifier.format_registry)
|
|
29
|
+
Identifier.format_registry.register(:human, renderer: Easc::Renderer)
|
|
30
|
+
|
|
31
|
+
# Auto-discover identifier types from the Identifiers namespace.
|
|
32
|
+
# @return [Array<Class>]
|
|
33
|
+
def self.identifier_types
|
|
34
|
+
@identifier_types ||= Identifiers.constants
|
|
35
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
36
|
+
.select { |c| c.is_a?(Class) && c < Pubid::Identifier }
|
|
37
|
+
.reject { |c| c == Identifier }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Lookup: series (ПМГ / РМГ / PMG / RMG) → identifier class
|
|
41
|
+
# @param series [String, Symbol]
|
|
42
|
+
# @return [Class<Identifier>, nil]
|
|
43
|
+
def self.identifier_klass_for_series(series)
|
|
44
|
+
@by_series ||= identifier_types.to_h do |klass|
|
|
45
|
+
[klass.type[:series].to_s, klass]
|
|
46
|
+
end
|
|
47
|
+
@by_series[series.to_s] || @by_series[series.to_s.upcase]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
Pubid::Registry.register(:easc, Pubid::Easc)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
# Turns the Parslet parse tree into a concrete identifier object. The class
|
|
6
|
+
# is chosen by which number key the parser captured.
|
|
7
|
+
class Builder
|
|
8
|
+
def self.build(parsed_data)
|
|
9
|
+
new.build(parsed_data)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def build(data)
|
|
13
|
+
klass, attrs =
|
|
14
|
+
if data[:tr_number]
|
|
15
|
+
[Identifiers::TechnicalReport, { number: data[:tr_number].to_s }]
|
|
16
|
+
elsif data[:mem_number]
|
|
17
|
+
[Identifiers::Memento, { number: data[:mem_number].to_s }]
|
|
18
|
+
else
|
|
19
|
+
[Identifiers::Standard, standard_attrs(data)]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
klass.new(**attrs, **suffix_attrs(data))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def standard_attrs(data)
|
|
28
|
+
attrs = { number: data[:number].to_s }
|
|
29
|
+
attrs[:part] = data[:part].to_s if data[:part]
|
|
30
|
+
attrs
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# ` ed<N>` / ` vol<N>` attach after the type alternation, so a technical
|
|
34
|
+
# report and a memento carry them exactly as a standard does. An absent
|
|
35
|
+
# suffix produces no parse key at all, so the attribute stays unset and
|
|
36
|
+
# drops out of the canonical hash.
|
|
37
|
+
def suffix_attrs(data)
|
|
38
|
+
attrs = {}
|
|
39
|
+
attrs[:edition] = data[:edition].to_s if data[:edition]
|
|
40
|
+
attrs[:volume] = data[:volume].to_s if data[:volume]
|
|
41
|
+
attrs
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
# Base class for every ECMA identifier AND the flavor's parse entry point —
|
|
6
|
+
# mirrors Pubid::Jis::Identifier. Concrete identifiers under
|
|
7
|
+
# Pubid::Ecma::Identifiers descend from this class, so a parsed ECMA id is
|
|
8
|
+
# an instance of Pubid::Ecma::Identifier. ECMA has no supplement layer.
|
|
9
|
+
# KEEP THIS CLASS BODY IN ONE FILE, AND NEVER REOPEN IT. `number`, `part`
|
|
10
|
+
# and `edition` below redeclare attributes the parent ::Pubid::Identifier
|
|
11
|
+
# types as components, which resolves nondeterministically under
|
|
12
|
+
# multi-flavor load if a subclass can snapshot a half-built attribute
|
|
13
|
+
# table. lutaml deep-dups the parent table into each subclass at
|
|
14
|
+
# class-definition time, and Ruby resolves this superclass constant to
|
|
15
|
+
# completion before opening any leaf body — so a single, never-reopened
|
|
16
|
+
# body is what makes the redeclaration safe. (The W3C precedent; IEEE's
|
|
17
|
+
# split base is the counter-shape.)
|
|
18
|
+
class Identifier < ::Pubid::Identifier
|
|
19
|
+
# The document number as a string (preserves any leading zeros). `part`
|
|
20
|
+
# is only present for standards that split into parts (e.g. ECMA-418-1).
|
|
21
|
+
attribute :number, :string
|
|
22
|
+
attribute :part, :string
|
|
23
|
+
# Edition is relaton's `:ed:` (the index stores {:id, :ed, :vol} and the
|
|
24
|
+
# YAML has edition.content). It is part of the printed identifier: the
|
|
25
|
+
# relaton index keys on a bare `to_s`, so without it all 22 editions of
|
|
26
|
+
# ECMA-74 collapse onto one key. An optional string, because decimal
|
|
27
|
+
# editions like "5.1" occur. No default, so it drops from the hash when
|
|
28
|
+
# unset.
|
|
29
|
+
attribute :edition, :string
|
|
30
|
+
# Volume is relaton's `:vol:`. Only ECMA-269 edition 3 uses it: its four
|
|
31
|
+
# volumes share one docidentifier AND one title, so the volume is the only
|
|
32
|
+
# thing that distinguishes those four index rows. A plain string, the
|
|
33
|
+
# `number`/`edition` precedent, so it round-trips verbatim.
|
|
34
|
+
attribute :volume, :string
|
|
35
|
+
|
|
36
|
+
# Polymorphic type map for lutaml::Model key_value (de)serialization:
|
|
37
|
+
# maps each subclass's polymorphic_name to its class name so a stored
|
|
38
|
+
# hash rebuilds the correct identifier type via from_hash.
|
|
39
|
+
ECMA_TYPE_MAP = {
|
|
40
|
+
"pubid:ecma:standard" => "Pubid::Ecma::Identifiers::Standard",
|
|
41
|
+
"pubid:ecma:technical-report" =>
|
|
42
|
+
"Pubid::Ecma::Identifiers::TechnicalReport",
|
|
43
|
+
"pubid:ecma:memento" => "Pubid::Ecma::Identifiers::Memento",
|
|
44
|
+
}.freeze
|
|
45
|
+
|
|
46
|
+
key_value do
|
|
47
|
+
map "_type", to: :_type, polymorphic_map: ECMA_TYPE_MAP
|
|
48
|
+
map "number", to: :number
|
|
49
|
+
map "part", to: :part
|
|
50
|
+
map "edition", to: :edition
|
|
51
|
+
map "volume", to: :volume
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Publisher is always "ECMA". A plain constant (not a `publisher` method)
|
|
55
|
+
# so it doesn't shadow the inherited lutaml `publisher` attribute, which
|
|
56
|
+
# would otherwise fail serialization type validation.
|
|
57
|
+
PUBLISHER = "ECMA"
|
|
58
|
+
|
|
59
|
+
# Whether the last `to_s` should include the "ECMA" publisher token.
|
|
60
|
+
attr_reader :with_publisher
|
|
61
|
+
|
|
62
|
+
# Basic string representation. Delegates to renderer. `with_publisher:
|
|
63
|
+
# false` drops the ECMA token (e.g. "-411", "TR/84").
|
|
64
|
+
#
|
|
65
|
+
# The edition and volume suffixes are rendered by DEFAULT and are opted
|
|
66
|
+
# out of with `to_s(with_edition: false, with_volume: false)`. Both flags
|
|
67
|
+
# ride in `opts` to the renderer, which owns their defaults — see
|
|
68
|
+
# Pubid::Ecma::Renderer for why the default is "with".
|
|
69
|
+
def to_s(with_publisher: true, **opts)
|
|
70
|
+
@with_publisher = with_publisher
|
|
71
|
+
render(format: :human, **opts)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Type token that precedes the number ("TR"/"MEM"), or nil for standards.
|
|
75
|
+
# Overridden by each concrete identifier class.
|
|
76
|
+
def type_prefix
|
|
77
|
+
nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# ECMA keeps its publisher in the PUBLISHER constant rather than the
|
|
81
|
+
# inherited `publisher` attribute, so the base hook — `publisher&.to_s` —
|
|
82
|
+
# is nil and every ECMA slug would lose its "ecma." segment.
|
|
83
|
+
def mr_publisher
|
|
84
|
+
PUBLISHER.downcase
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# The Builder picks an identifier class; it never sets a `typed_stage`,
|
|
88
|
+
# so the base hook is always nil. Without this, "ECMA-101" and
|
|
89
|
+
# "ECMA TR/101" produce the same slug — and `to_slug` is an output
|
|
90
|
+
# filename, so one document would overwrite the other.
|
|
91
|
+
def mr_type
|
|
92
|
+
type_prefix&.downcase
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# ECMA's `edition` is a plain :string ("3", "5.1"), not a
|
|
96
|
+
# Components::Edition, so the base hook's `edition&.number` raises
|
|
97
|
+
# NoMethodError on every edition-bearing identifier.
|
|
98
|
+
def mr_edition
|
|
99
|
+
mr_marker("ed", edition)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Volume is identity-bearing (ECMA-269 ed3 vol1..vol4 are four distinct
|
|
103
|
+
# documents), so it must reach the MR string as well as `to_s` and the
|
|
104
|
+
# URN. Fills the shared `mr_volume` slot in Renderers::MrString.
|
|
105
|
+
def mr_volume
|
|
106
|
+
mr_marker("vol", volume)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Parse an ECMA identifier string into an identifier object.
|
|
110
|
+
# @param identifier [String] The ECMA identifier string to parse
|
|
111
|
+
# @return [Identifier] The appropriate identifier object
|
|
112
|
+
# @raise [Pubid::Errors::InvalidInputError]
|
|
113
|
+
# If the input exceeds MAX_INPUT_LENGTH
|
|
114
|
+
# @raise [Pubid::Errors::ParseError] If parsing fails
|
|
115
|
+
def self.parse(identifier)
|
|
116
|
+
unless identifier.is_a?(String)
|
|
117
|
+
raise Pubid::Errors::InvalidInputError,
|
|
118
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
if identifier.length > Pubid::MAX_INPUT_LENGTH
|
|
122
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
parsed = Parser.parse(identifier)
|
|
126
|
+
Builder.build(parsed)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
private
|
|
130
|
+
|
|
131
|
+
# Renderers::MrString joins SEGMENTS with ".", so a dot inside one would
|
|
132
|
+
# break the documented segment structure — hence "ed5-1" for edition
|
|
133
|
+
# "5.1". Sanitising by CHARSET rather than by an enumerated escape list,
|
|
134
|
+
# so a value added later cannot leak an unsafe character (the BIPM
|
|
135
|
+
# `mr_slug` precedent).
|
|
136
|
+
#
|
|
137
|
+
# The MR may be lossy here because nothing parses an ECMA MR back
|
|
138
|
+
# (`Parsers::MrString::FLAVOR_MAP` has no ECMA entry). The URN, which
|
|
139
|
+
# UrnParser inverts, keeps the dot instead.
|
|
140
|
+
def mr_marker(label, value)
|
|
141
|
+
return nil if value.nil? || value.to_s.empty?
|
|
142
|
+
|
|
143
|
+
"#{label}#{value.to_s.downcase.gsub(/[^a-z0-9]+/, '-')}"
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Memento identifier type.
|
|
7
|
+
# Format: ECMA MEM/<year>. Example: ECMA MEM/1970
|
|
8
|
+
class Memento < Identifier
|
|
9
|
+
TYPED_STAGES = [
|
|
10
|
+
Pubid::Components::TypedStage.new(
|
|
11
|
+
code: :mem,
|
|
12
|
+
stage_code: :published,
|
|
13
|
+
type_code: :ecma,
|
|
14
|
+
abbr: ["MEM"],
|
|
15
|
+
name: "Memento",
|
|
16
|
+
harmonized_stages: [],
|
|
17
|
+
),
|
|
18
|
+
].freeze
|
|
19
|
+
|
|
20
|
+
def self.type
|
|
21
|
+
{ key: :mem, web: :memento, title: "Memento", short: "MEM" }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def type_prefix
|
|
25
|
+
"MEM"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Default ECMA identifier type (no type token).
|
|
7
|
+
# Examples: ECMA-411, ECMA-418-1
|
|
8
|
+
class Standard < Identifier
|
|
9
|
+
TYPED_STAGES = [
|
|
10
|
+
Pubid::Components::TypedStage.new(
|
|
11
|
+
code: :standard,
|
|
12
|
+
stage_code: :published,
|
|
13
|
+
type_code: :ecma,
|
|
14
|
+
abbr: ["ECMA"],
|
|
15
|
+
name: "Standard",
|
|
16
|
+
harmonized_stages: [],
|
|
17
|
+
),
|
|
18
|
+
].freeze
|
|
19
|
+
|
|
20
|
+
def self.type
|
|
21
|
+
{ key: :standard, web: :standard, title: "Standard", short: "ECMA" }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# No type token for standards.
|
|
25
|
+
def type_prefix
|
|
26
|
+
nil
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
module Identifiers
|
|
6
|
+
# Technical Report identifier type.
|
|
7
|
+
# Format: ECMA TR/<number>. Example: ECMA TR/101
|
|
8
|
+
class TechnicalReport < Identifier
|
|
9
|
+
TYPED_STAGES = [
|
|
10
|
+
Pubid::Components::TypedStage.new(
|
|
11
|
+
code: :tr,
|
|
12
|
+
stage_code: :published,
|
|
13
|
+
type_code: :ecma,
|
|
14
|
+
abbr: ["TR"],
|
|
15
|
+
name: "Technical Report",
|
|
16
|
+
harmonized_stages: [],
|
|
17
|
+
),
|
|
18
|
+
].freeze
|
|
19
|
+
|
|
20
|
+
def self.type
|
|
21
|
+
{ key: :tr, web: :technical_report, title: "Technical Report",
|
|
22
|
+
short: "TR" }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def type_prefix
|
|
26
|
+
"TR"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
module Identifiers
|
|
6
|
+
autoload :Standard, "#{__dir__}/identifiers/standard"
|
|
7
|
+
autoload :TechnicalReport, "#{__dir__}/identifiers/technical_report"
|
|
8
|
+
autoload :Memento, "#{__dir__}/identifiers/memento"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Ecma
|
|
7
|
+
# Parslet grammar for ECMA identifiers.
|
|
8
|
+
#
|
|
9
|
+
# Four printed forms:
|
|
10
|
+
# ECMA-411 standard
|
|
11
|
+
# ECMA-418-1 standard with part
|
|
12
|
+
# ECMA TR/101 technical report
|
|
13
|
+
# ECMA MEM/1970 memento
|
|
14
|
+
#
|
|
15
|
+
# Any of them may carry an edition and a volume, in that order:
|
|
16
|
+
# ECMA-269 ed3 third edition
|
|
17
|
+
# ECMA-402 ed5.1 decimal edition (real: ECMA-402)
|
|
18
|
+
# ECMA-269 ed3 vol2 second volume of the third edition
|
|
19
|
+
#
|
|
20
|
+
# Each branch captures its number under a distinct key so the builder can
|
|
21
|
+
# pick the identifier class without a separate type token. Numbers are kept
|
|
22
|
+
# as strings to preserve any leading zeros.
|
|
23
|
+
class Parser < ::Pubid::Parser::Grammar
|
|
24
|
+
rule(:digits) { match["0-9"].repeat(1) }
|
|
25
|
+
|
|
26
|
+
rule(:prefix) { str("ECMA") }
|
|
27
|
+
|
|
28
|
+
rule(:tr) { str(" TR/") >> digits.as(:tr_number) }
|
|
29
|
+
|
|
30
|
+
rule(:mem) { str(" MEM/") >> digits.as(:mem_number) }
|
|
31
|
+
|
|
32
|
+
# Standards print with a hyphen ("ECMA-6"), but references are commonly
|
|
33
|
+
# written with a space ("ECMA 6"). Both parse; the renderer normalises to
|
|
34
|
+
# the hyphen, so the space form round-trips as "ECMA-6" by design and must
|
|
35
|
+
# never enter the byte-exact `pass` fixtures.
|
|
36
|
+
rule(:standard_separator) { str("-") | str(" ") }
|
|
37
|
+
|
|
38
|
+
rule(:standard) do
|
|
39
|
+
standard_separator >> digits.as(:number) >>
|
|
40
|
+
(str("-") >> digits.as(:part)).maybe
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Editions are not all integers: ECMA-402 ed5.1 is a real document. The
|
|
44
|
+
# value is stored verbatim so it renders and serializes unchanged.
|
|
45
|
+
rule(:edition_number) { digits >> (str(".") >> digits).repeat(0) }
|
|
46
|
+
|
|
47
|
+
rule(:edition) { str(" ed") >> edition_number.as(:edition) }
|
|
48
|
+
|
|
49
|
+
rule(:volume) { str(" vol") >> digits.as(:volume) }
|
|
50
|
+
|
|
51
|
+
# The suffixes attach AFTER the type alternation, so a technical report
|
|
52
|
+
# and a memento carry them exactly as a standard does.
|
|
53
|
+
#
|
|
54
|
+
# Two PEG facts this arrangement depends on:
|
|
55
|
+
#
|
|
56
|
+
# 1. `standard` cannot shadow " TR/" or " MEM/", because after the space
|
|
57
|
+
# it demands a digit and "T"/"M" are not digits. Keeping tr|mem first
|
|
58
|
+
# is belt-and-braces; the DISJOINT FIRST CHARACTER is the load-bearing
|
|
59
|
+
# invariant.
|
|
60
|
+
# 2. Appending a sequence moves the alternation out of tail position, so
|
|
61
|
+
# Parslet no longer threads consume_all into it and will not backtrack
|
|
62
|
+
# into an alternative that already succeeded. A future branch that
|
|
63
|
+
# could match a proper prefix of another branch's input would now fail
|
|
64
|
+
# the whole parse instead of being rescued by the next alternative.
|
|
65
|
+
rule(:identifier) do
|
|
66
|
+
prefix >> (tr | mem | standard) >> edition.maybe >> volume.maybe
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
rule(:root) { identifier }
|
|
70
|
+
|
|
71
|
+
def self.parse(input)
|
|
72
|
+
new.parse(input)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
# Human-readable renderer for ECMA identifiers.
|
|
6
|
+
#
|
|
7
|
+
# Produces strings like:
|
|
8
|
+
# "ECMA-411" standard
|
|
9
|
+
# "ECMA-418-1" standard with part
|
|
10
|
+
# "ECMA TR/101" technical report
|
|
11
|
+
# "ECMA MEM/1970" memento
|
|
12
|
+
# "ECMA-269 ed3 vol2" with the edition and volume suffixes
|
|
13
|
+
#
|
|
14
|
+
# With `with_publisher: false` the leading ECMA token is dropped, yielding
|
|
15
|
+
# "-411" / "TR/101" / "MEM/1970".
|
|
16
|
+
class Renderer < ::Pubid::Renderers::Base
|
|
17
|
+
PUBLISHER = "ECMA"
|
|
18
|
+
|
|
19
|
+
# `with_edition` and `with_volume` default to TRUE — the inverse of
|
|
20
|
+
# pubid's usual opt-in, deliberately. `Relaton::Index::Type#add_or_update`
|
|
21
|
+
# keys on a BARE `id.to_s` and cannot pass options, so the default
|
|
22
|
+
# rendering is what the index keys on, and it has to be unique per row.
|
|
23
|
+
# With the edition omitted, all 22 editions of ECMA-74 collapsed onto one
|
|
24
|
+
# key and 383 of the 804 published rows were dropped silently.
|
|
25
|
+
#
|
|
26
|
+
# Per-flavor divergence in these defaults is the established pattern:
|
|
27
|
+
# Pubid::Tgpp defaults `with_publisher` to false and Pubid::W3c to true,
|
|
28
|
+
# each for its own consumer's reason.
|
|
29
|
+
def render(context: nil, with_edition: true, with_volume: true, **_opts)
|
|
30
|
+
id = @id
|
|
31
|
+
# Standard joins the publisher directly ("ECMA-411"); TR/MEM separate it
|
|
32
|
+
# with a space ("ECMA TR/101"). type_prefix is nil only for standards.
|
|
33
|
+
sep = id.type_prefix.nil? ? "" : " "
|
|
34
|
+
core = id.type_prefix.nil? ? standard_core(id) : typed_core(id)
|
|
35
|
+
result = with_publisher?(id) ? "#{PUBLISHER}#{sep}#{core}" : core
|
|
36
|
+
result + suffixes(id, with_edition, with_volume)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
# " ed<edition>" then " vol<volume>", each only when the identifier
|
|
42
|
+
# carries it and the caller has not opted out. The order is canonical:
|
|
43
|
+
# the grammar accepts the volume only after the edition.
|
|
44
|
+
def suffixes(id, with_edition, with_volume)
|
|
45
|
+
out = +""
|
|
46
|
+
out << " ed#{id.edition}" if with_edition && id.edition
|
|
47
|
+
out << " vol#{id.volume}" if with_volume && id.volume
|
|
48
|
+
out
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Standard: "-<number>[-<part>]".
|
|
52
|
+
def standard_core(id)
|
|
53
|
+
core = "-#{id.number}"
|
|
54
|
+
id.part ? "#{core}-#{id.part}" : core
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Technical Report / Memento: "<TYPE>/<number>".
|
|
58
|
+
def typed_core(id)
|
|
59
|
+
"#{id.type_prefix}/#{id.number}"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def with_publisher?(id)
|
|
63
|
+
id.with_publisher != false
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
# Emits
|
|
6
|
+
# `urn:ecma:<tag>:<number>[:part-<part>][:ed-<edition>][:vol-<volume>]`,
|
|
7
|
+
# where the tag is bare for standards, "tr" for technical reports and "mem"
|
|
8
|
+
# for mementos:
|
|
9
|
+
# ECMA-411 -> urn:ecma:411
|
|
10
|
+
# ECMA-418-1 -> urn:ecma:418:part-1
|
|
11
|
+
# ECMA TR/101 -> urn:ecma:tr:101
|
|
12
|
+
# ECMA MEM/1970 -> urn:ecma:mem:1970
|
|
13
|
+
# ECMA-269 ed3 vol2 -> urn:ecma:269:ed-3:vol-2
|
|
14
|
+
# ECMA-402 ed5.1 -> urn:ecma:402:ed-5.1
|
|
15
|
+
#
|
|
16
|
+
# The edition and volume segments are additive: they only ever split a
|
|
17
|
+
# collision, so a URN minted before they existed still reads back (UrnParser
|
|
18
|
+
# probes for the labelled prefix). They are needed because edition and
|
|
19
|
+
# volume are identity-bearing — without them 804 published documents share
|
|
20
|
+
# 421 URNs.
|
|
21
|
+
#
|
|
22
|
+
# The dot of a decimal edition is KEPT: "." is `unreserved` in RFC 8141, and
|
|
23
|
+
# the URN has an inverse, so it must be lossless. (The MR string, which has
|
|
24
|
+
# no inverse, collapses it to "ed5-1" instead.)
|
|
25
|
+
class UrnGenerator < Pubid::UrnGenerator::Base
|
|
26
|
+
def generate
|
|
27
|
+
parts = ["urn", "ecma", identifier.type_prefix&.downcase,
|
|
28
|
+
identifier.number.to_s]
|
|
29
|
+
parts.concat(labelled_segments)
|
|
30
|
+
parts.compact.join(":")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
# Every optional field carries its own label, so a URN written before a
|
|
36
|
+
# given label existed still reads back (UrnParser probes for the prefix).
|
|
37
|
+
def labelled_segments
|
|
38
|
+
{
|
|
39
|
+
"part" => identifier.part,
|
|
40
|
+
"ed" => identifier.edition,
|
|
41
|
+
"vol" => identifier.volume,
|
|
42
|
+
}.filter_map { |label, value| "#{label}-#{value}" if value }
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
# Parses ECMA URNs back into identifiers, inverting {UrnGenerator}.
|
|
6
|
+
#
|
|
7
|
+
# Examples:
|
|
8
|
+
# urn:ecma:411 -> ECMA-411
|
|
9
|
+
# urn:ecma:418:part-1 -> ECMA-418-1
|
|
10
|
+
# urn:ecma:tr:101 -> ECMA TR/101
|
|
11
|
+
# urn:ecma:mem:1970 -> ECMA MEM/1970
|
|
12
|
+
# urn:ecma:269:ed-3:vol-2 -> ECMA-269 ed3 vol2
|
|
13
|
+
#
|
|
14
|
+
# Every trailing segment is consumed only if it carries its own label, so a
|
|
15
|
+
# URN written before the edition and volume segments existed still reads
|
|
16
|
+
# back with both nil.
|
|
17
|
+
class UrnParser < Pubid::UrnParser::Base
|
|
18
|
+
def parse_urn(urn)
|
|
19
|
+
parts = split_parts(strip_namespace(urn))
|
|
20
|
+
tag = %w[tr mem].include?(parts.first) ? parts.shift : nil
|
|
21
|
+
number = parts.shift
|
|
22
|
+
part = shift_labelled(parts, "part-")
|
|
23
|
+
edition = shift_labelled(parts, "ed-")
|
|
24
|
+
volume = shift_labelled(parts, "vol-")
|
|
25
|
+
flavor_parse(reconstruct(tag, number, part, edition, volume))
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
# Consume the next segment only if it carries `label`. `delete_prefix`,
|
|
31
|
+
# not `sub`, so a label-shaped substring later in the value is untouched.
|
|
32
|
+
def shift_labelled(parts, label)
|
|
33
|
+
return nil unless parts.first&.start_with?(label)
|
|
34
|
+
|
|
35
|
+
parts.shift.delete_prefix(label)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Rebuild the printed identifier string from the URN fields.
|
|
39
|
+
def reconstruct(tag, number, part, edition, volume)
|
|
40
|
+
base = case tag
|
|
41
|
+
when "tr" then "ECMA TR/#{number}"
|
|
42
|
+
when "mem" then "ECMA MEM/#{number}"
|
|
43
|
+
else part ? "ECMA-#{number}-#{part}" : "ECMA-#{number}"
|
|
44
|
+
end
|
|
45
|
+
base += " ed#{edition}" if edition
|
|
46
|
+
base += " vol#{volume}" if volume
|
|
47
|
+
base
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
data/lib/pubid/ecma.rb
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Ecma
|
|
5
|
+
extend Pubid::PrefixesSupport
|
|
6
|
+
|
|
7
|
+
# Sole ECMA publisher token (see the parser's `prefix` rule). Document types
|
|
8
|
+
# (TR/MEM) follow the ECMA prefix as type tokens and are excluded.
|
|
9
|
+
PREFIXES = ["ECMA"].freeze
|
|
10
|
+
|
|
11
|
+
autoload :Builder, "#{__dir__}/ecma/builder"
|
|
12
|
+
autoload :Identifier, "#{__dir__}/ecma/identifier"
|
|
13
|
+
autoload :Identifiers, "#{__dir__}/ecma/identifiers"
|
|
14
|
+
autoload :Parser, "#{__dir__}/ecma/parser"
|
|
15
|
+
autoload :Renderer, "#{__dir__}/ecma/renderer"
|
|
16
|
+
autoload :UrnGenerator, "#{__dir__}/ecma/urn_generator"
|
|
17
|
+
autoload :UrnParser, "#{__dir__}/ecma/urn_parser"
|
|
18
|
+
|
|
19
|
+
# Parse an ECMA identifier string
|
|
20
|
+
def self.parse(identifier)
|
|
21
|
+
Identifier.parse(identifier)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
25
|
+
Identifier.format_registry = FormatRegistry.new(parent: Identifier.format_registry)
|
|
26
|
+
Identifier.format_registry.register(:human, renderer: Ecma::Renderer)
|
|
27
|
+
|
|
28
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
29
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
30
|
+
def self.identifier_types
|
|
31
|
+
@identifier_types ||= Identifiers.constants
|
|
32
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
33
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
34
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Build typed stage index from identifier types
|
|
38
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
39
|
+
def self.all_typed_stages
|
|
40
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
41
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
42
|
+
klass.const_get(:TYPED_STAGES)
|
|
43
|
+
else
|
|
44
|
+
[]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Lookup: type code -> identifier class
|
|
50
|
+
# @param code [String, Symbol] the type key to find
|
|
51
|
+
# @return [Class, nil] the matching identifier class
|
|
52
|
+
def self.locate_type(code)
|
|
53
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Lookup: abbreviation -> typed stage
|
|
57
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
58
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
59
|
+
def self.locate_stage(abbr)
|
|
60
|
+
abbr_str = abbr.to_s.upcase
|
|
61
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Register ECMA flavor with the registry
|
|
67
|
+
Pubid::Registry.register(:ecma, Pubid::Ecma)
|