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,293 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Nist
|
|
5
|
+
# Builder dedicated to CIRC/LCIRC supplement identifier construction.
|
|
6
|
+
#
|
|
7
|
+
# Extracted from Builder.build_circular_supplement* methods to keep the
|
|
8
|
+
# main Builder focused on orchestration. The circular supplement
|
|
9
|
+
# construction pipeline is a self-contained sub-flow that:
|
|
10
|
+
#
|
|
11
|
+
# 1. Decides between the wrapper class (CircularSupplement) for V1-compat
|
|
12
|
+
# update forms (slash-year "118supp3/1926" -> ".../Upd1-192603";
|
|
13
|
+
# implicit revision "145r11/1925") and the normal Circular /
|
|
14
|
+
# LetterCircular classes for everything else.
|
|
15
|
+
# 2. Builds the base identifier recursively via Builder#build.
|
|
16
|
+
# 3. Attaches the supplement as either an isolated component on the normal
|
|
17
|
+
# class, or a structured edition/update on the wrapper.
|
|
18
|
+
#
|
|
19
|
+
# Single Responsibility: Construct CIRC/LCIRC supplement identifier
|
|
20
|
+
# objects from parsed data, calling back to the parent Builder for base
|
|
21
|
+
# identifier construction.
|
|
22
|
+
class CircularSupplementBuilder
|
|
23
|
+
# @param builder [Builder] the parent builder (for recursive base build)
|
|
24
|
+
def initialize(builder)
|
|
25
|
+
@builder = builder
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Build CircularSupplement with base wrapping
|
|
29
|
+
# @param parsed_hash [Hash] the parsed supplement data
|
|
30
|
+
# Build a CIRC/LCIRC supplement. Most forms collapse onto the base
|
|
31
|
+
# identifier's normal class (Circular / LetterCircular) with isolated
|
|
32
|
+
# supplement attributes, so they share one model with every other series
|
|
33
|
+
# and are queryable by part. The V1-compat update forms (slash-year
|
|
34
|
+
# "118supp3/1926" -> ".../Upd1-192603"; implicit revision "145r11/1925")
|
|
35
|
+
# render through an Update component the flat supplement model can't
|
|
36
|
+
# express, so they stay on the CircularSupplement wrapper for now.
|
|
37
|
+
def build_circular_supplement(parsed_hash)
|
|
38
|
+
if parsed_hash[:supplement_slash_year].is_a?(Hash) ||
|
|
39
|
+
parsed_hash[:implicit_supplement].is_a?(Hash)
|
|
40
|
+
return build_circular_supplement_wrapper(parsed_hash)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
series_value = if parsed_hash[:circ_series].is_a?(Hash)
|
|
44
|
+
parsed_hash[:circ_series][:series]
|
|
45
|
+
else
|
|
46
|
+
parsed_hash[:series]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Date-range supplement (no base document): a plain base identifier with
|
|
50
|
+
# no number, carrying the range. parsed_format is left at the default so
|
|
51
|
+
# a dotted MR input still normalizes to the spaced short form.
|
|
52
|
+
if parsed_hash[:supplement_date_range].is_a?(Hash)
|
|
53
|
+
range = parsed_hash[:supplement_date_range]
|
|
54
|
+
identifier = @builder.build({ series: series_value })
|
|
55
|
+
ms = range[:supp_month_start]&.to_s
|
|
56
|
+
ys = range[:supp_year_start]&.to_s
|
|
57
|
+
me = range[:supp_month_end]&.to_s
|
|
58
|
+
ye = range[:supp_year_end]&.to_s
|
|
59
|
+
# Month is optional: a year-only range ("sup1925-1926") passes just the
|
|
60
|
+
# bare year, which supplement_from parses into year/year_end.
|
|
61
|
+
identifier.supplement = @builder.supplement_from(
|
|
62
|
+
value: nil, has_revision: false,
|
|
63
|
+
range_start: (ys ? "#{ms}#{ys}" : nil),
|
|
64
|
+
range_end: (ye ? "#{me}#{ye}" : nil)
|
|
65
|
+
)
|
|
66
|
+
return identifier
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Based supplement: build the base, then attach the supplement as an
|
|
70
|
+
# isolated component on that normal class.
|
|
71
|
+
identifier = build_circular_supplement_base(parsed_hash, series_value)
|
|
72
|
+
raw = if parsed_hash[:supplement_month_year]
|
|
73
|
+
parsed_hash[:supplement_month_year].to_s
|
|
74
|
+
elsif parsed_hash[:supplement_year]
|
|
75
|
+
parsed_hash[:supplement_year].to_s
|
|
76
|
+
else
|
|
77
|
+
"" # supplement_empty or bare marker
|
|
78
|
+
end
|
|
79
|
+
identifier.supplement = Components::Supplement.from_raw(raw)
|
|
80
|
+
identifier
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Build just the base identifier for a based CIRC/LCIRC supplement, from
|
|
84
|
+
# base_portion (number, optional edition "101e2" or letter suffix "378G")
|
|
85
|
+
# or the merged first_number fallback. Returns the normal class.
|
|
86
|
+
def build_circular_supplement_base(parsed_hash, series_value)
|
|
87
|
+
base_portion = parsed_hash[:base_portion]
|
|
88
|
+
unless base_portion
|
|
89
|
+
return @builder.build({
|
|
90
|
+
publisher: parsed_hash[:publisher],
|
|
91
|
+
series: series_value || parsed_hash[:series],
|
|
92
|
+
first_number: parsed_hash[:first_number],
|
|
93
|
+
parsed_format: parsed_hash[:parsed_format],
|
|
94
|
+
})
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
base_number = if base_portion.is_a?(Hash)
|
|
98
|
+
base_portion[:simple_number] || base_portion[:base_number]
|
|
99
|
+
else
|
|
100
|
+
base_portion
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
letter_suffix = nil
|
|
104
|
+
if base_portion.is_a?(Hash) && base_portion[:letter_suffix]
|
|
105
|
+
letter_suffix = base_portion[:letter_suffix].to_s.upcase
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
publisher_value = nil
|
|
109
|
+
if parsed_hash[:circ_series].is_a?(Hash) && parsed_hash[:circ_series][:series]
|
|
110
|
+
series_str = parsed_hash[:circ_series][:series].to_s
|
|
111
|
+
publisher_value = series_str.split.first if series_str.include?(" ")
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
has_edition = base_portion.is_a?(Hash) && base_portion[:edition_number]
|
|
115
|
+
|
|
116
|
+
base_number_with_suffix = base_number.to_s
|
|
117
|
+
base_number_with_suffix += letter_suffix if letter_suffix
|
|
118
|
+
if has_edition
|
|
119
|
+
base_number_with_suffix += "e#{base_portion[:edition_number]}"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
base_hash = {
|
|
123
|
+
series: series_value,
|
|
124
|
+
first_number: base_number_with_suffix,
|
|
125
|
+
parsed_format: parsed_hash[:parsed_format],
|
|
126
|
+
}
|
|
127
|
+
base_hash[:publisher] = publisher_value if publisher_value
|
|
128
|
+
base_hash[:edition_e] =
|
|
129
|
+
{ edition_id: base_portion[:edition_number] } if has_edition
|
|
130
|
+
|
|
131
|
+
@builder.build(base_hash)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# @return [Identifiers::CircularSupplement] the supplement identifier
|
|
135
|
+
def build_circular_supplement_wrapper(parsed_hash)
|
|
136
|
+
supplement = Identifiers::CircularSupplement.new
|
|
137
|
+
|
|
138
|
+
# Extract series from circ_series if present (nested structure from parser)
|
|
139
|
+
series_value = nil
|
|
140
|
+
if parsed_hash[:circ_series].is_a?(Hash)
|
|
141
|
+
series_value = parsed_hash[:circ_series][:series]
|
|
142
|
+
elsif parsed_hash[:series]
|
|
143
|
+
series_value = parsed_hash[:series]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Handle date range supplement (no base)
|
|
147
|
+
if parsed_hash[:supplement_date_range].is_a?(Hash)
|
|
148
|
+
range = parsed_hash[:supplement_date_range]
|
|
149
|
+
month_start = range[:supp_month_start]&.to_s
|
|
150
|
+
year_start = range[:supp_year_start]&.to_s
|
|
151
|
+
month_end = range[:supp_month_end]&.to_s
|
|
152
|
+
year_end = range[:supp_year_end]&.to_s
|
|
153
|
+
|
|
154
|
+
supplement.supplement_date_range_start = "#{month_start}#{year_start}" if month_start && year_start
|
|
155
|
+
supplement.supplement_date_range_end = "#{month_end}#{year_end}" if month_end && year_end
|
|
156
|
+
|
|
157
|
+
return supplement
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Build base identifier from base_portion (if present)
|
|
161
|
+
# If not present (because it was merged during parsing), use first_number
|
|
162
|
+
if parsed_hash[:base_portion]
|
|
163
|
+
# Extract the actual number value from base_portion hash
|
|
164
|
+
# base_portion can be: {:simple_number=>"118"}, {:base_number=>"145", :revision_letter=>"r", :revision_number=>"11"}, etc.
|
|
165
|
+
base_portion = parsed_hash[:base_portion]
|
|
166
|
+
base_number = if base_portion.is_a?(Hash)
|
|
167
|
+
# Extract the value from whichever key is present
|
|
168
|
+
base_portion[:simple_number] || base_portion[:base_number]
|
|
169
|
+
else
|
|
170
|
+
base_portion
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Check for letter suffix in base_portion (e.g., "378G")
|
|
174
|
+
letter_suffix = nil
|
|
175
|
+
if base_portion.is_a?(Hash) && base_portion[:letter_suffix]
|
|
176
|
+
letter_suffix = base_portion[:letter_suffix].to_s.upcase
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Extract publisher from circ_series if present
|
|
180
|
+
publisher_value = nil
|
|
181
|
+
if parsed_hash[:circ_series].is_a?(Hash) && parsed_hash[:circ_series][:series]
|
|
182
|
+
series_str = parsed_hash[:circ_series][:series].to_s
|
|
183
|
+
# Extract publisher from series (e.g., "NBS LCIRC" -> "NBS")
|
|
184
|
+
publisher_value = series_str.split.first if series_str.include?(" ")
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Check if base_portion has revision (for patterns like "145r11/1925")
|
|
188
|
+
has_revision = base_portion.is_a?(Hash) && base_portion[:revision_letter] && base_portion[:revision_number]
|
|
189
|
+
|
|
190
|
+
# NEW: Check if base_portion has edition_number (for patterns like "101e2")
|
|
191
|
+
has_edition = base_portion.is_a?(Hash) && base_portion[:edition_number]
|
|
192
|
+
|
|
193
|
+
# Include letter suffix in base_number if present
|
|
194
|
+
# Also include edition_number if present (for "101e2" pattern)
|
|
195
|
+
base_number_with_suffix = base_number.to_s
|
|
196
|
+
if letter_suffix
|
|
197
|
+
base_number_with_suffix += letter_suffix
|
|
198
|
+
end
|
|
199
|
+
if has_edition
|
|
200
|
+
base_number_with_suffix += "e#{base_portion[:edition_number]}"
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
# Reconstruct parse hash for base identifier
|
|
204
|
+
base_hash = {
|
|
205
|
+
series: series_value,
|
|
206
|
+
first_number: base_number_with_suffix,
|
|
207
|
+
parsed_format: parsed_hash[:parsed_format],
|
|
208
|
+
}
|
|
209
|
+
base_hash[:publisher] = publisher_value if publisher_value
|
|
210
|
+
|
|
211
|
+
# NEW: Add edition_number to base_hash for patterns like "101e2"
|
|
212
|
+
# This will be processed by the normal build() logic to create Edition component
|
|
213
|
+
if has_edition
|
|
214
|
+
# Create edition_e hash that will be converted to Edition with type="e"
|
|
215
|
+
base_hash[:edition_e] =
|
|
216
|
+
{ edition_id: base_portion[:edition_number] }
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Recursively build base identifier
|
|
220
|
+
# This will go through normal build() process which extracts edition from "101e2"
|
|
221
|
+
supplement.base = @builder.build(base_hash)
|
|
222
|
+
|
|
223
|
+
# NEW: Handle revision + implicit supplement pattern (e.g., "145r11/1925")
|
|
224
|
+
# Create update format: "Upd1-{year}{revision_number}"
|
|
225
|
+
if has_revision && parsed_hash[:implicit_supplement].is_a?(Hash)
|
|
226
|
+
revision_number = base_portion[:revision_number].to_s
|
|
227
|
+
supplement_year = parsed_hash[:implicit_supplement][:implicit_supplement_year].to_s
|
|
228
|
+
|
|
229
|
+
# Create Update component for revision+supplement pattern.
|
|
230
|
+
# Renders "/Upd1-{year}{revision_number}" via Update#to_s(:short).
|
|
231
|
+
# The year+revision are fused into the year field (month left nil) so
|
|
232
|
+
# the revision is NOT zero-padded (e.g. "145r6/1925" -> "Upd1-19256",
|
|
233
|
+
# not "192506"). Must be a Components::Update (not a String) so
|
|
234
|
+
# :update serializes.
|
|
235
|
+
supplement.update = Components::Update.new(
|
|
236
|
+
number: "1", year: "#{supplement_year}#{revision_number}",
|
|
237
|
+
prefix: "slash"
|
|
238
|
+
)
|
|
239
|
+
supplement.implicit_supplement = true # Mark as implicit supplement for rendering
|
|
240
|
+
end
|
|
241
|
+
elsif parsed_hash[:first_number]
|
|
242
|
+
# base_portion was lost during merge, use first_number to build base identifier
|
|
243
|
+
base_hash = {
|
|
244
|
+
publisher: parsed_hash[:publisher],
|
|
245
|
+
series: series_value || parsed_hash[:series],
|
|
246
|
+
first_number: parsed_hash[:first_number],
|
|
247
|
+
parsed_format: parsed_hash[:parsed_format],
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
# Recursively build base identifier
|
|
251
|
+
supplement.base = @builder.build(base_hash)
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# Build supplement edition from captured data
|
|
255
|
+
if parsed_hash[:supplement_month_year]
|
|
256
|
+
# Parse month+year format like "Jan1924"
|
|
257
|
+
month_year = parsed_hash[:supplement_month_year].to_s
|
|
258
|
+
supplement.edition = Components::Edition.new(type: "s",
|
|
259
|
+
id: month_year)
|
|
260
|
+
elsif parsed_hash[:supplement_year]
|
|
261
|
+
# Just year: 1924
|
|
262
|
+
supplement.edition = Components::Edition.new(type: "s",
|
|
263
|
+
id: parsed_hash[:supplement_year].to_s)
|
|
264
|
+
elsif parsed_hash[:supplement_slash_year].is_a?(Hash)
|
|
265
|
+
# NEW: Handle supplement_slash_year pattern (e.g., "sup12/1926", "sup1/1927")
|
|
266
|
+
# V1 format: "Upd1-192612" where "1" is fixed and "192612" is year+number concatenated
|
|
267
|
+
# Single digit numbers are zero-padded: "sup1/1927" -> "Upd1-192701"
|
|
268
|
+
supp_hash = parsed_hash[:supplement_slash_year]
|
|
269
|
+
supp_number = supp_hash[:supp_number]&.to_s
|
|
270
|
+
supp_year = supp_hash[:supp_year]&.to_s
|
|
271
|
+
|
|
272
|
+
# Pad supplement number to 2 digits for single-digit numbers
|
|
273
|
+
supp_number_padded = supp_number.rjust(2, "0")
|
|
274
|
+
|
|
275
|
+
# Create Update component for supplement (V1 compatibility uses Update for supplements).
|
|
276
|
+
# Renders "/Upd1-{year}{padded_number}" via Update#to_s(:short). The
|
|
277
|
+
# year and already-padded number are fused into the year field (month
|
|
278
|
+
# left nil) so rendering reproduces the V1 string exactly. Must be a
|
|
279
|
+
# Components::Update (not a String) so :update serializes.
|
|
280
|
+
supplement.update = Components::Update.new(
|
|
281
|
+
number: "1", year: "#{supp_year}#{supp_number_padded}",
|
|
282
|
+
prefix: "slash"
|
|
283
|
+
)
|
|
284
|
+
elsif parsed_hash[:supplement_empty]
|
|
285
|
+
# Empty supplement - no edition
|
|
286
|
+
# supplement.edition remains nil
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
supplement
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pubid
|
|
4
|
+
module Nist
|
|
5
|
+
module Components
|
|
6
|
+
# Code component for NIST identifiers.
|
|
7
|
+
#
|
|
8
|
+
# Inherits +value+ and +subpart+ from the shared Code; overrides
|
|
9
|
+
# rendering to compose compound numbers like "1234.5" (subpart
|
|
10
|
+
# joined with "." per NIST convention).
|
|
11
|
+
class Code < ::Pubid::Components::Code
|
|
12
|
+
def to_s
|
|
13
|
+
result = value.to_s
|
|
14
|
+
result += ".#{subpart}" if subpart
|
|
15
|
+
result
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def part
|
|
19
|
+
return nil unless value&.include?("-")
|
|
20
|
+
|
|
21
|
+
parts = value.to_s.split("-")
|
|
22
|
+
parts.last if parts.length > 1
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Nist
|
|
7
|
+
module Components
|
|
8
|
+
# Edition component for NIST publications per nist-pubid-spec.md
|
|
9
|
+
# Format: <edition-type><edition-id>[.<additional-text>]
|
|
10
|
+
# Types: "-" (historical), "e" (edition), "r" (revision)
|
|
11
|
+
# Edition ID can be: number ("2") OR year ("2021")
|
|
12
|
+
# Additional text: Text AFTER "rev" prefix (WITHOUT "rev")
|
|
13
|
+
#
|
|
14
|
+
# SEMANTICS:
|
|
15
|
+
# - "e" or "edition" = edition (can be number or year or month+year)
|
|
16
|
+
# - "r" or "rev" or "revision" or "v" or "version" = revision (can be number or year or month+year)
|
|
17
|
+
# - If BOTH edition AND revision in same identifier:
|
|
18
|
+
# * Type is "e" (edition takes precedence)
|
|
19
|
+
# * ID is the edition value
|
|
20
|
+
# * additional_text is the revision part (WITHOUT "rev" prefix)
|
|
21
|
+
# * Renders with DOT separator: e2.June1908
|
|
22
|
+
#
|
|
23
|
+
# Examples:
|
|
24
|
+
# Edition.new(type: "e", id: "2").to_s # => "e2"
|
|
25
|
+
# Edition.new(type: "e", id: "2", additional_text: "June1908").to_s # => "e2.June1908"
|
|
26
|
+
# Edition.new(type: "e", id: "2", additional_text: "1908").to_s # => "e2.1908"
|
|
27
|
+
# Edition.new(type: "r", id: "1963").to_s # => "r1963"
|
|
28
|
+
# Edition.new(type: "r", id: "5").to_s # => "r5"
|
|
29
|
+
# Edition.new(type: "r", id: "5", original_prefix: " Rev. ").to_s # => "Rev. 5"
|
|
30
|
+
class Edition < Lutaml::Model::Serializable
|
|
31
|
+
attribute :type, :string # "-", "e", or "r"
|
|
32
|
+
attribute :id, :string # Edition ID (number or year)
|
|
33
|
+
attribute :additional_text, :string # Text after "rev" (WITHOUT "rev" prefix)
|
|
34
|
+
attribute :original_prefix, :string # Original format prefix for preservation (e.g., " Rev. ", " rev ", " r")
|
|
35
|
+
|
|
36
|
+
# Render edition in specified format
|
|
37
|
+
# @param format [:short, :mr, :long, :abbrev] The output format
|
|
38
|
+
# @return [String] The formatted edition representation
|
|
39
|
+
def to_s(format = :short)
|
|
40
|
+
case format
|
|
41
|
+
when :short, :mr
|
|
42
|
+
build_short_format
|
|
43
|
+
when :long
|
|
44
|
+
build_long_format
|
|
45
|
+
when :abbrev
|
|
46
|
+
build_short_format
|
|
47
|
+
else
|
|
48
|
+
build_short_format
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Identity ignores original_prefix: it records how the edition was
|
|
53
|
+
# spelled in the source ("Rev. " vs "r") for round-trip rendering
|
|
54
|
+
# only. "r1" and "Rev. 1" are the same edition.
|
|
55
|
+
def ==(other)
|
|
56
|
+
return false unless other.is_a?(self.class)
|
|
57
|
+
|
|
58
|
+
type == other.type && id == other.id &&
|
|
59
|
+
additional_text == other.additional_text
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
alias eql? ==
|
|
63
|
+
|
|
64
|
+
def hash
|
|
65
|
+
[self.class, type, id, additional_text].hash
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
# Build short format: "e2", "e2.June1908", "e2.1908", "e2.50", "r1963", "-April1909", "r1a"
|
|
71
|
+
# If original_prefix is set, preserves original format (e.g., "Rev. 5" not "r5")
|
|
72
|
+
def build_short_format
|
|
73
|
+
# For revision type, use original prefix if available (format preservation)
|
|
74
|
+
if type == "r" && original_prefix && !original_prefix.empty?
|
|
75
|
+
# Build base format with original prefix
|
|
76
|
+
result = "#{original_prefix}#{id}"
|
|
77
|
+
# Add additional text (letter suffix) if present, preserve UPPERCASE
|
|
78
|
+
if additional_text && !additional_text.empty?
|
|
79
|
+
# For letter suffixes, append uppercase letter directly: " r5A" or "r5A"
|
|
80
|
+
if additional_text.match?(/^[A-Za-z]$/)
|
|
81
|
+
result += additional_text.upcase
|
|
82
|
+
else
|
|
83
|
+
# For other additional text (years, etc.), use dot separator
|
|
84
|
+
result += ".#{additional_text}"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
return result
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# For dash-year editions (type "e" with original_prefix "-"), preserve dash format
|
|
91
|
+
# Example: "-1979" for patterns like "NBS HB 130-1979"
|
|
92
|
+
if type == "e" && original_prefix == "-" && id.match?(/^\d{4}$/)
|
|
93
|
+
return "-#{id}"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
result = "#{type}#{id}"
|
|
97
|
+
|
|
98
|
+
if additional_text && !additional_text.empty?
|
|
99
|
+
# For historical editions ("-") with month names, NO dot separator
|
|
100
|
+
# Pattern: "-April1909" not "-.April1909"
|
|
101
|
+
if type == "-" && additional_text.match?(/^[A-Z][a-z]+\d{4}$/)
|
|
102
|
+
result = "-#{additional_text}"
|
|
103
|
+
# For letter suffixes (single letter like "a", "A", "b", "B", etc.), NO dot separator
|
|
104
|
+
# Use UPPERCASE for consistency: "r5A" for SP patterns like 800-53r5a
|
|
105
|
+
elsif additional_text.match?(/^[A-Za-z]$/)
|
|
106
|
+
result += additional_text.upcase # Normalize to UPPERCASE: r5A
|
|
107
|
+
else
|
|
108
|
+
# For ALL years (2-digit or 4-digit) and month+year, use DOT separator
|
|
109
|
+
# Examples: e2.50, e2.1915, e2.June1908
|
|
110
|
+
result += ".#{additional_text}"
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
result
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Build long format: "Edition 2021", "Revision 5", etc.
|
|
118
|
+
def build_long_format
|
|
119
|
+
case type
|
|
120
|
+
when "e"
|
|
121
|
+
"Edition #{id}"
|
|
122
|
+
when "r"
|
|
123
|
+
"Revision #{id}"
|
|
124
|
+
when "-"
|
|
125
|
+
# Historical precedent - render as dash-number
|
|
126
|
+
"-#{id}"
|
|
127
|
+
else
|
|
128
|
+
"#{type}#{id}"
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Nist
|
|
7
|
+
module Components
|
|
8
|
+
# IssueNumber component for NIST identifiers
|
|
9
|
+
# Represents the issue/number designation (e.g., "No. 12" in "Vol. 6, No. 12")
|
|
10
|
+
class IssueNumber < Lutaml::Model::Serializable
|
|
11
|
+
attribute :number, :string
|
|
12
|
+
|
|
13
|
+
# Short form rendering: "n12"
|
|
14
|
+
# Long form rendering: "No. 12"
|
|
15
|
+
def to_s(format = :short)
|
|
16
|
+
case format
|
|
17
|
+
when :long, :full
|
|
18
|
+
"No. #{number}"
|
|
19
|
+
when :short, :mr
|
|
20
|
+
"n#{number}"
|
|
21
|
+
else
|
|
22
|
+
"n#{number}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
|
|
5
|
+
module Pubid
|
|
6
|
+
module Nist
|
|
7
|
+
module Components
|
|
8
|
+
# Part component for NIST publications
|
|
9
|
+
# Format: n{NUMBER}, pt{NUMBER}, or just letter depending on type
|
|
10
|
+
#
|
|
11
|
+
# Type attribute determines rendering:
|
|
12
|
+
# - "pt" => "pt1" (SP part notation)
|
|
13
|
+
# - "n" => "n1" (CSM issue notation)
|
|
14
|
+
# - "" => "A" (letter suffix - just the letter)
|
|
15
|
+
#
|
|
16
|
+
# Examples:
|
|
17
|
+
# Part.new(type: "pt", value: "1").to_s => "pt1"
|
|
18
|
+
# Part.new(type: "n", value: "1").to_s => "n1"
|
|
19
|
+
# Part.new(type: "", value: "A").to_s => "A"
|
|
20
|
+
#
|
|
21
|
+
# Used in:
|
|
22
|
+
# - CSM: Issue number (n1)
|
|
23
|
+
# - SP: Part number (pt1)
|
|
24
|
+
# - Letter suffixes (A, B, C, etc.)
|
|
25
|
+
class Part < Lutaml::Model::Serializable
|
|
26
|
+
attribute :type, :string # "pt" for part notation, "n" for issue, "" for letter suffix
|
|
27
|
+
attribute :value, :string # Part number or letter (1, 2, A, B, etc.)
|
|
28
|
+
|
|
29
|
+
# Render part with type-specific notation
|
|
30
|
+
# @param notation [Symbol, String, nil] Optional notation override
|
|
31
|
+
# - :n_notation or "n" → use "n" prefix
|
|
32
|
+
# - :pt_notation or "pt" → use "pt" prefix
|
|
33
|
+
# - :letter_notation or "" → just the value (letter suffix)
|
|
34
|
+
# @return [String] The formatted part representation
|
|
35
|
+
def to_s(notation = nil)
|
|
36
|
+
# Handle symbol notation parameters
|
|
37
|
+
notation_to_use = if notation.is_a?(Symbol)
|
|
38
|
+
case notation
|
|
39
|
+
when :n_notation then "n"
|
|
40
|
+
when :pt_notation then "pt"
|
|
41
|
+
when :letter_notation then ""
|
|
42
|
+
else notation.to_s
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
notation
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# If notation explicitly provided, use it
|
|
49
|
+
if notation_to_use
|
|
50
|
+
return "#{notation_to_use}#{value}" unless notation_to_use.empty?
|
|
51
|
+
|
|
52
|
+
return value
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Otherwise use type attribute
|
|
56
|
+
case type
|
|
57
|
+
when "pt"
|
|
58
|
+
"pt#{value}"
|
|
59
|
+
when "n"
|
|
60
|
+
"n#{value}"
|
|
61
|
+
when ""
|
|
62
|
+
# Letter suffix - just the letter
|
|
63
|
+
value
|
|
64
|
+
else
|
|
65
|
+
# Fallback for nil or unknown types - default to "n" notation (CSM issue number)
|
|
66
|
+
"n#{value}"
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Alias for numeric comparison
|
|
71
|
+
def to_i
|
|
72
|
+
value.to_i
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "lutaml/model"
|
|
4
|
+
require "yaml"
|
|
5
|
+
|
|
6
|
+
module Pubid
|
|
7
|
+
module Nist
|
|
8
|
+
module Components
|
|
9
|
+
# Stage component for NIST draft identifiers
|
|
10
|
+
# Combines id (i/f/1-9) with type (pd/wd/prd)
|
|
11
|
+
#
|
|
12
|
+
# Examples:
|
|
13
|
+
# Stage.new(id: "i", type: "pd").to_s(:short) # => "ipd"
|
|
14
|
+
# Stage.new(id: "f", type: "pd").to_s(:long) # => "(Final Public Draft)"
|
|
15
|
+
class Stage < Lutaml::Model::Serializable
|
|
16
|
+
attribute :id, :string # i, f, 1-9
|
|
17
|
+
attribute :type, :string # pd, wd, prd
|
|
18
|
+
|
|
19
|
+
# Load stages from V1 YAML config
|
|
20
|
+
STAGES = YAML.load_file(
|
|
21
|
+
File.join(File.dirname(__FILE__),
|
|
22
|
+
"../../../../archived-gems/pubid-nist/stages.yaml"),
|
|
23
|
+
).freeze
|
|
24
|
+
|
|
25
|
+
# Render stage in specified format
|
|
26
|
+
# @param format [:short, :mr, :long] The output format
|
|
27
|
+
# @return [String] The formatted stage representation
|
|
28
|
+
def to_s(format = :short)
|
|
29
|
+
return "" if id.nil? || type.nil?
|
|
30
|
+
|
|
31
|
+
case format
|
|
32
|
+
when :short, :mr
|
|
33
|
+
"#{id}#{type}"
|
|
34
|
+
when :long
|
|
35
|
+
"(#{STAGES['id'][id]} #{STAGES['type'][type]})"
|
|
36
|
+
else
|
|
37
|
+
"#{id}#{type}"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Validate stage id and type against YAML config
|
|
42
|
+
def validate!
|
|
43
|
+
unless STAGES["id"].key?(id.to_s)
|
|
44
|
+
raise ArgumentError, "Invalid stage id: #{id.inspect}"
|
|
45
|
+
end
|
|
46
|
+
unless STAGES["type"].key?(type.to_s)
|
|
47
|
+
raise ArgumentError, "Invalid stage type: #{type.inspect}"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|