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,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "parslet"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Plateau
|
|
7
|
+
extend Pubid::PrefixesSupport
|
|
8
|
+
|
|
9
|
+
# Sole PLATEAU publisher token (see the parser's `publisher` rule).
|
|
10
|
+
PREFIXES = ["PLATEAU"].freeze
|
|
11
|
+
|
|
12
|
+
autoload :Builder, "#{__dir__}/plateau/builder"
|
|
13
|
+
autoload :Identifier, "#{__dir__}/plateau/identifiers/base"
|
|
14
|
+
autoload :Identifiers, "#{__dir__}/plateau/identifiers"
|
|
15
|
+
autoload :Parser, "#{__dir__}/plateau/parser"
|
|
16
|
+
autoload :Renderer, "#{__dir__}/plateau/renderer"
|
|
17
|
+
autoload :SupplementIdentifier, "#{__dir__}/plateau/supplement_identifier"
|
|
18
|
+
autoload :UrnGenerator, "#{__dir__}/plateau/urn_generator"
|
|
19
|
+
autoload :UrnParser, "#{__dir__}/plateau/urn_parser"
|
|
20
|
+
|
|
21
|
+
def self.parse(input)
|
|
22
|
+
unless input.is_a?(String)
|
|
23
|
+
raise Pubid::Errors::InvalidInputError,
|
|
24
|
+
Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
if input.length > Pubid::MAX_INPUT_LENGTH
|
|
28
|
+
raise Pubid::Errors::InvalidInputError, Pubid::INPUT_TOO_LONG_MESSAGE
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Apply legacy update_codes normalization first
|
|
32
|
+
normalized = Core::UpdateCodes.apply(input, :plateau)
|
|
33
|
+
parser = Parser.new
|
|
34
|
+
parsed = parser.parse(normalized)
|
|
35
|
+
Builder.build(parsed)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Per-flavor format registry: inherits global formats, overrides :human
|
|
39
|
+
Identifier.format_registry = FormatRegistry.new(parent: ::Pubid::Identifier.format_registry)
|
|
40
|
+
Identifier.format_registry.register(:human, renderer: Plateau::Renderer)
|
|
41
|
+
SupplementIdentifier.format_registry = Identifier.format_registry
|
|
42
|
+
|
|
43
|
+
# Auto-discover all identifier types from the Identifiers namespace
|
|
44
|
+
# @return [Array<Class>] identifier classes that define a self.type Hash
|
|
45
|
+
def self.identifier_types
|
|
46
|
+
@identifier_types ||= Identifiers.constants
|
|
47
|
+
.filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end }
|
|
48
|
+
.select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) }
|
|
49
|
+
.select { |c| c.type.is_a?(Hash) }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Build typed stage index from identifier types
|
|
53
|
+
# @return [Array<Pubid::Components::TypedStage>] all typed stages
|
|
54
|
+
def self.all_typed_stages
|
|
55
|
+
@all_typed_stages ||= identifier_types.flat_map do |klass|
|
|
56
|
+
if klass.const_defined?(:TYPED_STAGES)
|
|
57
|
+
klass.const_get(:TYPED_STAGES)
|
|
58
|
+
else
|
|
59
|
+
[]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Lookup: type code -> identifier class
|
|
65
|
+
# @param code [String, Symbol] the type key to find
|
|
66
|
+
# @return [Class, nil] the matching identifier class
|
|
67
|
+
def self.locate_type(code)
|
|
68
|
+
identifier_types.find { |t| t.type[:key].to_s == code.to_s }
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Lookup: abbreviation -> typed stage
|
|
72
|
+
# @param abbr [String, Symbol] the abbreviation to find
|
|
73
|
+
# @return [Pubid::Components::TypedStage, nil] the matching typed stage
|
|
74
|
+
def self.locate_stage(abbr)
|
|
75
|
+
abbr_str = abbr.to_s.upcase
|
|
76
|
+
all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } }
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Register Uplateau flavor with the registry
|
|
82
|
+
Pubid::Registry.register(:plateau, Pubid::Plateau)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
# Mixin providing the uniform, static +prefixes+ class method that every
|
|
5
|
+
# registered flavor exposes. relaton uses this to build a global prefix
|
|
6
|
+
# register that routes a printed reference string (e.g. +"DD 1234"+,
|
|
7
|
+
# +"ISO/IEC 8802"+) to the flavor(s) that own it.
|
|
8
|
+
#
|
|
9
|
+
# A flavor +extend+s this module and defines a frozen +PREFIXES+ array holding
|
|
10
|
+
# only *its own* leading tokens. Joint / co-publication tokens are injected
|
|
11
|
+
# centrally from {Pubid::JOINT_PREFIXES} so that a co-published prefix
|
|
12
|
+
# (e.g. +"ISO/IEC"+) is listed symmetrically by every co-publisher without
|
|
13
|
+
# being duplicated by hand in two files.
|
|
14
|
+
#
|
|
15
|
+
# == Inclusion policy
|
|
16
|
+
# +prefixes+ returns the set of *leading identifier prefix tokens* — the
|
|
17
|
+
# tokens a printed identifier can start with such that the string belongs to
|
|
18
|
+
# this SDO. Concretely it INCLUDES:
|
|
19
|
+
# * publisher prefixes (e.g. +ISO+, +IEC+, +NIST+, +NBS+, +BS+, +BSI+);
|
|
20
|
+
# * leading series/type tokens that can *begin* a printed reference on their
|
|
21
|
+
# own (e.g. BSI +DD+/+PD+, NIST +FIPS+/+SP+);
|
|
22
|
+
# * joint / co-publication forms (e.g. +ISO/IEC+, +ISO/IEC/IEEE+).
|
|
23
|
+
# It EXCLUDES:
|
|
24
|
+
# * pure sub-series that never appear without a publisher prefix;
|
|
25
|
+
# * dangerously-ambiguous single letters (e.g. BSI aerospace +A+/+B+/+C+),
|
|
26
|
+
# which would cause false routing.
|
|
27
|
+
module PrefixesSupport
|
|
28
|
+
# The static set of leading prefix tokens this flavor recognizes.
|
|
29
|
+
#
|
|
30
|
+
# Static: callable without parsing any identifier string. Strings are
|
|
31
|
+
# returned in canonical case exactly as printed (e.g. +"BS EN ISO"+,
|
|
32
|
+
# +"ISO/IEC"+); consumers fold case themselves.
|
|
33
|
+
#
|
|
34
|
+
# @return [Array<String>] frozen, de-duplicated list of prefix tokens
|
|
35
|
+
def prefixes
|
|
36
|
+
own = const_defined?(:PREFIXES) ? const_get(:PREFIXES) : []
|
|
37
|
+
joint = Pubid::JOINT_PREFIXES.fetch(prefix_flavor_key, [])
|
|
38
|
+
(own + joint).uniq.freeze
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# The registry key for this flavor, derived from the module name
|
|
42
|
+
# (e.g. +Pubid::CenCenelec+ => +:cen_cenelec+). Used to look this flavor up
|
|
43
|
+
# in {Pubid::JOINT_PREFIXES} and to label it in {Pubid.prefix_flavors}.
|
|
44
|
+
#
|
|
45
|
+
# @return [Symbol]
|
|
46
|
+
def prefix_flavor_key
|
|
47
|
+
name.split("::").last
|
|
48
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase.to_sym
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Renderers
|
|
5
|
+
# Adds semantic <span class="..."> markers to an already-rendered
|
|
6
|
+
# identifier string.
|
|
7
|
+
#
|
|
8
|
+
# In pubid 1.x annotation was applied in ONE place — `prerender_params`
|
|
9
|
+
# wrapped every value in the param hash — so all 40-odd flavors got it for
|
|
10
|
+
# free. pubid 2 replaced that hash with typed components and per-flavor
|
|
11
|
+
# renderers, and the annotation went with it: `Renderers::Base#annotate`
|
|
12
|
+
# exists, but only the HumanReadable family calls it. All 39 flavor
|
|
13
|
+
# renderers receive `context.annotated` and ignore it, so
|
|
14
|
+
# `to_s(annotated: true)` returned plain text for every flavor but ISO.
|
|
15
|
+
#
|
|
16
|
+
# Re-annotating inside 39 renderers would mean 39 chances to drift. This
|
|
17
|
+
# class recovers the markup from the OUTSIDE instead: it asks the
|
|
18
|
+
# identifier for its own component values and wraps each one where it
|
|
19
|
+
# appears in the rendered string. That is one implementation, and a flavor
|
|
20
|
+
# added tomorrow is covered without touching its renderer.
|
|
21
|
+
#
|
|
22
|
+
# It is a fallback, not a replacement. `Identifier#render` uses it only
|
|
23
|
+
# when the renderer produced no span of its own, so ISO's exact,
|
|
24
|
+
# render-time placement still wins.
|
|
25
|
+
#
|
|
26
|
+
# Deliberate limits:
|
|
27
|
+
#
|
|
28
|
+
# * A token that does not appear verbatim in the output is skipped. A
|
|
29
|
+
# renderer may transform a value (abbreviate it, change its case), and a
|
|
30
|
+
# missing span is a far better outcome than a wrong one or a crash.
|
|
31
|
+
# * Matching walks left to right behind a cursor, so a later token can
|
|
32
|
+
# never match text an earlier one already claimed — that is what stops
|
|
33
|
+
# the part "1" of `ISO 1234-1` from matching inside "1234".
|
|
34
|
+
class Annotator
|
|
35
|
+
# Semantic class for each token, in the order tokens appear in a printed
|
|
36
|
+
# identifier. Order matters: it is the sequence the cursor walks.
|
|
37
|
+
TOKENS = [
|
|
38
|
+
[:publisher, "publisher"],
|
|
39
|
+
[:copublishers, "publisher"],
|
|
40
|
+
%i[typed_stage typed_stage_css],
|
|
41
|
+
[:type, "doctype"],
|
|
42
|
+
[:stage, "stage"],
|
|
43
|
+
[:number, "docnumber"],
|
|
44
|
+
[:part, "part"],
|
|
45
|
+
[:subpart, "part"],
|
|
46
|
+
[:stage_iteration, "iteration"],
|
|
47
|
+
[:year, "year"],
|
|
48
|
+
[:edition, "edition"],
|
|
49
|
+
[:languages, "language"],
|
|
50
|
+
].freeze
|
|
51
|
+
|
|
52
|
+
# Characters that may not sit directly against a match, so a token never
|
|
53
|
+
# binds to the middle of a longer run of the same character class.
|
|
54
|
+
WORD_CHAR = /[A-Za-z0-9]/
|
|
55
|
+
|
|
56
|
+
# How deep to follow nested identifiers. A wrapper around a wrapper is
|
|
57
|
+
# real (BSI adopts a CEN prestandard that adopts an ISO standard); four
|
|
58
|
+
# levels is past anything the corpus holds, and the cap is here so a
|
|
59
|
+
# cyclic `base` cannot hang a rendering call.
|
|
60
|
+
MAX_NESTING = 4
|
|
61
|
+
|
|
62
|
+
def initialize(identifier, context = nil)
|
|
63
|
+
@id = identifier
|
|
64
|
+
@context = context
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# @param rendered [String] the plain rendering of {@id}
|
|
68
|
+
# @return [String] the same string with semantic spans inserted
|
|
69
|
+
def annotate(rendered)
|
|
70
|
+
return rendered unless rendered.is_a?(String) && !rendered.empty?
|
|
71
|
+
|
|
72
|
+
cursor = 0
|
|
73
|
+
result = +""
|
|
74
|
+
|
|
75
|
+
ordered_tokens(rendered).each do |text, css_class|
|
|
76
|
+
index = find_token(rendered, text, cursor)
|
|
77
|
+
next if index.nil?
|
|
78
|
+
|
|
79
|
+
result << rendered[cursor...index]
|
|
80
|
+
result << %(<span class="#{css_class}">#{text}</span>)
|
|
81
|
+
cursor = index + text.length
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
result << rendered[cursor..]
|
|
85
|
+
result
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
private
|
|
89
|
+
|
|
90
|
+
# Tokens sorted by where they actually appear, not by the order
|
|
91
|
+
# {TOKENS} lists them.
|
|
92
|
+
#
|
|
93
|
+
# Flavors disagree about layout: ISO prints the number before the type
|
|
94
|
+
# ("ISO/IEC TR 2131"), CCSDS prints it after ("CCSDS 121.0-B-2"). Walking
|
|
95
|
+
# in declaration order pushed the cursor past the number for CCSDS, so
|
|
96
|
+
# "121" was never annotated. Sorting by first occurrence makes the walk
|
|
97
|
+
# follow the printed identifier instead of a fixed idea of one.
|
|
98
|
+
def ordered_tokens(rendered)
|
|
99
|
+
tokens = []
|
|
100
|
+
each_token { |text, css_class| tokens << [text, css_class] }
|
|
101
|
+
|
|
102
|
+
decorated = tokens.each_with_index.map do |token, i|
|
|
103
|
+
position = find_token(rendered, token.first, 0) || rendered.length
|
|
104
|
+
[position, i, token]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
decorated.sort_by { |position, i, _| [position, i] }.map(&:last)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Yields [text, css_class] for every annotatable token this identifier
|
|
111
|
+
# actually carries, then every one its nested identifiers carry.
|
|
112
|
+
def each_token(&)
|
|
113
|
+
emit_tokens(@id, 0, &)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# A wrapper — an adoption, a supplement, a bundle — carries no number of
|
|
117
|
+
# its own and prints the document it wraps, so the annotatable tokens in
|
|
118
|
+
# its string belong to `base`. Reading only the wrapper's own attributes
|
|
119
|
+
# is why every CSA container and CIE's supplement rendered plain while
|
|
120
|
+
# accepting the flag.
|
|
121
|
+
#
|
|
122
|
+
# Order does not matter here: `ordered_tokens` sorts by first occurrence,
|
|
123
|
+
# so a nested token lands where it actually appears in the string.
|
|
124
|
+
def emit_tokens(id, depth, &)
|
|
125
|
+
return if depth > MAX_NESTING
|
|
126
|
+
|
|
127
|
+
tokens_for(id).each do |attr_name, css_class|
|
|
128
|
+
Array(token_values(id, attr_name)).each do |value|
|
|
129
|
+
text = token_text(value)
|
|
130
|
+
next if text.nil? || text.empty?
|
|
131
|
+
|
|
132
|
+
yield text, resolve_class(css_class, value)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
nested_identifiers(id).each { |nested| emit_tokens(nested, depth + 1, &) }
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# {TOKENS} unless the identifier names more of its own — see
|
|
140
|
+
# `Pubid::Identifier#annotation_tokens`.
|
|
141
|
+
def tokens_for(id)
|
|
142
|
+
id.respond_to?(:annotation_tokens) ? id.annotation_tokens : TOKENS
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# The identifiers this one wraps, under any of the four names the gem
|
|
146
|
+
# uses: `base` (the uniform parent accessor), the `ids` / `identifiers`
|
|
147
|
+
# collections that bundles and consolidated identifiers hold instead, and
|
|
148
|
+
# CSA `Bundled`'s `bundled_with` — which holds the amendments a
|
|
149
|
+
# consolidation prints, and whose values it composes into the string from
|
|
150
|
+
# their components rather than from their own `to_s`.
|
|
151
|
+
def nested_identifiers(id)
|
|
152
|
+
%i[base ids identifiers bundled_with].flat_map do |name|
|
|
153
|
+
next [] unless id.respond_to?(name)
|
|
154
|
+
|
|
155
|
+
begin
|
|
156
|
+
Array(id.public_send(name))
|
|
157
|
+
rescue StandardError
|
|
158
|
+
[]
|
|
159
|
+
end
|
|
160
|
+
end.grep(::Pubid::Identifier)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def token_values(id, attr_name)
|
|
164
|
+
return nil unless id.respond_to?(attr_name)
|
|
165
|
+
|
|
166
|
+
id.public_send(attr_name)
|
|
167
|
+
rescue StandardError
|
|
168
|
+
# A derived reader may assume state a partial identifier lacks. A
|
|
169
|
+
# missing span is not worth an exception on a rendering path.
|
|
170
|
+
nil
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# The printed form of one component. Components render themselves through
|
|
174
|
+
# the context; a bare scalar is already its own text.
|
|
175
|
+
def token_text(value)
|
|
176
|
+
return nil if value.nil?
|
|
177
|
+
|
|
178
|
+
text = if value.respond_to?(:render)
|
|
179
|
+
value.render(context: @context)
|
|
180
|
+
else
|
|
181
|
+
value
|
|
182
|
+
end
|
|
183
|
+
text.to_s.strip
|
|
184
|
+
rescue StandardError
|
|
185
|
+
nil
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def resolve_class(css_class, value)
|
|
189
|
+
return css_class unless css_class == :typed_stage_css
|
|
190
|
+
|
|
191
|
+
TypedStageClass.for(value)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# First occurrence of +text+ at or after +cursor+ that is not embedded in
|
|
195
|
+
# a longer word — so "1" matches the part in "ISO 1234-1", never the "1"
|
|
196
|
+
# inside "1234".
|
|
197
|
+
def find_token(rendered, text, cursor)
|
|
198
|
+
at = cursor
|
|
199
|
+
while (index = rendered.index(text, at))
|
|
200
|
+
return index if standalone?(rendered, index, text.length)
|
|
201
|
+
|
|
202
|
+
at = index + 1
|
|
203
|
+
end
|
|
204
|
+
nil
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def standalone?(rendered, index, length)
|
|
208
|
+
before = index.zero? ? nil : rendered[index - 1]
|
|
209
|
+
after = rendered[index + length]
|
|
210
|
+
|
|
211
|
+
!WORD_CHAR.match?(before.to_s) && !WORD_CHAR.match?(after.to_s)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# The typed-stage class depends on the stage's type code, the same
|
|
215
|
+
# mapping `Renderers::Base#typed_stage_css` applies. Kept here rather
|
|
216
|
+
# than reached for through a private method on another object.
|
|
217
|
+
module TypedStageClass
|
|
218
|
+
MAP = {
|
|
219
|
+
"amd" => "amendment",
|
|
220
|
+
"cor" => "corrigendum",
|
|
221
|
+
"add" => "addendum",
|
|
222
|
+
}.freeze
|
|
223
|
+
|
|
224
|
+
def self.for(typed_stage)
|
|
225
|
+
code = typed_stage.respond_to?(:type_code) ? typed_stage.type_code.to_s : ""
|
|
226
|
+
return "stage" if code.empty? || code == "is"
|
|
227
|
+
|
|
228
|
+
MAP[code] || "doctype"
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Renderers
|
|
5
|
+
class Base
|
|
6
|
+
def initialize(identifier)
|
|
7
|
+
@id = identifier
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def render
|
|
11
|
+
raise NotImplementedError, "#{self.class}#render not implemented"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.render(identifier)
|
|
15
|
+
new(identifier).render
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Partitions a value into (leading separators, core, trailing separators)
|
|
19
|
+
# so "- : / space , ." stay OUTSIDE the annotation span (v1 parity).
|
|
20
|
+
SEMANTIC_SPLIT = %r{\A([-:/ ,.]*)(.*?)([-:/ ,.]*)\z}m
|
|
21
|
+
|
|
22
|
+
# type_code (a string) → semantic CSS class for the typed-stage token.
|
|
23
|
+
# Anything not listed (and not the default "is") renders as "doctype".
|
|
24
|
+
TYPED_STAGE_CSS = {
|
|
25
|
+
"amd" => "amendment",
|
|
26
|
+
"cor" => "corrigendum",
|
|
27
|
+
"add" => "addendum",
|
|
28
|
+
}.freeze
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# Wrap a rendered value in a <span class="css_class"> when annotation is
|
|
33
|
+
# enabled, keeping leading/trailing separator chars outside the span.
|
|
34
|
+
def annotate(value, css_class, annotated:)
|
|
35
|
+
str = value.to_s
|
|
36
|
+
return value unless annotated && css_class && !str.empty?
|
|
37
|
+
|
|
38
|
+
lead, core, trail = str.match(SEMANTIC_SPLIT).captures
|
|
39
|
+
return value if core.empty?
|
|
40
|
+
|
|
41
|
+
%(#{lead}<span class="#{css_class}">#{core}</span>#{trail})
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Render a value that may be a component or a bare scalar.
|
|
45
|
+
#
|
|
46
|
+
# `number`, `part` and `subpart` are `Components::Code` on
|
|
47
|
+
# ::Pubid::Identifier but a plain `:string` in a growing number of
|
|
48
|
+
# flavors, so a shared renderer cannot assume the format-aware
|
|
49
|
+
# `#render(context:)` seam is there. This keeps both shapes working while
|
|
50
|
+
# the flavors convert one tranche at a time.
|
|
51
|
+
def render_component(value, context)
|
|
52
|
+
return nil if value.nil?
|
|
53
|
+
|
|
54
|
+
value.respond_to?(:render) ? value.render(context: context) : value.to_s
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Choose between "stage" and a type/supplement class for a typed stage.
|
|
58
|
+
def typed_stage_css(typed_stage)
|
|
59
|
+
code = typed_stage&.type_code.to_s
|
|
60
|
+
return "stage" if code.empty? || code == "is"
|
|
61
|
+
|
|
62
|
+
TYPED_STAGE_CSS[code] || "doctype"
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Renderers
|
|
5
|
+
class DirectivesRenderer < HumanReadable
|
|
6
|
+
def render(context:, with_edition: false)
|
|
7
|
+
parts = []
|
|
8
|
+
parts << render_publisher_portion(context)
|
|
9
|
+
num_port = render_number_portion(context)
|
|
10
|
+
|
|
11
|
+
if num_port && !num_port.empty?
|
|
12
|
+
if num_port.start_with?(":")
|
|
13
|
+
result = parts.compact.join(" ") + num_port
|
|
14
|
+
else
|
|
15
|
+
parts << num_port
|
|
16
|
+
result = parts.compact.join(" ")
|
|
17
|
+
end
|
|
18
|
+
else
|
|
19
|
+
result = parts.compact.join(" ")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
result << " #{render_edition_portion(context)}" if with_edition && @id.edition&.number
|
|
23
|
+
result << render_language_portion(context, with_edition: with_edition)
|
|
24
|
+
result
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def render_publisher_portion(context)
|
|
30
|
+
ann = context.annotated
|
|
31
|
+
if @id.publisher
|
|
32
|
+
pub_str = annotate(@id.publisher.render(context:), "publisher",
|
|
33
|
+
annotated: ann)
|
|
34
|
+
end
|
|
35
|
+
abbr = @id.typed_stage ? @id.typed_stage.abbreviation(format_long: false) : ""
|
|
36
|
+
unless abbr.empty?
|
|
37
|
+
abbr = annotate(abbr, typed_stage_css(@id.typed_stage),
|
|
38
|
+
annotated: ann)
|
|
39
|
+
end
|
|
40
|
+
subgroup_str = @id.subgroup.render(context:) if @id.subgroup
|
|
41
|
+
|
|
42
|
+
[
|
|
43
|
+
pub_str,
|
|
44
|
+
(subgroup_str ? " #{subgroup_str}" : ""),
|
|
45
|
+
(abbr.empty? ? "" : " #{abbr}"),
|
|
46
|
+
].join
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def render_number_portion(context)
|
|
50
|
+
ann = context.annotated
|
|
51
|
+
parts = []
|
|
52
|
+
if @id.number
|
|
53
|
+
parts << annotate(render_component(@id.number, context), "docnumber",
|
|
54
|
+
annotated: ann)
|
|
55
|
+
end
|
|
56
|
+
if @id.part
|
|
57
|
+
parts << " #{annotate(render_component(@id.part, context), 'part',
|
|
58
|
+
annotated: ann)}"
|
|
59
|
+
end
|
|
60
|
+
if @id.subpart
|
|
61
|
+
parts << "-#{annotate(render_component(@id.subpart, context), 'part',
|
|
62
|
+
annotated: ann)}"
|
|
63
|
+
end
|
|
64
|
+
if @id.stage_iteration
|
|
65
|
+
parts << ".#{annotate(@id.stage_iteration.render(context:),
|
|
66
|
+
'iteration', annotated: ann)}"
|
|
67
|
+
end
|
|
68
|
+
date_str = @id.date.render(context:) if @id.date && context.with_date
|
|
69
|
+
parts << ":#{annotate(date_str, 'year', annotated: ann)}" if date_str
|
|
70
|
+
result = parts.join.strip
|
|
71
|
+
result.empty? ? nil : result
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Renderers
|
|
5
|
+
class GuideRenderer < HumanReadable
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
def render_publisher_and_stage(context)
|
|
9
|
+
ann = context.annotated
|
|
10
|
+
if @id.publisher
|
|
11
|
+
pub_str = annotate(@id.publisher.render(context:), "publisher",
|
|
12
|
+
annotated: ann)
|
|
13
|
+
end
|
|
14
|
+
stage_str = @id.typed_stage.render(context:) if @id.typed_stage
|
|
15
|
+
|
|
16
|
+
if stage_str && !stage_str.empty?
|
|
17
|
+
stage_str = annotate(stage_str, typed_stage_css(@id.typed_stage),
|
|
18
|
+
annotated: ann)
|
|
19
|
+
"#{pub_str} #{stage_str}"
|
|
20
|
+
else
|
|
21
|
+
pub_str
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Renderers
|
|
5
|
+
class HumanReadable < Base
|
|
6
|
+
# `**_opts` absorbs render flags that only some flavors honour (e.g. the
|
|
7
|
+
# IEEE-specific `:trademark`), so the shared renderer tolerates them.
|
|
8
|
+
def render(context:, with_edition: false, **_opts)
|
|
9
|
+
parts = []
|
|
10
|
+
parts << render_publisher_and_stage(context)
|
|
11
|
+
parts << render_number_portion(context)
|
|
12
|
+
parts << render_edition_portion(context) if with_edition
|
|
13
|
+
result = parts.compact.join(" ")
|
|
14
|
+
result << render_language_portion(context, with_edition: with_edition)
|
|
15
|
+
result << " (all parts)" if @id.all_parts
|
|
16
|
+
result
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def render_publisher_and_stage(context)
|
|
22
|
+
ann = context.annotated
|
|
23
|
+
if @id.publisher
|
|
24
|
+
pub_str = annotate(@id.publisher.render(context:), "publisher",
|
|
25
|
+
annotated: ann)
|
|
26
|
+
end
|
|
27
|
+
stage_str = @id.typed_stage.render(context:) if @id.typed_stage
|
|
28
|
+
|
|
29
|
+
if stage_str && !stage_str.empty?
|
|
30
|
+
has_copub = @id.publisher&.copublished?
|
|
31
|
+
sep = has_copub ? " " : "/"
|
|
32
|
+
stage_str = annotate(stage_str, typed_stage_css(@id.typed_stage),
|
|
33
|
+
annotated: ann)
|
|
34
|
+
"#{pub_str}#{sep}#{stage_str}"
|
|
35
|
+
else
|
|
36
|
+
pub_str
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def render_number_portion(context)
|
|
41
|
+
ann = context.annotated
|
|
42
|
+
parts = []
|
|
43
|
+
if @id.number
|
|
44
|
+
parts << annotate(render_component(@id.number, context), "docnumber",
|
|
45
|
+
annotated: ann)
|
|
46
|
+
end
|
|
47
|
+
if @id.part
|
|
48
|
+
parts << "-#{annotate(render_component(@id.part, context), 'part',
|
|
49
|
+
annotated: ann)}"
|
|
50
|
+
end
|
|
51
|
+
if @id.subpart
|
|
52
|
+
parts << "-#{annotate(render_component(@id.subpart, context), 'part',
|
|
53
|
+
annotated: ann)}"
|
|
54
|
+
end
|
|
55
|
+
if @id.stage_iteration
|
|
56
|
+
parts << ".#{annotate(@id.stage_iteration.render(context:),
|
|
57
|
+
'iteration', annotated: ann)}"
|
|
58
|
+
end
|
|
59
|
+
date_str = @id.date.render(context:) if @id.date && context.with_date
|
|
60
|
+
parts << ":#{annotate(date_str, 'year', annotated: ann)}" if date_str
|
|
61
|
+
parts.join
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def render_edition_portion(context)
|
|
65
|
+
return unless @id.edition&.number
|
|
66
|
+
|
|
67
|
+
annotate(@id.edition.render(context:), "edition",
|
|
68
|
+
annotated: context.annotated)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def render_language_portion(context, with_edition: false)
|
|
72
|
+
return "" unless @id.languages&.any? && context.with_language_code != :none
|
|
73
|
+
|
|
74
|
+
use_single = with_edition ? false : context.with_language_code == :single
|
|
75
|
+
rendered = @id.languages.map do |l|
|
|
76
|
+
annotate(l.render(context:, lang_single: use_single), "language",
|
|
77
|
+
annotated: context.annotated)
|
|
78
|
+
end
|
|
79
|
+
"(#{rendered.join(use_single ? '/' : ',')})"
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Renderers
|
|
5
|
+
class IwaRenderer < HumanReadable
|
|
6
|
+
def render(context:, with_edition: false)
|
|
7
|
+
parts = []
|
|
8
|
+
if @id.typed_stage
|
|
9
|
+
parts << annotate(@id.typed_stage.render(context:),
|
|
10
|
+
typed_stage_css(@id.typed_stage),
|
|
11
|
+
annotated: context.annotated)
|
|
12
|
+
end
|
|
13
|
+
parts << render_number_portion(context)
|
|
14
|
+
result = parts.compact.join(" ")
|
|
15
|
+
result << render_language_portion(context, with_edition: with_edition)
|
|
16
|
+
result
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|