pubid 2.0.1 → 2.0.2
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/data/parg/adobe.json +1 -1
- data/data/parg/amca.json +1 -1
- data/data/parg/ansi.json +1 -1
- data/data/parg/api.json +1 -1
- data/data/parg/ashrae.json +1 -1
- data/data/parg/asme.json +1 -1
- data/data/parg/astm.json +1 -1
- data/data/parg/bipm.json +1 -1
- data/data/parg/bsi.json +1 -1
- data/data/parg/ccsds.json +1 -1
- data/data/parg/cen_cenelec.json +1 -1
- data/data/parg/cie.json +1 -1
- data/data/parg/csa.json +1 -1
- data/data/parg/ecma.json +1 -1
- data/data/parg/etsi.json +1 -1
- data/data/parg/evs.json +1 -1
- data/data/parg/gost.json +1 -1
- data/data/parg/iana.json +1 -1
- data/data/parg/idf.json +1 -1
- data/data/parg/iec.json +1 -1
- data/data/parg/iho.json +1 -0
- data/data/parg/isbn.json +1 -1
- data/data/parg/itu.json +1 -1
- data/data/parg/jcgm.json +1 -1
- data/data/parg/jis.json +1 -1
- data/data/parg/nist.json +1 -1
- data/data/parg/oiml.json +1 -1
- data/data/parg/omg.json +1 -1
- data/data/parg/plateau.json +1 -1
- data/data/parg/tgpp.json +1 -1
- data/data/parg/un.json +1 -1
- data/lib/pubid/adobe/identifier.rb +1 -1
- data/lib/pubid/adobe/parser.rb +2 -113
- data/lib/pubid/amca/identifiers/base.rb +1 -1
- data/lib/pubid/amca/parser.rb +1 -145
- data/lib/pubid/ansi/identifier.rb +1 -1
- data/lib/pubid/ansi/parser.rb +1 -82
- data/lib/pubid/api/builder.rb +32 -1
- data/lib/pubid/api/identifier.rb +1 -1
- data/lib/pubid/api/parser.rb +1 -131
- data/lib/pubid/ashrae/identifiers/base.rb +1 -1
- data/lib/pubid/ashrae/parser.rb +3 -710
- data/lib/pubid/asme/builder.rb +6 -4
- data/lib/pubid/asme/identifier.rb +1 -2
- data/lib/pubid/asme/parser.rb +1 -328
- data/lib/pubid/astm/builder.rb +12 -3
- data/lib/pubid/astm/identifier.rb +1 -2
- data/lib/pubid/astm/parser.rb +1 -227
- data/lib/pubid/bipm/identifier.rb +8 -1
- data/lib/pubid/bipm/parser.rb +2 -224
- data/lib/pubid/bsi/builder.rb +2 -4
- data/lib/pubid/bsi/parser.rb +1 -666
- data/lib/pubid/bsi/single_identifier.rb +38 -1
- data/lib/pubid/calconnect/parser.rb +2 -40
- data/lib/pubid/ccsds/identifier.rb +1 -1
- data/lib/pubid/ccsds/parser.rb +1 -66
- data/lib/pubid/cen_cenelec/identifier.rb +16 -1
- data/lib/pubid/cen_cenelec/parser.rb +3 -136
- data/lib/pubid/cie/identifier.rb +1 -1
- data/lib/pubid/cie/parser.rb +3 -378
- data/lib/pubid/conformance.rb +1 -1
- data/lib/pubid/csa/builder.rb +41 -18
- data/lib/pubid/csa/identifier.rb +12 -4
- data/lib/pubid/csa/identifiers/amendment.rb +28 -0
- data/lib/pubid/csa/identifiers.rb +1 -0
- data/lib/pubid/csa/parser.rb +16 -397
- data/lib/pubid/doi/parser.rb +2 -37
- data/lib/pubid/easc/builder.rb +1 -1
- data/lib/pubid/easc/parser.rb +2 -70
- data/lib/pubid/ecma/CLAUDE.md +8 -1
- data/lib/pubid/ecma/identifier.rb +13 -8
- data/lib/pubid/ecma/parser.rb +2 -54
- data/lib/pubid/ecma/renderer.rb +3 -7
- data/lib/pubid/errors.rb +18 -13
- data/lib/pubid/etsi/builder.rb +8 -5
- data/lib/pubid/etsi/identifiers/base.rb +1 -1
- data/lib/pubid/etsi/parser.rb +1 -132
- data/lib/pubid/evs/identifier.rb +7 -0
- data/lib/pubid/evs/parser.rb +1 -8
- data/lib/pubid/evs.rb +1 -1
- data/lib/pubid/gb/identifier.rb +6 -0
- data/lib/pubid/gb/parser.rb +2 -51
- data/lib/pubid/gost/identifier.rb +9 -1
- data/lib/pubid/gost/parser.rb +4 -81
- data/lib/pubid/iala/parser.rb +2 -121
- data/lib/pubid/iana/identifier.rb +1 -1
- data/lib/pubid/iana/parser.rb +2 -24
- data/lib/pubid/identifier.rb +78 -1
- data/lib/pubid/idf/builder.rb +42 -0
- data/lib/pubid/idf/identifier.rb +1 -1
- data/lib/pubid/idf/parser.rb +1 -137
- data/lib/pubid/idf.rb +1 -2
- data/lib/pubid/iec/builder.rb +158 -50
- data/lib/pubid/iec/identifier.rb +1 -1
- data/lib/pubid/iec/parser.rb +3 -430
- data/lib/pubid/ieee/aiee/identifier.rb +2 -1
- data/lib/pubid/ieee/aiee.rb +0 -1
- data/lib/pubid/ieee/builder.rb +2 -2
- data/lib/pubid/ieee/identifiers/base.rb +1 -1
- data/lib/pubid/ieee/ire/identifier.rb +2 -1
- data/lib/pubid/ieee/ire.rb +0 -1
- data/lib/pubid/ieee/nesc.rb +0 -1
- data/lib/pubid/ieee/parser.rb +1 -1257
- data/lib/pubid/ietf/identifiers/base.rb +17 -1
- data/lib/pubid/ietf/parser.rb +2 -47
- data/lib/pubid/ietf/renderer.rb +17 -2
- data/lib/pubid/iho/CLAUDE.md +89 -0
- data/lib/pubid/iho/builder.rb +4 -1
- data/lib/pubid/iho/identifiers/base.rb +28 -2
- data/lib/pubid/iho/renderer.rb +8 -0
- data/lib/pubid/iho/urn_generator.rb +11 -1
- data/lib/pubid/iho/urn_parser.rb +21 -11
- data/lib/pubid/iho.rb +0 -1
- data/lib/pubid/isbn/identifier.rb +1 -1
- data/lib/pubid/isbn/parser.rb +2 -31
- data/lib/pubid/iso/builder.rb +1 -1
- data/lib/pubid/iso/identifiers/directives.rb +6 -3
- data/lib/pubid/iso/identifiers/guide.rb +6 -3
- data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +6 -3
- data/lib/pubid/iso/normalizer.rb +1 -1
- data/lib/pubid/iso/parser.rb +1 -539
- data/lib/pubid/iso/supplement_identifier.rb +6 -3
- data/lib/pubid/iso/utilities.rb +4 -5
- data/lib/pubid/iso.rb +1 -19
- data/lib/pubid/itu/builder.rb +36 -20
- data/lib/pubid/itu/identifiers/base.rb +15 -2
- data/lib/pubid/itu/parser.rb +1 -775
- data/lib/pubid/jcgm/builder.rb +35 -0
- data/lib/pubid/jcgm/parser.rb +1 -151
- data/lib/pubid/jcgm.rb +1 -2
- data/lib/pubid/jis/builder.rb +18 -29
- data/lib/pubid/jis/identifier.rb +1 -1
- data/lib/pubid/jis/parser.rb +1 -128
- data/lib/pubid/nist/builder.rb +5 -1
- data/lib/pubid/nist/caster.rb +13 -3
- data/lib/pubid/nist/identifiers/base.rb +37 -2
- data/lib/pubid/nist/identifiers/circular.rb +2 -2
- data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -2
- data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +2 -2
- data/lib/pubid/nist/identifiers/crpl_report.rb +2 -2
- data/lib/pubid/nist/identifiers/handbook.rb +2 -2
- data/lib/pubid/nist/identifiers/internal_report.rb +2 -2
- data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +2 -2
- data/lib/pubid/nist/identifiers/monograph.rb +2 -2
- data/lib/pubid/nist/identifiers/report.rb +2 -2
- data/lib/pubid/nist/parser.rb +19 -775
- data/lib/pubid/nist/router.rb +4 -1
- data/lib/pubid/nist/supplement_identifier.rb +2 -2
- data/lib/pubid/oasis/parser.rb +2 -16
- data/lib/pubid/ogc/parser.rb +2 -26
- data/lib/pubid/oiml/identifiers/certification_system.rb +7 -0
- data/lib/pubid/oiml/identifiers/dual_published.rb +2 -2
- data/lib/pubid/oiml/parser.rb +1 -303
- data/lib/pubid/oiml.rb +1 -2
- data/lib/pubid/omg/identifier.rb +6 -1
- data/lib/pubid/omg/parser.rb +2 -76
- data/lib/pubid/parser.rb +5 -4
- data/lib/pubid/parsers/mr_string.rb +1 -1
- data/lib/pubid/plateau/parser.rb +1 -66
- data/lib/pubid/plateau.rb +1 -2
- data/lib/pubid/renderers/directives_renderer.rb +1 -1
- data/lib/pubid/renderers/iwa_renderer.rb +1 -1
- data/lib/pubid/renderers/publisher_stripper.rb +82 -0
- data/lib/pubid/renderers/supplement_renderer.rb +1 -1
- data/lib/pubid/renderers.rb +1 -0
- data/lib/pubid/sae/parser.rb +1 -48
- data/lib/pubid/tgpp/identifier.rb +1 -1
- data/lib/pubid/tgpp/parser.rb +2 -59
- data/lib/pubid/un/identifier.rb +1 -1
- data/lib/pubid/un/parser.rb +1 -18
- data/lib/pubid/version.rb +1 -1
- data/lib/pubid/w3c/parser.rb +2 -27
- data/lib/pubid/xsf/identifier.rb +10 -6
- data/lib/pubid/xsf/parser.rb +3 -31
- data/lib/pubid/xsf/renderer.rb +2 -4
- data/lib/pubid.rb +8 -9
- metadata +6 -23
- data/lib/pubid/ieee/aiee/parser.rb +0 -130
- data/lib/pubid/ieee/ire/parser.rb +0 -109
- data/lib/pubid/ieee/nesc/parser.rb +0 -155
- data/lib/pubid/iho/parser.rb +0 -68
- data/lib/pubid/parser/common_parse_methods.rb +0 -13
- data/lib/pubid/parser/common_parse_rules.rb +0 -56
- data/lib/pubid/parser/grammar.rb +0 -96
data/data/parg/oiml.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"bindings":null,"version":"0.1.0","grammar":"PubidOiml","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":42}},{"Str":{"pattern":"OIML"}},{"Named":{"name":"publisher","atom":1}},{"Entity":{"atom":4}},{"Str":{"pattern":"-"}},{"Entity":{"atom":6}},{"Str":{"pattern":" "}},{"Alternative":{"atoms":[3,5]}},{"Str":{"pattern":"CS"}},{"Named":{"name":"cs_series","atom":8}},{"Entity":{"atom":6}},{"Str":{"pattern":"PD"}},{"Str":{"pattern":"OD"}},{"Str":{"pattern":"CID"}},{"Alternative":{"atoms":[11,12,13]}},{"Named":{"name":"cs_family","atom":14}},{"Entity":{"atom":4}},{"Entity":{"atom":6}},{"Alternative":{"atoms":[16,17]}},{"Named":{"name":"cs_separator","atom":18}},{"Entity":{"atom":21}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":20,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":22}},{"Entity":{"atom":6}},{"Str":{"pattern":"Edition"}},{"Entity":{"atom":6}},{"Entity":{"atom":21}},{"Repetition":{"atom":27,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":28}},{"Entity":{"atom":6}},{"Entity":{"atom":32}},{"Str":{"pattern":"("}},{"Str":{"pattern":"Amendment"}},{"Entity":{"atom":6}},{"Entity":{"atom":21}},{"Repetition":{"atom":35,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"cs_amendment","atom":36}},{"Entity":{"atom":39}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[30,31,33,34,37,38]}},{"Repetition":{"atom":40,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[2,7,9,10,15,19,23,24,25,26,29,41]}},{"Entity":{"atom":267}},{"Str":{"pattern":"Amendment"}},{"Entity":{"atom":6}},{"Entity":{"atom":32}},{"Entity":{"atom":56}},{"Entity":{"atom":51}},{"Str":{"pattern":"19"}},{"Str":{"pattern":"20"}},{"Alternative":{"atoms":[49,50]}},{"Entity":{"atom":21}},{"Repetition":{"atom":52,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":21}},{"Lookahead":{"atom":54,"positive":false}},{"Sequence":{"atoms":[48,53,55]}},{"Named":{"name":"year","atom":47}},{"Entity":{"atom":39}},{"Entity":{"atom":6}},{"Str":{"pattern":"to"}},{"Entity":{"atom":6}},{"Entity":{"atom":216}},{"Entity":{"atom":67}},{"Str":{"pattern":"OIML"}},{"Named":{"name":"publisher","atom":64}},{"Entity":{"atom":6}},{"Sequence":{"atoms":[65,66]}},{"Entity":{"atom":80}},{"Entity":{"atom":77}},{"Re":{"pattern":"[B]"}},{"Re":{"pattern":"[D]"}},{"Re":{"pattern":"[E]"}},{"Re":{"pattern":"[G]"}},{"Re":{"pattern":"[R]"}},{"Re":{"pattern":"[S]"}},{"Re":{"pattern":"[V]"}},{"Alternative":{"atoms":[70,71,72,73,74,75,76]}},{"Named":{"name":"type","atom":69}},{"Entity":{"atom":6}},{"Sequence":{"atoms":[78,79]}},{"Entity":{"atom":144}},{"Entity":{"atom":86}},{"Entity":{"atom":85}},{"Entity":{"atom":21}},{"Repetition":{"atom":84,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":83}},{"Entity":{"atom":98}},{"Entity":{"atom":4}},{"Entity":{"atom":85}},{"Entity":{"atom":91}},{"Str":{"pattern":"/"}},{"Entity":{"atom":4}},{"Entity":{"atom":85}},{"Sequence":{"atoms":[90,92,93]}},{"Repetition":{"atom":94,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[89,95]}},{"Named":{"name":"part","atom":96}},{"Sequence":{"atoms":[88,97]}},{"Entity":{"atom":103}},{"Entity":{"atom":4}},{"Entity":{"atom":85}},{"Named":{"name":"subpart","atom":101}},{"Sequence":{"atoms":[100,102]}},{"Entity":{"atom":132}},{"Entity":{"atom":124}},{"Entity":{"atom":4}},{"Str":{"pattern":"GUM"}},{"Entity":{"atom":6}},{"Entity":{"atom":85}},{"Sequence":{"atoms":[107,108,109]}},{"Entity":{"atom":114}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[112,113]}},{"Repetition":{"atom":111,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"_"}},{"Repetition":{"atom":116,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":85}},{"Sequence":{"atoms":[117,118]}},{"Repetition":{"atom":119,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[115,120]}},{"Alternative":{"atoms":[110,121]}},{"Named":{"name":"code_suffix","atom":122}},{"Sequence":{"atoms":[106,123]}},{"Entity":{"atom":131}},{"Entity":{"atom":6}},{"Str":{"pattern":"Brochure"}},{"Named":{"name":"code_suffix","atom":127}},{"Str":{"pattern":""}},{"Named":{"name":"space_suffix","atom":129}},{"Sequence":{"atoms":[126,128,130]}},{"Alternative":{"atoms":[105,125]}},{"Repetition":{"atom":104,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[82,87,99,133]}},{"Entity":{"atom":86}},{"Entity":{"atom":98}},{"Entity":{"atom":132}},{"Repetition":{"atom":137,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[135,136,138]}},{"Entity":{"atom":86}},{"Entity":{"atom":132}},{"Repetition":{"atom":141,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[140,142]}},{"Alternative":{"atoms":[134,139,143]}},{"Entity":{"atom":195}},{"Entity":{"atom":178}},{"Str":{"pattern":", "}},{"Entity":{"atom":6}},{"Alternative":{"atoms":[147,148]}},{"Entity":{"atom":165}},{"Str":{"pattern":"6th"}},{"Str":{"pattern":"5th"}},{"Str":{"pattern":"4th"}},{"Str":{"pattern":"3rd"}},{"Str":{"pattern":"2nd"}},{"Str":{"pattern":"1st"}},{"Entity":{"atom":85}},{"Str":{"pattern":"th"}},{"Str":{"pattern":"nd"}},{"Str":{"pattern":"rd"}},{"Str":{"pattern":"st"}},{"Alternative":{"atoms":[158,159,160,161]}},{"Sequence":{"atoms":[157,162]}},{"Alternative":{"atoms":[151,152,153,154,155,156,163]}},{"Named":{"name":"edition","atom":164}},{"Repetition":{"atom":150,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":6}},{"Repetition":{"atom":167,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":172}},{"Str":{"pattern":"Edition"}},{"Str":{"pattern":"edition"}},{"Alternative":{"atoms":[170,171]}},{"Entity":{"atom":6}},{"Repetition":{"atom":173,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":175}},{"Sequence":{"atoms":[149,166,168,169,174,176]}},{"Named":{"name":"edition_format","atom":177}},{"Entity":{"atom":6}},{"Repetition":{"atom":179,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":182}},{"Str":{"pattern":":"}},{"Entity":{"atom":6}},{"Repetition":{"atom":183,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":185}},{"Sequence":{"atoms":[180,181,184,186]}},{"Entity":{"atom":6}},{"Repetition":{"atom":188,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":32}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":191}},{"Entity":{"atom":39}},{"Sequence":{"atoms":[189,190,192,193]}},{"Alternative":{"atoms":[146,187,194]}},{"Repetition":{"atom":145,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":214}},{"Entity":{"atom":6}},{"Entity":{"atom":207}},{"Entity":{"atom":85}},{"Entity":{"atom":202}},{"Str":{"pattern":"."}},{"Entity":{"atom":85}},{"Sequence":{"atoms":[200,201,203]}},{"Entity":{"atom":85}},{"Alternative":{"atoms":[204,205]}},{"Named":{"name":"iteration","atom":206}},{"Repetition":{"atom":199,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":213}},{"Str":{"pattern":"WD"}},{"Str":{"pattern":"CD"}},{"Alternative":{"atoms":[210,211]}},{"Named":{"name":"stage","atom":212}},{"Sequence":{"atoms":[198,208,209]}},{"Repetition":{"atom":197,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[63,68,81,196,215]}},{"Named":{"name":"base","atom":62}},{"Entity":{"atom":264}},{"Entity":{"atom":258}},{"Entity":{"atom":6}},{"Entity":{"atom":32}},{"Entity":{"atom":254}},{"Entity":{"atom":233}},{"Re":{"pattern":"[E]"}},{"Re":{"pattern":"[F]"}},{"Re":{"pattern":"[R]"}},{"Re":{"pattern":"[X]"}},{"Re":{"pattern":"[D]"}},{"Re":{"pattern":"[S]"}},{"Re":{"pattern":"[C]"}},{"Re":{"pattern":"[A]"}},{"Re":{"pattern":"[U]"}},{"Alternative":{"atoms":[224,225,226,227,228,229,230,231,232]}},{"Entity":{"atom":91}},{"Entity":{"atom":233}},{"Sequence":{"atoms":[223,234,235]}},{"Entity":{"atom":242}},{"Str":{"pattern":"PO"}},{"Str":{"pattern":"PT"}},{"Str":{"pattern":"PE"}},{"Str":{"pattern":"SR"}},{"Alternative":{"atoms":[238,239,240,241]}},{"Entity":{"atom":244}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Entity":{"atom":246}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Repetition":{"atom":245,"min":2,"max":2,"tag":"Repetition"}},{"Sequence":{"atoms":[243,247]}},{"Entity":{"atom":233}},{"Entity":{"atom":252}},{"Entity":{"atom":246}},{"Repetition":{"atom":251,"min":2,"max":2,"tag":"Repetition"}},{"Alternative":{"atoms":[236,237,248,249,250]}},{"Named":{"name":"language","atom":253}},{"Entity":{"atom":39}},{"Str":{"pattern":""}},{"Named":{"name":"space_before_lang","atom":256}},{"Sequence":{"atoms":[220,221,222,255,257]}},{"Entity":{"atom":263}},{"Entity":{"atom":32}},{"Entity":{"atom":254}},{"Entity":{"atom":39}},{"Sequence":{"atoms":[260,261,262]}},{"Alternative":{"atoms":[219,259]}},{"Named":{"name":"language","atom":218}},{"Repetition":{"atom":265,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[44,45,46,57,58,59,60,61,217,266]}},{"Entity":{"atom":294}},{"Entity":{"atom":67}},{"Entity":{"atom":80}},{"Entity":{"atom":144}},{"Named":{"name":"base_code","atom":271}},{"Entity":{"atom":6}},{"Str":{"pattern":"Amendment"}},{"Named":{"name":"amd_marker","atom":274}},{"Entity":{"atom":6}},{"Entity":{"atom":172}},{"Entity":{"atom":6}},{"Repetition":{"atom":278,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":280}},{"Sequence":{"atoms":[276,277,279,281]}},{"Named":{"name":"edition_format","atom":282}},{"Entity":{"atom":182}},{"Entity":{"atom":6}},{"Repetition":{"atom":285,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":287}},{"Sequence":{"atoms":[284,286,288]}},{"Alternative":{"atoms":[283,289]}},{"Entity":{"atom":264}},{"Named":{"name":"language","atom":291}},{"Repetition":{"atom":292,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[269,270,272,273,275,290,293]}},{"Entity":{"atom":324}},{"Entity":{"atom":216}},{"Named":{"name":"base","atom":296}},{"Entity":{"atom":6}},{"Str":{"pattern":"Annex"}},{"Entity":{"atom":6}},{"Entity":{"atom":308}},{"Entity":{"atom":244}},{"Entity":{"atom":4}},{"Entity":{"atom":244}},{"Sequence":{"atoms":[303,304]}},{"Repetition":{"atom":305,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[302,306]}},{"Named":{"name":"annex_letter","atom":307}},{"Entity":{"atom":6}},{"Entity":{"atom":172}},{"Entity":{"atom":6}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":312}},{"Sequence":{"atoms":[309,310,311,313]}},{"Entity":{"atom":182}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":316}},{"Sequence":{"atoms":[315,317]}},{"Alternative":{"atoms":[314,318]}},{"Repetition":{"atom":319,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":264}},{"Named":{"name":"language","atom":321}},{"Repetition":{"atom":322,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[297,298,299,300,301,320,323]}},{"Entity":{"atom":347}},{"Entity":{"atom":216}},{"Named":{"name":"base","atom":326}},{"Entity":{"atom":6}},{"Str":{"pattern":"Annexes"}},{"Named":{"name":"annex_marker","atom":329}},{"Entity":{"atom":6}},{"Entity":{"atom":172}},{"Entity":{"atom":6}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":334}},{"Sequence":{"atoms":[331,332,333,335]}},{"Named":{"name":"edition_format","atom":336}},{"Entity":{"atom":182}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":339}},{"Sequence":{"atoms":[338,340]}},{"Alternative":{"atoms":[337,341]}},{"Repetition":{"atom":342,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":264}},{"Named":{"name":"language","atom":344}},{"Repetition":{"atom":345,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[327,328,330,343,346]}},{"Entity":{"atom":365}},{"Entity":{"atom":216}},{"Named":{"name":"base","atom":349}},{"Entity":{"atom":352}},{"Str":{"pattern":"+"}},{"Str":{"pattern":"Amendment"}},{"Str":{"pattern":"Errata"}},{"Alternative":{"atoms":[353,354]}},{"Named":{"name":"plus_marker","atom":355}},{"Entity":{"atom":182}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":358}},{"Sequence":{"atoms":[357,359]}},{"Repetition":{"atom":360,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":264}},{"Named":{"name":"language","atom":362}},{"Repetition":{"atom":363,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[350,351,356,361,364]}},{"Entity":{"atom":383}},{"Entity":{"atom":216}},{"Named":{"name":"base","atom":367}},{"Entity":{"atom":6}},{"Str":{"pattern":"Amendment"}},{"Str":{"pattern":"Errata"}},{"Alternative":{"atoms":[370,371]}},{"Named":{"name":"trailing_marker","atom":372}},{"Entity":{"atom":6}},{"Entity":{"atom":21}},{"Repetition":{"atom":375,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":376}},{"Sequence":{"atoms":[374,377]}},{"Repetition":{"atom":378,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":264}},{"Named":{"name":"language","atom":380}},{"Repetition":{"atom":381,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[368,369,373,379,382]}},{"Entity":{"atom":435}},{"Str":{"pattern":"OIML"}},{"Named":{"name":"publisher","atom":385}},{"Entity":{"atom":6}},{"Str":{"pattern":"Bulletin"}},{"Named":{"name":"type","atom":388}},{"Entity":{"atom":412}},{"Entity":{"atom":6}},{"Entity":{"atom":402}},{"Re":{"pattern":"[I]"}},{"Re":{"pattern":"[V]"}},{"Re":{"pattern":"[X]"}},{"Re":{"pattern":"[L]"}},{"Re":{"pattern":"[C]"}},{"Re":{"pattern":"[D]"}},{"Re":{"pattern":"[M]"}},{"Alternative":{"atoms":[393,394,395,396,397,398,399]}},{"Repetition":{"atom":400,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"volume_roman","atom":401}},{"Entity":{"atom":32}},{"Entity":{"atom":21}},{"Repetition":{"atom":404,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"issue_arabic","atom":405}},{"Entity":{"atom":39}},{"Entity":{"atom":6}},{"Entity":{"atom":21}},{"Repetition":{"atom":409,"min":8,"max":8,"tag":"Repetition"}},{"Named":{"name":"article_id","atom":410}},{"Sequence":{"atoms":[391,392,403,406,407,408,411]}},{"Entity":{"atom":429}},{"Entity":{"atom":6}},{"Entity":{"atom":56}},{"Named":{"name":"year","atom":415}},{"Entity":{"atom":4}},{"Entity":{"atom":420}},{"Entity":{"atom":21}},{"Repetition":{"atom":419,"min":2,"max":null,"tag":"Repetition"}},{"Named":{"name":"issue","atom":418}},{"Sequence":{"atoms":[417,421]}},{"Repetition":{"atom":422,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Entity":{"atom":420}},{"Named":{"name":"sequence","atom":425}},{"Sequence":{"atoms":[424,426]}},{"Repetition":{"atom":427,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[414,416,423,428]}},{"Alternative":{"atoms":[390,413]}},{"Repetition":{"atom":430,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":264}},{"Named":{"name":"language","atom":432}},{"Repetition":{"atom":433,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[386,387,389,431,434]}},{"Entity":{"atom":446}},{"Entity":{"atom":67}},{"Entity":{"atom":80}},{"Entity":{"atom":144}},{"Entity":{"atom":195}},{"Repetition":{"atom":440,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":214}},{"Repetition":{"atom":442,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":264}},{"Repetition":{"atom":444,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[437,438,439,441,443,445]}},{"Alternative":{"atoms":[0,43,268,295,325,348,366,384,436]}}],"root":447},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule roman_numeral: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule date: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule date: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule date: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule lang_multi_oiml: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule lang_multi_oiml: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule lang_multi_oiml: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 5 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 5 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 6 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 6 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 7 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 8 and 9 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"OIML V 2 Edition 2007","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML R 137-1:2012","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML D 11","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/oiml/parser.rb — OIML identifiers: the base form,\n# drafts, amendments (full/short/+/trailing), annexes, bulletins.\n\ngrammar PubidOiml version \"0.1.0\" mode \"v1\" {\n # The monorepo's doc_type is [BDEGRSV] — X is deliberately absent\n # (\"OIML X 99\" must be rejected).\n letter_bdegrsvx = %x42 / %x44 / %x45 / %x47 / %x52 / %x53 / %x56\n digit = %x30-39\n letter = %x41-5A / %x61-7A\n digits = 1*digit\n two_digits = 2*digit\n space = \" \"\n dash = \"-\"\n colon = \":\"\n slash = \"/\"\n lparen = \"(\"\n rparen = \")\"\n dot = \".\"\n plus = \"+\"\n century = \"19\" / \"20\"\n year_digits = century 2*digit !digit\n\n publisher = \"OIML\" as publisher space\n doc_type = letter_bdegrsvx as type space\n two_digits_c = two_digits\n\n bulletin_date = space year_digits as year [(dash two_digits as issue)] [(dash two_digits as sequence)]\n roman_numeral = 1*%x49 / 1*(%x49 / %x56 / %x58 / %x4C / %x43 / %x44 / %x4D)\n roman = (1*(%x49 / %x56 / %x58 / %x4C / %x43 / %x44 / %x4D)) as volume_roman\n bulletin_citation = space roman lparen (1*digit) as issue_arabic rparen space (8digit) as article_id\n bulletin_identifier = \"OIML\" as publisher space \"Bulletin\" as type [bulletin_citation / bulletin_date] [language_portion as language]\n\n number_only = digits as number\n part_number = dash (digits *(slash dash digits)) as part\n subpart_number = dash digits as subpart\n named_suffix_gum = dash (\"GUM\" space digits / (1*letter *(([\"_\"] digits)))) as code_suffix\n named_suffix_brochure = space \"Brochure\" as code_suffix (\"\" as space_suffix)\n named_suffix = named_suffix_gum / named_suffix_brochure\n full_number = (number_only part_number subpart_number [named_suffix]) / (number_only part_number [named_suffix]) / (number_only [named_suffix])\n\n edition_number = (\"6th\" / \"5th\" / \"4th\" / \"3rd\" / \"2nd\" / \"1st\" / (digits (\"th\" / \"nd\" / \"rd\" / \"st\"))) as edition\n edition_text = \"Edition\" / \"edition\"\n edition_portion = ((\", \" / space) [edition_number] [space] edition_text [space] year_digits as year) as edition_format\n date = edition_portion / ([space] colon [space] year_digits as year) / ([space] lparen year_digits as year rparen)\n stage_iteration = ((digits dot digits) / digits) as iteration\n stage_abbr = (\"WD\" / \"CD\") as stage\n draft_stage = space [stage_iteration] stage_abbr\n\n lang_single = %x45 / %x46 / %x52 / %x58 / %x44 / %x53 / %x43 / %x41 / %x55\n lang_multi_oiml = \"PO\" / \"PT\" / \"PE\" / \"SR\"\n lang_multi = 2*2lower\n lower = %x61-7A\n language_code = ((lang_single slash lang_single) / lang_multi_oiml / (upper 2*2lower) / lang_single / lang_multi) as language\n language_with_space = space lparen language_code rparen (\"\" as space_before_lang)\n language_without_space = lparen language_code rparen\n language_portion = language_with_space / language_without_space\n\n amendment_identifier = \"Amendment\" space lparen year_digits as year rparen space \"to\" space (base_without_language as base) [language_portion as language]\n amendment_short = publisher doc_type (full_number as base_code) space \"Amendment\" as amd_marker ((space edition_text [space] year_digits as year) as edition_format / (colon [space] year_digits as year)) [language_portion as language]\n trailing_supplement_identifier = (base_without_language as base) space (\"Amendment\" / \"Errata\") as trailing_marker [space ((1*digit)) as number] [language_portion as language]\n plus_supplement_identifier = (base_without_language as base) plus (\"Amendment\" / \"Errata\") as plus_marker [(colon year_digits as year)] [language_portion as language]\n annex_identifier = (base_without_language as base) space \"Annexes\" as annex_marker [((space edition_text space year_digits as year) as edition_format / (colon year_digits as year))] [language_portion as language]\n annex_letter_value = (upper [(dash upper)]) as annex_letter\n annex_letter_identifier = (base_without_language as base) space \"Annex\" space annex_letter_value [((space edition_text space year_digits as year) / (colon year_digits as year))] [language_portion as language]\n base_without_language = publisher doc_type full_number [date] [draft_stage]\n base = publisher doc_type full_number [date] [draft_stage] [language_portion]\n\n cs_identifier = (\"OIML\" as publisher (dash / space) \"CS\" as cs_series space (\"PD\" / \"OD\" / \"CID\") as cs_family (dash / space) as cs_separator (1*digit) as number space \"Edition\" space (1*digit) as edition [(space lparen \"Amendment\" space (1*digit) as cs_amendment rparen)])\n identifier = cs_identifier / amendment_identifier / amendment_short / annex_letter_identifier / annex_identifier / plus_supplement_identifier / trailing_supplement_identifier / bulletin_identifier / base\n\n upper = %x41-5A\n entry identifier: identifier\n\n test {\n accept \"OIML V 2 Edition 2007\"\n accept \"OIML R 137-1:2012\"\n accept \"OIML D 11\"\n reject \"nonsense\"\n }\n}\n","source_hash":"03fba4fca48e913117bf95a58cd6574d2a66adb4a63999a5fdef61ee8451d832","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":1,"checksum":"sha256:5d4c4062cfd2476f1f8b82d28582f69ab18af07bb6a7d444b7e6b3ca1928d6b6"}
|
|
1
|
+
{"bindings":null,"version":"0.1.0","grammar":"PubidOiml","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":45}},{"Str":{"pattern":"OIML"}},{"Named":{"name":"publisher","atom":1}},{"Entity":{"atom":4}},{"Str":{"pattern":"-"}},{"Named":{"name":"dash","atom":3}},{"Entity":{"atom":7}},{"Str":{"pattern":" "}},{"Alternative":{"atoms":[5,6]}},{"Str":{"pattern":"CS"}},{"Named":{"name":"cs_series","atom":9}},{"Entity":{"atom":7}},{"Str":{"pattern":"PD"}},{"Str":{"pattern":"OD"}},{"Str":{"pattern":"CID"}},{"Alternative":{"atoms":[12,13,14]}},{"Named":{"name":"cs_family","atom":15}},{"Entity":{"atom":4}},{"Entity":{"atom":7}},{"Alternative":{"atoms":[17,18]}},{"Named":{"name":"cs_separator","atom":19}},{"Entity":{"atom":22}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":21,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"doc_number","atom":23}},{"Entity":{"atom":7}},{"Str":{"pattern":"Edition"}},{"Entity":{"atom":7}},{"Entity":{"atom":22}},{"Repetition":{"atom":28,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":29}},{"Entity":{"atom":7}},{"Entity":{"atom":33}},{"Str":{"pattern":"("}},{"Named":{"name":"lparen","atom":32}},{"Str":{"pattern":"Amendment"}},{"Entity":{"atom":7}},{"Entity":{"atom":22}},{"Repetition":{"atom":37,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"cs_amendment","atom":38}},{"Entity":{"atom":41}},{"Str":{"pattern":")"}},{"Named":{"name":"rparen","atom":40}},{"Sequence":{"atoms":[31,34,35,36,39,42]}},{"Repetition":{"atom":43,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[2,8,10,11,16,20,24,25,26,27,30,44]}},{"Entity":{"atom":300}},{"Str":{"pattern":"Amendment"}},{"Entity":{"atom":7}},{"Entity":{"atom":33}},{"Named":{"name":"lparen","atom":49}},{"Entity":{"atom":54}},{"Str":{"pattern":"19"}},{"Str":{"pattern":"20"}},{"Alternative":{"atoms":[52,53]}},{"Entity":{"atom":22}},{"Repetition":{"atom":55,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":57,"positive":false}},{"Sequence":{"atoms":[51,56,58]}},{"Named":{"name":"supplement_year","atom":59}},{"Entity":{"atom":41}},{"Named":{"name":"rparen","atom":61}},{"Entity":{"atom":7}},{"Str":{"pattern":"to"}},{"Entity":{"atom":7}},{"Entity":{"atom":248}},{"Entity":{"atom":71}},{"Str":{"pattern":"OIML"}},{"Named":{"name":"publisher","atom":68}},{"Entity":{"atom":7}},{"Sequence":{"atoms":[69,70]}},{"Entity":{"atom":84}},{"Entity":{"atom":81}},{"Re":{"pattern":"[B]"}},{"Re":{"pattern":"[D]"}},{"Re":{"pattern":"[E]"}},{"Re":{"pattern":"[G]"}},{"Re":{"pattern":"[R]"}},{"Re":{"pattern":"[S]"}},{"Re":{"pattern":"[V]"}},{"Alternative":{"atoms":[74,75,76,77,78,79,80]}},{"Named":{"name":"type","atom":73}},{"Entity":{"atom":7}},{"Sequence":{"atoms":[82,83]}},{"Entity":{"atom":154}},{"Entity":{"atom":89}},{"Entity":{"atom":22}},{"Repetition":{"atom":87,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":88}},{"Entity":{"atom":104}},{"Entity":{"atom":4}},{"Named":{"name":"dash","atom":91}},{"Entity":{"atom":22}},{"Repetition":{"atom":93,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":96}},{"Str":{"pattern":"/"}},{"Entity":{"atom":4}},{"Entity":{"atom":22}},{"Repetition":{"atom":98,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[95,97,99]}},{"Repetition":{"atom":100,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[94,101]}},{"Named":{"name":"part","atom":102}},{"Sequence":{"atoms":[92,103]}},{"Entity":{"atom":111}},{"Entity":{"atom":4}},{"Named":{"name":"dash","atom":106}},{"Entity":{"atom":22}},{"Repetition":{"atom":108,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"subpart","atom":109}},{"Sequence":{"atoms":[107,110]}},{"Entity":{"atom":142}},{"Entity":{"atom":135}},{"Entity":{"atom":4}},{"Named":{"name":"dash","atom":114}},{"Str":{"pattern":"GUM"}},{"Entity":{"atom":7}},{"Entity":{"atom":22}},{"Repetition":{"atom":118,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[116,117,119]}},{"Entity":{"atom":124}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[122,123]}},{"Repetition":{"atom":121,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"_"}},{"Repetition":{"atom":126,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":22}},{"Repetition":{"atom":128,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[127,129]}},{"Repetition":{"atom":130,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[125,131]}},{"Alternative":{"atoms":[120,132]}},{"Named":{"name":"code_suffix","atom":133}},{"Sequence":{"atoms":[115,134]}},{"Entity":{"atom":141}},{"Entity":{"atom":7}},{"Named":{"name":"space_suffix","atom":137}},{"Str":{"pattern":"Brochure"}},{"Named":{"name":"code_suffix","atom":139}},{"Sequence":{"atoms":[138,140]}},{"Alternative":{"atoms":[113,136]}},{"Repetition":{"atom":112,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[86,90,105,143]}},{"Entity":{"atom":89}},{"Entity":{"atom":104}},{"Entity":{"atom":142}},{"Repetition":{"atom":147,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[145,146,148]}},{"Entity":{"atom":89}},{"Entity":{"atom":142}},{"Repetition":{"atom":151,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[150,152]}},{"Alternative":{"atoms":[144,149,153]}},{"Entity":{"atom":224}},{"Entity":{"atom":194}},{"Str":{"pattern":", "}},{"Entity":{"atom":7}},{"Alternative":{"atoms":[157,158]}},{"Entity":{"atom":176}},{"Str":{"pattern":"6th"}},{"Str":{"pattern":"5th"}},{"Str":{"pattern":"4th"}},{"Str":{"pattern":"3rd"}},{"Str":{"pattern":"2nd"}},{"Str":{"pattern":"1st"}},{"Entity":{"atom":22}},{"Repetition":{"atom":167,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"th"}},{"Str":{"pattern":"nd"}},{"Str":{"pattern":"rd"}},{"Str":{"pattern":"st"}},{"Alternative":{"atoms":[169,170,171,172]}},{"Sequence":{"atoms":[168,173]}},{"Alternative":{"atoms":[161,162,163,164,165,166,174]}},{"Named":{"name":"edition","atom":175}},{"Repetition":{"atom":160,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":7}},{"Repetition":{"atom":178,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":183}},{"Str":{"pattern":"Edition"}},{"Str":{"pattern":"edition"}},{"Alternative":{"atoms":[181,182]}},{"Named":{"name":"edition_format","atom":180}},{"Entity":{"atom":7}},{"Repetition":{"atom":185,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":188,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":190,"positive":false}},{"Sequence":{"atoms":[187,189,191]}},{"Named":{"name":"year","atom":192}},{"Sequence":{"atoms":[159,177,179,184,186,193]}},{"Entity":{"atom":7}},{"Repetition":{"atom":195,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":198}},{"Str":{"pattern":":"}},{"Named":{"name":"colon","atom":197}},{"Entity":{"atom":7}},{"Repetition":{"atom":200,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":203,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":205,"positive":false}},{"Sequence":{"atoms":[202,204,206]}},{"Named":{"name":"year","atom":207}},{"Sequence":{"atoms":[196,199,201,208]}},{"Entity":{"atom":7}},{"Repetition":{"atom":210,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":33}},{"Named":{"name":"lparen","atom":212}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":215,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":217,"positive":false}},{"Sequence":{"atoms":[214,216,218]}},{"Named":{"name":"year","atom":219}},{"Entity":{"atom":41}},{"Named":{"name":"rparen","atom":221}},{"Sequence":{"atoms":[211,213,220,222]}},{"Alternative":{"atoms":[156,209,223]}},{"Repetition":{"atom":155,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":246}},{"Entity":{"atom":7}},{"Entity":{"atom":239}},{"Entity":{"atom":22}},{"Repetition":{"atom":229,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":232}},{"Str":{"pattern":"."}},{"Entity":{"atom":22}},{"Repetition":{"atom":233,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[230,231,234]}},{"Entity":{"atom":22}},{"Repetition":{"atom":236,"min":1,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[235,237]}},{"Named":{"name":"iteration","atom":238}},{"Repetition":{"atom":228,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":245}},{"Str":{"pattern":"WD"}},{"Str":{"pattern":"CD"}},{"Alternative":{"atoms":[242,243]}},{"Named":{"name":"stage","atom":244}},{"Sequence":{"atoms":[227,240,241]}},{"Repetition":{"atom":226,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[67,72,85,225,247]}},{"Named":{"name":"base","atom":66}},{"Entity":{"atom":298}},{"Entity":{"atom":290}},{"Entity":{"atom":7}},{"Named":{"name":"space_before_lang","atom":252}},{"Entity":{"atom":33}},{"Named":{"name":"lparen","atom":254}},{"Entity":{"atom":287}},{"Entity":{"atom":267}},{"Re":{"pattern":"[E]"}},{"Re":{"pattern":"[F]"}},{"Re":{"pattern":"[R]"}},{"Re":{"pattern":"[X]"}},{"Re":{"pattern":"[D]"}},{"Re":{"pattern":"[S]"}},{"Re":{"pattern":"[C]"}},{"Re":{"pattern":"[A]"}},{"Re":{"pattern":"[U]"}},{"Alternative":{"atoms":[258,259,260,261,262,263,264,265,266]}},{"Entity":{"atom":96}},{"Entity":{"atom":267}},{"Sequence":{"atoms":[257,268,269]}},{"Entity":{"atom":276}},{"Str":{"pattern":"PO"}},{"Str":{"pattern":"PT"}},{"Str":{"pattern":"PE"}},{"Str":{"pattern":"SR"}},{"Alternative":{"atoms":[272,273,274,275]}},{"Entity":{"atom":278}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Entity":{"atom":280}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Repetition":{"atom":279,"min":2,"max":2,"tag":"Repetition"}},{"Sequence":{"atoms":[277,281]}},{"Entity":{"atom":267}},{"Entity":{"atom":280}},{"Repetition":{"atom":284,"min":2,"max":2,"tag":"Repetition"}},{"Alternative":{"atoms":[270,271,282,283,285]}},{"Named":{"name":"language","atom":286}},{"Entity":{"atom":41}},{"Named":{"name":"rparen","atom":288}},{"Sequence":{"atoms":[253,255,256,289]}},{"Entity":{"atom":297}},{"Entity":{"atom":33}},{"Named":{"name":"lparen","atom":292}},{"Entity":{"atom":287}},{"Entity":{"atom":41}},{"Named":{"name":"rparen","atom":295}},{"Sequence":{"atoms":[293,294,296]}},{"Alternative":{"atoms":[251,291]}},{"Repetition":{"atom":250,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[47,48,50,60,62,63,64,65,249,299]}},{"Entity":{"atom":337}},{"Entity":{"atom":71}},{"Entity":{"atom":84}},{"Entity":{"atom":154}},{"Named":{"name":"base_code","atom":304}},{"Entity":{"atom":7}},{"Str":{"pattern":"Amendment"}},{"Named":{"name":"amd_marker","atom":307}},{"Entity":{"atom":7}},{"Entity":{"atom":183}},{"Named":{"name":"supplement_edition_format","atom":310}},{"Entity":{"atom":7}},{"Repetition":{"atom":312,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":315,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":317,"positive":false}},{"Sequence":{"atoms":[314,316,318]}},{"Named":{"name":"supplement_year","atom":319}},{"Sequence":{"atoms":[309,311,313,320]}},{"Entity":{"atom":198}},{"Named":{"name":"colon","atom":322}},{"Entity":{"atom":7}},{"Repetition":{"atom":324,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":327,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":329,"positive":false}},{"Sequence":{"atoms":[326,328,330]}},{"Named":{"name":"supplement_year","atom":331}},{"Sequence":{"atoms":[323,325,332]}},{"Alternative":{"atoms":[321,333]}},{"Entity":{"atom":298}},{"Repetition":{"atom":335,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[302,303,305,306,308,334,336]}},{"Entity":{"atom":378}},{"Entity":{"atom":248}},{"Named":{"name":"base","atom":339}},{"Entity":{"atom":7}},{"Str":{"pattern":"Annex"}},{"Entity":{"atom":7}},{"Entity":{"atom":351}},{"Entity":{"atom":278}},{"Entity":{"atom":4}},{"Entity":{"atom":278}},{"Sequence":{"atoms":[346,347]}},{"Repetition":{"atom":348,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[345,349]}},{"Named":{"name":"annex_letter","atom":350}},{"Entity":{"atom":7}},{"Entity":{"atom":183}},{"Named":{"name":"edition_text","atom":353}},{"Entity":{"atom":7}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":357,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":359,"positive":false}},{"Sequence":{"atoms":[356,358,360]}},{"Named":{"name":"supplement_year","atom":361}},{"Sequence":{"atoms":[352,354,355,362]}},{"Entity":{"atom":198}},{"Named":{"name":"colon","atom":364}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":367,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":369,"positive":false}},{"Sequence":{"atoms":[366,368,370]}},{"Named":{"name":"supplement_year","atom":371}},{"Sequence":{"atoms":[365,372]}},{"Alternative":{"atoms":[363,373]}},{"Repetition":{"atom":374,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":298}},{"Repetition":{"atom":376,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[340,341,342,343,344,375,377]}},{"Entity":{"atom":411}},{"Entity":{"atom":248}},{"Named":{"name":"base","atom":380}},{"Entity":{"atom":7}},{"Str":{"pattern":"Annexes"}},{"Named":{"name":"annex_marker","atom":383}},{"Entity":{"atom":7}},{"Entity":{"atom":183}},{"Named":{"name":"supplement_edition_format","atom":386}},{"Entity":{"atom":7}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":390,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":392,"positive":false}},{"Sequence":{"atoms":[389,391,393]}},{"Named":{"name":"supplement_year","atom":394}},{"Sequence":{"atoms":[385,387,388,395]}},{"Entity":{"atom":198}},{"Named":{"name":"colon","atom":397}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":400,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":402,"positive":false}},{"Sequence":{"atoms":[399,401,403]}},{"Named":{"name":"supplement_year","atom":404}},{"Sequence":{"atoms":[398,405]}},{"Alternative":{"atoms":[396,406]}},{"Repetition":{"atom":407,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":298}},{"Repetition":{"atom":409,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[381,382,384,408,410]}},{"Entity":{"atom":435}},{"Entity":{"atom":248}},{"Named":{"name":"base","atom":413}},{"Entity":{"atom":416}},{"Str":{"pattern":"+"}},{"Named":{"name":"plus","atom":415}},{"Str":{"pattern":"Amendment"}},{"Str":{"pattern":"Errata"}},{"Alternative":{"atoms":[418,419]}},{"Named":{"name":"plus_marker","atom":420}},{"Entity":{"atom":198}},{"Named":{"name":"colon","atom":422}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":425,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":427,"positive":false}},{"Sequence":{"atoms":[424,426,428]}},{"Named":{"name":"supplement_year","atom":429}},{"Sequence":{"atoms":[423,430]}},{"Repetition":{"atom":431,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":298}},{"Repetition":{"atom":433,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[414,417,421,432,434]}},{"Entity":{"atom":452}},{"Entity":{"atom":248}},{"Named":{"name":"base","atom":437}},{"Entity":{"atom":7}},{"Str":{"pattern":"Amendment"}},{"Str":{"pattern":"Errata"}},{"Alternative":{"atoms":[440,441]}},{"Named":{"name":"trailing_marker","atom":442}},{"Entity":{"atom":7}},{"Entity":{"atom":22}},{"Repetition":{"atom":445,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplement_number","atom":446}},{"Sequence":{"atoms":[444,447]}},{"Repetition":{"atom":448,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":298}},{"Repetition":{"atom":450,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[438,439,443,449,451]}},{"Entity":{"atom":512}},{"Str":{"pattern":"OIML"}},{"Named":{"name":"publisher","atom":454}},{"Entity":{"atom":7}},{"Str":{"pattern":"Bulletin"}},{"Named":{"name":"type","atom":457}},{"Entity":{"atom":483}},{"Entity":{"atom":7}},{"Entity":{"atom":471}},{"Re":{"pattern":"[I]"}},{"Re":{"pattern":"[V]"}},{"Re":{"pattern":"[X]"}},{"Re":{"pattern":"[L]"}},{"Re":{"pattern":"[C]"}},{"Re":{"pattern":"[D]"}},{"Re":{"pattern":"[M]"}},{"Alternative":{"atoms":[462,463,464,465,466,467,468]}},{"Repetition":{"atom":469,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"volume_roman","atom":470}},{"Entity":{"atom":33}},{"Named":{"name":"lparen","atom":472}},{"Entity":{"atom":22}},{"Repetition":{"atom":474,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"issue_arabic","atom":475}},{"Entity":{"atom":41}},{"Named":{"name":"rparen","atom":477}},{"Entity":{"atom":7}},{"Entity":{"atom":22}},{"Repetition":{"atom":480,"min":8,"max":null,"tag":"Repetition"}},{"Named":{"name":"article_id","atom":481}},{"Sequence":{"atoms":[460,461,473,476,478,479,482]}},{"Entity":{"atom":507}},{"Entity":{"atom":7}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":487,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":489,"positive":false}},{"Sequence":{"atoms":[486,488,490]}},{"Named":{"name":"doc_year","atom":491}},{"Entity":{"atom":4}},{"Named":{"name":"dash","atom":493}},{"Entity":{"atom":22}},{"Repetition":{"atom":495,"min":2,"max":null,"tag":"Repetition"}},{"Named":{"name":"issue","atom":496}},{"Sequence":{"atoms":[494,497]}},{"Repetition":{"atom":498,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Named":{"name":"dash","atom":500}},{"Entity":{"atom":22}},{"Repetition":{"atom":502,"min":2,"max":null,"tag":"Repetition"}},{"Named":{"name":"sequence","atom":503}},{"Sequence":{"atoms":[501,504]}},{"Repetition":{"atom":505,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[485,492,499,506]}},{"Alternative":{"atoms":[459,484]}},{"Repetition":{"atom":508,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":298}},{"Repetition":{"atom":510,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[455,456,458,509,511]}},{"Entity":{"atom":591}},{"Entity":{"atom":71}},{"Entity":{"atom":84}},{"Entity":{"atom":535}},{"Entity":{"atom":520}},{"Entity":{"atom":22}},{"Repetition":{"atom":518,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"doc_number","atom":519}},{"Entity":{"atom":104}},{"Entity":{"atom":111}},{"Entity":{"atom":142}},{"Repetition":{"atom":523,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[517,521,522,524]}},{"Entity":{"atom":520}},{"Entity":{"atom":104}},{"Entity":{"atom":142}},{"Repetition":{"atom":528,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[526,527,529]}},{"Entity":{"atom":520}},{"Entity":{"atom":142}},{"Repetition":{"atom":532,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[531,533]}},{"Alternative":{"atoms":[525,530,534]}},{"Entity":{"atom":585}},{"Entity":{"atom":556}},{"Str":{"pattern":", "}},{"Entity":{"atom":7}},{"Alternative":{"atoms":[538,539]}},{"Entity":{"atom":176}},{"Repetition":{"atom":541,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":7}},{"Repetition":{"atom":543,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":183}},{"Named":{"name":"doc_edition_format","atom":545}},{"Entity":{"atom":7}},{"Repetition":{"atom":547,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":550,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":552,"positive":false}},{"Sequence":{"atoms":[549,551,553]}},{"Named":{"name":"doc_year","atom":554}},{"Sequence":{"atoms":[540,542,544,546,548,555]}},{"Entity":{"atom":7}},{"Repetition":{"atom":557,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":198}},{"Named":{"name":"colon","atom":559}},{"Entity":{"atom":7}},{"Repetition":{"atom":561,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":564,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":566,"positive":false}},{"Sequence":{"atoms":[563,565,567]}},{"Named":{"name":"doc_year","atom":568}},{"Sequence":{"atoms":[558,560,562,569]}},{"Entity":{"atom":7}},{"Repetition":{"atom":571,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":33}},{"Named":{"name":"lparen","atom":573}},{"Entity":{"atom":54}},{"Entity":{"atom":22}},{"Repetition":{"atom":576,"min":2,"max":null,"tag":"Repetition"}},{"Entity":{"atom":22}},{"Lookahead":{"atom":578,"positive":false}},{"Sequence":{"atoms":[575,577,579]}},{"Named":{"name":"doc_year","atom":580}},{"Entity":{"atom":41}},{"Named":{"name":"rparen","atom":582}},{"Sequence":{"atoms":[572,574,581,583]}},{"Alternative":{"atoms":[537,570,584]}},{"Repetition":{"atom":536,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":246}},{"Repetition":{"atom":587,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":298}},{"Repetition":{"atom":589,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[514,515,516,586,588,590]}},{"Alternative":{"atoms":[0,46,301,338,379,412,436,453,513]}}],"root":592},"bindings":[{"capture":"base","path":"base","type":"raw","card":null,"preprocess":null},{"capture":"base_code","path":"base_code","type":"raw","card":null,"preprocess":null},{"capture":"doc_number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"supplement_number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"part","path":"part","type":"string","card":null,"preprocess":null},{"capture":"subpart","path":"subpart","type":"string","card":null,"preprocess":null},{"capture":"code_suffix","path":"code_suffix","type":"string","card":null,"preprocess":null},{"capture":"space_suffix","path":"space_suffix","type":"string","card":null,"preprocess":null},{"capture":"publisher","path":"publisher","type":"string","card":null,"preprocess":null},{"capture":"type","path":"type","type":"string","card":null,"preprocess":null},{"capture":"doc_year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"supplement_year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"issue","path":"issue","type":"string","card":null,"preprocess":null},{"capture":"sequence","path":"sequence","type":"string","card":null,"preprocess":null},{"capture":"volume_roman","path":"volume_roman","type":"string","card":null,"preprocess":null},{"capture":"issue_arabic","path":"issue_arabic","type":"string","card":null,"preprocess":null},{"capture":"article_id","path":"article_id","type":"string","card":null,"preprocess":null},{"capture":"language","path":"language","type":"string","card":null,"preprocess":null},{"capture":"space_before_lang","path":"space_before_lang","type":"string","card":null,"preprocess":null},{"capture":"edition","path":"edition","type":"string","card":null,"preprocess":null},{"capture":"iteration","path":"iteration","type":"string","card":null,"preprocess":null},{"capture":"stage","path":"stage","type":"string","card":null,"preprocess":null},{"capture":"amd_marker","path":"amd_marker","type":"string","card":null,"preprocess":null},{"capture":"doc_edition_format","path":"edition_format","type":"string","card":null,"preprocess":null},{"capture":"supplement_edition_format","path":"edition_format","type":"string","card":null,"preprocess":null},{"capture":"trailing_marker","path":"trailing_marker","type":"string","card":null,"preprocess":null},{"capture":"plus_marker","path":"plus_marker","type":"string","card":null,"preprocess":null},{"capture":"annex_marker","path":"annex_marker","type":"string","card":null,"preprocess":null},{"capture":"annex_letter","path":"annex_letter","type":"string","card":null,"preprocess":null},{"capture":"cs_series","path":"cs_series","type":"string","card":null,"preprocess":null},{"capture":"cs_family","path":"cs_family","type":"string","card":null,"preprocess":null},{"capture":"cs_separator","path":"cs_separator","type":"string","card":null,"preprocess":null},{"capture":"cs_amendment","path":"cs_amendment","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule roman_numeral: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number_plain: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number_plain: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule full_number_plain: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule date: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule date: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule date: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule date_plain: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule date_plain: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule date_plain: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule lang_multi_oiml: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule lang_multi_oiml: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule lang_multi_oiml: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 3 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 4 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 5 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 5 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 6 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 6 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 7 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 8 and 9 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"OIML V 2 Edition 2007","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML R 137-1:2012","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML D 11","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML D 11 Brochure","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML R 126:2015 Errata (E)","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML B 20 Annexes","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML V 2 (E)","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML-CS PD-05 Edition 6 (Amendment 1)","expect":{}},{"entry":"identifier","kind":"accept","input":"OIML R 138:2009 Amendment 1","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/oiml/parser.rb — OIML identifiers: the base form,\n# drafts, amendments (full/short/+/trailing), annexes, bulletins.\n#\n# Edition-2 conversion. The builder dispatches on the supplement\n# wrappers (parsed_hash[:base] -> build_supplement recursing into the\n# nested hash; parsed_hash[:base_code] on the short amendment), so both\n# keep their v1 shape and bind uncast with (raw). Because the flat\n# binding layer is global by capture name, the base's number (nested\n# key :number, read by the recursive build) is a different capture from\n# the two spellings the TOP-LEVEL :number must carry: the plain\n# document's number (doc_number) and the trailing supplement's own\n# ordinal (supplement_number) — both bind to the output key :number,\n# and the branches are disjoint so they never collide. Zero-width\n# markers: (\"\" as space_suffix) is re-spelled as a real-token capture\n# of the space it flagged (`space as space_suffix` — the key stays\n# present exactly when the \"Brochure\" suffix matched, so the builder's\n# .key? check and the space-separated rendering are unchanged);\n# (\"\" as space_before_lang) likewise becomes `space as space_before_lang`.\n# The composite edition_format wrapper becomes a real-token capture of\n# the \"Edition\"/\"edition\" word (truthiness and the long-format flag are\n# preserved; the builder re-reads year/edition flat). Pure-raw rule\n# bodies are inlined at capture sites (digits, alnum, lang_multi,\n# year_digits) so every capture binds one span.\n\ngrammar PubidOiml version \"0.1.0\" edition 2 {\n # The monorepo's doc_type is [BDEGRSV] — X is deliberately absent\n # (\"OIML X 99\" must be rejected).\n letter_bdegrsvx = %x42 / %x44 / %x45 / %x47 / %x52 / %x53 / %x56\n digit = %x30-39\n letter = %x41-5A / %x61-7A\n upper = %x41-5A\n lower = %x61-7A\n space = \" \"\n dash = \"-\"\n colon = \":\"\n slash = \"/\"\n lparen = \"(\"\n rparen = \")\"\n dot = \".\"\n plus = \"+\"\n century = \"19\" / \"20\"\n year_digits = century 2*digit !digit\n\n publisher = \"OIML\" as publisher space\n doc_type = letter_bdegrsvx as type space\n\n bulletin_date = {\n space\n (century 2*digit !digit) as doc_year\n [(dash (2*digit) as issue)]\n [(dash (2*digit) as sequence)]\n }\n roman_numeral = 1*%x49 / 1*(%x49 / %x56 / %x58 / %x4C / %x43 / %x44 / %x4D)\n roman = (1*(%x49 / %x56 / %x58 / %x4C / %x43 / %x44 / %x4D)) as volume_roman\n bulletin_citation = {\n space\n roman\n lparen\n ((1*digit)) as issue_arabic\n rparen\n space\n ((8*digit)) as article_id\n }\n bulletin_identifier = {\n \"OIML\" as publisher\n space\n \"Bulletin\" as type\n [bulletin_citation / bulletin_date]\n [language_portion]\n }\n\n number_only = ((1*digit)) as number\n part_number = dash (((1*digit) *((slash dash (1*digit)))) as part)\n subpart_number = dash ((1*digit)) as subpart\n named_suffix_gum = dash (\"GUM\" space (1*digit) / ((1*letter) *(([\"_\"] (1*digit))))) as code_suffix\n named_suffix_brochure = (space) as space_suffix \"Brochure\" as code_suffix\n named_suffix = named_suffix_gum / named_suffix_brochure\n full_number = {\n (\n ((number_only) part_number subpart_number [named_suffix])\n / ((number_only) part_number [named_suffix])\n / ((number_only) [named_suffix])\n )\n }\n doc_number_only = ((1*digit)) as doc_number\n full_number_plain = {\n (\n ((doc_number_only) part_number subpart_number [named_suffix])\n / ((doc_number_only) part_number [named_suffix])\n / ((doc_number_only) [named_suffix])\n )\n }\n\n edition_number = {\n (\n \"6th\"\n / \"5th\"\n / \"4th\"\n / \"3rd\"\n / \"2nd\"\n / \"1st\"\n / ((1*digit) (\"th\" / \"nd\" / \"rd\" / \"st\"))\n ) as edition\n }\n edition_text = \"Edition\" / \"edition\"\n edition_portion = {\n (\n (\", \" / space)\n [(edition_number)]\n [space]\n (edition_text) as edition_format\n [space]\n (century 2*digit !digit) as year\n )\n }\n date = {\n edition_portion\n / ([space] colon [space] (century 2*digit !digit) as year)\n / ([space] lparen (century 2*digit !digit) as year rparen)\n }\n edition_portion_plain = {\n (\n (\", \" / space)\n [(edition_number)]\n [space]\n (edition_text) as doc_edition_format\n [space]\n (century 2*digit !digit) as doc_year\n )\n }\n date_plain = {\n edition_portion_plain\n / ([space] colon [space] (century 2*digit !digit) as doc_year)\n / ([space] lparen (century 2*digit !digit) as doc_year rparen)\n }\n stage_iteration = ((((1*digit) dot (1*digit))) / (1*digit)) as iteration\n stage_abbr = (\"WD\" / \"CD\") as stage\n draft_stage = space [stage_iteration] stage_abbr\n\n lang_single = %x45 / %x46 / %x52 / %x58 / %x44 / %x53 / %x43 / %x41 / %x55\n lang_multi_oiml = \"PO\" / \"PT\" / \"PE\" / \"SR\"\n language_code = {\n (\n (\n ((lang_single) slash (lang_single))\n / lang_multi_oiml\n / ((upper) 2*2lower)\n / (lang_single)\n / (2*2lower)\n ) as language\n )\n }\n language_with_space = (space) as space_before_lang lparen language_code rparen\n language_without_space = lparen language_code rparen\n language_portion = language_with_space / language_without_space\n\n amendment_identifier = {\n \"Amendment\"\n space\n lparen\n (century 2*digit !digit) as supplement_year\n rparen\n space\n \"to\"\n space\n ((base_without_language)) as base\n [language_portion]\n }\n amendment_short = {\n publisher\n doc_type\n ((full_number)) as base_code\n space\n \"Amendment\" as amd_marker\n (\n (\n (\n space (edition_text) as supplement_edition_format\n [space]\n (century 2*digit !digit) as supplement_year\n )\n )\n / (colon [space] (century 2*digit !digit) as supplement_year)\n )\n [language_portion]\n }\n trailing_supplement_identifier = {\n ((base_without_language)) as base\n space\n (\"Amendment\" / \"Errata\") as trailing_marker\n [space ((1*digit)) as supplement_number]\n [language_portion]\n }\n plus_supplement_identifier = {\n ((base_without_language)) as base\n plus\n (\"Amendment\" / \"Errata\") as plus_marker\n [(colon (century 2*digit !digit) as supplement_year)]\n [language_portion]\n }\n annex_identifier = {\n ((base_without_language)) as base\n space\n \"Annexes\" as annex_marker\n [\n (\n (\n (\n space (edition_text) as supplement_edition_format\n space\n (century 2*digit !digit) as supplement_year\n )\n )\n / (colon (century 2*digit !digit) as supplement_year)\n )\n ]\n [language_portion]\n }\n annex_letter_value = (((upper) [(dash upper)])) as annex_letter\n annex_letter_identifier = {\n ((base_without_language)) as base\n space\n \"Annex\"\n space\n annex_letter_value\n [\n (\n (\n (\n space\n edition_text\n space\n (century 2*digit !digit) as supplement_year\n )\n )\n / (colon (century 2*digit !digit) as supplement_year)\n )\n ]\n [language_portion]\n }\n base_without_language = publisher doc_type full_number [date] [draft_stage]\n base = publisher doc_type full_number_plain [date_plain] [draft_stage] [language_portion]\n\n cs_identifier = {\n (\n \"OIML\" as publisher\n (dash / space)\n \"CS\" as cs_series\n space\n (\"PD\" / \"OD\" / \"CID\") as cs_family\n (dash / space) as cs_separator\n ((1*digit)) as doc_number\n space\n \"Edition\"\n space\n ((1*digit)) as edition\n [(space lparen \"Amendment\" space ((1*digit)) as cs_amendment rparen)]\n )\n }\n identifier = {\n cs_identifier\n / amendment_identifier\n / amendment_short\n / annex_letter_identifier\n / annex_identifier\n / plus_supplement_identifier\n / trailing_supplement_identifier\n / bulletin_identifier\n / base\n }\n\n entry identifier: identifier\n\n bindings identifier {\n base -> base (raw)\n base_code -> base_code (raw)\n doc_number -> number (string)\n supplement_number -> number (string)\n part -> part (string)\n subpart -> subpart (string)\n code_suffix -> code_suffix (string)\n space_suffix -> space_suffix (string)\n publisher -> publisher (string)\n type -> type (string)\n doc_year -> year (string)\n supplement_year -> year (string)\n issue -> issue (string)\n sequence -> sequence (string)\n volume_roman -> volume_roman (string)\n issue_arabic -> issue_arabic (string)\n article_id -> article_id (string)\n language -> language (string)\n space_before_lang -> space_before_lang (string)\n edition -> edition (string)\n iteration -> iteration (string)\n stage -> stage (string)\n amd_marker -> amd_marker (string)\n doc_edition_format -> edition_format (string)\n supplement_edition_format -> edition_format (string)\n trailing_marker -> trailing_marker (string)\n plus_marker -> plus_marker (string)\n annex_marker -> annex_marker (string)\n annex_letter -> annex_letter (string)\n cs_series -> cs_series (string)\n cs_family -> cs_family (string)\n cs_separator -> cs_separator (string)\n cs_amendment -> cs_amendment (string)\n }\n\n test {\n accept \"OIML V 2 Edition 2007\"\n accept \"OIML R 137-1:2012\"\n accept \"OIML D 11\"\n accept \"OIML D 11 Brochure\"\n accept \"OIML R 126:2015 Errata (E)\"\n accept \"OIML B 20 Annexes\"\n accept \"OIML V 2 (E)\"\n accept \"OIML-CS PD-05 Edition 6 (Amendment 1)\"\n accept \"OIML R 138:2009 Amendment 1\"\n reject \"nonsense\"\n }\n}\n","source_hash":"f0e077831923b3f664d772c035f33738a1d4d564611947cdd9b0295f7583f6c4","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:6e5fd037da22a72a0516d92730f37bda2c5ccede32403b1be3fac6416a21992b"}
|
data/data/parg/omg.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"bindings":null,"version":"0.1.0","grammar":"PubidOmg","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"OMG"}},{"Entity":{"atom":2}},{"Str":{"pattern":" "}},{"Entity":{"atom":24}},{"Entity":{"atom":7}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[5,6]}},{"Entity":{"atom":13}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[+]"}},{"Alternative":{"atoms":[9,10,11,12]}},{"Repetition":{"atom":8,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":18}},{"Re":{"pattern":"[\\-]"}},{"Re":{"pattern":"[/]"}},{"Alternative":{"atoms":[16,17]}},{"Entity":{"atom":13}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[15,20]}},{"Repetition":{"atom":21,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[4,14,22]}},{"Named":{"name":"acronym","atom":23}},{"Entity":{"atom":2}},{"Entity":{"atom":
|
|
1
|
+
{"bindings":null,"version":"0.1.0","grammar":"PubidOmg","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"OMG"}},{"Entity":{"atom":2}},{"Str":{"pattern":" "}},{"Entity":{"atom":24}},{"Entity":{"atom":7}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[5,6]}},{"Entity":{"atom":13}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[+]"}},{"Alternative":{"atoms":[9,10,11,12]}},{"Repetition":{"atom":8,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":18}},{"Re":{"pattern":"[\\-]"}},{"Re":{"pattern":"[/]"}},{"Alternative":{"atoms":[16,17]}},{"Entity":{"atom":13}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[15,20]}},{"Repetition":{"atom":21,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[4,14,22]}},{"Named":{"name":"acronym","atom":23}},{"Entity":{"atom":2}},{"Entity":{"atom":62}},{"Entity":{"atom":28}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":27,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":31}},{"Str":{"pattern":"."}},{"Entity":{"atom":28}},{"Repetition":{"atom":32,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[30,33]}},{"Repetition":{"atom":34,"min":0,"max":null,"tag":"Repetition"}},{"Str":{"pattern":" beta"}},{"Entity":{"atom":41}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Alternative":{"atoms":[38,39,40]}},{"Lookahead":{"atom":37,"positive":false}},{"Entity":{"atom":2}},{"Entity":{"atom":28}},{"Repetition":{"atom":44,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":41}},{"Lookahead":{"atom":46,"positive":false}},{"Sequence":{"atoms":[43,45,47]}},{"Repetition":{"atom":48,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[36,42,49]}},{"Entity":{"atom":2}},{"Str":{"pattern":"Beta"}},{"Entity":{"atom":28}},{"Repetition":{"atom":53,"min":1,"max":null,"tag":"Repetition"}},{"Repetition":{"atom":54,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":41}},{"Lookahead":{"atom":56,"positive":false}},{"Sequence":{"atoms":[51,52,55,57]}},{"Alternative":{"atoms":[50,58]}},{"Repetition":{"atom":59,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[29,35,60]}},{"Named":{"name":"version","atom":61}},{"Entity":{"atom":68}},{"Entity":{"atom":2}},{"Entity":{"atom":66}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":65}},{"Alternative":{"atoms":[64,67]}},{"Entity":{"atom":72}},{"Entity":{"atom":41}},{"Repetition":{"atom":70,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":71}},{"Sequence":{"atoms":[63,69]}},{"Repetition":{"atom":73,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[25,26,74]}},{"Entity":{"atom":2}},{"Entity":{"atom":72}},{"Sequence":{"atoms":[76,77]}},{"Alternative":{"atoms":[75,78]}},{"Repetition":{"atom":79,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,1,3,80]}}],"root":81},"bindings":[{"capture":"acronym","path":"acronym","type":"string","card":null,"preprocess":null},{"capture":"version","path":"version","type":"string","card":null,"preprocess":null},{"capture":"part","path":"part","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule beta: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"OMG IDL 4.2","expect":{}},{"entry":"identifier","kind":"accept","input":"OMG UML 2.5.1","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/omg/parser.rb: OMG <acronym>[ <version>[<sep><part>]]\n# with the beta-label word-boundary guards (a bare \"beta\" must not be\n# swallowed by the part rule). The GLUED CATALOGUE label (\"Beta1\" --\n# capitalized, the /spec/ALMAS/1.5/Beta1 URL segment) classifies into\n# the version (the 2026-10-19 pubid#548 ruling); the LOWERCASE glued\n# form (\"beta2\") stays a document part (the DDS ruling, spec-pinned). A\n# /spec/ALMAS/1.5/Beta1 URL segment) classifies into the version (the\n# 2026-10-19 pubid#548 ruling); a Beta-prefixed part without digits\n# (\"BetaWave\") still lexes as the part — the boundary guard keeps it.\n grammar PubidOmg version \"0.1.0\" edition 2 {\n digit = %x30-39\n acronym_char = %x41-5A / %x61-7A / %x30-39 / %x2B\n acronym_join = %x2D / %x2F\n acronym = (letter 1*acronym_char *(acronym_join 1*acronym_char)) as acronym\n word_boundary = !alnum_char\n beta = (\" beta\" !alnum_char ([space 1*digit !alnum_char]) / (space \"Beta\" [1*digit] !alnum_char))\n version = (1*digit *(dot 1*digit) [(\" beta\" !alnum_char ([space 1*digit !alnum_char]) / (space \"Beta\" [1*digit] !alnum_char))]) as version\n part_separator = space / slash\n part = (1*alnum_char) as part\n identifier = \"OMG\" space acronym [((space version [part_separator part]) / (space part))]\n alnum_char = %x41-5A / %x61-7A / %x30-39\n letter = %x41-5A / %x61-7A\n dot = \".\"\n slash = \"/\"\n space = \" \"\n entry identifier: identifier\n\n bindings identifier {\n acronym -> acronym (string)\n version -> version (string)\n part -> part (string)\n }\n\n\n test {\n accept \"OMG IDL 4.2\"\n accept \"OMG UML 2.5.1\"\n reject \"nonsense\"\n }\n}\n","source_hash":"52d7a874221297d0f1ad18a19ef557046f62d2bed13cc27884080dbf5fb7fa97","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:673170151ef924747d4c80514001b885ceaa6fa6c0e9476774326b54f329da9f"}
|
data/data/parg/plateau.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"bindings":null,"version":"0.1.0","grammar":"PubidPlateau","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":
|
|
1
|
+
{"bindings":null,"version":"0.1.0","grammar":"PubidPlateau","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":69}},{"Entity":{"atom":49}},{"Str":{"pattern":"PLATEAU"}},{"Str":{"pattern":" "}},{"Entity":{"atom":8}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Technical Report"}},{"Alternative":{"atoms":[5,6]}},{"Named":{"name":"type","atom":7}},{"Str":{"pattern":" "}},{"Entity":{"atom":15}},{"Str":{"pattern":"#"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":12,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":13}},{"Sequence":{"atoms":[11,14]}},{"Entity":{"atom":23}},{"Str":{"pattern":"-"}},{"Str":{"pattern":"_"}},{"Alternative":{"atoms":[17,18]}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":20,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"annex","atom":21}},{"Sequence":{"atoms":[19,22]}},{"Repetition":{"atom":16,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":47}},{"Str":{"pattern":" "}},{"Entity":{"atom":37}},{"Str":{"pattern":"第"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":29,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":32,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[30,31,33]}},{"Named":{"name":"edition","atom":34}},{"Str":{"pattern":"版"}},{"Sequence":{"atoms":[28,35,36]}},{"Entity":{"atom":45}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":39,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":42,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[40,41,43]}},{"Named":{"name":"edition","atom":44}},{"Alternative":{"atoms":[27,38]}},{"Sequence":{"atoms":[26,46]}},{"Repetition":{"atom":25,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[2,3,4,9,10,24,48]}},{"Entity":{"atom":58}},{"Str":{"pattern":"PLATEAU"}},{"Str":{"pattern":" "}},{"Entity":{"atom":8}},{"Str":{"pattern":" "}},{"Entity":{"atom":15}},{"Entity":{"atom":23}},{"Repetition":{"atom":56,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[51,52,53,54,55,57]}},{"Alternative":{"atoms":[1,50]}},{"Named":{"name":"base","atom":59}},{"Entity":{"atom":68}},{"Str":{"pattern":" "}},{"Str":{"pattern":"Annex"}},{"Str":{"pattern":" "}},{"Entity":{"atom":67}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Named":{"name":"annex_letter","atom":66}},{"Sequence":{"atoms":[62,63,64,65]}},{"Sequence":{"atoms":[60,61]}},{"Entity":{"atom":49}},{"Entity":{"atom":58}},{"Alternative":{"atoms":[0,70,71]}}],"root":72},"bindings":[{"capture":"base","path":"base","type":"raw","card":null,"preprocess":null},{"capture":"type","path":"type","type":"string","card":null,"preprocess":null},{"capture":"number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"annex","path":"annex","type":"string","card":null,"preprocess":null},{"capture":"edition","path":"edition","type":"string","card":null,"preprocess":null},{"capture":"annex_letter","path":"annex_letter","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule identifier: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"PLATEAU Handbook #3","expect":{}},{"entry":"identifier","kind":"accept","input":"PLATEAU Technical Report #1","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/plateau/parser.rb: PLATEAU Handbook/Technical Report\n# #NN[-annex][ edition], plus Annex supplements. Japanese canonical\n# edition (第X.Y版) and legacy Latin X.Y both capture the same atom.\n#\n# Edition 2: every reference inside a captured body is inlined to raw\n# terms (a rule reference materializes as a named node in the edition-2\n# tree, so only a raw capture binds a scalar span). The base wrapper\n# keeps the v1 tree shape and the bindings name the scalar leaves.\n\ngrammar PubidPlateau version \"0.1.0\" edition 2 {\n doc_type = (\"Handbook\" / \"Technical Report\") as type\n number = \"#\" (1*%x30-39) as number\n annex = (\"-\" / \"_\") (1*%x30-39) as annex\n edition_part = \"第\" (1*%x30-39 \".\" 1*%x30-39) as edition \"版\"\n edition_latin = (1*%x30-39 \".\" 1*%x30-39) as edition\n edition = \" \" (edition_part / edition_latin)\n annex_letter = (%x41-5A) as annex_letter\n annex_supplement = \" \" \"Annex\" \" \" annex_letter\n handbook = \"PLATEAU\" \" \" doc_type \" \" number [annex] [edition]\n technical_report = \"PLATEAU\" \" \" doc_type \" \" number [annex]\n annex_identifier = (handbook / technical_report) as base annex_supplement\n identifier = annex_identifier / handbook / technical_report\n\n entry identifier: identifier\n\n test {\n accept \"PLATEAU Handbook #3\"\n accept \"PLATEAU Technical Report #1\"\n reject \"nonsense\"\n }\n\n bindings identifier {\n # The builder dispatches on base && annex_letter and RE-parses the base\n # subtree recursively (build_annex calls build(parsed[:base])), so base\n # binds uncast — the nested {type, number, annex, edition} hash.\n base -> base (raw)\n type -> type (string)\n number -> number (string)\n annex -> annex (string)\n edition -> edition (string)\n annex_letter -> annex_letter (string)\n }\n}\n","source_hash":"c794ad3672c17b5cacdfa398ef912bc11fa61559a5dec42e38e83f85ea5a03ae","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:18c528e9b4808183ec56567581aedff00d4e275644fe861b9db4a2dd2dbac3e8"}
|
data/data/parg/tgpp.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"bindings":null,"version":"0.1.0","grammar":"PubidTgpp","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"3GPP "}},{"Repetition":{"atom":0,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":6}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[3,4]}},{"Named":{"name":"type","atom":5}},{"Entity":{"atom":8}},{"Str":{"pattern":" "}},{"Entity":{"atom":17}},{"Entity":{"atom":11}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":10,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Repetition":{"atom":14,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[12,13,15]}},{"Named":{"name":"number","atom":16}},{"Entity":{"atom":24}},{"Entity":{"atom":22}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[20,21]}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"suffix","atom":23}},{"Repetition":{"atom":18,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":34}},{"Entity":{"atom":32}},{"Str":{"pattern":"-"}},{"Entity":{"atom":11}},{"Repetition":{"atom":29,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":30}},{"Sequence":{"atoms":[28,31]}},{"Repetition":{"atom":27,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":33}},{"Entity":{"atom":36}},{"Str":{"pattern":":"}},{"Entity":{"atom":
|
|
1
|
+
{"bindings":null,"version":"0.1.0","grammar":"PubidTgpp","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"3GPP "}},{"Repetition":{"atom":0,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":6}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[3,4]}},{"Named":{"name":"type","atom":5}},{"Entity":{"atom":8}},{"Str":{"pattern":" "}},{"Entity":{"atom":17}},{"Entity":{"atom":11}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":10,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Repetition":{"atom":14,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[12,13,15]}},{"Named":{"name":"number","atom":16}},{"Entity":{"atom":24}},{"Entity":{"atom":22}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[20,21]}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"suffix","atom":23}},{"Repetition":{"atom":18,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":34}},{"Entity":{"atom":32}},{"Str":{"pattern":"-"}},{"Entity":{"atom":11}},{"Repetition":{"atom":29,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":30}},{"Sequence":{"atoms":[28,31]}},{"Repetition":{"atom":27,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":33}},{"Entity":{"atom":36}},{"Str":{"pattern":":"}},{"Named":{"name":"colon","atom":35}},{"Entity":{"atom":64}},{"Entity":{"atom":51}},{"Entity":{"atom":11}},{"Named":{"name":"digit","atom":40}},{"Repetition":{"atom":41,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Named":{"name":"digit","atom":44}},{"Repetition":{"atom":45,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Named":{"name":"digit","atom":48}},{"Repetition":{"atom":49,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[42,43,46,47,50]}},{"Entity":{"atom":53}},{"Re":{"pattern":"[\\x01-\\u{10ffff}]"}},{"Lookahead":{"atom":52,"positive":false}},{"Sequence":{"atoms":[39,54]}},{"Lookahead":{"atom":55,"positive":false}},{"Entity":{"atom":61}},{"Re":{"pattern":"[\\x01-\\x2e]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[\\x3b-\\u{10ffff}]"}},{"Alternative":{"atoms":[58,59,60]}},{"Repetition":{"atom":57,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"release","atom":62}},{"Sequence":{"atoms":[56,63]}},{"Sequence":{"atoms":[37,38]}},{"Repetition":{"atom":65,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":68}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":67}},{"Entity":{"atom":80}},{"Entity":{"atom":11}},{"Repetition":{"atom":71,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Repetition":{"atom":74,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":11}},{"Repetition":{"atom":77,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[72,73,75,76,78]}},{"Named":{"name":"version","atom":79}},{"Sequence":{"atoms":[69,70]}},{"Repetition":{"atom":81,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[1,2,7,9,25,26,66,82]}}],"root":83},"bindings":[{"capture":"type","path":"type","type":"string","card":null,"preprocess":null},{"capture":"number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"suffix","path":"suffix","type":"string","card":null,"preprocess":null},{"capture":"part","path":"parts[].part","type":"string","card":null,"preprocess":null},{"capture":"release","path":"release","type":"string","card":null,"preprocess":null},{"capture":"version","path":"version","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule release_char: branches 1 and 3 are order-dependent (first set not statically known)","rule release_char: branches 2 and 3 are order-dependent (first set not statically known)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"3GPP TS 21.101","expect":{}},{"entry":"identifier","kind":"accept","input":"TS 25.999","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/tgpp/parser.rb:\n# [3GPP ]<TR|TS> <NN.NNN>[suffix][-part…][:<release>][/<version>]\n# The release excludes \"/\" and \":\" (match[\"^/:\"]), byte-wise here; the\n# mistyped-version guard (!version…!any) is ported literally.\n\ngrammar PubidTgpp version \"0.1.0\" edition 2 {\n release_char = %x01-2E / %x30-39 / %x3B-10FFFF\n any_char = %x01-10FFFF\n type = (\"TR\" / \"TS\") as type\n number = (1*digit \".\" 1*digit) as number\n suffix = (1*letter) as suffix\n part = \"-\" (1*digit) as part\n parts = (*part) as parts\n version_core = 1*digit \".\" 1*digit \".\" 1*digit\n release = !(version_core !any_char) (1*release_char) as release\n version = (1*digit \".\" 1*digit \".\" 1*digit) as version\n identifier = [\"3GPP \"] type space number [suffix] parts [(colon release)] [(slash version)]\n letter = %x41-5A / %x61-7A\n digit = %x30-39\n space = \" \"\n colon = \":\"\n slash = \"/\"\n entry identifier: identifier\n\n bindings identifier {\n type -> type (string)\n number -> number (string)\n suffix -> suffix (string)\n part -> parts[].part (string)\n release -> release (string)\n version -> version (string)\n }\n\n\n test {\n accept \"3GPP TS 21.101\"\n accept \"TS 25.999\"\n reject \"nonsense\"\n }\n}\n","source_hash":"8208f08be56685a980b7c3adeb2a58d64b962c148028fe676b3e00eede72f13a","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:9bdb1d70089ba09ad10fcf091475fb938c7570282c26a20652df304e7f9693af"}
|
data/data/parg/un.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"bindings":null,"version":"0.1.0","grammar":"PubidUn","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"UN "}},{"Repetition":{"atom":0,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":
|
|
1
|
+
{"bindings":null,"version":"0.1.0","grammar":"PubidUn","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"UN "}},{"Repetition":{"atom":0,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":8}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[.]"}},{"Alternative":{"atoms":[3,4,5]}},{"Repetition":{"atom":6,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"token","atom":7}},{"Str":{"pattern":"/"}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[9,10]}},{"Repetition":{"atom":11,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[1,2,12]}}],"root":13},"bindings":[{"capture":"token","path":"token[].token","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"UN/CEFACT/TBG14","expect":{}},{"entry":"identifier","kind":"accept","input":"CEFACT/TBG14","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/un/parser.rb. `token` matches [A-Z0-9.] runs.\n#\n# Edition-2 typed bindings: `token` repeats (one per slash-separated\n# segment) and the builder walks every occurrence as a path element, so\n# the repeats collect under token[].token — a scalar binding would keep\n# only the first segment. The separator stays a raw \"/\" literal: a\n# parenthesized slash ref materializes a {slash:} node whose presence\n# the token-walking builder would read as an empty token.\n\ngrammar PubidUn version \"0.1.0\" edition 2 {\n token_char = %x41-5A / %x30-39 / %x2E\n token = ( 1*(%x41-5A / %x30-39 / %x2E) ) as token\n identifier = [\"UN \"] token 1*( \"/\" token )\n slash = \"/\"\n\n entry identifier: identifier\n\n bindings identifier {\n token -> token[].token (string)\n }\n\n test {\n accept \"UN/CEFACT/TBG14\"\n accept \"CEFACT/TBG14\"\n reject \"nonsense\"\n }\n}\n","source_hash":"ba53a065d999fb151e5b557dafbf245bcb4d8a6948017b198444242eee47fcfb","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:a71b6cfba806bd0802198e7cacb532cbb06136a375bf937f37823f7531f0e327"}
|
data/lib/pubid/adobe/parser.rb
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "parslet"
|
|
4
|
-
|
|
5
3
|
module Pubid
|
|
6
4
|
module Adobe
|
|
7
|
-
#
|
|
5
|
+
# Grammar for Adobe identifiers.
|
|
8
6
|
#
|
|
9
7
|
# Canonical citation forms (what the renderer produces):
|
|
10
8
|
#
|
|
@@ -21,116 +19,7 @@ module Pubid
|
|
|
21
19
|
# ATN5014 (short alias)
|
|
22
20
|
# 5014 (bare number; data-repo context)
|
|
23
21
|
# adobe-glyph-list (bare slug)
|
|
24
|
-
class Parser
|
|
25
|
-
include ::Pubid::Parser::CommonParseRules
|
|
26
|
-
|
|
27
|
-
root :identifier
|
|
28
|
-
|
|
29
|
-
rule(:space) { str(" ") }
|
|
30
|
-
rule(:space?) { space.maybe }
|
|
31
|
-
rule(:hash) { str("#") }
|
|
32
|
-
rule(:dot) { str(".") }
|
|
33
|
-
rule(:dash) { str("-") }
|
|
34
|
-
|
|
35
|
-
# Canonical short prefix: "Adobe TN" with optional trailing space.
|
|
36
|
-
# Matches both "Adobe TN 5014" and "Adobe TN5014".
|
|
37
|
-
rule(:tech_note_tn_prefix) do
|
|
38
|
-
str("Adobe") >> space >> str("TN") >> space?.maybe
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Legacy long prefix: "Adobe Technical Note" with optional "#".
|
|
42
|
-
rule(:tech_note_long_prefix) do
|
|
43
|
-
str("Adobe") >> space >> str("Technical") >> space >> str("Note") >>
|
|
44
|
-
(space? >> hash.maybe >> space?).maybe
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# Legacy short alias: "ATN" with optional trailing space.
|
|
48
|
-
rule(:tech_note_atn_prefix) do
|
|
49
|
-
str("ATN") >> space?.maybe
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
rule(:tech_note_prefix) do
|
|
53
|
-
tech_note_tn_prefix | tech_note_long_prefix | tech_note_atn_prefix
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
rule(:digits) do
|
|
57
|
-
match("[0-9]").repeat(1)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# 4-digit tech note number, optionally followed by ".<Slug>" from
|
|
61
|
-
# the filename form. The slug is captured but not required.
|
|
62
|
-
rule(:slug_chars) do
|
|
63
|
-
match("[A-Za-z0-9_]").repeat(1)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
rule(:tech_note) do
|
|
67
|
-
(tech_note_prefix >>
|
|
68
|
-
digits.as(:number) >>
|
|
69
|
-
(dot >> slug_chars.as(:slug)).maybe).as(:tech_note)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# Bare number form (e.g. when the data repo passes just "5014"
|
|
73
|
-
# extracted from a filename). Not advertised in user docs; used
|
|
74
|
-
# internally by AdobeFetcher::Docid.
|
|
75
|
-
rule(:bare_number) do
|
|
76
|
-
digits.as(:number).as(:tech_note_bare)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# "Adobe Publication " prefix. Matched literally then discarded —
|
|
80
|
-
# the publication slug/version is parsed by the inner rule.
|
|
81
|
-
rule(:publication_prefix) do
|
|
82
|
-
str("Adobe") >> space >> str("Publication") >> space
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# Publication slug. Lowercase ASCII letters and digits joined by `-`.
|
|
86
|
-
# Each segment starts with a letter (so a trailing `-<digits>` is
|
|
87
|
-
# unambiguously a version suffix, not part of the slug).
|
|
88
|
-
rule(:slug_segment) do
|
|
89
|
-
match("[a-z]") >> match("[a-z0-9]").repeat
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
rule(:slug_inner) do
|
|
93
|
-
slug_segment >> (dash >> slug_segment).repeat
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
rule(:publication_with_version) do
|
|
97
|
-
(slug_inner.as(:slug) >> dash >> digits.as(:version)).as(:publication_version)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
rule(:publication_slug_or_version) do
|
|
101
|
-
# Try with-version first so `adobe-japan1-7` doesn't get captured
|
|
102
|
-
# as slug `adobe-japan1-7` with no version. The flat `:slug` form
|
|
103
|
-
# is the fallback for unversioned slugs.
|
|
104
|
-
publication_with_version | slug_inner.as(:slug)
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
rule(:publication) do
|
|
108
|
-
# Optional "Adobe Publication " prefix. The prefix is consumed
|
|
109
|
-
# but not captured — the inner rule produces :slug or
|
|
110
|
-
# :publication_version as before.
|
|
111
|
-
publication_prefix.maybe >> publication_slug_or_version
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
rule(:identifier) do
|
|
115
|
-
tech_note | bare_number | publication
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
# Parse a string and return the raw parslet tree.
|
|
119
|
-
# @param string [String]
|
|
120
|
-
# @return [Hash]
|
|
121
|
-
def self.parse(string)
|
|
122
|
-
unless string.is_a?(String)
|
|
123
|
-
raise ::Pubid::Errors::InvalidInputError,
|
|
124
|
-
::Pubid::INPUT_NOT_A_STRING_MESSAGE
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
if string.length > ::Pubid::MAX_INPUT_LENGTH
|
|
128
|
-
raise ::Pubid::Errors::InvalidInputError,
|
|
129
|
-
::Pubid::INPUT_TOO_LONG_MESSAGE
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
new.parse(string.strip)
|
|
133
|
-
end
|
|
22
|
+
class Parser
|
|
134
23
|
end
|
|
135
24
|
end
|
|
136
25
|
end
|