@pubid/pubid 0.1.30 → 0.1.32

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.
Files changed (63) hide show
  1. package/artifact/corpus.json.gz +0 -0
  2. package/dist/flavors/iec/index.js +12 -5
  3. package/dist/flavors/ieee/index.js +321 -113
  4. package/dist/flavors/ieee/model.d.ts +18 -0
  5. package/dist/flavors/ieee/model.js +62 -8
  6. package/dist/flavors/ieee/preprocessor.js +3 -0
  7. package/dist/flavors/ieee/update_codes.js +1 -1
  8. package/dist/flavors/iho/index.js +198 -35
  9. package/dist/flavors/jis/index.js +74 -2
  10. package/dist/flavors/nist/grammar.js +44 -16
  11. package/dist/flavors/nist/index.js +17 -2
  12. package/dist/model/identifier.d.ts +9 -0
  13. package/dist/model/identifier.js +50 -0
  14. package/dist/urn/parsers.js +57 -20
  15. package/package.json +2 -2
  16. package/vendor/parg/adobe.json +1 -1
  17. package/vendor/parg/aiee.json +1 -1
  18. package/vendor/parg/amca.json +1 -1
  19. package/vendor/parg/ansi.json +1 -1
  20. package/vendor/parg/api.json +1 -1
  21. package/vendor/parg/ashrae.json +1 -1
  22. package/vendor/parg/asme.json +1 -1
  23. package/vendor/parg/astm.json +1 -1
  24. package/vendor/parg/bipm.json +1 -1
  25. package/vendor/parg/bsi.json +1 -1
  26. package/vendor/parg/calconnect.json +1 -1
  27. package/vendor/parg/ccsds.json +1 -1
  28. package/vendor/parg/cen_cenelec.json +1 -1
  29. package/vendor/parg/cie.json +1 -1
  30. package/vendor/parg/csa.json +1 -1
  31. package/vendor/parg/doi.json +1 -1
  32. package/vendor/parg/easc.json +1 -1
  33. package/vendor/parg/ecma.json +1 -1
  34. package/vendor/parg/etsi.json +1 -1
  35. package/vendor/parg/evs.json +1 -1
  36. package/vendor/parg/gb.json +1 -1
  37. package/vendor/parg/gost.json +1 -1
  38. package/vendor/parg/iala.json +1 -1
  39. package/vendor/parg/iana.json +1 -1
  40. package/vendor/parg/idf.json +1 -1
  41. package/vendor/parg/iec.json +1 -1
  42. package/vendor/parg/ieee.json +1 -29571
  43. package/vendor/parg/ietf.json +1 -1
  44. package/vendor/parg/iho.json +1 -0
  45. package/vendor/parg/ire.json +1 -1
  46. package/vendor/parg/isbn.json +1 -1
  47. package/vendor/parg/iso.json +1 -8510
  48. package/vendor/parg/itu.json +1 -1
  49. package/vendor/parg/jcgm.json +1 -1
  50. package/vendor/parg/jis.json +1 -1
  51. package/vendor/parg/nesc.json +1 -1
  52. package/vendor/parg/nist.json +1 -9588
  53. package/vendor/parg/oasis.json +1 -1
  54. package/vendor/parg/ogc.json +1 -1
  55. package/vendor/parg/oiml.json +1 -1
  56. package/vendor/parg/omg.json +1 -1
  57. package/vendor/parg/parg.json +1 -1
  58. package/vendor/parg/plateau.json +1 -1
  59. package/vendor/parg/sae.json +1 -1
  60. package/vendor/parg/tgpp.json +1 -1
  61. package/vendor/parg/un.json +1 -1
  62. package/vendor/parg/w3c.json +1 -1
  63. package/vendor/parg/xsf.json +1 -1
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidCalconnect","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"CC"}},{"Entity":{"atom":2}},{"Str":{"pattern":"/"}},{"Entity":{"atom":9}},{"Entity":{"atom":7}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[5,6]}},{"Repetition":{"atom":4,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"series","atom":8}},{"Sequence":{"atoms":[1,3]}},{"Repetition":{"atom":10,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":13}},{"Str":{"pattern":" "}},{"Entity":{"atom":26}},{"Entity":{"atom":16}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":15,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Str":{"pattern":"-"}},{"Alternative":{"atoms":[18,19]}},{"Entity":{"atom":16}},{"Repetition":{"atom":21,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[20,22]}},{"Repetition":{"atom":23,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,24]}},{"Named":{"name":"number","atom":25}},{"Entity":{"atom":28}},{"Str":{"pattern":":"}},{"Entity":{"atom":43}},{"Entity":{"atom":16}},{"Repetition":{"atom":30,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"year","atom":31}},{"Str":{"pattern":"-"}},{"Entity":{"atom":16}},{"Repetition":{"atom":34,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"month","atom":35}},{"Str":{"pattern":"-"}},{"Entity":{"atom":16}},{"Repetition":{"atom":38,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"day","atom":39}},{"Sequence":{"atoms":[33,36,37,40]}},{"Repetition":{"atom":41,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[32,42]}},{"Sequence":{"atoms":[27,29]}},{"Repetition":{"atom":44,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,11,12,14,45]}}],"root":46},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"CC 9101","expect":{}},{"entry":"identifier","kind":"accept","input":"CC/CD 9101","expect":{}},{"entry":"identifier","kind":"accept","input":"CC 9101:2024","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/calconnect/parser.rb:\n# CC[/<series>] <number>[.<sub>|-$sub>][:<date>]\n\ngrammar PubidCalconnect version \"0.1.0\" {\n letter = %x41-5A / %x61-7A\n series = (1*letter) as series\n number = (1*digit [(\".\" / \"-\") 1*digit]) as number\n date = (1*digit) as year [(\"-\" (1*digit) as month \"-\" (1*digit) as day)]\n identifier = \"CC\" [slash series] space number [(colon date)]\n digit = %x30-39\n space = \" \"\n slash = \"/\"\n colon = \":\"\n entry identifier: identifier\n\n test {\n accept \"CC 9101\"\n accept \"CC/CD 9101\"\n accept \"CC 9101:2024\"\n reject \"nonsense\"\n }\n}\n","source_hash":"87ada99dc6a257373d6d2b28a035b1da0b8b4d4f73b5cd2c906e3076a8360069","compiler_version":"1.3.93","checksum":"sha256:f38bfc5e90276d451297a1426322077a13b086dfd36ea6b177bcec1477dd9cb2"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidCalconnect","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"CC"}},{"Entity":{"atom":2}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":1}},{"Entity":{"atom":10}},{"Entity":{"atom":8}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[6,7]}},{"Repetition":{"atom":5,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"series","atom":9}},{"Sequence":{"atoms":[3,4]}},{"Repetition":{"atom":11,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":14}},{"Str":{"pattern":" "}},{"Entity":{"atom":27}},{"Entity":{"atom":17}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":16,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Str":{"pattern":"-"}},{"Alternative":{"atoms":[19,20]}},{"Entity":{"atom":17}},{"Repetition":{"atom":22,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[21,23]}},{"Repetition":{"atom":24,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[18,25]}},{"Named":{"name":"number","atom":26}},{"Entity":{"atom":29}},{"Str":{"pattern":":"}},{"Named":{"name":"colon","atom":28}},{"Entity":{"atom":45}},{"Entity":{"atom":17}},{"Repetition":{"atom":32,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"year","atom":33}},{"Str":{"pattern":"-"}},{"Entity":{"atom":17}},{"Repetition":{"atom":36,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"month","atom":37}},{"Str":{"pattern":"-"}},{"Entity":{"atom":17}},{"Repetition":{"atom":40,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"day","atom":41}},{"Sequence":{"atoms":[35,38,39,42]}},{"Repetition":{"atom":43,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[34,44]}},{"Sequence":{"atoms":[30,31]}},{"Repetition":{"atom":46,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,12,13,15,47]}}],"root":48},"bindings":[{"capture":"series","path":"series","type":"string","card":null,"preprocess":null},{"capture":"number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"month","path":"month","type":"string","card":null,"preprocess":null},{"capture":"day","path":"day","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"CC 9101","expect":{}},{"entry":"identifier","kind":"accept","input":"CC/CD 9101","expect":{}},{"entry":"identifier","kind":"accept","input":"CC 9101:2024","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/calconnect/parser.rb:\n# CC[/<series>] <number>[.<sub>|-$sub>][:<date>]\n\ngrammar PubidCalconnect version \"0.1.0\" edition 2 {\n letter = %x41-5A / %x61-7A\n series = (1*letter) as series\n number = (1*digit [(\".\" / \"-\") 1*digit]) as number\n date = (1*digit) as year [(\"-\" (1*digit) as month \"-\" (1*digit) as day)]\n identifier = \"CC\" [slash series] space number [(colon date)]\n digit = %x30-39\n space = \" \"\n slash = \"/\"\n colon = \":\"\n entry identifier: identifier\n\n # Typed model bindings: every bound capture lands directly on the\n # attribute of the same name in the consumer's identifier model.\n bindings identifier {\n series -> series (string)\n number -> number (string)\n year -> year (string)\n month -> month (string)\n day -> day (string)\n }\n\n test {\n accept \"CC 9101\"\n accept \"CC/CD 9101\"\n accept \"CC 9101:2024\"\n reject \"nonsense\"\n }\n}\n","source_hash":"ea66374c95ee1b31d1d079c765af1f7915c9aa962338823fa26f7f25e5e75064","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.121","edition":2,"semantics_hash":"sha256:11dc27a014bc583152a50371029d7cddd0bfe8d579e0fb2d08a477bf135e5bce","checksum":"sha256:efdb34de4eab2dc3d914ef651c852c97f39412e81ab4557396decd11f5e261b9"}
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidCcsds","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"CCSDS "}},{"Entity":{"atom":8}},{"Entity":{"atom":6}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Alternative":{"atoms":[3,4,5]}},{"Repetition":{"atom":2,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":7}},{"Entity":{"atom":14}},{"Str":{"pattern":"."}},{"Entity":{"atom":6}},{"Repetition":{"atom":11,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":12}},{"Sequence":{"atoms":[10,13]}},{"Repetition":{"atom":9,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":21}},{"Str":{"pattern":"-"}},{"Entity":{"atom":19}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Named":{"name":"type","atom":18}},{"Sequence":{"atoms":[17,20]}},{"Repetition":{"atom":16,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Str":{"pattern":"-"}},{"Entity":{"atom":28}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[.]"}},{"Alternative":{"atoms":[26,27]}},{"Repetition":{"atom":25,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":33}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[31,32]}},{"Repetition":{"atom":30,"min":0,"max":1,"tag":"Repetition"}},{"Repetition":{"atom":34,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[29,35]}},{"Named":{"name":"edition","atom":36}},{"Sequence":{"atoms":[24,37]}},{"Repetition":{"atom":23,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":44}},{"Str":{"pattern":"-"}},{"Entity":{"atom":19}},{"Named":{"name":"suffix","atom":42}},{"Sequence":{"atoms":[41,43]}},{"Repetition":{"atom":40,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":58}},{"Entity":{"atom":56}},{"Entity":{"atom":49}},{"Str":{"pattern":" "}},{"Str":{"pattern":"Cor."}},{"Entity":{"atom":49}},{"Entity":{"atom":53}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":52,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"cor_number","atom":54}},{"Sequence":{"atoms":[48,50,51,55]}},{"Repetition":{"atom":47,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"corrigenda","atom":57}},{"Entity":{"atom":80}},{"Entity":{"atom":49}},{"Entity":{"atom":62}},{"Str":{"pattern":"-"}},{"Entity":{"atom":49}},{"Entity":{"atom":75}},{"Str":{"pattern":"French"}},{"Str":{"pattern":"Russian"}},{"Str":{"pattern":"English"}},{"Str":{"pattern":"German"}},{"Str":{"pattern":"Spanish"}},{"Str":{"pattern":"Italian"}},{"Str":{"pattern":"Portuguese"}},{"Str":{"pattern":"Chinese"}},{"Str":{"pattern":"Japanese"}},{"Alternative":{"atoms":[65,66,67,68,69,70,71,72,73]}},{"Named":{"name":"language","atom":74}},{"Str":{"pattern":" Translated"}},{"Repetition":{"atom":76,"min":0,"max":null,"tag":"Repetition"}},{"Repetition":{"atom":77,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[64,78]}},{"Sequence":{"atoms":[60,61,63,79]}},{"Repetition":{"atom":59,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,1,15,22,39,45,46,81]}}],"root":82},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"CCSDS 650.0-G-2","expect":{}},{"entry":"identifier","kind":"accept","input":"CCSDS 100.0-G-1","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/ccsds/parser.rb:\n# CCSDS <number>[.part][-type][-edition][-suffix]{ Cor. n}[ - <language>]\n\ngrammar PubidCcsds version \"0.1.0\" {\n alnum_char = %x41-5A / %x61-7A / %x30-39\n upper = %x41-5A\n digit_dot_char = %x30-39 / %x2E\n number = (1*alnum_char) as number\n part = \".\" (1*alnum_char) as part\n type = \"-\" upper as type\n edition = \"-\" (1*digit_dot_char [*1letter]) as edition\n suffix = \"-\" upper as suffix\n corrigendum = space \"Cor.\" space (1*digit) as cor_number\n corrigenda = (*corrigendum) as corrigenda\n language_metadata = space dash space (language_word [*\" Translated\"])\n language_word = (\"French\" / \"Russian\" / \"English\" / \"German\" / \"Spanish\" / \"Italian\" / \"Portuguese\" / \"Chinese\" / \"Japanese\") as language\n identifier = \"CCSDS \" number [part] [type] [edition] [suffix] corrigenda [language_metadata]\n dash = \"-\"\n space = \" \"\n digit = %x30-39\n letter = %x41-5A / %x61-7A\n entry identifier: identifier\n\n test {\n accept \"CCSDS 650.0-G-2\"\n accept \"CCSDS 100.0-G-1\"\n reject \"nonsense\"\n }\n}\n","source_hash":"12256a86cc5cb67f9f8a8be24ae2a4ea5125b36cc3c2a9860288fb43853edbfb","compiler_version":"1.3.93","checksum":"sha256:a01c0f93b2ca60e9e598478f72b16de77c6a36524d66cbc0ce66cb1b5bbea278"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidCcsds","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"CCSDS "}},{"Entity":{"atom":8}},{"Entity":{"atom":6}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Alternative":{"atoms":[3,4,5]}},{"Repetition":{"atom":2,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":7}},{"Entity":{"atom":14}},{"Str":{"pattern":"."}},{"Entity":{"atom":6}},{"Repetition":{"atom":11,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":12}},{"Sequence":{"atoms":[10,13]}},{"Repetition":{"atom":9,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":21}},{"Str":{"pattern":"-"}},{"Entity":{"atom":19}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Named":{"name":"type","atom":18}},{"Sequence":{"atoms":[17,20]}},{"Repetition":{"atom":16,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Str":{"pattern":"-"}},{"Entity":{"atom":28}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[.]"}},{"Alternative":{"atoms":[26,27]}},{"Repetition":{"atom":25,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":33}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[31,32]}},{"Repetition":{"atom":30,"min":0,"max":1,"tag":"Repetition"}},{"Repetition":{"atom":34,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[29,35]}},{"Named":{"name":"edition","atom":36}},{"Sequence":{"atoms":[24,37]}},{"Repetition":{"atom":23,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":44}},{"Str":{"pattern":"-"}},{"Entity":{"atom":19}},{"Named":{"name":"suffix","atom":42}},{"Sequence":{"atoms":[41,43]}},{"Repetition":{"atom":40,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":58}},{"Entity":{"atom":56}},{"Entity":{"atom":49}},{"Str":{"pattern":" "}},{"Str":{"pattern":"Cor."}},{"Entity":{"atom":49}},{"Entity":{"atom":53}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":52,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"cor_number","atom":54}},{"Sequence":{"atoms":[48,50,51,55]}},{"Repetition":{"atom":47,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"corrigenda","atom":57}},{"Entity":{"atom":81}},{"Entity":{"atom":49}},{"Entity":{"atom":62}},{"Str":{"pattern":"-"}},{"Named":{"name":"dash","atom":61}},{"Entity":{"atom":49}},{"Entity":{"atom":76}},{"Str":{"pattern":"French"}},{"Str":{"pattern":"Russian"}},{"Str":{"pattern":"English"}},{"Str":{"pattern":"German"}},{"Str":{"pattern":"Spanish"}},{"Str":{"pattern":"Italian"}},{"Str":{"pattern":"Portuguese"}},{"Str":{"pattern":"Chinese"}},{"Str":{"pattern":"Japanese"}},{"Alternative":{"atoms":[66,67,68,69,70,71,72,73,74]}},{"Named":{"name":"language","atom":75}},{"Str":{"pattern":" Translated"}},{"Repetition":{"atom":77,"min":0,"max":null,"tag":"Repetition"}},{"Repetition":{"atom":78,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[65,79]}},{"Sequence":{"atoms":[60,63,64,80]}},{"Repetition":{"atom":59,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,1,15,22,39,45,46,82]}}],"root":83},"bindings":[{"capture":"number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"part","path":"part","type":"string","card":null,"preprocess":null},{"capture":"type","path":"type","type":"string","card":null,"preprocess":null},{"capture":"edition","path":"edition","type":"string","card":null,"preprocess":null},{"capture":"suffix","path":"suffix","type":"string","card":null,"preprocess":null},{"capture":"cor_number","path":"corrigenda[].cor_number","type":"string","card":null,"preprocess":null},{"capture":"language","path":"language","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"CCSDS 650.0-G-2","expect":{}},{"entry":"identifier","kind":"accept","input":"CCSDS 100.0-G-1","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/ccsds/parser.rb:\n# CCSDS <number>[.part][-type][-edition][-suffix]{ Cor. n}[ - <language>]\n\ngrammar PubidCcsds version \"0.1.0\" edition 2 {\n alnum_char = %x41-5A / %x61-7A / %x30-39\n upper = %x41-5A\n digit_dot_char = %x30-39 / %x2E\n number = (1*alnum_char) as number\n part = \".\" (1*alnum_char) as part\n type = \"-\" upper as type\n edition = \"-\" (1*digit_dot_char [*1letter]) as edition\n suffix = \"-\" upper as suffix\n corrigendum = space \"Cor.\" space (1*digit) as cor_number\n corrigenda = (*corrigendum) as corrigenda\n language_metadata = space dash space (language_word [*\" Translated\"])\n language_word = (\"French\" / \"Russian\" / \"English\" / \"German\" / \"Spanish\" / \"Italian\" / \"Portuguese\" / \"Chinese\" / \"Japanese\") as language\n identifier = \"CCSDS \" number [part] [type] [edition] [suffix] corrigenda [language_metadata]\n dash = \"-\"\n space = \" \"\n digit = %x30-39\n letter = %x41-5A / %x61-7A\n entry identifier: identifier\n\n bindings identifier {\n number -> number (string)\n part -> part (string)\n type -> type (string)\n edition -> edition (string)\n suffix -> suffix (string)\n cor_number -> corrigenda[].cor_number (string)\n language -> language (string)\n }\n\n\n test {\n accept \"CCSDS 650.0-G-2\"\n accept \"CCSDS 100.0-G-1\"\n reject \"nonsense\"\n }\n}\n","source_hash":"914dd6987532d5870d4adc7abc5c3cc2d078577f42db045b6895c50ae4499ff4","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.121","edition":2,"semantics_hash":"sha256:bb257a952704b46b416a29771c75a9bec906c0d6d52f5d50213855237bff7cd4","checksum":"sha256:0f0544d2404a19114e50fc6f01d2144472c04aed2e0cf837c22ccc00c20a31af"}
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.2.0","grammar":"PubidCenCenelec","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":108}},{"Entity":{"atom":5}},{"Str":{"pattern":"FprEN"}},{"Str":{"pattern":"prEN"}},{"Alternative":{"atoms":[2,3]}},{"Named":{"name":"type_with_stage","atom":4}},{"Entity":{"atom":36}},{"Str":{"pattern":"CWA"}},{"Str":{"pattern":"HD"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"ENV"}},{"Alternative":{"atoms":[7,8,9,10,11]}},{"Named":{"name":"publisher","atom":12}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"CEN"}},{"Alternative":{"atoms":[14,15]}},{"Named":{"name":"publisher","atom":16}},{"Entity":{"atom":28}},{"Entity":{"atom":26}},{"Entity":{"atom":21}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"CLC"}},{"Str":{"pattern":"ETSI"}},{"Alternative":{"atoms":[22,23]}},{"Named":{"name":"copublisher","atom":24}},{"Sequence":{"atoms":[20,25]}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"copublishers","atom":27}},{"Repetition":{"atom":18,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,29]}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"publisher","atom":31}},{"Entity":{"atom":28}},{"Repetition":{"atom":33,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[32,34]}},{"Alternative":{"atoms":[13,30,35]}},{"Alternative":{"atoms":[1,6]}},{"Entity":{"atom":39}},{"Str":{"pattern":" "}},{"Entity":{"atom":50}},{"Entity":{"atom":42}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":41,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":39}},{"Entity":{"atom":42}},{"Repetition":{"atom":45,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[44,46]}},{"Repetition":{"atom":47,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[43,48]}},{"Named":{"name":"number","atom":49}},{"Entity":{"atom":62}},{"Entity":{"atom":60}},{"Entity":{"atom":54}},{"Str":{"pattern":"-"}},{"Entity":{"atom":42}},{"Entity":{"atom":54}},{"Alternative":{"atoms":[55,56]}},{"Repetition":{"atom":57,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":58}},{"Sequence":{"atoms":[53,59]}},{"Repetition":{"atom":52,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":61}},{"Entity":{"atom":39}},{"Str":{"pattern":"AMD"}},{"Entity":{"atom":42}},{"Repetition":{"atom":65,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":66}},{"Entity":{"atom":39}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":42}},{"Repetition":{"atom":70,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":71}},{"Sequence":{"atoms":[37,38,40,51,63,64,67,68,69,72]}},{"Entity":{"atom":5}},{"Entity":{"atom":36}},{"Alternative":{"atoms":[74,75]}},{"Entity":{"atom":39}},{"Entity":{"atom":50}},{"Entity":{"atom":62}},{"Entity":{"atom":86}},{"Entity":{"atom":82}},{"Str":{"pattern":":"}},{"Entity":{"atom":42}},{"Repetition":{"atom":83,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":84}},{"Sequence":{"atoms":[81,85]}},{"Repetition":{"atom":80,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":89}},{"Str":{"pattern":"+"}},{"Entity":{"atom":21}},{"Alternative":{"atoms":[88,90]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":42}},{"Repetition":{"atom":93,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":94}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":97,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":98}},{"Sequence":{"atoms":[96,99]}},{"Repetition":{"atom":100,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Str":{"pattern":"FRAG"}},{"Entity":{"atom":42}},{"Repetition":{"atom":104,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":105}},{"Sequence":{"atoms":[76,77,78,79,87,91,92,95,101,102,103,106]}},{"Alternative":{"atoms":[73,107]}},{"Entity":{"atom":5}},{"Entity":{"atom":36}},{"Alternative":{"atoms":[109,110]}},{"Entity":{"atom":39}},{"Entity":{"atom":198}},{"Entity":{"atom":118}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[115,116,117]}},{"Entity":{"atom":181}},{"Entity":{"atom":136}},{"Entity":{"atom":89}},{"Named":{"name":"amd_sep_plus","atom":121}},{"Entity":{"atom":21}},{"Named":{"name":"amd_sep_slash","atom":123}},{"Alternative":{"atoms":[122,124]}},{"Str":{"pattern":"A"}},{"Entity":{"atom":42}},{"Repetition":{"atom":127,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":128}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":131,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":132}},{"Sequence":{"atoms":[130,133]}},{"Repetition":{"atom":134,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[125,126,129,135]}},{"Entity":{"atom":179}},{"Entity":{"atom":89}},{"Named":{"name":"amd_sep_plus","atom":138}},{"Entity":{"atom":21}},{"Named":{"name":"amd_sep_slash","atom":140}},{"Alternative":{"atoms":[139,141]}},{"Str":{"pattern":"AC"}},{"Entity":{"atom":42}},{"Entity":{"atom":42}},{"Repetition":{"atom":145,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[144,146]}},{"Named":{"name":"cor_number","atom":147}},{"Repetition":{"atom":148,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":171}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":152,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":153}},{"Entity":{"atom":54}},{"Entity":{"atom":170}},{"Str":{"pattern":"01"}},{"Str":{"pattern":"02"}},{"Str":{"pattern":"03"}},{"Str":{"pattern":"04"}},{"Str":{"pattern":"05"}},{"Str":{"pattern":"06"}},{"Str":{"pattern":"07"}},{"Str":{"pattern":"08"}},{"Str":{"pattern":"09"}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"11"}},{"Str":{"pattern":"12"}},{"Alternative":{"atoms":[157,158,159,160,161,162,163,164,165,166,167,168]}},{"Named":{"name":"month","atom":169}},{"Sequence":{"atoms":[151,154,155,156]}},{"Entity":{"atom":82}},{"Entity":{"atom":42}},{"Repetition":{"atom":173,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":174}},{"Sequence":{"atoms":[172,175]}},{"Alternative":{"atoms":[150,176]}},{"Repetition":{"atom":177,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[142,143,149,178]}},{"Alternative":{"atoms":[120,137]}},{"Named":{"name":"supplement","atom":180}},{"Lookahead":{"atom":119,"positive":false}},{"Entity":{"atom":189}},{"Entity":{"atom":39}},{"Str":{"pattern":"ED"}},{"Entity":{"atom":42}},{"Repetition":{"atom":186,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":187}},{"Sequence":{"atoms":[184,185,188]}},{"Lookahead":{"atom":183,"positive":false}},{"Entity":{"atom":194}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[192,193]}},{"Sequence":{"atoms":[182,190,191]}},{"Repetition":{"atom":195,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[114,196]}},{"Named":{"name":"adopted_string","atom":197}},{"Sequence":{"atoms":[112,113]}},{"Repetition":{"atom":199,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Entity":{"atom":208}},{"Str":{"pattern":"Guide"}},{"Str":{"pattern":"GUIDE"}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[203,204,205,206]}},{"Named":{"name":"type","atom":207}},{"Sequence":{"atoms":[201,202]}},{"Entity":{"atom":21}},{"Entity":{"atom":208}},{"Sequence":{"atoms":[210,211]}},{"Alternative":{"atoms":[209,212]}},{"Repetition":{"atom":213,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":39}},{"Entity":{"atom":50}},{"Entity":{"atom":62}},{"Entity":{"atom":230}},{"Entity":{"atom":39}},{"Str":{"pattern":"V"}},{"Entity":{"atom":42}},{"Repetition":{"atom":221,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":42}},{"Repetition":{"atom":224,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Entity":{"atom":42}},{"Repetition":{"atom":227,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[219,220,222,223,225,226,228]}},{"Named":{"name":"version","atom":229}},{"Repetition":{"atom":218,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":86}},{"Repetition":{"atom":232,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[215,216,217,231,233]}},{"Repetition":{"atom":234,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":239}},{"Entity":{"atom":181}},{"Repetition":{"atom":237,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":238}},{"Entity":{"atom":189}},{"Repetition":{"atom":240,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[111,200,214,235,236,241]}},{"Alternative":{"atoms":[0,242]}}],"root":243},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule publisher: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule publisher: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule publisher: 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 adopted_org_prefix: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule any_noln_char: branches 1 and 2 are order-dependent (first set not statically known)","rule fragment_identifier: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: 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":"EN 18216:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN ISO 9001:2015","expect":{}},{"entry":"identifier","kind":"accept","input":"CEN/CLC TR 17161:2019","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 196-1:2016+A1","expect":{}},{"entry":"identifier","kind":"accept","input":"CEN/CLC/ETSI/TR 101551:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326-2:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326-2 V2.2.1","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326 V2.2.1:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302:2026","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/cen_cenelec/parser.rb. Pre-parse normalization\n# (U+2011/AD dashes, comment stripping, CEN-CLC/GUIDE forms) stays\n# binder-side: the grammar sees normalized input.\n\ngrammar PubidCenCenelec version \"0.2.0\" {\n digit = %x30-39\n space = \" \"\n dash = \"-\"\n slash = \"/\"\n plus = \"+\"\n colon = \":\"\n publisher = ((\"CWA\" / \"HD\" / \"ES\" / \"CR\" / \"ENV\") as publisher) / ((\"EN\" / \"CEN\") as publisher [copublishers]) / (\"CLC\" as publisher [copublishers])\n copublishers = (1*copublisher) as copublishers\n copublisher = (slash (\"CLC\" / \"ETSI\") as copublisher)\n stage_prefix = (\"FprEN\" / \"prEN\") as type_with_stage\n type = (\"Guide\" / \"GUIDE\" / \"TR\" / \"TS\") as type\n number = ((1*digit) (*(space (1*digit)))) as number\n version = (space \"V\" (1*digit) \".\" (1*digit) \".\" (1*digit)) as version\n part = dash (1*(digit / dash)) as part\n parts = (*part) as parts\n month_digits = (\"01\" / \"02\" / \"03\" / \"04\" / \"05\" / \"06\" / \"07\" / \"08\" / \"09\" / \"10\" / \"11\" / \"12\") as month\n year = colon (4digit) as year\n year_with_month = colon (4digit) as year dash month_digits\n date = year_with_month / year\n amendment = (plus as amd_sep_plus / slash as amd_sep_slash) \"A\" (1*digit) as amd_number [(colon (4digit) as amd_year)]\n corrigendum = (plus as amd_sep_plus / slash as amd_sep_slash) \"AC\" [(digit (*digit)) as cor_number] [(year_with_month / (colon (4digit) as year))]\n supplement = (amendment / corrigendum) as supplement\n supplements = (*supplement) as supplements\n edition = space \"ED\" (1*digit) as edition\n adopted_org_prefix = \"ISO\" / \"IEC\" / \"CISPR\"\n adopted_string = (adopted_org_prefix *(!supplement !edition any_noln_char)) as adopted_string\n any_noln_char = %x01-09 / %x0B-10FFFF\n fragment_identifier = ((stage_prefix / publisher) space number parts space \"AMD\" (1*digit) as amendment_number space \"FRAG\" (1*digit) as fragment_number) / ((stage_prefix / publisher) space number parts [year] (plus / slash) \"A\" (1*digit) as amendment_number [(colon (4digit) as amendment_year)] space \"FRAG\" (1*digit) as fragment_number)\n identifier = fragment_identifier / ((stage_prefix / publisher) [(space adopted_string)] [(space type / slash type)] [(space number parts [version] [year])] supplements [edition])\n\n entry identifier: identifier\n\n test {\n accept \"EN 18216:2026\"\n accept \"EN ISO 9001:2015\"\n accept \"CEN/CLC TR 17161:2019\"\n accept \"EN 196-1:2016+A1\"\n accept \"CEN/CLC/ETSI/TR 101551:2026\"\n accept \"EN 302 326-2:2026\"\n accept \"EN 302 326-2 V2.2.1\"\n accept \"EN 302 326 V2.2.1:2026\"\n accept \"EN 302:2026\"\n reject \"nonsense\"\n }\n}\n","source_hash":"eec1427274986950746929b3728c070b9f3fb80141ecc3a1b90e6eebffeb56c5","compiler_version":"1.3.93","checksum":"sha256:f27285171cfe165a0174ed74c63f58e0c70f5fdadb35f62e7a0c9a0835004283"}
1
+ {"bindings":null,"version":"0.2.0","grammar":"PubidCenCenelec","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":102}},{"Entity":{"atom":5}},{"Str":{"pattern":"FprEN"}},{"Str":{"pattern":"prEN"}},{"Alternative":{"atoms":[2,3]}},{"Named":{"name":"type_with_stage","atom":4}},{"Entity":{"atom":35}},{"Str":{"pattern":"CWA"}},{"Str":{"pattern":"HD"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"CR"}},{"Str":{"pattern":"ENV"}},{"Alternative":{"atoms":[7,8,9,10,11]}},{"Named":{"name":"publisher","atom":12}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"CEN"}},{"Alternative":{"atoms":[14,15]}},{"Named":{"name":"publisher","atom":16}},{"Entity":{"atom":27}},{"Entity":{"atom":25}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"CLC"}},{"Str":{"pattern":"ETSI"}},{"Alternative":{"atoms":[21,22]}},{"Named":{"name":"copublisher","atom":23}},{"Sequence":{"atoms":[20,24]}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"copublishers","atom":26}},{"Repetition":{"atom":18,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,28]}},{"Str":{"pattern":"CLC"}},{"Named":{"name":"publisher","atom":30}},{"Entity":{"atom":27}},{"Repetition":{"atom":32,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[31,33]}},{"Alternative":{"atoms":[13,29,34]}},{"Alternative":{"atoms":[1,6]}},{"Str":{"pattern":" "}},{"Entity":{"atom":47}},{"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":[41,43]}},{"Repetition":{"atom":44,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[40,45]}},{"Named":{"name":"number","atom":46}},{"Entity":{"atom":58}},{"Entity":{"atom":56}},{"Str":{"pattern":"-"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Str":{"pattern":"-"}},{"Alternative":{"atoms":[51,52]}},{"Repetition":{"atom":53,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":54}},{"Sequence":{"atoms":[50,55]}},{"Repetition":{"atom":49,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":57}},{"Str":{"pattern":" "}},{"Str":{"pattern":"AMD"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":61,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":62}},{"Str":{"pattern":" "}},{"Str":{"pattern":"FRAG"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":66,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":67}},{"Sequence":{"atoms":[36,37,38,48,59,60,63,64,65,68]}},{"Entity":{"atom":5}},{"Entity":{"atom":35}},{"Alternative":{"atoms":[70,71]}},{"Str":{"pattern":" "}},{"Entity":{"atom":47}},{"Entity":{"atom":58}},{"Entity":{"atom":81}},{"Str":{"pattern":":"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":78,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":79}},{"Sequence":{"atoms":[77,80]}},{"Repetition":{"atom":76,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"+"}},{"Str":{"pattern":"/"}},{"Alternative":{"atoms":[83,84]}},{"Str":{"pattern":"A"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":87,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":88}},{"Str":{"pattern":":"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":91,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":92}},{"Sequence":{"atoms":[90,93]}},{"Repetition":{"atom":94,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":" "}},{"Str":{"pattern":"FRAG"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":98,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"fragment_number","atom":99}},{"Sequence":{"atoms":[72,73,74,75,82,85,86,89,95,96,97,100]}},{"Alternative":{"atoms":[69,101]}},{"Entity":{"atom":5}},{"Entity":{"atom":35}},{"Alternative":{"atoms":[103,104]}},{"Entity":{"atom":107}},{"Str":{"pattern":" "}},{"Entity":{"atom":191}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[109,110,111]}},{"Entity":{"atom":175}},{"Entity":{"atom":130}},{"Str":{"pattern":"+"}},{"Named":{"name":"amd_sep_plus","atom":115}},{"Str":{"pattern":"/"}},{"Named":{"name":"amd_sep_slash","atom":117}},{"Alternative":{"atoms":[116,118]}},{"Str":{"pattern":"A"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":121,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amd_number","atom":122}},{"Str":{"pattern":":"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":125,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"amd_year","atom":126}},{"Sequence":{"atoms":[124,127]}},{"Repetition":{"atom":128,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[119,120,123,129]}},{"Entity":{"atom":173}},{"Str":{"pattern":"+"}},{"Named":{"name":"amd_sep_plus","atom":132}},{"Str":{"pattern":"/"}},{"Named":{"name":"amd_sep_slash","atom":134}},{"Alternative":{"atoms":[133,135]}},{"Str":{"pattern":"AC"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":139,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[138,140]}},{"Named":{"name":"cor_number","atom":141}},{"Repetition":{"atom":142,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":165}},{"Str":{"pattern":":"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":146,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":147}},{"Str":{"pattern":"-"}},{"Entity":{"atom":164}},{"Str":{"pattern":"01"}},{"Str":{"pattern":"02"}},{"Str":{"pattern":"03"}},{"Str":{"pattern":"04"}},{"Str":{"pattern":"05"}},{"Str":{"pattern":"06"}},{"Str":{"pattern":"07"}},{"Str":{"pattern":"08"}},{"Str":{"pattern":"09"}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"11"}},{"Str":{"pattern":"12"}},{"Alternative":{"atoms":[151,152,153,154,155,156,157,158,159,160,161,162]}},{"Named":{"name":"month","atom":163}},{"Sequence":{"atoms":[145,148,149,150]}},{"Str":{"pattern":":"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":167,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":168}},{"Sequence":{"atoms":[166,169]}},{"Alternative":{"atoms":[144,170]}},{"Repetition":{"atom":171,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[136,137,143,172]}},{"Alternative":{"atoms":[114,131]}},{"Named":{"name":"supplement","atom":174}},{"Lookahead":{"atom":113,"positive":false}},{"Entity":{"atom":183}},{"Str":{"pattern":" "}},{"Str":{"pattern":"ED"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":180,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":181}},{"Sequence":{"atoms":[178,179,182]}},{"Lookahead":{"atom":177,"positive":false}},{"Re":{"pattern":"[\\x01-\\x09]"}},{"Re":{"pattern":"[\\x0b-\\u{10ffff}]"}},{"Alternative":{"atoms":[185,186]}},{"Sequence":{"atoms":[176,184,187]}},{"Repetition":{"atom":188,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[112,189]}},{"Named":{"name":"adopted_string","atom":190}},{"Sequence":{"atoms":[106,108]}},{"Repetition":{"atom":192,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":107}},{"Entity":{"atom":201}},{"Str":{"pattern":"Guide"}},{"Str":{"pattern":"GUIDE"}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[196,197,198,199]}},{"Named":{"name":"type","atom":200}},{"Sequence":{"atoms":[194,195]}},{"Entity":{"atom":204}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":203}},{"Entity":{"atom":201}},{"Sequence":{"atoms":[205,206]}},{"Alternative":{"atoms":[202,207]}},{"Repetition":{"atom":208,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":107}},{"Entity":{"atom":47}},{"Entity":{"atom":58}},{"Entity":{"atom":225}},{"Str":{"pattern":" "}},{"Str":{"pattern":"V"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":216,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":219,"min":1,"max":null,"tag":"Repetition"}},{"Str":{"pattern":"."}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":222,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[214,215,217,218,220,221,223]}},{"Named":{"name":"version","atom":224}},{"Repetition":{"atom":213,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":81}},{"Repetition":{"atom":227,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[210,211,212,226,228]}},{"Repetition":{"atom":229,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":234}},{"Entity":{"atom":175}},{"Repetition":{"atom":232,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":233}},{"Entity":{"atom":183}},{"Repetition":{"atom":235,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[105,193,209,230,231,236]}},{"Alternative":{"atoms":[0,237]}}],"root":238},"bindings":[{"capture":"publisher","path":"publisher","type":"string","card":null,"preprocess":null},{"capture":"copublisher","path":"copublishers[].copublisher","type":"string","card":null,"preprocess":null},{"capture":"type_with_stage","path":"type_with_stage","type":"string","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":"version","path":"version","type":"string","card":null,"preprocess":null},{"capture":"part","path":"parts[].part","type":"string","card":null,"preprocess":null},{"capture":"year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"adopted_string","path":"adopted_string","type":"string","card":null,"preprocess":null},{"capture":"edition","path":"edition","type":"string","card":null,"preprocess":null},{"capture":"amendment_number","path":"amendment_number","type":"string","card":null,"preprocess":null},{"capture":"amendment_year","path":"amendment_year","type":"string","card":null,"preprocess":null},{"capture":"fragment_number","path":"fragment_number","type":"string","card":null,"preprocess":null},{"capture":"supplement","path":"supplements[].supplement","type":"raw","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule publisher: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule publisher: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule publisher: 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 fragment_identifier: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: 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":"EN 18216:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN ISO 9001:2015","expect":{}},{"entry":"identifier","kind":"accept","input":"CEN/CLC TR 17161:2019","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 196-1:2016+A1","expect":{}},{"entry":"identifier","kind":"accept","input":"CEN/CLC/ETSI/TR 101551:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326-2:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326-2 V2.2.1","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302 326 V2.2.1:2026","expect":{}},{"entry":"identifier","kind":"accept","input":"EN 302:2026","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/cen_cenelec/parser.rb. Pre-parse normalization\n# (U+2011/AD dashes, comment stripping, CEN-CLC/GUIDE forms) stays\n# binder-side: the grammar sees normalized input.\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); references to rules\n# that themselves capture (copublisher, part, month_digits,\n# year_with_month, supplement) float their captures unchanged. The\n# repetition wrappers (copublishers, parts, supplements) keep the v1\n# tree shape and the bindings name the scalar leaves.\n\ngrammar PubidCenCenelec version \"0.2.0\" edition 2 {\n space = \" \"\n slash = \"/\"\n publisher = {\n (\"CWA\" / \"HD\" / \"ES\" / \"CR\" / \"ENV\") as publisher\n / ((\"EN\" / \"CEN\") as publisher [copublishers])\n / (\"CLC\" as publisher [copublishers])\n }\n copublishers = (1*copublisher) as copublishers\n copublisher = (\"/\" (\"CLC\" / \"ETSI\") as copublisher)\n stage_prefix = (\"FprEN\" / \"prEN\") as type_with_stage\n type = (\"Guide\" / \"GUIDE\" / \"TR\" / \"TS\") as type\n number = ((1*%x30-39) (*(\" \" (1*%x30-39)))) as number\n version = (\" \" \"V\" (1*%x30-39) \".\" (1*%x30-39) \".\" (1*%x30-39)) as version\n part = \"-\" (1*(%x30-39 / \"-\")) as part\n parts = (*part) as parts\n month_digits = {\n (\n \"01\" / \"02\" / \"03\" / \"04\" / \"05\" / \"06\"\n / \"07\" / \"08\" / \"09\" / \"10\" / \"11\" / \"12\"\n ) as month\n }\n year = \":\" (4*4%x30-39) as year\n year_with_month = \":\" (4*4%x30-39) as year \"-\" month_digits\n date = year_with_month / year\n amendment = {\n ((\"+\" as amd_sep_plus / \"/\" as amd_sep_slash) \"A\" (1*%x30-39) as amd_number\n [(\":\" (4*4%x30-39) as amd_year)])\n }\n corrigendum = {\n ((\"+\" as amd_sep_plus / \"/\" as amd_sep_slash) \"AC\"\n [(%x30-39 (*%x30-39)) as cor_number]\n [(year_with_month / (\":\" (4*4%x30-39) as year))])\n }\n supplement = (amendment / corrigendum) as supplement\n supplements = (*supplement) as supplements\n edition = \" \" \"ED\" (1*%x30-39) as edition\n adopted_string = {\n (\n (\"ISO\" / \"IEC\" / \"CISPR\")\n *((!(supplement) !(edition) (%x01-09 / %x0B-10FFFF)))\n ) as adopted_string\n }\n fragment_identifier = {\n (\n ( (stage_prefix / publisher) \" \" number parts \" \" \"AMD\"\n (1*%x30-39) as amendment_number\n \" \" \"FRAG\" (1*%x30-39) as fragment_number )\n /\n ( (stage_prefix / publisher) \" \" number parts [year] (\"+\" / \"/\") \"A\"\n (1*%x30-39) as amendment_number\n [(\":\" (4*4%x30-39) as amendment_year)]\n \" \" \"FRAG\" (1*%x30-39) as fragment_number )\n )\n }\n identifier = {\n fragment_identifier\n / (\n (stage_prefix / publisher)\n [(space adopted_string)]\n [(space type / slash type)]\n [(space number parts [version] [year])]\n supplements\n [edition]\n )\n }\n\n entry identifier: identifier\n\n test {\n accept \"EN 18216:2026\"\n accept \"EN ISO 9001:2015\"\n accept \"CEN/CLC TR 17161:2019\"\n accept \"EN 196-1:2016+A1\"\n accept \"CEN/CLC/ETSI/TR 101551:2026\"\n accept \"EN 302 326-2:2026\"\n accept \"EN 302 326-2 V2.2.1\"\n accept \"EN 302 326 V2.2.1:2026\"\n accept \"EN 302:2026\"\n reject \"nonsense\"\n }\n\n bindings identifier {\n # Shape-faithful to the v1 tree the builder reads: copublishers/parts\n # bind as one-level arrays (cast(:copublishers) maps member\n # [:copublisher], cast(:parts) reads member [:part]); the supplements\n # bind uncast as the [{supplement: {...}}] array extract_supplements and\n # build_standalone_supplement walk. The supplement-internal captures\n # (amd_sep_*, amd_number, amd_year, cor_number, the corrigendum year)\n # are reached only through that array — no flat bindings for them.\n publisher -> publisher (string)\n copublisher -> copublishers[].copublisher (string)\n type_with_stage -> type_with_stage (string)\n type -> type (string)\n number -> number (string)\n version -> version (string)\n part -> parts[].part (string)\n year -> year (string)\n adopted_string -> adopted_string (string)\n edition -> edition (string)\n amendment_number -> amendment_number (string)\n amendment_year -> amendment_year (string)\n fragment_number -> fragment_number (string)\n supplement -> supplements[].supplement (raw)\n }\n}\n","source_hash":"dfbbc53ab1cc3c16e9587310d098dc0d06e07f69e4cbce845432a403b9d96a6a","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.121","edition":2,"semantics_hash":"sha256:5d9e41c9397a7597223c55f0859356d9ca627136db659f1b1c33124b04b2db80","checksum":"sha256:38faea65e40d84dedd7f3778e8afb804ca6af38872419777b202b24186e6ffb4"}