pubid 2.0.0 → 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.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/data/parg/adobe.json +1 -1
  3. data/data/parg/aiee.json +1 -1
  4. data/data/parg/amca.json +1 -1
  5. data/data/parg/ansi.json +1 -1
  6. data/data/parg/api.json +1 -1
  7. data/data/parg/ashrae.json +1 -1
  8. data/data/parg/asme.json +1 -1
  9. data/data/parg/astm.json +1 -1
  10. data/data/parg/bipm.json +1 -1
  11. data/data/parg/bsi.json +1 -1
  12. data/data/parg/calconnect.json +1 -1
  13. data/data/parg/ccsds.json +1 -1
  14. data/data/parg/cen_cenelec.json +1 -1
  15. data/data/parg/cie.json +1 -1
  16. data/data/parg/csa.json +1 -1
  17. data/data/parg/doi.json +1 -1
  18. data/data/parg/easc.json +1 -1
  19. data/data/parg/ecma.json +1 -1
  20. data/data/parg/etsi.json +1 -1
  21. data/data/parg/evs.json +1 -1
  22. data/data/parg/gb.json +1 -1
  23. data/data/parg/gost.json +1 -1
  24. data/data/parg/iala.json +1 -1
  25. data/data/parg/iana.json +1 -1
  26. data/data/parg/idf.json +1 -1
  27. data/data/parg/iec.json +1 -1
  28. data/data/parg/ieee.json +1 -29571
  29. data/data/parg/ietf.json +1 -1
  30. data/data/parg/iho.json +1 -0
  31. data/data/parg/ire.json +1 -1
  32. data/data/parg/isbn.json +1 -1
  33. data/data/parg/iso.json +1 -8510
  34. data/data/parg/itu.json +1 -1
  35. data/data/parg/jcgm.json +1 -1
  36. data/data/parg/jis.json +1 -1
  37. data/data/parg/nesc.json +1 -1
  38. data/data/parg/nist.json +1 -9588
  39. data/data/parg/oasis.json +1 -1
  40. data/data/parg/ogc.json +1 -1
  41. data/data/parg/oiml.json +1 -1
  42. data/data/parg/omg.json +1 -1
  43. data/data/parg/parg.json +1 -1
  44. data/data/parg/plateau.json +1 -1
  45. data/data/parg/sae.json +1 -1
  46. data/data/parg/tables/typed_stages.yaml +1 -0
  47. data/data/parg/tgpp.json +1 -1
  48. data/data/parg/un.json +1 -1
  49. data/data/parg/w3c.json +1 -1
  50. data/data/parg/xsf.json +1 -1
  51. data/lib/pubid/adobe/identifier.rb +1 -1
  52. data/lib/pubid/adobe/parser.rb +2 -113
  53. data/lib/pubid/amca/identifiers/base.rb +1 -1
  54. data/lib/pubid/amca/parser.rb +1 -145
  55. data/lib/pubid/ansi/identifier.rb +1 -1
  56. data/lib/pubid/ansi/parser.rb +1 -82
  57. data/lib/pubid/api/builder.rb +32 -1
  58. data/lib/pubid/api/identifier.rb +1 -1
  59. data/lib/pubid/api/parser.rb +1 -131
  60. data/lib/pubid/ashrae/identifiers/base.rb +1 -1
  61. data/lib/pubid/ashrae/parser.rb +3 -710
  62. data/lib/pubid/asme/builder.rb +6 -4
  63. data/lib/pubid/asme/identifier.rb +1 -2
  64. data/lib/pubid/asme/parser.rb +1 -328
  65. data/lib/pubid/astm/builder.rb +12 -3
  66. data/lib/pubid/astm/identifier.rb +1 -2
  67. data/lib/pubid/astm/parser.rb +1 -227
  68. data/lib/pubid/bipm/identifier.rb +8 -1
  69. data/lib/pubid/bipm/parser.rb +2 -224
  70. data/lib/pubid/bsi/builder.rb +2 -4
  71. data/lib/pubid/bsi/parser.rb +1 -666
  72. data/lib/pubid/bsi/single_identifier.rb +38 -1
  73. data/lib/pubid/calconnect/identifier.rb +1 -1
  74. data/lib/pubid/calconnect/parser.rb +2 -40
  75. data/lib/pubid/ccsds/identifier.rb +1 -1
  76. data/lib/pubid/ccsds/parser.rb +1 -66
  77. data/lib/pubid/cen_cenelec/identifier.rb +16 -1
  78. data/lib/pubid/cen_cenelec/parser.rb +3 -136
  79. data/lib/pubid/cie/identifier.rb +1 -1
  80. data/lib/pubid/cie/parser.rb +3 -378
  81. data/lib/pubid/conformance.rb +1 -1
  82. data/lib/pubid/csa/builder.rb +41 -18
  83. data/lib/pubid/csa/identifier.rb +12 -4
  84. data/lib/pubid/csa/identifiers/amendment.rb +28 -0
  85. data/lib/pubid/csa/identifiers.rb +1 -0
  86. data/lib/pubid/csa/parser.rb +16 -397
  87. data/lib/pubid/doi/identifier.rb +1 -1
  88. data/lib/pubid/doi/parser.rb +2 -37
  89. data/lib/pubid/easc/builder.rb +1 -1
  90. data/lib/pubid/easc/identifier.rb +1 -1
  91. data/lib/pubid/easc/parser.rb +2 -70
  92. data/lib/pubid/ecma/CLAUDE.md +8 -1
  93. data/lib/pubid/ecma/identifier.rb +13 -8
  94. data/lib/pubid/ecma/parser.rb +2 -54
  95. data/lib/pubid/ecma/renderer.rb +3 -7
  96. data/lib/pubid/errors.rb +18 -13
  97. data/lib/pubid/etsi/builder.rb +8 -5
  98. data/lib/pubid/etsi/identifiers/base.rb +1 -1
  99. data/lib/pubid/etsi/parser.rb +1 -132
  100. data/lib/pubid/evs/identifier.rb +7 -0
  101. data/lib/pubid/evs/parser.rb +1 -8
  102. data/lib/pubid/evs.rb +1 -1
  103. data/lib/pubid/gb/identifier.rb +7 -1
  104. data/lib/pubid/gb/parser.rb +2 -51
  105. data/lib/pubid/gost/identifier.rb +9 -1
  106. data/lib/pubid/gost/parser.rb +4 -81
  107. data/lib/pubid/iala/parser.rb +2 -121
  108. data/lib/pubid/iana/identifier.rb +1 -1
  109. data/lib/pubid/iana/parser.rb +2 -24
  110. data/lib/pubid/identifier.rb +78 -1
  111. data/lib/pubid/idf/builder.rb +42 -0
  112. data/lib/pubid/idf/identifier.rb +1 -1
  113. data/lib/pubid/idf/parser.rb +1 -137
  114. data/lib/pubid/idf.rb +1 -2
  115. data/lib/pubid/iec/builder.rb +158 -50
  116. data/lib/pubid/iec/identifier.rb +1 -1
  117. data/lib/pubid/iec/parser.rb +3 -430
  118. data/lib/pubid/ieee/aiee/identifier.rb +2 -1
  119. data/lib/pubid/ieee/aiee.rb +0 -1
  120. data/lib/pubid/ieee/builder.rb +2 -2
  121. data/lib/pubid/ieee/identifiers/base.rb +1 -1
  122. data/lib/pubid/ieee/ire/identifier.rb +2 -1
  123. data/lib/pubid/ieee/ire.rb +0 -1
  124. data/lib/pubid/ieee/nesc.rb +0 -1
  125. data/lib/pubid/ieee/parser.rb +1 -1257
  126. data/lib/pubid/ietf/identifiers/base.rb +17 -1
  127. data/lib/pubid/ietf/parser.rb +2 -47
  128. data/lib/pubid/ietf/renderer.rb +17 -2
  129. data/lib/pubid/iho/CLAUDE.md +89 -0
  130. data/lib/pubid/iho/builder.rb +4 -1
  131. data/lib/pubid/iho/identifiers/base.rb +28 -2
  132. data/lib/pubid/iho/renderer.rb +8 -0
  133. data/lib/pubid/iho/urn_generator.rb +11 -1
  134. data/lib/pubid/iho/urn_parser.rb +21 -11
  135. data/lib/pubid/iho.rb +0 -1
  136. data/lib/pubid/isbn/identifier.rb +1 -1
  137. data/lib/pubid/isbn/parser.rb +2 -31
  138. data/lib/pubid/iso/builder.rb +1 -1
  139. data/lib/pubid/iso/identifiers/directives.rb +6 -3
  140. data/lib/pubid/iso/identifiers/guide.rb +6 -3
  141. data/lib/pubid/iso/identifiers/international_standard.rb +3 -1
  142. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +6 -3
  143. data/lib/pubid/iso/normalizer.rb +1 -1
  144. data/lib/pubid/iso/parser.rb +1 -539
  145. data/lib/pubid/iso/supplement_identifier.rb +6 -3
  146. data/lib/pubid/iso/utilities.rb +4 -5
  147. data/lib/pubid/iso.rb +1 -19
  148. data/lib/pubid/itu/builder.rb +36 -20
  149. data/lib/pubid/itu/identifiers/base.rb +15 -2
  150. data/lib/pubid/itu/parser.rb +1 -775
  151. data/lib/pubid/jcgm/builder.rb +35 -0
  152. data/lib/pubid/jcgm/parser.rb +1 -151
  153. data/lib/pubid/jcgm.rb +1 -2
  154. data/lib/pubid/jis/builder.rb +18 -29
  155. data/lib/pubid/jis/identifier.rb +1 -1
  156. data/lib/pubid/jis/parser.rb +1 -128
  157. data/lib/pubid/nist/builder.rb +5 -1
  158. data/lib/pubid/nist/caster.rb +13 -3
  159. data/lib/pubid/nist/identifiers/base.rb +37 -2
  160. data/lib/pubid/nist/identifiers/circular.rb +2 -2
  161. data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -2
  162. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +2 -2
  163. data/lib/pubid/nist/identifiers/crpl_report.rb +2 -2
  164. data/lib/pubid/nist/identifiers/handbook.rb +2 -2
  165. data/lib/pubid/nist/identifiers/internal_report.rb +2 -2
  166. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +2 -2
  167. data/lib/pubid/nist/identifiers/monograph.rb +2 -2
  168. data/lib/pubid/nist/identifiers/report.rb +2 -2
  169. data/lib/pubid/nist/parser.rb +19 -775
  170. data/lib/pubid/nist/router.rb +4 -1
  171. data/lib/pubid/nist/supplement_identifier.rb +2 -2
  172. data/lib/pubid/oasis/identifier.rb +1 -1
  173. data/lib/pubid/oasis/parser.rb +2 -16
  174. data/lib/pubid/ogc/identifier.rb +1 -1
  175. data/lib/pubid/ogc/parser.rb +2 -26
  176. data/lib/pubid/oiml/identifiers/certification_system.rb +7 -0
  177. data/lib/pubid/oiml/identifiers/dual_published.rb +2 -2
  178. data/lib/pubid/oiml/parser.rb +1 -303
  179. data/lib/pubid/oiml.rb +1 -2
  180. data/lib/pubid/omg/identifier.rb +6 -1
  181. data/lib/pubid/omg/parser.rb +2 -76
  182. data/lib/pubid/parg/artifact.rb +22 -3
  183. data/lib/pubid/parg/model.rb +98 -0
  184. data/lib/pubid/parg.rb +1 -0
  185. data/lib/pubid/parser.rb +5 -4
  186. data/lib/pubid/parsers/mr_string.rb +1 -1
  187. data/lib/pubid/plateau/parser.rb +1 -66
  188. data/lib/pubid/plateau.rb +1 -2
  189. data/lib/pubid/renderers/directives_renderer.rb +1 -1
  190. data/lib/pubid/renderers/iwa_renderer.rb +1 -1
  191. data/lib/pubid/renderers/publisher_stripper.rb +82 -0
  192. data/lib/pubid/renderers/supplement_renderer.rb +1 -1
  193. data/lib/pubid/renderers.rb +1 -0
  194. data/lib/pubid/sae/identifiers/base.rb +1 -1
  195. data/lib/pubid/sae/parser.rb +1 -48
  196. data/lib/pubid/tgpp/identifier.rb +1 -1
  197. data/lib/pubid/tgpp/parser.rb +2 -59
  198. data/lib/pubid/un/identifier.rb +1 -1
  199. data/lib/pubid/un/parser.rb +1 -18
  200. data/lib/pubid/version.rb +1 -1
  201. data/lib/pubid/w3c/identifier.rb +1 -1
  202. data/lib/pubid/w3c/parser.rb +2 -27
  203. data/lib/pubid/xsf/identifier.rb +11 -7
  204. data/lib/pubid/xsf/parser.rb +3 -31
  205. data/lib/pubid/xsf/renderer.rb +2 -4
  206. data/lib/pubid.rb +8 -9
  207. metadata +15 -25
  208. data/lib/pubid/ieee/aiee/parser.rb +0 -130
  209. data/lib/pubid/ieee/ire/parser.rb +0 -109
  210. data/lib/pubid/ieee/nesc/parser.rb +0 -155
  211. data/lib/pubid/iho/parser.rb +0 -68
  212. data/lib/pubid/parser/common_parse_methods.rb +0 -13
  213. data/lib/pubid/parser/common_parse_rules.rb +0 -56
  214. data/lib/pubid/parser/grammar.rb +0 -96
data/data/parg/csa.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidCsa","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":1}},{"Entity":{"atom":84}},{"Str":{"pattern":"CSA"}},{"Named":{"name":"adoption_pub","atom":2}},{"Entity":{"atom":70}},{"Str":{"pattern":"ISO/IEC"}},{"Named":{"name":"adoption_org","atom":5}},{"Entity":{"atom":8}},{"Str":{"pattern":" "}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[9,10]}},{"Named":{"name":"iso_type","atom":11}},{"Entity":{"atom":8}},{"Entity":{"atom":18}},{"Entity":{"atom":16}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Str":{"pattern":"-"}},{"Alternative":{"atoms":[15,17]}},{"Repetition":{"atom":14,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"adoption_number","atom":19}},{"Sequence":{"atoms":[6,7,12,13,20]}},{"Str":{"pattern":"ISO/IEC"}},{"Named":{"name":"adoption_org_with_type","atom":22}},{"Entity":{"atom":8}},{"Entity":{"atom":18}},{"Repetition":{"atom":25,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"adoption_number","atom":26}},{"Sequence":{"atoms":[23,24,27]}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CEI/IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[29,30,31,32]}},{"Named":{"name":"adoption_org","atom":33}},{"Entity":{"atom":8}},{"Entity":{"atom":18}},{"Repetition":{"atom":36,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"adoption_number","atom":37}},{"Sequence":{"atoms":[34,35,38]}},{"Alternative":{"atoms":[21,28,39]}},{"Entity":{"atom":42}},{"Str":{"pattern":":"}},{"Entity":{"atom":44}},{"Str":{"pattern":"-"}},{"Alternative":{"atoms":[41,43]}},{"Named":{"name":"adoption_year_sep","atom":45}},{"Entity":{"atom":49}},{"Entity":{"atom":16}},{"Repetition":{"atom":48,"min":4,"max":null,"tag":"Repetition"}},{"Entity":{"atom":52}},{"Entity":{"atom":16}},{"Repetition":{"atom":51,"min":2,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[47,50]}},{"Named":{"name":"adoption_year","atom":53}},{"Sequence":{"atoms":[46,54]}},{"Entity":{"atom":57}},{"Str":{"pattern":"/"}},{"Str":{"pattern":"A"}},{"Entity":{"atom":16}},{"Named":{"name":"adoption_amendment","atom":59}},{"Entity":{"atom":42}},{"Entity":{"atom":44}},{"Alternative":{"atoms":[61,62]}},{"Entity":{"atom":49}},{"Entity":{"atom":52}},{"Alternative":{"atoms":[64,65]}},{"Named":{"name":"adoption_amendment_year","atom":66}},{"Sequence":{"atoms":[56,58,60,63,67]}},{"Repetition":{"atom":68,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[40,55,69]}},{"Entity":{"atom":82}},{"Entity":{"atom":8}},{"Str":{"pattern":"(R"}},{"Entity":{"atom":16}},{"Repetition":{"atom":74,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"reaffirmation_4digit","atom":75}},{"Entity":{"atom":16}},{"Repetition":{"atom":77,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"reaffirmation_2digit","atom":78}},{"Alternative":{"atoms":[76,79]}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[72,73,80,81]}},{"Repetition":{"atom":71,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[3,4,83]}},{"Entity":{"atom":231}},{"Entity":{"atom":91}},{"Str":{"pattern":"CSA"}},{"Entity":{"atom":8}},{"Str":{"pattern":""}},{"Named":{"name":"has_publisher","atom":89}},{"Sequence":{"atoms":[87,88,90]}},{"Entity":{"atom":166}},{"Entity":{"atom":109}},{"Entity":{"atom":16}},{"Repetition":{"atom":94,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":97}},{"Str":{"pattern":"."}},{"Entity":{"atom":16}},{"Repetition":{"atom":98,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":44}},{"Entity":{"atom":16}},{"Repetition":{"atom":101,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[100,102]}},{"Repetition":{"atom":103,"min":0,"max":1,"tag":"Repetition"}},{"Entity":{"atom":106}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Repetition":{"atom":105,"min":2,"max":6,"tag":"Repetition"}},{"Repetition":{"atom":107,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[95,96,99,104,108]}},{"Entity":{"atom":115}},{"Entity":{"atom":16}},{"Repetition":{"atom":111,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":106}},{"Repetition":{"atom":113,"min":2,"max":6,"tag":"Repetition"}},{"Sequence":{"atoms":[112,114]}},{"Entity":{"atom":149}},{"Entity":{"atom":106}},{"Entity":{"atom":16}},{"Repetition":{"atom":118,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":97}},{"Entity":{"atom":16}},{"Repetition":{"atom":121,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[120,122]}},{"Repetition":{"atom":123,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":44}},{"Entity":{"atom":143}},{"Entity":{"atom":131}},{"Entity":{"atom":16}},{"Entity":{"atom":16}},{"Lookahead":{"atom":129,"positive":false}},{"Sequence":{"atoms":[128,130]}},{"Entity":{"atom":16}},{"Repetition":{"atom":132,"min":3,"max":null,"tag":"Repetition"}},{"Entity":{"atom":16}},{"Repetition":{"atom":134,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":140}},{"Entity":{"atom":106}},{"Entity":{"atom":139}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Alternative":{"atoms":[137,138]}},{"Repetition":{"atom":136,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[135,141]}},{"Alternative":{"atoms":[127,133,142]}},{"Sequence":{"atoms":[125,126]}},{"Repetition":{"atom":144,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":106}},{"Repetition":{"atom":146,"min":2,"max":6,"tag":"Repetition"}},{"Repetition":{"atom":147,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[117,119,124,145,148]}},{"Entity":{"atom":159}},{"Entity":{"atom":106}},{"Entity":{"atom":16}},{"Repetition":{"atom":152,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":97}},{"Entity":{"atom":16}},{"Repetition":{"atom":155,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[154,156]}},{"Repetition":{"atom":157,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[151,153,158]}},{"Entity":{"atom":164}},{"Entity":{"atom":106}},{"Entity":{"atom":16}},{"Repetition":{"atom":162,"min":2,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[161,163]}},{"Alternative":{"atoms":[93,110,116,150,160]}},{"Named":{"name":"code","atom":165}},{"Entity":{"atom":106}},{"Entity":{"atom":16}},{"Repetition":{"atom":168,"min":2,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[167,169]}},{"Named":{"name":"code","atom":170}},{"Entity":{"atom":16}},{"Repetition":{"atom":172,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":97}},{"Entity":{"atom":16}},{"Repetition":{"atom":175,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[173,174,176]}},{"Named":{"name":"code","atom":177}},{"Alternative":{"atoms":[92,171,178]}},{"Entity":{"atom":8}},{"Entity":{"atom":184}},{"Entity":{"atom":106}},{"Repetition":{"atom":182,"min":2,"max":3,"tag":"Repetition"}},{"Named":{"name":"series_prefix","atom":183}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[181,185]}},{"Repetition":{"atom":186,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series_type","atom":188}},{"Entity":{"atom":210}},{"Str":{"pattern":""}},{"Named":{"name":"colon_format","atom":191}},{"Entity":{"atom":42}},{"Entity":{"atom":199}},{"Str":{"pattern":"F"}},{"Str":{"pattern":"M"}},{"Alternative":{"atoms":[195,196]}},{"Repetition":{"atom":197,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"year_prefix","atom":198}},{"Entity":{"atom":49}},{"Entity":{"atom":52}},{"Alternative":{"atoms":[200,201]}},{"Named":{"name":"year","atom":202}},{"Sequence":{"atoms":[194,203]}},{"Entity":{"atom":49}},{"Entity":{"atom":52}},{"Alternative":{"atoms":[205,206]}},{"Named":{"name":"year","atom":207}},{"Alternative":{"atoms":[204,208]}},{"Sequence":{"atoms":[192,193,209]}},{"Entity":{"atom":226}},{"Str":{"pattern":""}},{"Named":{"name":"dash_format","atom":212}},{"Entity":{"atom":44}},{"Entity":{"atom":199}},{"Entity":{"atom":49}},{"Entity":{"atom":52}},{"Alternative":{"atoms":[216,217]}},{"Named":{"name":"year","atom":218}},{"Sequence":{"atoms":[215,219]}},{"Entity":{"atom":49}},{"Entity":{"atom":52}},{"Alternative":{"atoms":[221,222]}},{"Named":{"name":"year","atom":223}},{"Alternative":{"atoms":[220,224]}},{"Sequence":{"atoms":[213,214,225]}},{"Alternative":{"atoms":[190,211]}},{"Repetition":{"atom":227,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":82}},{"Repetition":{"atom":229,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[86,179,180,187,189,228,230]}},{"Entity":{"atom":290}},{"Entity":{"atom":91}},{"Entity":{"atom":239}},{"Str":{"pattern":"C22.2"}},{"Str":{"pattern":"C22.3"}},{"Str":{"pattern":"C22.4"}},{"Str":{"pattern":"C22.6"}},{"Alternative":{"atoms":[235,236,237,238]}},{"Named":{"name":"cec_part","atom":234}},{"Entity":{"atom":248}},{"Entity":{"atom":8}},{"Str":{"pattern":"NO."}},{"Str":{"pattern":"No."}},{"Alternative":{"atoms":[243,244]}},{"Named":{"name":"no_notation","atom":245}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[242,246,247]}},{"Entity":{"atom":283}},{"Entity":{"atom":16}},{"Repetition":{"atom":250,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":44}},{"Entity":{"atom":16}},{"Repetition":{"atom":253,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[252,254]}},{"Repetition":{"atom":255,"min":2,"max":10,"tag":"Repetition"}},{"Sequence":{"atoms":[251,256]}},{"Entity":{"atom":16}},{"Repetition":{"atom":258,"min":5,"max":null,"tag":"Repetition"}},{"Entity":{"atom":44}},{"Entity":{"atom":16}},{"Repetition":{"atom":261,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[259,260,262]}},{"Entity":{"atom":16}},{"Repetition":{"atom":264,"min":3,"max":4,"tag":"Repetition"}},{"Entity":{"atom":44}},{"Entity":{"atom":131}},{"Entity":{"atom":16}},{"Repetition":{"atom":268,"min":3,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[267,269]}},{"Sequence":{"atoms":[265,266,270]}},{"Entity":{"atom":16}},{"Repetition":{"atom":272,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":97}},{"Entity":{"atom":16}},{"Repetition":{"atom":275,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[274,276]}},{"Repetition":{"atom":277,"min":1,"max":3,"tag":"Repetition"}},{"Sequence":{"atoms":[273,278]}},{"Entity":{"atom":16}},{"Repetition":{"atom":280,"min":1,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[257,263,271,279,281]}},{"Named":{"name":"no_number","atom":282}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[284,285]}},{"Repetition":{"atom":286,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":82}},{"Repetition":{"atom":288,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[233,240,241,249,287,289]}},{"Entity":{"atom":366}},{"Entity":{"atom":340}},{"Entity":{"atom":91}},{"Entity":{"atom":166}},{"Entity":{"atom":321}},{"Entity":{"atom":248}},{"Entity":{"atom":283}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[298,299]}},{"Sequence":{"atoms":[296,297,300]}},{"Entity":{"atom":8}},{"Entity":{"atom":184}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series","atom":305}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[307,308]}},{"Sequence":{"atoms":[302,303,304,306,309]}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series","atom":312}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[314,315]}},{"Sequence":{"atoms":[311,313,316]}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[318,319]}},{"Alternative":{"atoms":[301,310,317,320]}},{"Repetition":{"atom":295,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":338}},{"Entity":{"atom":57}},{"Str":{"pattern":"Amd "}},{"Repetition":{"atom":325,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"A"}},{"Repetition":{"atom":327,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":16}},{"Repetition":{"atom":329,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":330}},{"Entity":{"atom":42}},{"Entity":{"atom":16}},{"Repetition":{"atom":333,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":334}},{"Sequence":{"atoms":[332,335]}},{"Repetition":{"atom":336,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[324,326,328,331,337]}},{"Repetition":{"atom":323,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[293,294,322,339]}},{"Named":{"name":"base","atom":292}},{"Str":{"pattern":" + "}},{"Entity":{"atom":357}},{"Entity":{"atom":166}},{"Entity":{"atom":248}},{"Entity":{"atom":283}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[347,348]}},{"Repetition":{"atom":349,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[345,346,350]}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[352,353]}},{"Repetition":{"atom":354,"min":0,"max":1,"tag":"Maybe"}},{"Alternative":{"atoms":[351,355]}},{"Sequence":{"atoms":[344,356]}},{"Named":{"name":"bundled_first","atom":343}},{"Str":{"pattern":" + "}},{"Entity":{"atom":357}},{"Sequence":{"atoms":[359,360]}},{"Repetition":{"atom":361,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"bundled_rest","atom":362}},{"Entity":{"atom":82}},{"Repetition":{"atom":364,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[341,342,358,363,365]}},{"Entity":{"atom":412}},{"Entity":{"atom":373}},{"Entity":{"atom":91}},{"Entity":{"atom":166}},{"Entity":{"atom":321}},{"Repetition":{"atom":371,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[369,370,372]}},{"Named":{"name":"first","atom":368}},{"Entity":{"atom":57}},{"Entity":{"atom":384}},{"Entity":{"atom":91}},{"Repetition":{"atom":377,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":166}},{"Entity":{"atom":321}},{"Repetition":{"atom":380,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":338}},{"Repetition":{"atom":382,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[378,379,381,383]}},{"Named":{"name":"second","atom":376}},{"Entity":{"atom":57}},{"Entity":{"atom":384}},{"Named":{"name":"third","atom":387}},{"Sequence":{"atoms":[386,388]}},{"Repetition":{"atom":389,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":82}},{"Repetition":{"atom":391,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":410}},{"Entity":{"atom":8}},{"Entity":{"atom":400}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[396,397,398,399]}},{"Str":{"pattern":", "}},{"Entity":{"atom":400}},{"Sequence":{"atoms":[401,402]}},{"Entity":{"atom":8}},{"Str":{"pattern":"& "}},{"Entity":{"atom":400}},{"Sequence":{"atoms":[404,405,406]}},{"Alternative":{"atoms":[403,407]}},{"Repetition":{"atom":408,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[394,395,409]}},{"Repetition":{"atom":393,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[374,375,385,390,392,411]}},{"Entity":{"atom":433}},{"Entity":{"atom":340}},{"Named":{"name":"first","atom":414}},{"Entity":{"atom":417}},{"Str":{"pattern":","}},{"Str":{"pattern":""}},{"Named":{"name":"comma_separator","atom":418}},{"Entity":{"atom":8}},{"Entity":{"atom":340}},{"Named":{"name":"second","atom":421}},{"Entity":{"atom":82}},{"Repetition":{"atom":423,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":8}},{"Str":{"pattern":"& "}},{"Entity":{"atom":410}},{"Sequence":{"atoms":[425,426,427]}},{"Entity":{"atom":410}},{"Alternative":{"atoms":[428,429]}},{"Named":{"name":"package_portion","atom":430}},{"Repetition":{"atom":431,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[415,416,419,420,422,424,432]}},{"Entity":{"atom":441}},{"Entity":{"atom":340}},{"Entity":{"atom":82}},{"Repetition":{"atom":436,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":410}},{"Named":{"name":"package_portion","atom":438}},{"Repetition":{"atom":439,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[435,437,440]}},{"Entity":{"atom":469}},{"Entity":{"atom":166}},{"Entity":{"atom":8}},{"Entity":{"atom":184}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series","atom":447}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[449,450]}},{"Sequence":{"atoms":[444,445,446,448,451]}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series","atom":454}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[456,457]}},{"Sequence":{"atoms":[453,455,458]}},{"Entity":{"atom":210}},{"Entity":{"atom":226}},{"Alternative":{"atoms":[460,461]}},{"Alternative":{"atoms":[452,459,462]}},{"Entity":{"atom":8}},{"Str":{"pattern":"PACKAGE"}},{"Sequence":{"atoms":[464,465]}},{"Named":{"name":"package_portion","atom":466}},{"Repetition":{"atom":467,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[443,463,468]}},{"Alternative":{"atoms":[0,85,232,291,367,413,434,442]}}],"root":470},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule code_c_tail: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule code_c_tail: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule code_c_tail: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block: branches 2 and 3 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)","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 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 8 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 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 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 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 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"CSA Z259.1-05","expect":{}},{"entry":"identifier","kind":"accept","input":"CSA C22.2 NO. 60601-1","expect":{}},{"entry":"identifier","kind":"accept","input":"CSA Z195-02","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/csa/parser.rb. Deviations:\n# - the parslet's empty-match markers (str(\"\").as(:has_publisher),\n# :colon_format, :dash_format) are unrepresentable in PG and were\n# dead captures in practice; the separator itself remains in the tree.\n# - the pre-parse normalization (CONSOLIDATED stripping, (Rnnn) spacing,\n# CEI→IEC, CAN/CSA prefix handling) stays binder-side.\n\ngrammar PubidCsa version \"0.1.0\" {\n upper = %x41-5A\n lower = %x61-7A\n digit = %x30-39\n letters = 1*upper\n space = \" \"\n\n publisher = \"CSA\" space (\"\" as has_publisher)\n\n # code_pattern: four alternatives, source order\n code_a = (1*digit dot 1*digit *1(dash 1*digit) [2*6upper])\n code_b = (1*digit 2*6upper)\n one_or_one_follow = (digit !digit)\n code_c_tail = ((one_or_one_follow / 3*digit / (1*digit 1*letter)))\n code_c = (upper 1*digit *(dot 1*digit) *(dash code_c_tail) [2*6upper])\n code_d = (upper 1*digit [dot 1*digit])\n code_e = (upper 2*digit)\n code_pattern = (code_a / code_b / code_c / code_d / code_e) as code\n\n no_notation = space (\"NO.\" / \"No.\") as no_notation space\n no_number = ((1*digit 2*10(dash 1*digit)) / (5*digit dash 1*digit) / (3*4digit dash (one_or_one_follow / 3*digit)) / (1*digit 1*3(dot 1*digit)) / 1*digit) as no_number\n year_prefix = [(\"F\" / \"M\")] as year_prefix\n year_2digit = 2*digit\n year_4digit = 4*digit\n colon_year = (\"\" as colon_format) colon ((year_prefix ((year_4digit / year_2digit) as year)) / ((year_4digit / year_2digit) as year))\n dash_year = (\"\" as dash_format) dash ((year_prefix ((year_4digit / year_2digit) as year)) / ((year_4digit / year_2digit) as year))\n reaffirmation = space \"(R\" ((4digit) as reaffirmation_4digit / (2digit) as reaffirmation_2digit) \")\"\n amendment_slash = slash [\"Amd \" ] [\"A\"] (1*digit) as amendment_number [(colon (2digit) as amendment_year)]\n package_keyword = \"Code\" / \"Handbook\" / \"Training Package\" / \"Package\"\n package_portion = space package_keyword *((\", \" package_keyword) / (space \"& \" package_keyword))\n series_prefix = (2*3upper) as series_prefix\n series_keyword = \"SERIES\"\n\n series_identifier = publisher (code_pattern / (upper 2*digit) as code / (1*digit dot 1*digit) as code) space [series_prefix space] \"SERIES\" as series_type [colon_year / dash_year] [reaffirmation]\n cec_part = \"C22.2\" / \"C22.3\" / \"C22.4\" / \"C22.6\"\n cec_identifier = publisher (cec_part as cec_part) no_notation no_number [colon_year / dash_year] [reaffirmation]\n adoption_identifier = (\"CSA\" as adoption_pub) adoption_body [reaffirmation]\n adoption_body = ((\"ISO/IEC\" as adoption_org space (\"TR\" / \"TS\") as iso_type space (1*numdash) as adoption_number) / (\"ISO/IEC\" as adoption_org_with_type space (1*numdash) as adoption_number) / ((\"ISO\" / \"IEC\" / \"CEI/IEC\" / \"CISPR\") as adoption_org space (1*numdash) as adoption_number)) ((colon / dash) as adoption_year_sep (year_4digit / year_2digit) as adoption_year) [(slash \"A\" digit as adoption_amendment (colon / dash) (year_4digit / year_2digit) as adoption_amendment_year)]\n numdash = digit / \"-\"\n iso_iec_adoption = adoption_identifier\n\n trailing_block = ((no_notation no_number (colon_year / dash_year)) / (space series_prefix space \"SERIES\" as series (colon_year / dash_year)) / (space \"SERIES\" as series (colon_year / dash_year)) / (colon_year / dash_year))\n csa_code = publisher code_pattern [trailing_block] [amendment_slash]\n base_csa_code = publisher code_pattern [trailing_block]\n continuation_code = [publisher] code_pattern [trailing_block] [amendment_slash]\n bundled_portion = code_pattern ((no_notation no_number [colon_year / dash_year]) / [colon_year / dash_year])\n bundled_identifier = (csa_code as base) \" + \" (bundled_portion as bundled_first) ((*(\" + \" bundled_portion)) as bundled_rest) [reaffirmation]\n combined_slash = ((base_csa_code as first) slash (continuation_code as second) [(slash continuation_code as third)] [reaffirmation] [package_portion])\n combined_comma = ((csa_code as first) comma (\"\" as comma_separator) space (csa_code as second) [reaffirmation] [(space \"& \" package_portion / package_portion) as package_portion])\n single_identifier = csa_code [reaffirmation] [package_portion as package_portion]\n code_only_identifier = code_pattern ((space series_prefix space \"SERIES\" as series (colon_year / dash_year)) / (space \"SERIES\" as series (colon_year / dash_year)) / (colon_year / dash_year)) [(space \"PACKAGE\") as package_portion]\n\n identifier = iso_iec_adoption / series_identifier / cec_identifier / bundled_identifier / combined_slash / combined_comma / single_identifier / code_only_identifier\n\n comma = \",\"\n dash = \"-\"\n slash = \"/\"\n colon = \":\"\n dot = \".\"\n ampersand = \"&\"\n letter = upper / lower\n entry identifier: identifier\n\n test {\n accept \"CSA Z259.1-05\"\n accept \"CSA C22.2 NO. 60601-1\"\n accept \"CSA Z195-02\"\n reject \"nonsense\"\n }\n}\n","source_hash":"2409827bab3bee9163f75b95e0b26444f70a1c9dfa65884aa33475bb9a72eab1","compiler_version":"1.3.93","checksum":"sha256:84bceb361d62ac6146bda139abe0c6406b2460f7d3cba40041881db7b4b62269"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidCsa","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":1}},{"Entity":{"atom":90}},{"Str":{"pattern":"CSA"}},{"Named":{"name":"adoption_pub","atom":2}},{"Entity":{"atom":76}},{"Str":{"pattern":"ISO/IEC"}},{"Named":{"name":"adoption_org","atom":5}},{"Entity":{"atom":8}},{"Str":{"pattern":" "}},{"Str":{"pattern":"TR"}},{"Str":{"pattern":"TS"}},{"Alternative":{"atoms":[9,10]}},{"Named":{"name":"iso_type","atom":11}},{"Entity":{"atom":8}},{"Entity":{"atom":19}},{"Entity":{"atom":16}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Named":{"name":"digit","atom":15}},{"Str":{"pattern":"-"}},{"Alternative":{"atoms":[17,18]}},{"Repetition":{"atom":14,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"adoption_number","atom":20}},{"Sequence":{"atoms":[6,7,12,13,21]}},{"Str":{"pattern":"ISO/IEC"}},{"Named":{"name":"adoption_org_with_type","atom":23}},{"Entity":{"atom":8}},{"Entity":{"atom":19}},{"Repetition":{"atom":26,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"adoption_number","atom":27}},{"Sequence":{"atoms":[24,25,28]}},{"Str":{"pattern":"ISO"}},{"Str":{"pattern":"IEC"}},{"Str":{"pattern":"CEI/IEC"}},{"Str":{"pattern":"CISPR"}},{"Alternative":{"atoms":[30,31,32,33]}},{"Named":{"name":"adoption_org","atom":34}},{"Entity":{"atom":8}},{"Entity":{"atom":19}},{"Repetition":{"atom":37,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"adoption_number","atom":38}},{"Sequence":{"atoms":[35,36,39]}},{"Alternative":{"atoms":[22,29,40]}},{"Entity":{"atom":43}},{"Str":{"pattern":":"}},{"Entity":{"atom":45}},{"Str":{"pattern":"-"}},{"Alternative":{"atoms":[42,44]}},{"Named":{"name":"adoption_year_sep","atom":46}},{"Entity":{"atom":51}},{"Entity":{"atom":16}},{"Named":{"name":"digit","atom":49}},{"Repetition":{"atom":50,"min":4,"max":null,"tag":"Repetition"}},{"Entity":{"atom":55}},{"Entity":{"atom":16}},{"Named":{"name":"digit","atom":53}},{"Repetition":{"atom":54,"min":2,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[48,52]}},{"Named":{"name":"adoption_year","atom":56}},{"Sequence":{"atoms":[47,57]}},{"Entity":{"atom":60}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":59}},{"Str":{"pattern":"A"}},{"Entity":{"atom":16}},{"Named":{"name":"adoption_amendment","atom":63}},{"Entity":{"atom":43}},{"Named":{"name":"colon","atom":65}},{"Entity":{"atom":45}},{"Named":{"name":"dash","atom":67}},{"Alternative":{"atoms":[66,68]}},{"Entity":{"atom":51}},{"Entity":{"atom":55}},{"Alternative":{"atoms":[70,71]}},{"Named":{"name":"adoption_amendment_year","atom":72}},{"Sequence":{"atoms":[61,62,64,69,73]}},{"Repetition":{"atom":74,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[41,58,75]}},{"Entity":{"atom":88}},{"Entity":{"atom":8}},{"Str":{"pattern":"(R"}},{"Entity":{"atom":16}},{"Repetition":{"atom":80,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"reaffirmation_4digit","atom":81}},{"Entity":{"atom":16}},{"Repetition":{"atom":83,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"reaffirmation_2digit","atom":84}},{"Alternative":{"atoms":[82,85]}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[78,79,86,87]}},{"Repetition":{"atom":77,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[3,4,89]}},{"Entity":{"atom":237}},{"Entity":{"atom":96}},{"Str":{"pattern":"CSA"}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[93,94]}},{"Named":{"name":"has_publisher","atom":95}},{"Entity":{"atom":166}},{"Entity":{"atom":16}},{"Repetition":{"atom":98,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Str":{"pattern":"."}},{"Entity":{"atom":16}},{"Repetition":{"atom":102,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Repetition":{"atom":105,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[104,106]}},{"Repetition":{"atom":107,"min":0,"max":1,"tag":"Repetition"}},{"Entity":{"atom":110}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Repetition":{"atom":109,"min":2,"max":6,"tag":"Repetition"}},{"Repetition":{"atom":111,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[99,100,103,108,112]}},{"Entity":{"atom":16}},{"Repetition":{"atom":114,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":110}},{"Repetition":{"atom":116,"min":2,"max":6,"tag":"Repetition"}},{"Sequence":{"atoms":[115,117]}},{"Entity":{"atom":110}},{"Entity":{"atom":16}},{"Repetition":{"atom":120,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Entity":{"atom":16}},{"Repetition":{"atom":123,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[122,124]}},{"Repetition":{"atom":125,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Entity":{"atom":16}},{"Lookahead":{"atom":129,"positive":false}},{"Sequence":{"atoms":[128,130]}},{"Entity":{"atom":16}},{"Repetition":{"atom":132,"min":3,"max":null,"tag":"Repetition"}},{"Entity":{"atom":16}},{"Repetition":{"atom":134,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":142}},{"Entity":{"atom":110}},{"Named":{"name":"upper","atom":137}},{"Entity":{"atom":140}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Named":{"name":"lower","atom":139}},{"Alternative":{"atoms":[138,141]}},{"Repetition":{"atom":136,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[135,143]}},{"Alternative":{"atoms":[131,133,144]}},{"Sequence":{"atoms":[127,145]}},{"Repetition":{"atom":146,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":110}},{"Repetition":{"atom":148,"min":2,"max":6,"tag":"Repetition"}},{"Repetition":{"atom":149,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[119,121,126,147,150]}},{"Entity":{"atom":110}},{"Entity":{"atom":16}},{"Repetition":{"atom":153,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Entity":{"atom":16}},{"Repetition":{"atom":156,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[155,157]}},{"Repetition":{"atom":158,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[152,154,159]}},{"Entity":{"atom":110}},{"Entity":{"atom":16}},{"Repetition":{"atom":162,"min":2,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[161,163]}},{"Alternative":{"atoms":[113,118,151,160,164]}},{"Named":{"name":"code","atom":165}},{"Entity":{"atom":110}},{"Entity":{"atom":16}},{"Repetition":{"atom":168,"min":2,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[167,169]}},{"Named":{"name":"code","atom":170}},{"Entity":{"atom":16}},{"Repetition":{"atom":172,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Entity":{"atom":16}},{"Repetition":{"atom":175,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[173,174,176]}},{"Named":{"name":"code","atom":177}},{"Alternative":{"atoms":[97,171,178]}},{"Entity":{"atom":8}},{"Entity":{"atom":184}},{"Entity":{"atom":110}},{"Repetition":{"atom":182,"min":2,"max":3,"tag":"Repetition"}},{"Named":{"name":"series_prefix","atom":183}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[181,185]}},{"Repetition":{"atom":186,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series_type","atom":188}},{"Entity":{"atom":213}},{"Entity":{"atom":43}},{"Named":{"name":"colon_format","atom":191}},{"Entity":{"atom":198}},{"Str":{"pattern":"F"}},{"Str":{"pattern":"M"}},{"Alternative":{"atoms":[194,195]}},{"Named":{"name":"year_prefix","atom":196}},{"Repetition":{"atom":197,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":16}},{"Repetition":{"atom":199,"min":4,"max":4,"tag":"Repetition"}},{"Entity":{"atom":16}},{"Repetition":{"atom":201,"min":2,"max":2,"tag":"Repetition"}},{"Alternative":{"atoms":[200,202]}},{"Named":{"name":"year","atom":203}},{"Sequence":{"atoms":[193,204]}},{"Sequence":{"atoms":[192,205]}},{"Entity":{"atom":16}},{"Repetition":{"atom":207,"min":4,"max":4,"tag":"Repetition"}},{"Entity":{"atom":16}},{"Repetition":{"atom":209,"min":2,"max":2,"tag":"Repetition"}},{"Alternative":{"atoms":[208,210]}},{"Named":{"name":"year","atom":211}},{"Alternative":{"atoms":[206,212]}},{"Entity":{"atom":232}},{"Entity":{"atom":45}},{"Named":{"name":"dash_format","atom":215}},{"Entity":{"atom":198}},{"Entity":{"atom":16}},{"Repetition":{"atom":218,"min":4,"max":4,"tag":"Repetition"}},{"Entity":{"atom":16}},{"Repetition":{"atom":220,"min":2,"max":2,"tag":"Repetition"}},{"Alternative":{"atoms":[219,221]}},{"Named":{"name":"year","atom":222}},{"Sequence":{"atoms":[217,223]}},{"Sequence":{"atoms":[216,224]}},{"Entity":{"atom":16}},{"Repetition":{"atom":226,"min":4,"max":4,"tag":"Repetition"}},{"Entity":{"atom":16}},{"Repetition":{"atom":228,"min":2,"max":2,"tag":"Repetition"}},{"Alternative":{"atoms":[227,229]}},{"Named":{"name":"year","atom":230}},{"Alternative":{"atoms":[225,231]}},{"Alternative":{"atoms":[190,214]}},{"Repetition":{"atom":233,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":88}},{"Repetition":{"atom":235,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[92,179,180,187,189,234,236]}},{"Entity":{"atom":301}},{"Entity":{"atom":96}},{"Entity":{"atom":245}},{"Str":{"pattern":"C22.2"}},{"Str":{"pattern":"C22.3"}},{"Str":{"pattern":"C22.4"}},{"Str":{"pattern":"C22.6"}},{"Alternative":{"atoms":[241,242,243,244]}},{"Named":{"name":"cec_part","atom":240}},{"Entity":{"atom":254}},{"Entity":{"atom":8}},{"Str":{"pattern":"NO."}},{"Str":{"pattern":"No."}},{"Alternative":{"atoms":[249,250]}},{"Named":{"name":"no_notation","atom":251}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[248,252,253]}},{"Entity":{"atom":294}},{"Entity":{"atom":16}},{"Repetition":{"atom":256,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Repetition":{"atom":259,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[258,260]}},{"Repetition":{"atom":261,"min":2,"max":10,"tag":"Repetition"}},{"Sequence":{"atoms":[257,262]}},{"Entity":{"atom":16}},{"Repetition":{"atom":264,"min":5,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Repetition":{"atom":267,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[265,266,268]}},{"Entity":{"atom":16}},{"Repetition":{"atom":270,"min":3,"max":4,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":278}},{"Entity":{"atom":16}},{"Named":{"name":"digit","atom":274}},{"Entity":{"atom":16}},{"Lookahead":{"atom":276,"positive":false}},{"Sequence":{"atoms":[275,277]}},{"Entity":{"atom":16}},{"Repetition":{"atom":279,"min":3,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[273,280]}},{"Sequence":{"atoms":[271,272,281]}},{"Entity":{"atom":16}},{"Repetition":{"atom":283,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Entity":{"atom":16}},{"Repetition":{"atom":286,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[285,287]}},{"Repetition":{"atom":288,"min":1,"max":3,"tag":"Repetition"}},{"Sequence":{"atoms":[284,289]}},{"Entity":{"atom":16}},{"Repetition":{"atom":291,"min":1,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[263,269,282,290,292]}},{"Named":{"name":"no_number","atom":293}},{"Entity":{"atom":213}},{"Entity":{"atom":232}},{"Alternative":{"atoms":[295,296]}},{"Repetition":{"atom":297,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":88}},{"Repetition":{"atom":299,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[239,246,247,255,298,300]}},{"Entity":{"atom":526}},{"Entity":{"atom":501}},{"Entity":{"atom":309}},{"Str":{"pattern":"CSA"}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[305,306]}},{"Named":{"name":"part_has_publisher","atom":307}},{"Repetition":{"atom":308,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":372}},{"Entity":{"atom":16}},{"Repetition":{"atom":311,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Entity":{"atom":16}},{"Repetition":{"atom":314,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Repetition":{"atom":317,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[316,318]}},{"Repetition":{"atom":319,"min":0,"max":1,"tag":"Repetition"}},{"Entity":{"atom":110}},{"Repetition":{"atom":321,"min":2,"max":6,"tag":"Repetition"}},{"Repetition":{"atom":322,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[312,313,315,320,323]}},{"Entity":{"atom":16}},{"Repetition":{"atom":325,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":110}},{"Repetition":{"atom":327,"min":2,"max":6,"tag":"Repetition"}},{"Sequence":{"atoms":[326,328]}},{"Entity":{"atom":110}},{"Entity":{"atom":16}},{"Repetition":{"atom":331,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Entity":{"atom":16}},{"Repetition":{"atom":334,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[333,335]}},{"Repetition":{"atom":336,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Entity":{"atom":16}},{"Lookahead":{"atom":340,"positive":false}},{"Sequence":{"atoms":[339,341]}},{"Entity":{"atom":16}},{"Repetition":{"atom":343,"min":3,"max":null,"tag":"Repetition"}},{"Entity":{"atom":16}},{"Repetition":{"atom":345,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":142}},{"Repetition":{"atom":347,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[346,348]}},{"Alternative":{"atoms":[342,344,349]}},{"Sequence":{"atoms":[338,350]}},{"Repetition":{"atom":351,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":110}},{"Repetition":{"atom":353,"min":2,"max":6,"tag":"Repetition"}},{"Repetition":{"atom":354,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[330,332,337,352,355]}},{"Entity":{"atom":110}},{"Entity":{"atom":16}},{"Repetition":{"atom":358,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Entity":{"atom":16}},{"Repetition":{"atom":361,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[360,362]}},{"Repetition":{"atom":363,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[357,359,364]}},{"Entity":{"atom":110}},{"Entity":{"atom":16}},{"Repetition":{"atom":367,"min":2,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[366,368]}},{"Alternative":{"atoms":[324,329,356,365,369]}},{"Repetition":{"atom":370,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part_code","atom":371}},{"Repetition":{"atom":310,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":499}},{"Entity":{"atom":383}},{"Entity":{"atom":8}},{"Str":{"pattern":"NO."}},{"Str":{"pattern":"No."}},{"Alternative":{"atoms":[377,378]}},{"Named":{"name":"part_no_notation","atom":379}},{"Repetition":{"atom":380,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[376,381,382]}},{"Entity":{"atom":422}},{"Entity":{"atom":16}},{"Repetition":{"atom":385,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Repetition":{"atom":388,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[387,389]}},{"Repetition":{"atom":390,"min":2,"max":10,"tag":"Repetition"}},{"Sequence":{"atoms":[386,391]}},{"Entity":{"atom":16}},{"Repetition":{"atom":393,"min":5,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Repetition":{"atom":396,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[394,395,397]}},{"Entity":{"atom":16}},{"Repetition":{"atom":399,"min":3,"max":4,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Entity":{"atom":16}},{"Entity":{"atom":16}},{"Lookahead":{"atom":403,"positive":false}},{"Sequence":{"atoms":[402,404]}},{"Entity":{"atom":16}},{"Repetition":{"atom":406,"min":3,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[405,407]}},{"Sequence":{"atoms":[400,401,408]}},{"Entity":{"atom":16}},{"Repetition":{"atom":410,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":101}},{"Entity":{"atom":16}},{"Repetition":{"atom":413,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[412,414]}},{"Repetition":{"atom":415,"min":1,"max":3,"tag":"Repetition"}},{"Sequence":{"atoms":[411,416]}},{"Entity":{"atom":16}},{"Repetition":{"atom":418,"min":1,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[392,398,409,417,419]}},{"Repetition":{"atom":420,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part_no_number","atom":421}},{"Entity":{"atom":449}},{"Entity":{"atom":43}},{"Repetition":{"atom":424,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part_colon_format","atom":425}},{"Entity":{"atom":432}},{"Str":{"pattern":"F"}},{"Str":{"pattern":"M"}},{"Alternative":{"atoms":[428,429]}},{"Named":{"name":"part_year_prefix","atom":430}},{"Repetition":{"atom":431,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":16}},{"Repetition":{"atom":433,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"part_year","atom":434}},{"Sequence":{"atoms":[427,435]}},{"Entity":{"atom":432}},{"Entity":{"atom":16}},{"Repetition":{"atom":438,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"part_year","atom":439}},{"Sequence":{"atoms":[437,440]}},{"Entity":{"atom":16}},{"Repetition":{"atom":442,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"part_year","atom":443}},{"Entity":{"atom":16}},{"Repetition":{"atom":445,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"part_year","atom":446}},{"Alternative":{"atoms":[436,441,444,447]}},{"Sequence":{"atoms":[426,448]}},{"Entity":{"atom":471}},{"Entity":{"atom":45}},{"Repetition":{"atom":451,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part_dash_format","atom":452}},{"Entity":{"atom":432}},{"Entity":{"atom":16}},{"Repetition":{"atom":455,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"part_year","atom":456}},{"Sequence":{"atoms":[454,457]}},{"Entity":{"atom":432}},{"Entity":{"atom":16}},{"Repetition":{"atom":460,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"part_year","atom":461}},{"Sequence":{"atoms":[459,462]}},{"Entity":{"atom":16}},{"Repetition":{"atom":464,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"part_year","atom":465}},{"Entity":{"atom":16}},{"Repetition":{"atom":467,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"part_year","atom":468}},{"Alternative":{"atoms":[458,463,466,469]}},{"Sequence":{"atoms":[453,470]}},{"Alternative":{"atoms":[423,450]}},{"Sequence":{"atoms":[375,384,472]}},{"Entity":{"atom":8}},{"Entity":{"atom":479}},{"Entity":{"atom":110}},{"Repetition":{"atom":476,"min":2,"max":6,"tag":"Repetition"}},{"Named":{"name":"part_series_prefix","atom":477}},{"Repetition":{"atom":478,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"part_series","atom":481}},{"Repetition":{"atom":482,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":449}},{"Entity":{"atom":471}},{"Alternative":{"atoms":[484,485]}},{"Sequence":{"atoms":[474,475,480,483,486]}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"part_series","atom":489}},{"Repetition":{"atom":490,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":449}},{"Entity":{"atom":471}},{"Alternative":{"atoms":[492,493]}},{"Sequence":{"atoms":[488,491,494]}},{"Entity":{"atom":449}},{"Entity":{"atom":471}},{"Alternative":{"atoms":[496,497]}},{"Alternative":{"atoms":[473,487,495,498]}},{"Repetition":{"atom":374,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[304,373,500]}},{"Str":{"pattern":" + "}},{"Named":{"name":"plus_separator","atom":502}},{"Entity":{"atom":519}},{"Entity":{"atom":372}},{"Repetition":{"atom":505,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":383}},{"Entity":{"atom":422}},{"Entity":{"atom":449}},{"Entity":{"atom":471}},{"Alternative":{"atoms":[509,510]}},{"Repetition":{"atom":511,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[507,508,512]}},{"Entity":{"atom":449}},{"Entity":{"atom":471}},{"Alternative":{"atoms":[514,515]}},{"Repetition":{"atom":516,"min":0,"max":1,"tag":"Maybe"}},{"Alternative":{"atoms":[513,517]}},{"Sequence":{"atoms":[506,518]}},{"Str":{"pattern":" + "}},{"Entity":{"atom":519}},{"Sequence":{"atoms":[520,521]}},{"Repetition":{"atom":522,"min":0,"max":null,"tag":"Repetition"}},{"Entity":{"atom":88}},{"Repetition":{"atom":524,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[303,503,504,523,525]}},{"Entity":{"atom":589}},{"Entity":{"atom":501}},{"Entity":{"atom":60}},{"Named":{"name":"slash","atom":529}},{"Entity":{"atom":557}},{"Entity":{"atom":309}},{"Repetition":{"atom":532,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":372}},{"Repetition":{"atom":534,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":499}},{"Repetition":{"atom":536,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":555}},{"Entity":{"atom":60}},{"Named":{"name":"slash","atom":539}},{"Str":{"pattern":"Amd "}},{"Repetition":{"atom":541,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"A"}},{"Repetition":{"atom":543,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":16}},{"Repetition":{"atom":545,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"amendment_number","atom":546}},{"Entity":{"atom":43}},{"Named":{"name":"colon","atom":548}},{"Entity":{"atom":16}},{"Repetition":{"atom":550,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"amendment_year","atom":551}},{"Sequence":{"atoms":[549,552]}},{"Repetition":{"atom":553,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[540,542,544,547,554]}},{"Repetition":{"atom":538,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[533,535,537,556]}},{"Sequence":{"atoms":[530,531]}},{"Repetition":{"atom":558,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":88}},{"Repetition":{"atom":560,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":586}},{"Entity":{"atom":8}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[564,565,566,567]}},{"Str":{"pattern":", "}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[570,571,572,573]}},{"Sequence":{"atoms":[569,574]}},{"Entity":{"atom":8}},{"Str":{"pattern":"& "}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[578,579,580,581]}},{"Sequence":{"atoms":[576,577,582]}},{"Alternative":{"atoms":[575,583]}},{"Repetition":{"atom":584,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[563,568,585]}},{"Named":{"name":"package_portion","atom":562}},{"Repetition":{"atom":587,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[528,559,561,588]}},{"Entity":{"atom":651}},{"Entity":{"atom":501}},{"Str":{"pattern":","}},{"Named":{"name":"comma_separator","atom":592}},{"Entity":{"atom":8}},{"Entity":{"atom":557}},{"Entity":{"atom":88}},{"Repetition":{"atom":596,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":8}},{"Str":{"pattern":"& "}},{"Entity":{"atom":8}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[601,602,603,604]}},{"Str":{"pattern":", "}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[607,608,609,610]}},{"Sequence":{"atoms":[606,611]}},{"Entity":{"atom":8}},{"Str":{"pattern":"& "}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[615,616,617,618]}},{"Sequence":{"atoms":[613,614,619]}},{"Alternative":{"atoms":[612,620]}},{"Repetition":{"atom":621,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[598,599,600,605,622]}},{"Entity":{"atom":8}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[625,626,627,628]}},{"Str":{"pattern":", "}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[631,632,633,634]}},{"Sequence":{"atoms":[630,635]}},{"Entity":{"atom":8}},{"Str":{"pattern":"& "}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[639,640,641,642]}},{"Sequence":{"atoms":[637,638,643]}},{"Alternative":{"atoms":[636,644]}},{"Repetition":{"atom":645,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[624,629,646]}},{"Alternative":{"atoms":[623,647]}},{"Named":{"name":"package_portion","atom":648}},{"Repetition":{"atom":649,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[591,593,594,595,597,650]}},{"Entity":{"atom":715}},{"Entity":{"atom":686}},{"Entity":{"atom":96}},{"Entity":{"atom":166}},{"Entity":{"atom":682}},{"Entity":{"atom":254}},{"Entity":{"atom":294}},{"Entity":{"atom":213}},{"Entity":{"atom":232}},{"Alternative":{"atoms":[659,660]}},{"Sequence":{"atoms":[657,658,661]}},{"Entity":{"atom":8}},{"Entity":{"atom":184}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series","atom":666}},{"Entity":{"atom":213}},{"Entity":{"atom":232}},{"Alternative":{"atoms":[668,669]}},{"Sequence":{"atoms":[663,664,665,667,670]}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series","atom":673}},{"Entity":{"atom":213}},{"Entity":{"atom":232}},{"Alternative":{"atoms":[675,676]}},{"Sequence":{"atoms":[672,674,677]}},{"Entity":{"atom":213}},{"Entity":{"atom":232}},{"Alternative":{"atoms":[679,680]}},{"Alternative":{"atoms":[662,671,678,681]}},{"Repetition":{"atom":656,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":555}},{"Repetition":{"atom":684,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[654,655,683,685]}},{"Entity":{"atom":88}},{"Repetition":{"atom":687,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":8}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[690,691,692,693]}},{"Str":{"pattern":", "}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[696,697,698,699]}},{"Sequence":{"atoms":[695,700]}},{"Entity":{"atom":8}},{"Str":{"pattern":"& "}},{"Str":{"pattern":"Code"}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Training Package"}},{"Str":{"pattern":"Package"}},{"Alternative":{"atoms":[704,705,706,707]}},{"Sequence":{"atoms":[702,703,708]}},{"Alternative":{"atoms":[701,709]}},{"Repetition":{"atom":710,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"package_portion","atom":711}},{"Sequence":{"atoms":[689,694,712]}},{"Repetition":{"atom":713,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[653,688,714]}},{"Entity":{"atom":743}},{"Entity":{"atom":166}},{"Entity":{"atom":8}},{"Entity":{"atom":184}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series","atom":721}},{"Entity":{"atom":213}},{"Entity":{"atom":232}},{"Alternative":{"atoms":[723,724]}},{"Sequence":{"atoms":[718,719,720,722,725]}},{"Entity":{"atom":8}},{"Str":{"pattern":"SERIES"}},{"Named":{"name":"series","atom":728}},{"Entity":{"atom":213}},{"Entity":{"atom":232}},{"Alternative":{"atoms":[730,731]}},{"Sequence":{"atoms":[727,729,732]}},{"Entity":{"atom":213}},{"Entity":{"atom":232}},{"Alternative":{"atoms":[734,735]}},{"Alternative":{"atoms":[726,733,736]}},{"Entity":{"atom":8}},{"Str":{"pattern":"PACKAGE"}},{"Sequence":{"atoms":[738,739]}},{"Named":{"name":"package_portion","atom":740}},{"Repetition":{"atom":741,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[717,737,742]}},{"Alternative":{"atoms":[0,91,238,302,527,590,652,716]}}],"root":744},"bindings":[{"capture":"has_publisher","path":"has_publisher","type":"string","card":null,"preprocess":null},{"capture":"code","path":"code","type":"string","card":null,"preprocess":null},{"capture":"no_notation","path":"no_notation","type":"string","card":null,"preprocess":null},{"capture":"no_number","path":"no_number","type":"string","card":null,"preprocess":null},{"capture":"year_prefix","path":"year_prefix","type":"string","card":null,"preprocess":null},{"capture":"colon_format","path":"colon_format","type":"string","card":null,"preprocess":null},{"capture":"year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"dash_format","path":"dash_format","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":"series_prefix","path":"series_prefix","type":"string","card":null,"preprocess":null},{"capture":"series_type","path":"series_type","type":"string","card":null,"preprocess":null},{"capture":"cec_part","path":"cec_part","type":"string","card":null,"preprocess":null},{"capture":"adoption_pub","path":"adoption_pub","type":"string","card":null,"preprocess":null},{"capture":"adoption_org","path":"adoption_org","type":"string","card":null,"preprocess":null},{"capture":"iso_type","path":"iso_type","type":"string","card":null,"preprocess":null},{"capture":"adoption_number","path":"adoption_number","type":"string","card":null,"preprocess":null},{"capture":"adoption_org_with_type","path":"adoption_org_with_type","type":"string","card":null,"preprocess":null},{"capture":"adoption_year_sep","path":"adoption_year_sep","type":"string","card":null,"preprocess":null},{"capture":"adoption_year","path":"adoption_year","type":"string","card":null,"preprocess":null},{"capture":"adoption_amendment","path":"adoption_amendment","type":"string","card":null,"preprocess":null},{"capture":"adoption_amendment_year","path":"adoption_amendment_year","type":"string","card":null,"preprocess":null},{"capture":"series","path":"series","type":"string","card":null,"preprocess":null},{"capture":"plus_separator","path":"plus_separator","type":"string","card":null,"preprocess":null},{"capture":"reaffirmation_4digit","path":"reaffirmation_4digit","type":"string","card":null,"preprocess":null},{"capture":"reaffirmation_2digit","path":"reaffirmation_2digit","type":"string","card":null,"preprocess":null},{"capture":"comma_separator","path":"comma_separator","type":"string","card":null,"preprocess":null},{"capture":"package_portion","path":"package_portion","type":"string","card":null,"preprocess":null},{"capture":"part_code","path":"csa_code_part[].part_code","type":"string","card":null,"preprocess":null},{"capture":"part_year","path":"csa_code_part[].part_year","type":"string","card":null,"preprocess":null},{"capture":"part_colon_format","path":"csa_code_part[].part_colon_format","type":"string","card":null,"preprocess":null},{"capture":"part_dash_format","path":"csa_code_part[].part_dash_format","type":"string","card":null,"preprocess":null},{"capture":"part_year_prefix","path":"csa_code_part[].part_year_prefix","type":"string","card":null,"preprocess":null},{"capture":"part_no_notation","path":"csa_code_part[].part_no_notation","type":"string","card":null,"preprocess":null},{"capture":"part_no_number","path":"csa_code_part[].part_no_number","type":"string","card":null,"preprocess":null},{"capture":"part_series","path":"part_series","type":"string","card":null,"preprocess":null},{"capture":"part_series_prefix","path":"part_series_prefix","type":"string","card":null,"preprocess":null},{"capture":"part_has_publisher","path":"csa_code_part[].part_has_publisher","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule code_c_tail: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule code_c_tail: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule code_c_tail: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule cec_part: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block_part: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block_part: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule trailing_block_part: branches 2 and 3 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)","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 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule identifier: branches 2 and 8 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 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 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 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 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"CSA Z259.1-05","expect":{}},{"entry":"identifier","kind":"accept","input":"CSA C22.2 NO. 60601-1","expect":{}},{"entry":"identifier","kind":"accept","input":"CSA Z195-02","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/csa/parser.rb. Deviations:\n# - the parslet's empty-match markers (str(\"\").as(:has_publisher),\n# :colon_format, :dash_format) are unrepresentable in PG and were\n# dead captures in practice; the separator itself remains in the tree.\n# - the pre-parse normalization (CONSOLIDATED stripping, (Rnnn) spacing,\n# CEI→IEC, CAN/CSA prefix handling) stays binder-side.\n\ngrammar PubidCsa version \"0.1.0\" edition 2 {\n upper = %x41-5A\n lower = %x61-7A\n digit = %x30-39\n letters = 1*upper\n space = \" \"\n\n publisher = (\"CSA\" space) as has_publisher\n\n # code_pattern: four alternatives, source order\n code_a = (1*digit dot 1*digit *1(dash 1*digit) [2*6upper])\n code_b = (1*digit 2*6upper)\n one_or_one_follow = (digit !digit)\n code_c_tail = ((one_or_one_follow / 3*digit / (1*digit 1*letter)))\n code_c = (upper 1*digit *(dot 1*digit) *(dash code_c_tail) [2*6upper])\n code_d = (upper 1*digit [dot 1*digit])\n code_e = (upper 2*digit)\n code_pattern = ((1*digit dot 1*digit *1(dash 1*digit) [2*6upper]) / (1*digit 2*6upper) / (upper 1*digit *(dot 1*digit) *(dash ((digit !digit) / 3*digit / (1*digit 1*letter))) [2*6upper]) / (upper 1*digit [dot 1*digit]) / (upper 2*digit)) as code\n\n no_notation = space (\"NO.\" / \"No.\") as no_notation space\n no_number = ((1*digit 2*10(dash 1*digit)) / (5*digit dash 1*digit) / (3*4digit dash (one_or_one_follow / 3*digit)) / (1*digit 1*3(dot 1*digit)) / 1*digit) as no_number\n year_prefix = [(\"F\" / \"M\") as year_prefix]\n year_2digit = 2*digit\n year_4digit = 4*digit\n colon_year = colon as colon_format ((year_prefix ((4digit) / (2digit)) as year)) / (((4digit) / (2digit)) as year)\n dash_year = dash as dash_format ((year_prefix ((4digit) / (2digit)) as year)) / (((4digit) / (2digit)) as year)\n reaffirmation = space \"(R\" ((4digit) as reaffirmation_4digit / (2digit) as reaffirmation_2digit) \")\"\n amendment_slash = slash [\"Amd \" ] [\"A\"] (1*digit) as amendment_number [(colon (2digit) as amendment_year)]\n package_keyword = \"Code\" / \"Handbook\" / \"Training Package\" / \"Package\"\n package_portion = space (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\") *((\", \" (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\")) / (space \"& \" (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\")))\n series_prefix = (2*3upper) as series_prefix\n series_keyword = \"SERIES\"\n\n series_identifier = publisher (code_pattern / (upper 2*digit) as code / (1*digit dot 1*digit) as code) space [series_prefix space] \"SERIES\" as series_type [colon_year / dash_year] [reaffirmation]\n cec_part = \"C22.2\" / \"C22.3\" / \"C22.4\" / \"C22.6\"\n cec_identifier = publisher (cec_part as cec_part) no_notation no_number [colon_year / dash_year] [reaffirmation]\n adoption_identifier = (\"CSA\" as adoption_pub) adoption_body [reaffirmation]\n adoption_body = ((\"ISO/IEC\" as adoption_org space (\"TR\" / \"TS\") as iso_type space (1*numdash) as adoption_number) / (\"ISO/IEC\" as adoption_org_with_type space (1*numdash) as adoption_number) / ((\"ISO\" / \"IEC\" / \"CEI/IEC\" / \"CISPR\") as adoption_org space (1*numdash) as adoption_number)) ((colon / dash) as adoption_year_sep (year_4digit / year_2digit) as adoption_year) [(slash \"A\" digit as adoption_amendment (colon / dash) (year_4digit / year_2digit) as adoption_amendment_year)]\n numdash = digit / \"-\"\n iso_iec_adoption = adoption_identifier\n\n trailing_block = ((no_notation no_number (colon_year / dash_year)) / (space series_prefix space \"SERIES\" as series (colon_year / dash_year)) / (space \"SERIES\" as series (colon_year / dash_year)) / (colon_year / dash_year))\n csa_code = publisher code_pattern [trailing_block] [amendment_slash]\n base_csa_code = publisher code_pattern [trailing_block]\n continuation_code = [publisher] code_pattern [trailing_block] [amendment_slash]\n bundled_portion = code_pattern ((no_notation no_number [colon_year / dash_year]) / [colon_year / dash_year])\n bundled_identifier = csa_code_first (\" + \") as plus_separator bundled_portion_first (*(\" + \" bundled_portion_first)) [reaffirmation]\n combined_slash = csa_code_first 1*(slash csa_code_part) [reaffirmation] [package_portion]\n combined_comma = csa_code_first (\",\" as comma_separator) space csa_code_part [reaffirmation] [(space \"& \" space (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\") *((\", \" (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\")) / (space \"& \" (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\"))) / space (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\") *((\", \" (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\")) / (space \"& \" (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\")))) as package_portion]\n single_identifier = csa_code [reaffirmation] [space (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\") *((\", \" (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\")) / (space \"& \" (\"Code\" / \"Handbook\" / \"Training Package\" / \"Package\"))) as package_portion]\n code_only_identifier = code_pattern ((space series_prefix space \"SERIES\" as series (colon_year / dash_year)) / (space \"SERIES\" as series (colon_year / dash_year)) / (colon_year / dash_year)) [(space \"PACKAGE\") as package_portion]\n\n # Combined and bundled identifiers: every position captures the same\n # part_* fields, so one csa_code_part[] array group pairs them by\n # occurrence index; the builder dispatches on plus_separator /\n # comma_separator. Each part_ capture wraps a kept 1* repetition so\n # the binding-path validator sees it repeated.\n csa_code_first = publisher_first 1*(code_pattern_part) [trailing_block_part]\n csa_code_part = [publisher_first] 1*(code_pattern_part) [trailing_block_part] [amendment_slash]\n publisher_first = 1*((\"CSA\" space) as part_has_publisher)\n code_pattern_part = 1*((1*digit dot 1*digit *1(dash 1*digit) [2*6upper]) / (1*digit 2*6upper) / (upper 1*digit *(dot 1*digit) *(dash ((digit !digit) / 3*digit / (1*digit 1*letter))) [2*6upper]) / (upper 1*digit [dot 1*digit]) / (upper 2*digit)) as part_code\n trailing_block_part = ((part_no_notation part_no_number (part_colon_year / part_dash_year)) / (space part_series_prefix space 1*(\"SERIES\" as part_series) (part_colon_year / part_dash_year)) / (space 1*(\"SERIES\" as part_series) (part_colon_year / part_dash_year)) / (part_colon_year / part_dash_year))\n part_no_notation = space 1*((\"NO.\" / \"No.\") as part_no_notation) space\n part_no_number = 1*((1*digit 2*10(dash 1*digit)) / (5*digit dash 1*digit) / (3*4digit dash ((digit !digit) / 3*digit)) / (1*digit 1*3(dot 1*digit)) / 1*digit) as part_no_number\n part_series_prefix = 1*((2*6upper) as part_series_prefix)\n part_colon_year = 1*(colon) as part_colon_format ((part_year_prefix (4digit) as part_year) / (part_year_prefix (2digit) as part_year) / (4digit) as part_year / (2digit) as part_year)\n part_dash_year = 1*(dash) as part_dash_format ((part_year_prefix (4digit) as part_year) / (part_year_prefix (2digit) as part_year) / (4digit) as part_year / (2digit) as part_year)\n part_year_prefix = 1*((\"F\" / \"M\") as part_year_prefix)\n bundled_portion_first = 1*(code_pattern_part) ((part_no_notation part_no_number [(part_colon_year / part_dash_year)]) / [(part_colon_year / part_dash_year)])\n\n identifier = iso_iec_adoption / series_identifier / cec_identifier / bundled_identifier / combined_slash / combined_comma / single_identifier / code_only_identifier\n\n comma = \",\"\n dash = \"-\"\n slash = \"/\"\n colon = \":\"\n dot = \".\"\n ampersand = \"&\"\n letter = upper / lower\n entry identifier: identifier\n\n bindings identifier {\n has_publisher -> has_publisher (string)\n code -> code (string)\n no_notation -> no_notation (string)\n no_number -> no_number (string)\n year_prefix -> year_prefix (string)\n colon_format -> colon_format (string)\n year -> year (string)\n dash_format -> dash_format (string)\n amendment_number -> amendment_number (string)\n amendment_year -> amendment_year (string)\n series_prefix -> series_prefix (string)\n series_type -> series_type (string)\n cec_part -> cec_part (string)\n adoption_pub -> adoption_pub (string)\n adoption_org -> adoption_org (string)\n iso_type -> iso_type (string)\n adoption_number -> adoption_number (string)\n adoption_org_with_type -> adoption_org_with_type (string)\n adoption_year_sep -> adoption_year_sep (string)\n adoption_year -> adoption_year (string)\n adoption_amendment -> adoption_amendment (string)\n adoption_amendment_year -> adoption_amendment_year (string)\n series -> series (string)\n plus_separator -> plus_separator (string)\n reaffirmation_4digit -> reaffirmation_4digit (string)\n reaffirmation_2digit -> reaffirmation_2digit (string)\n comma_separator -> comma_separator (string)\n package_portion -> package_portion (string)\n part_code -> csa_code_part[].part_code (string)\n part_year -> csa_code_part[].part_year (string)\n part_colon_format -> csa_code_part[].part_colon_format (string)\n part_dash_format -> csa_code_part[].part_dash_format (string)\n part_year_prefix -> csa_code_part[].part_year_prefix (string)\n part_no_notation -> csa_code_part[].part_no_notation (string)\n part_no_number -> csa_code_part[].part_no_number (string)\n part_series -> part_series (string)\n part_series_prefix -> part_series_prefix (string)\n part_has_publisher -> csa_code_part[].part_has_publisher (string)\n }\n\n\n test {\n accept \"CSA Z259.1-05\"\n accept \"CSA C22.2 NO. 60601-1\"\n accept \"CSA Z195-02\"\n reject \"nonsense\"\n }\n}\n","source_hash":"140fdd18f7004e65d8782ecde151ea56ef14eca8af7ba9fac3490bdc1c42cbc6","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:5a60fb60747f812498701256ef1bc0d02c174ad2fcca6de80076a2ac0c052d19"}
data/data/parg/doi.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidDoi","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":8}},{"Str":{"pattern":"https://"}},{"Str":{"pattern":"http://"}},{"Alternative":{"atoms":[1,2]}},{"Repetition":{"atom":3,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"doi.org"}},{"Repetition":{"atom":5,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[4,6]}},{"Repetition":{"atom":7,"min":0,"max":1,"tag":"Maybe"}},{"Repetition":{"atom":0,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":15}},{"Str":{"pattern":"doi:"}},{"Str":{"pattern":"DOI:"}},{"Str":{"pattern":"Doi:"}},{"Alternative":{"atoms":[11,12,13]}},{"Repetition":{"atom":14,"min":0,"max":1,"tag":"Maybe"}},{"Repetition":{"atom":10,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":18}},{"Str":{"pattern":"/"}},{"Repetition":{"atom":17,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":27}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"."}},{"Entity":{"atom":24}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":23,"min":2,"max":null,"tag":"Repetition"}},{"Named":{"name":"prefix","atom":25}},{"Sequence":{"atoms":[21,22,26]}},{"Entity":{"atom":18}},{"Entity":{"atom":42}},{"Entity":{"atom":40}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[.]"}},{"Re":{"pattern":"[_]"}},{"Re":{"pattern":"[\\-]"}},{"Re":{"pattern":"[/]"}},{"Re":{"pattern":"[(]"}},{"Re":{"pattern":"[)]"}},{"Alternative":{"atoms":[31,32,33,34,35,36,37,38,39]}},{"Repetition":{"atom":30,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"suffix","atom":41}},{"Sequence":{"atoms":[9,16,19,20,28,29]}}],"root":43},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"10.1000/182","expect":{}},{"entry":"identifier","kind":"accept","input":"doi:10.1000/182","expect":{}},{"entry":"identifier","kind":"accept","input":"https://doi.org/10.1000/182","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/doi/parser.rb: [doi:|DOI:|URL]10.{registrar}/{suffix}\n# per ISO 26324. Suffix is printable non-whitespace minus the DOI-reserved\n# exclusions, per the parslet class.\n\ngrammar PubidDoi version \"0.1.0\" {\n digit = %x30-39\n suffix_char = %x30-39 / %x41-5A / %x61-7A / %x2E / %x5F / %x2D / %x2F / %x28 / %x29\n doi_prefix = \"10\" \".\" (2*digit) as prefix\n doi_suffix = (1*suffix_char) as suffix\n url_prefix = [[\"https://\" / \"http://\"] [\"doi.org\"]]\n scheme_prefix = [\"doi:\" / \"DOI:\" / \"Doi:\"]\n identifier = [url_prefix] [scheme_prefix] [slash] doi_prefix slash doi_suffix\n slash = \"/\"\n entry identifier: identifier\n\n test {\n accept \"10.1000/182\"\n accept \"doi:10.1000/182\"\n accept \"https://doi.org/10.1000/182\"\n reject \"nonsense\"\n }\n}\n","source_hash":"3da5e11fe135ee42ce8a134926ef269a6fc5d00e0dc661cf7f5c6c737041819b","compiler_version":"1.3.93","checksum":"sha256:be582c44eebdcaa179207f73f188f30f526164636ecae26170220afd8a3adcf1"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidDoi","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":8}},{"Str":{"pattern":"https://"}},{"Str":{"pattern":"http://"}},{"Alternative":{"atoms":[1,2]}},{"Repetition":{"atom":3,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"doi.org"}},{"Repetition":{"atom":5,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[4,6]}},{"Repetition":{"atom":7,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"url_prefix","atom":0}},{"Repetition":{"atom":9,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":16}},{"Str":{"pattern":"doi:"}},{"Str":{"pattern":"DOI:"}},{"Str":{"pattern":"Doi:"}},{"Alternative":{"atoms":[12,13,14]}},{"Repetition":{"atom":15,"min":0,"max":1,"tag":"Maybe"}},{"Named":{"name":"scheme_prefix","atom":11}},{"Repetition":{"atom":17,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":19}},{"Repetition":{"atom":21,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":30}},{"Str":{"pattern":"10"}},{"Str":{"pattern":"."}},{"Entity":{"atom":27}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":26,"min":2,"max":null,"tag":"Repetition"}},{"Named":{"name":"prefix","atom":28}},{"Sequence":{"atoms":[24,25,29]}},{"Entity":{"atom":20}},{"Named":{"name":"slash","atom":31}},{"Entity":{"atom":46}},{"Entity":{"atom":44}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[.]"}},{"Re":{"pattern":"[_]"}},{"Re":{"pattern":"[\\-]"}},{"Re":{"pattern":"[/]"}},{"Re":{"pattern":"[(]"}},{"Re":{"pattern":"[)]"}},{"Alternative":{"atoms":[35,36,37,38,39,40,41,42,43]}},{"Repetition":{"atom":34,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"suffix","atom":45}},{"Sequence":{"atoms":[10,18,22,23,32,33]}}],"root":47},"bindings":[{"capture":"prefix","path":"prefix","type":"string","card":null,"preprocess":null},{"capture":"suffix","path":"suffix","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"10.1000/182","expect":{}},{"entry":"identifier","kind":"accept","input":"doi:10.1000/182","expect":{}},{"entry":"identifier","kind":"accept","input":"https://doi.org/10.1000/182","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/doi/parser.rb: [doi:|DOI:|URL]10.{registrar}/{suffix}\n# per ISO 26324. Suffix is printable non-whitespace minus the DOI-reserved\n# exclusions, per the parslet class.\n\ngrammar PubidDoi version \"0.1.0\" edition 2 {\n digit = %x30-39\n suffix_char = %x30-39 / %x41-5A / %x61-7A / %x2E / %x5F / %x2D / %x2F / %x28 / %x29\n doi_prefix = \"10\" \".\" (2*digit) as prefix\n doi_suffix = (1*suffix_char) as suffix\n url_prefix = [[\"https://\" / \"http://\"] [\"doi.org\"]]\n scheme_prefix = [\"doi:\" / \"DOI:\" / \"Doi:\"]\n identifier = [url_prefix] [scheme_prefix] [slash] doi_prefix slash doi_suffix\n slash = \"/\"\n entry identifier: identifier\n\n # Typed model bindings: every bound capture lands on the\n # consumer model's field of the same name.\n bindings identifier {\n prefix -> prefix (string)\n suffix -> suffix (string)\n }\n\n\n test {\n accept \"10.1000/182\"\n accept \"doi:10.1000/182\"\n accept \"https://doi.org/10.1000/182\"\n reject \"nonsense\"\n }\n}\n","source_hash":"2dcec2cb79a4c6364080a573d3aa748a4464bbd38ace020ced13418cd33290a8","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:5e13576a62c82050481b0bacbffd66232d1dfd43b75c0e6230289cf11d8671f9"}
data/data/parg/easc.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidEasc","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":9}},{"Str":{"pattern":"ПМГ"}},{"Str":{"pattern":"РМГ"}},{"Str":{"pattern":"PMG"}},{"Str":{"pattern":"RMG"}},{"Alternative":{"atoms":[1,2,3,4]}},{"Named":{"name":"series","atom":5}},{"Entity":{"atom":8}},{"Str":{"pattern":" "}},{"Sequence":{"atoms":[6,7]}},{"Entity":{"atom":16}},{"Str":{"pattern":"В"}},{"Str":{"pattern":"V"}},{"Alternative":{"atoms":[11,12]}},{"Named":{"name":"variant","atom":13}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[14,15]}},{"Repetition":{"atom":10,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":29}},{"Entity":{"atom":20}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":23}},{"Str":{"pattern":"."}},{"Entity":{"atom":20}},{"Repetition":{"atom":24,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[22,25]}},{"Repetition":{"atom":26,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[21,27]}},{"Named":{"name":"number","atom":28}},{"Entity":{"atom":39}},{"Entity":{"atom":8}},{"Repetition":{"atom":31,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"-"}},{"Str":{"pattern":"—"}},{"Str":{"pattern":"–"}},{"Alternative":{"atoms":[33,34,35]}},{"Entity":{"atom":8}},{"Repetition":{"atom":37,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[32,36,38]}},{"Entity":{"atom":46}},{"Entity":{"atom":20}},{"Repetition":{"atom":41,"min":4,"max":4,"tag":"Repetition"}},{"Entity":{"atom":20}},{"Repetition":{"atom":43,"min":2,"max":2,"tag":"Repetition"}},{"Alternative":{"atoms":[42,44]}},{"Named":{"name":"year","atom":45}},{"Sequence":{"atoms":[30,40]}},{"Repetition":{"atom":47,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,17,18,48]}}],"root":49},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"ПМГ 4-96","expect":{}},{"entry":"identifier","kind":"accept","input":"RMG 76","expect":{}},{"entry":"identifier","kind":"accept","input":"РМГ 29-2013","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/easc/parser.rb — EASC identifiers in Cyrillic and\n# Latin forms: ПМГ/РМГ (PMG/RMG) [В|V] NNN[.N]-YYYY with dash, em-dash\n# or en-dash year separators.\n\ngrammar PubidEasc version \"0.1.0\" {\n series_word = (\"ПМГ\" / \"РМГ\" / \"PMG\" / \"RMG\") as series space\n variant_word = (\"В\" / \"V\") as variant space\n number = (1*digit *(dot 1*digit)) as number\n year = (4digit / 2digit) as year\n year_sep = [space] (\"-\" / \"—\" / \"–\") [space]\n identifier = series_word [variant_word] number [(year_sep year)]\n digit = %x30-39\n dot = \".\"\n space = \" \"\n entry identifier: identifier\n\n test {\n accept \"ПМГ 4-96\"\n accept \"RMG 76\"\n accept \"РМГ 29-2013\"\n reject \"nonsense\"\n }\n}\n","source_hash":"d119619567312606ba9baf338cef7be531b6e1db3bc8671a0a779257715da953","compiler_version":"1.3.93","checksum":"sha256:197247b93d0af7b1cee9c1d812741138b11e787bfd89520294f35747165eb145"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidEasc","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Entity":{"atom":9}},{"Str":{"pattern":"ПМГ"}},{"Str":{"pattern":"РМГ"}},{"Str":{"pattern":"PMG"}},{"Str":{"pattern":"RMG"}},{"Alternative":{"atoms":[1,2,3,4]}},{"Named":{"name":"series","atom":5}},{"Entity":{"atom":8}},{"Str":{"pattern":" "}},{"Sequence":{"atoms":[6,7]}},{"Entity":{"atom":16}},{"Str":{"pattern":"В"}},{"Str":{"pattern":"V"}},{"Alternative":{"atoms":[11,12]}},{"Named":{"name":"variant","atom":13}},{"Entity":{"atom":8}},{"Sequence":{"atoms":[14,15]}},{"Repetition":{"atom":10,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":29}},{"Entity":{"atom":20}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":19,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":23}},{"Str":{"pattern":"."}},{"Entity":{"atom":20}},{"Repetition":{"atom":24,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[22,25]}},{"Repetition":{"atom":26,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[21,27]}},{"Named":{"name":"number","atom":28}},{"Entity":{"atom":39}},{"Entity":{"atom":8}},{"Repetition":{"atom":31,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":"-"}},{"Str":{"pattern":"—"}},{"Str":{"pattern":"–"}},{"Alternative":{"atoms":[33,34,35]}},{"Entity":{"atom":8}},{"Repetition":{"atom":37,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[32,36,38]}},{"Named":{"name":"year_sep","atom":30}},{"Entity":{"atom":47}},{"Entity":{"atom":20}},{"Repetition":{"atom":42,"min":4,"max":4,"tag":"Repetition"}},{"Entity":{"atom":20}},{"Repetition":{"atom":44,"min":2,"max":2,"tag":"Repetition"}},{"Alternative":{"atoms":[43,45]}},{"Named":{"name":"year","atom":46}},{"Sequence":{"atoms":[40,41]}},{"Repetition":{"atom":48,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,17,18,49]}}],"root":50},"bindings":[{"capture":"series","path":"series","type":"string","card":null,"preprocess":null},{"capture":"variant","path":"variant","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}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"ПМГ 4-96","expect":{}},{"entry":"identifier","kind":"accept","input":"RMG 76","expect":{}},{"entry":"identifier","kind":"accept","input":"РМГ 29-2013","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/easc/parser.rb — EASC identifiers in Cyrillic and\n# Latin forms: ПМГ/РМГ (PMG/RMG) [В|V] NNN[.N]-YYYY with dash, em-dash\n# or en-dash year separators.\n\ngrammar PubidEasc version \"0.1.0\" edition 2 {\n series_word = (\"ПМГ\" / \"РМГ\" / \"PMG\" / \"RMG\") as series space\n variant_word = (\"В\" / \"V\") as variant space\n number = (1*digit *(dot 1*digit)) as number\n year = (4digit / 2digit) as year\n year_sep = [space] (\"-\" / \"—\" / \"–\") [space]\n identifier = series_word [variant_word] number [(year_sep year)]\n digit = %x30-39\n dot = \".\"\n space = \" \"\n entry identifier: identifier\n\n # Typed model bindings: every bound capture lands on the\n # consumer model's field of the same name.\n bindings identifier {\n series -> series (string)\n variant -> variant (string)\n number -> number (string)\n year -> year (string)\n }\n\n\n test {\n accept \"ПМГ 4-96\"\n accept \"RMG 76\"\n accept \"РМГ 29-2013\"\n reject \"nonsense\"\n }\n}\n","source_hash":"270fd4785bdc485b82a76abb6738fd88ac770fe5907dfa499b271638af245bc2","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:0c58d01acfc0f08c043e87fb34bd45925e3283a00cd7bce469927748d94e4e4a"}
data/data/parg/ecma.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidEcma","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"ECMA"}},{"Entity":{"atom":7}},{"Str":{"pattern":" TR/"}},{"Entity":{"atom":4}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":3,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"tr_number","atom":5}},{"Sequence":{"atoms":[2,6]}},{"Entity":{"atom":13}},{"Str":{"pattern":" MEM/"}},{"Entity":{"atom":4}},{"Repetition":{"atom":10,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"mem_number","atom":11}},{"Sequence":{"atoms":[9,12]}},{"Entity":{"atom":27}},{"Str":{"pattern":"-"}},{"Str":{"pattern":" "}},{"Alternative":{"atoms":[15,16]}},{"Entity":{"atom":4}},{"Repetition":{"atom":18,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":19}},{"Str":{"pattern":"-"}},{"Entity":{"atom":4}},{"Repetition":{"atom":22,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":23}},{"Sequence":{"atoms":[21,24]}},{"Repetition":{"atom":25,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,20,26]}},{"Alternative":{"atoms":[1,8,14]}},{"Entity":{"atom":42}},{"Str":{"pattern":" ed"}},{"Entity":{"atom":40}},{"Entity":{"atom":4}},{"Repetition":{"atom":32,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":35}},{"Str":{"pattern":"."}},{"Entity":{"atom":4}},{"Repetition":{"atom":36,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[34,37]}},{"Repetition":{"atom":38,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[33,39]}},{"Named":{"name":"edition","atom":31}},{"Sequence":{"atoms":[30,41]}},{"Repetition":{"atom":29,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":49}},{"Str":{"pattern":" vol"}},{"Entity":{"atom":4}},{"Repetition":{"atom":46,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"volume","atom":47}},{"Sequence":{"atoms":[45,48]}},{"Repetition":{"atom":44,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,28,43,50]}}],"root":51},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"ECMA-262","expect":{}},{"entry":"identifier","kind":"accept","input":"ECMA TR/104","expect":{}},{"entry":"identifier","kind":"accept","input":"ECMA-262 ed3","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/ecma/parser.rb: ECMA-NNN[-part], ECMA TR/NNN,\n# ECMA MEM/NNN, each with optional \" edX[.Y]\" and \" volN\". The TR/MEM\n# vs standard alternation relies on the disjoint first character after\n# the prefix (T/M are not digits), as in the source.\n\ngrammar PubidEcma version \"0.1.0\" {\n tr = \" TR/\" (1*digit) as tr_number\n mem = \" MEM/\" (1*digit) as mem_number\n standard = (\"-\" / \" \") (1*digit) as number [(\"-\" (1*digit) as part)]\n edition_number = 1*digit *(dot 1*digit)\n edition = \" ed\" edition_number as edition\n volume = \" vol\" (1*digit) as volume\n identifier = \"ECMA\" (tr / mem / standard) [edition] [volume]\n digit = %x30-39\n dot = \".\"\n entry identifier: identifier\n\n test {\n accept \"ECMA-262\"\n accept \"ECMA TR/104\"\n accept \"ECMA-262 ed3\"\n reject \"nonsense\"\n }\n}\n","source_hash":"20eaee3d8ad10c49ebc0a78c24e791d164fe892d6e325b8a500b83b50233a800","compiler_version":"1.3.93","checksum":"sha256:3e2f7b18e5e87e94b2fc1225504cd00d4ec6339c241f62c46b514c230bb9315c"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidEcma","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"ECMA"}},{"Entity":{"atom":7}},{"Str":{"pattern":" TR/"}},{"Entity":{"atom":4}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":3,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"tr_number","atom":5}},{"Sequence":{"atoms":[2,6]}},{"Entity":{"atom":13}},{"Str":{"pattern":" MEM/"}},{"Entity":{"atom":4}},{"Repetition":{"atom":10,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"mem_number","atom":11}},{"Sequence":{"atoms":[9,12]}},{"Entity":{"atom":27}},{"Str":{"pattern":"-"}},{"Str":{"pattern":" "}},{"Alternative":{"atoms":[15,16]}},{"Entity":{"atom":4}},{"Repetition":{"atom":18,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":19}},{"Str":{"pattern":"-"}},{"Entity":{"atom":4}},{"Repetition":{"atom":22,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":23}},{"Sequence":{"atoms":[21,24]}},{"Repetition":{"atom":25,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[17,20,26]}},{"Alternative":{"atoms":[1,8,14]}},{"Entity":{"atom":41}},{"Str":{"pattern":" ed"}},{"Entity":{"atom":4}},{"Repetition":{"atom":31,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":34}},{"Str":{"pattern":"."}},{"Entity":{"atom":4}},{"Repetition":{"atom":35,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[33,36]}},{"Repetition":{"atom":37,"min":0,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[32,38]}},{"Named":{"name":"edition","atom":39}},{"Sequence":{"atoms":[30,40]}},{"Repetition":{"atom":29,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":48}},{"Str":{"pattern":" vol"}},{"Entity":{"atom":4}},{"Repetition":{"atom":45,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"volume","atom":46}},{"Sequence":{"atoms":[44,47]}},{"Repetition":{"atom":43,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,28,42,49]}}],"root":50},"bindings":[{"capture":"tr_number","path":"tr_number","type":"string","card":null,"preprocess":null},{"capture":"mem_number","path":"mem_number","type":"string","card":null,"preprocess":null},{"capture":"number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"part","path":"part","type":"string","card":null,"preprocess":null},{"capture":"edition","path":"edition","type":"string","card":null,"preprocess":null},{"capture":"volume","path":"volume","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"ECMA-262","expect":{}},{"entry":"identifier","kind":"accept","input":"ECMA TR/104","expect":{}},{"entry":"identifier","kind":"accept","input":"ECMA-262 ed3","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/ecma/parser.rb: ECMA-NNN[-part], ECMA TR/NNN,\n# ECMA MEM/NNN, each with optional \" edX[.Y]\" and \" volN\". The TR/MEM\n# vs standard alternation relies on the disjoint first character after\n# the prefix (T/M are not digits), as in the source.\n\ngrammar PubidEcma version \"0.1.0\" edition 2 {\n tr = \" TR/\" (1*digit) as tr_number\n mem = \" MEM/\" (1*digit) as mem_number\n standard = (\"-\" / \" \") (1*digit) as number [(\"-\" (1*digit) as part)]\n edition_number = 1*digit *(dot 1*digit)\n edition = \" ed\" (1*digit *(dot 1*digit)) as edition\n volume = \" vol\" (1*digit) as volume\n identifier = \"ECMA\" (tr / mem / standard) [edition] [volume]\n digit = %x30-39\n dot = \".\"\n entry identifier: identifier\n\n bindings identifier {\n tr_number -> tr_number (string)\n mem_number -> mem_number (string)\n number -> number (string)\n part -> part (string)\n edition -> edition (string)\n volume -> volume (string)\n }\n\n\n test {\n accept \"ECMA-262\"\n accept \"ECMA TR/104\"\n accept \"ECMA-262 ed3\"\n reject \"nonsense\"\n }\n}\n","source_hash":"1cfa0626a6a2c339b2f7fae3eb80aabb1c19700525fd246dc04c880ab4212d59","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:3dacea6949fa9f0e3834150c69d74b341da45bb49f7351604c3f421a954a06da"}
data/data/parg/etsi.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidEtsi","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"ETSI "}},{"Entity":{"atom":18}},{"Str":{"pattern":"I-ETS"}},{"Str":{"pattern":"TCRTR"}},{"Str":{"pattern":"GTS"}},{"Str":{"pattern":"ETR"}},{"Str":{"pattern":"ETS"}},{"Str":{"pattern":"TBR"}},{"Str":{"pattern":"NET"}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"EG"}},{"Str":{"pattern":"TS"}},{"Str":{"pattern":"GR"}},{"Str":{"pattern":"GS"}},{"Str":{"pattern":"SR"}},{"Str":{"pattern":"TR"}},{"Alternative":{"atoms":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{"Named":{"name":"type","atom":17}},{"Entity":{"atom":20}},{"Str":{"pattern":" "}},{"Entity":{"atom":61}},{"Entity":{"atom":32}},{"Str":{"pattern":"GSM"}},{"Entity":{"atom":20}},{"Entity":{"atom":26}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":25,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":29}},{"Str":{"pattern":"."}},{"Entity":{"atom":26}},{"Repetition":{"atom":30,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[23,24,27,28,31]}},{"Entity":{"atom":39}},{"Entity":{"atom":26}},{"Repetition":{"atom":34,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":29}},{"Entity":{"atom":26}},{"Repetition":{"atom":37,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[35,36,38]}},{"Entity":{"atom":56}},{"Entity":{"atom":45}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Alternative":{"atoms":[42,43,44]}},{"Repetition":{"atom":41,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":48}},{"Str":{"pattern":"-"}},{"Entity":{"atom":45}},{"Repetition":{"atom":49,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[47,50]}},{"Repetition":{"atom":51,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Entity":{"atom":26}},{"Repetition":{"atom":54,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[46,52,53,55]}},{"Entity":{"atom":59}},{"Entity":{"atom":26}},{"Repetition":{"atom":58,"min":1,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[22,33,40,57]}},{"Named":{"name":"number","atom":60}},{"Entity":{"atom":67}},{"Entity":{"atom":20}},{"Entity":{"atom":26}},{"Repetition":{"atom":64,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"minor","atom":65}},{"Sequence":{"atoms":[63,66]}},{"Repetition":{"atom":62,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":77}},{"Entity":{"atom":75}},{"Entity":{"atom":48}},{"Entity":{"atom":45}},{"Repetition":{"atom":72,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":73}},{"Sequence":{"atoms":[71,74]}},{"Repetition":{"atom":70,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":76}},{"Repetition":{"atom":69,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":95}},{"Entity":{"atom":93}},{"Str":{"pattern":"/A"}},{"Entity":{"atom":26}},{"Repetition":{"atom":82,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":83}},{"Sequence":{"atoms":[81,84]}},{"Named":{"name":"amendment","atom":85}},{"Str":{"pattern":"/C"}},{"Entity":{"atom":26}},{"Repetition":{"atom":88,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"number","atom":89}},{"Sequence":{"atoms":[87,90]}},{"Named":{"name":"corrigendum","atom":91}},{"Alternative":{"atoms":[86,92]}},{"Repetition":{"atom":80,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplements","atom":94}},{"Repetition":{"atom":79,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Entity":{"atom":114}},{"Entity":{"atom":107}},{"Str":{"pattern":"V"}},{"Entity":{"atom":104}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[.]"}},{"Alternative":{"atoms":[102,103]}},{"Repetition":{"atom":101,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"version","atom":105}},{"Sequence":{"atoms":[100,106]}},{"Entity":{"atom":113}},{"Str":{"pattern":"ed."}},{"Entity":{"atom":26}},{"Repetition":{"atom":110,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":111}},{"Sequence":{"atoms":[109,112]}},{"Alternative":{"atoms":[99,108]}},{"Sequence":{"atoms":[97,98]}},{"Repetition":{"atom":115,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Entity":{"atom":128}},{"Str":{"pattern":"("}},{"Entity":{"atom":26}},{"Repetition":{"atom":120,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":121}},{"Entity":{"atom":48}},{"Entity":{"atom":26}},{"Repetition":{"atom":124,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"month","atom":125}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[119,122,123,126,127]}},{"Sequence":{"atoms":[117,118]}},{"Repetition":{"atom":129,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,1,19,21,68,78,96,116,130]}}],"root":131},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule single_supplement: 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":"ETSI EN 300 175","expect":{}},{"entry":"identifier","kind":"accept","input":"ETSI TR 101 999","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/etsi/parser.rb: ETSI <one of 15 types> <number>\n# [minor][-parts][/A..|/C..][ V<version> | ed.N] [(YYYY-MM)].\n\ngrammar PubidEtsi version \"0.1.0\" {\n type = (\"I-ETS\" / \"TCRTR\" / \"GTS\" / \"ETR\" / \"ETS\" / \"TBR\" / \"NET\" / \"EN\" / \"ES\" / \"EG\" / \"TS\" / \"GR\" / \"GS\" / \"SR\" / \"TR\") as type\n # The monorepo's number is a single flat string (\"300 058\", \"298\") —\n # the inner pieces are structural only, never surfaced as captures.\n gsm_with_space_number = \"GSM\" space 1*digit dot 1*digit\n dotted_number = 1*digit dot 1*digit\n complex_number = 1*alnum_char [(dash 1*alnum_char)] space 1*digit\n simple_number = 1*digit\n number = (gsm_with_space_number / dotted_number / complex_number / simple_number) as number\n minor = space (1*digit) as minor\n part = dash (1*alnum_char) as part\n parts = (*part) as parts\n version = \"V\" (1*version_char) as version\n edition = \"ed.\" (1*digit) as edition\n version_or_edition = version / edition\n date_part = \"(\" (4digit) as year dash (2digit) as month \")\"\n single_supplement = ((\"/A\" (1*digit) as number) as amendment / (\"/C\" (1*digit) as number) as corrigendum)\n supplements = (1*single_supplement) as supplements\n identifier = \"ETSI \" type space number [minor] [parts] [supplements] [(space version_or_edition)] [(space date_part)]\n alnum_char = %x41-5A / %x61-7A / %x30-39\n version_char = %x30-39 / %x2E\n digit = %x30-39\n dash = \"-\"\n dot = \".\"\n space = \" \"\n entry identifier: identifier\n\n test {\n accept \"ETSI EN 300 175\"\n accept \"ETSI TR 101 999\"\n reject \"nonsense\"\n }\n}\n","source_hash":"ec499dcff68778e22d0ac6ad29c010bf278a5bde599da0b8e2c1aa28ee59efed","compiler_version":"1.3.93","checksum":"sha256:d57557c42cbbcff863fa709a2b6c043ed752ceb474f5cd8efd6f287c369c812f"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidEtsi","shape":"parsanol-tree/v2","binding_version":1,"entries":{"identifier":{"root":"identifier","grammar":{"atoms":[{"Str":{"pattern":"ETSI "}},{"Entity":{"atom":18}},{"Str":{"pattern":"I-ETS"}},{"Str":{"pattern":"TCRTR"}},{"Str":{"pattern":"GTS"}},{"Str":{"pattern":"ETR"}},{"Str":{"pattern":"ETS"}},{"Str":{"pattern":"TBR"}},{"Str":{"pattern":"NET"}},{"Str":{"pattern":"EN"}},{"Str":{"pattern":"ES"}},{"Str":{"pattern":"EG"}},{"Str":{"pattern":"TS"}},{"Str":{"pattern":"GR"}},{"Str":{"pattern":"GS"}},{"Str":{"pattern":"SR"}},{"Str":{"pattern":"TR"}},{"Alternative":{"atoms":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}},{"Named":{"name":"type","atom":17}},{"Entity":{"atom":20}},{"Str":{"pattern":" "}},{"Entity":{"atom":57}},{"Str":{"pattern":"GSM"}},{"Entity":{"atom":20}},{"Entity":{"atom":25}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":24,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":28}},{"Str":{"pattern":"."}},{"Entity":{"atom":25}},{"Repetition":{"atom":29,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[22,23,26,27,30]}},{"Entity":{"atom":25}},{"Repetition":{"atom":32,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":28}},{"Entity":{"atom":25}},{"Repetition":{"atom":35,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[33,34,36]}},{"Entity":{"atom":42}},{"Re":{"pattern":"[\\x41-\\x5a]"}},{"Re":{"pattern":"[\\x61-\\x7a]"}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Alternative":{"atoms":[39,40,41]}},{"Repetition":{"atom":38,"min":1,"max":null,"tag":"Repetition"}},{"Entity":{"atom":45}},{"Str":{"pattern":"-"}},{"Entity":{"atom":42}},{"Repetition":{"atom":46,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[44,47]}},{"Repetition":{"atom":48,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Entity":{"atom":25}},{"Repetition":{"atom":51,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[43,49,50,52]}},{"Entity":{"atom":25}},{"Repetition":{"atom":54,"min":1,"max":null,"tag":"Repetition"}},{"Alternative":{"atoms":[31,37,53,55]}},{"Named":{"name":"number","atom":56}},{"Entity":{"atom":63}},{"Entity":{"atom":20}},{"Entity":{"atom":25}},{"Repetition":{"atom":60,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"minor","atom":61}},{"Sequence":{"atoms":[59,62]}},{"Repetition":{"atom":58,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":74}},{"Entity":{"atom":72}},{"Entity":{"atom":45}},{"Named":{"name":"dash","atom":67}},{"Entity":{"atom":42}},{"Repetition":{"atom":69,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"part","atom":70}},{"Sequence":{"atoms":[68,71]}},{"Repetition":{"atom":66,"min":0,"max":null,"tag":"Repetition"}},{"Named":{"name":"parts","atom":73}},{"Repetition":{"atom":65,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":86}},{"Entity":{"atom":85}},{"Str":{"pattern":"/A"}},{"Str":{"pattern":"/C"}},{"Alternative":{"atoms":[78,79]}},{"Named":{"name":"supplement_kind","atom":80}},{"Entity":{"atom":25}},{"Repetition":{"atom":82,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"supplement_number","atom":83}},{"Sequence":{"atoms":[81,84]}},{"Repetition":{"atom":77,"min":1,"max":null,"tag":"Repetition"}},{"Repetition":{"atom":76,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Entity":{"atom":105}},{"Entity":{"atom":98}},{"Str":{"pattern":"V"}},{"Entity":{"atom":95}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Re":{"pattern":"[.]"}},{"Alternative":{"atoms":[93,94]}},{"Repetition":{"atom":92,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"version","atom":96}},{"Sequence":{"atoms":[91,97]}},{"Entity":{"atom":104}},{"Str":{"pattern":"ed."}},{"Entity":{"atom":25}},{"Repetition":{"atom":101,"min":1,"max":null,"tag":"Repetition"}},{"Named":{"name":"edition","atom":102}},{"Sequence":{"atoms":[100,103]}},{"Alternative":{"atoms":[90,99]}},{"Sequence":{"atoms":[88,89]}},{"Repetition":{"atom":106,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Entity":{"atom":120}},{"Str":{"pattern":"("}},{"Entity":{"atom":25}},{"Repetition":{"atom":111,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":112}},{"Entity":{"atom":45}},{"Named":{"name":"dash","atom":114}},{"Entity":{"atom":25}},{"Repetition":{"atom":116,"min":2,"max":2,"tag":"Repetition"}},{"Named":{"name":"month","atom":117}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[110,113,115,118,119]}},{"Sequence":{"atoms":[108,109]}},{"Repetition":{"atom":121,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[0,1,19,21,64,75,87,107,122]}}],"root":123},"bindings":[{"capture":"type","path":"type","type":"string","card":null,"preprocess":null},{"capture":"number","path":"number","type":"string","card":null,"preprocess":null},{"capture":"minor","path":"minor","type":"string","card":null,"preprocess":null},{"capture":"part","path":"parts[].part","type":"string","card":null,"preprocess":null},{"capture":"version","path":"version","type":"string","card":null,"preprocess":null},{"capture":"edition","path":"edition","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":"supplement_kind","path":"supplements[].supplement_kind","type":"string","card":null,"preprocess":null},{"capture":"supplement_number","path":"supplements[].supplement_number","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":[]},"default_entry":"identifier","render":{},"derive":{},"tests":[{"entry":"identifier","kind":"accept","input":"ETSI EN 300 175","expect":{}},{"entry":"identifier","kind":"accept","input":"ETSI TR 101 999","expect":{}},{"entry":"identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/etsi/parser.rb: ETSI <one of 15 types> <number>\n# [minor][-parts][/A..|/C..][ V<version> | ed.N] [(YYYY-MM)].\n\ngrammar PubidEtsi version \"0.1.0\" edition 2 {\n type = (\"I-ETS\" / \"TCRTR\" / \"GTS\" / \"ETR\" / \"ETS\" / \"TBR\" / \"NET\" / \"EN\" / \"ES\" / \"EG\" / \"TS\" / \"GR\" / \"GS\" / \"SR\" / \"TR\") as type\n # The monorepo's number is a single flat string (\"300 058\", \"298\") —\n # the inner pieces are structural only, never surfaced as captures.\n gsm_with_space_number = \"GSM\" space 1*digit dot 1*digit\n dotted_number = 1*digit dot 1*digit\n complex_number = 1*alnum_char [(dash 1*alnum_char)] space 1*digit\n simple_number = 1*digit\n number = ((\"GSM\" space 1*digit dot 1*digit) / (1*digit dot 1*digit) / (1*alnum_char [(dash 1*alnum_char)] space 1*digit) / (1*digit)) as number\n minor = space (1*digit) as minor\n part = dash (1*alnum_char) as part\n parts = (*part) as parts\n version = \"V\" (1*version_char) as version\n edition = \"ed.\" (1*digit) as edition\n version_or_edition = version / edition\n date_part = \"(\" (4digit) as year dash (2digit) as month \")\"\n single_supplement = ((\"/A\" / \"/C\") as supplement_kind (1*digit) as supplement_number)\n supplements = 1*single_supplement\n identifier = \"ETSI \" type space number [minor] [parts] [supplements] [(space version_or_edition)] [(space date_part)]\n alnum_char = %x41-5A / %x61-7A / %x30-39\n version_char = %x30-39 / %x2E\n digit = %x30-39\n dash = \"-\"\n dot = \".\"\n space = \" \"\n entry identifier: identifier\n\n # Typed model bindings: repeated parts collect under parts[].part and\n # the supplements pair kind with number by occurrence index.\n bindings identifier {\n type -> type (string)\n number -> number (string)\n minor -> minor (string)\n part -> parts[].part (string)\n version -> version (string)\n edition -> edition (string)\n year -> year (string)\n month -> month (string)\n supplement_kind -> supplements[].supplement_kind (string)\n supplement_number -> supplements[].supplement_number (string)\n }\n\n \n test {\n accept \"ETSI EN 300 175\"\n accept \"ETSI TR 101 999\"\n reject \"nonsense\"\n }\n}\n","source_hash":"fcd65f026fe04cb23ccdd6420b18ad5548bc05206afa3cf6e4d2e7e0757e6a1b","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:3a8bf872b82ff0c51cb2a9e6ed5aed3815a6a16b2830d77f7b185b8a10cd640e"}