pubid 2.0.1 → 2.0.3

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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/data/ieee/update_codes.yaml +2 -2
  3. data/data/parg/adobe.json +1 -1
  4. data/data/parg/aiee.json +1 -1
  5. data/data/parg/aiee.parg +99 -9
  6. data/data/parg/amca.json +1 -1
  7. data/data/parg/ansi.json +1 -1
  8. data/data/parg/api.json +1 -1
  9. data/data/parg/ashrae.json +1 -1
  10. data/data/parg/asme.json +1 -1
  11. data/data/parg/astm.json +1 -1
  12. data/data/parg/bipm.json +1 -1
  13. data/data/parg/bsi.json +1 -1
  14. data/data/parg/ccsds.json +1 -1
  15. data/data/parg/cen_cenelec.json +1 -1
  16. data/data/parg/cie.json +1 -1
  17. data/data/parg/csa.json +1 -1
  18. data/data/parg/ecma.json +1 -1
  19. data/data/parg/etsi.json +1 -1
  20. data/data/parg/evs.json +1 -1
  21. data/data/parg/gost.json +1 -1
  22. data/data/parg/iala.json +1 -1
  23. data/data/parg/iana.json +1 -1
  24. data/data/parg/idf.json +1 -1
  25. data/data/parg/iec.json +1 -1
  26. data/data/parg/ieee.json +1 -1
  27. data/data/parg/iho.json +1 -0
  28. data/data/parg/ire.json +1 -1
  29. data/data/parg/ire.parg +51 -12
  30. data/data/parg/isbn.json +1 -1
  31. data/data/parg/iso.json +1 -1
  32. data/data/parg/iso.parg +751 -0
  33. data/data/parg/itu.json +1 -1
  34. data/data/parg/jcgm.json +1 -1
  35. data/data/parg/jis.json +1 -1
  36. data/data/parg/nesc.json +1 -1
  37. data/data/parg/nesc.parg +97 -12
  38. data/data/parg/nist.json +1 -1
  39. data/data/parg/oiml.json +1 -1
  40. data/data/parg/omg.json +1 -1
  41. data/data/parg/parg.json +1 -1
  42. data/data/parg/plateau.json +1 -1
  43. data/data/parg/tgpp.json +1 -1
  44. data/data/parg/un.json +1 -1
  45. data/lib/pubid/adobe/identifier.rb +1 -1
  46. data/lib/pubid/adobe/parser.rb +2 -113
  47. data/lib/pubid/amca/identifiers/base.rb +1 -1
  48. data/lib/pubid/amca/parser.rb +1 -145
  49. data/lib/pubid/ansi/identifier.rb +1 -1
  50. data/lib/pubid/ansi/parser.rb +1 -82
  51. data/lib/pubid/api/builder.rb +32 -1
  52. data/lib/pubid/api/identifier.rb +1 -1
  53. data/lib/pubid/api/parser.rb +1 -131
  54. data/lib/pubid/ashrae/identifiers/base.rb +1 -1
  55. data/lib/pubid/ashrae/parser.rb +3 -710
  56. data/lib/pubid/asme/builder.rb +6 -4
  57. data/lib/pubid/asme/identifier.rb +1 -2
  58. data/lib/pubid/asme/parser.rb +1 -328
  59. data/lib/pubid/astm/builder.rb +12 -3
  60. data/lib/pubid/astm/identifier.rb +1 -2
  61. data/lib/pubid/astm/parser.rb +1 -227
  62. data/lib/pubid/bipm/identifier.rb +8 -1
  63. data/lib/pubid/bipm/parser.rb +2 -224
  64. data/lib/pubid/bsi/builder.rb +2 -4
  65. data/lib/pubid/bsi/parser.rb +1 -666
  66. data/lib/pubid/bsi/single_identifier.rb +38 -1
  67. data/lib/pubid/calconnect/parser.rb +2 -40
  68. data/lib/pubid/ccsds/identifier.rb +1 -1
  69. data/lib/pubid/ccsds/parser.rb +1 -66
  70. data/lib/pubid/cen_cenelec/identifier.rb +16 -1
  71. data/lib/pubid/cen_cenelec/parser.rb +3 -136
  72. data/lib/pubid/cie/identifier.rb +1 -1
  73. data/lib/pubid/cie/parser.rb +3 -378
  74. data/lib/pubid/conformance.rb +1 -1
  75. data/lib/pubid/csa/builder.rb +41 -18
  76. data/lib/pubid/csa/identifier.rb +12 -4
  77. data/lib/pubid/csa/identifiers/amendment.rb +28 -0
  78. data/lib/pubid/csa/identifiers.rb +1 -0
  79. data/lib/pubid/csa/parser.rb +16 -397
  80. data/lib/pubid/doi/parser.rb +2 -37
  81. data/lib/pubid/easc/builder.rb +1 -1
  82. data/lib/pubid/easc/parser.rb +2 -70
  83. data/lib/pubid/ecma/CLAUDE.md +8 -1
  84. data/lib/pubid/ecma/identifier.rb +13 -8
  85. data/lib/pubid/ecma/parser.rb +2 -54
  86. data/lib/pubid/ecma/renderer.rb +3 -7
  87. data/lib/pubid/errors.rb +18 -13
  88. data/lib/pubid/etsi/builder.rb +8 -5
  89. data/lib/pubid/etsi/identifiers/base.rb +1 -1
  90. data/lib/pubid/etsi/parser.rb +1 -132
  91. data/lib/pubid/evs/identifier.rb +7 -0
  92. data/lib/pubid/evs/parser.rb +1 -8
  93. data/lib/pubid/evs.rb +1 -1
  94. data/lib/pubid/gb/identifier.rb +6 -0
  95. data/lib/pubid/gb/parser.rb +2 -51
  96. data/lib/pubid/gost/identifier.rb +9 -1
  97. data/lib/pubid/gost/parser.rb +4 -81
  98. data/lib/pubid/iala/builder.rb +48 -39
  99. data/lib/pubid/iala/identifier.rb +1 -1
  100. data/lib/pubid/iala/parser.rb +2 -121
  101. data/lib/pubid/iana/identifier.rb +1 -1
  102. data/lib/pubid/iana/parser.rb +2 -24
  103. data/lib/pubid/identifier.rb +78 -1
  104. data/lib/pubid/idf/builder.rb +42 -0
  105. data/lib/pubid/idf/identifier.rb +1 -1
  106. data/lib/pubid/idf/parser.rb +1 -137
  107. data/lib/pubid/idf.rb +1 -2
  108. data/lib/pubid/iec/builder.rb +158 -50
  109. data/lib/pubid/iec/identifier.rb +1 -1
  110. data/lib/pubid/iec/parser.rb +3 -430
  111. data/lib/pubid/ieee/CLAUDE.md +2 -0
  112. data/lib/pubid/ieee/aiee/identifier.rb +2 -1
  113. data/lib/pubid/ieee/aiee.rb +0 -1
  114. data/lib/pubid/ieee/builder.rb +177 -30
  115. data/lib/pubid/ieee/components/code.rb +46 -7
  116. data/lib/pubid/ieee/identifiers/base.rb +5 -2
  117. data/lib/pubid/ieee/identifiers/joint_development.rb +7 -3
  118. data/lib/pubid/ieee/ire/identifier.rb +2 -1
  119. data/lib/pubid/ieee/ire.rb +0 -1
  120. data/lib/pubid/ieee/nesc/builder.rb +1 -1
  121. data/lib/pubid/ieee/nesc.rb +0 -1
  122. data/lib/pubid/ieee/parser.rb +1 -1257
  123. data/lib/pubid/ieee/project_renderer.rb +5 -1
  124. data/lib/pubid/ieee/renderer.rb +4 -2
  125. data/lib/pubid/ieee/urn_generator.rb +4 -1
  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 +98 -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 +14 -1
  134. data/lib/pubid/iho/urn_parser.rb +45 -32
  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/CLAUDE.md +66 -0
  139. data/lib/pubid/iso/builder.rb +229 -15
  140. data/lib/pubid/iso/identifier.rb +22 -12
  141. data/lib/pubid/iso/identifiers/directives.rb +6 -3
  142. data/lib/pubid/iso/identifiers/guide.rb +6 -3
  143. data/lib/pubid/iso/identifiers/international_workshop_agreement.rb +6 -3
  144. data/lib/pubid/iso/normalizer.rb +5 -4
  145. data/lib/pubid/iso/parser.rb +1 -539
  146. data/lib/pubid/iso/supplement_identifier.rb +6 -3
  147. data/lib/pubid/iso/urn_parser.rb +13 -8
  148. data/lib/pubid/iso/utilities.rb +4 -5
  149. data/lib/pubid/iso.rb +1 -19
  150. data/lib/pubid/itu/builder.rb +36 -20
  151. data/lib/pubid/itu/identifiers/base.rb +15 -2
  152. data/lib/pubid/itu/parser.rb +1 -775
  153. data/lib/pubid/jcgm/builder.rb +35 -0
  154. data/lib/pubid/jcgm/parser.rb +1 -151
  155. data/lib/pubid/jcgm.rb +1 -2
  156. data/lib/pubid/jis/CLAUDE.md +36 -0
  157. data/lib/pubid/jis/builder.rb +30 -41
  158. data/lib/pubid/jis/identifier.rb +12 -2
  159. data/lib/pubid/jis/identifiers/welding_engineering_standard.rb +35 -0
  160. data/lib/pubid/jis/identifiers.rb +2 -0
  161. data/lib/pubid/jis/parser.rb +1 -128
  162. data/lib/pubid/jis/renderer.rb +1 -1
  163. data/lib/pubid/jis/supplement_identifier.rb +5 -5
  164. data/lib/pubid/jis/urn_parser.rb +2 -1
  165. data/lib/pubid/jis.rb +3 -2
  166. data/lib/pubid/nist/builder.rb +5 -1
  167. data/lib/pubid/nist/caster.rb +13 -3
  168. data/lib/pubid/nist/identifiers/base.rb +37 -2
  169. data/lib/pubid/nist/identifiers/circular.rb +2 -2
  170. data/lib/pubid/nist/identifiers/circular_supplement.rb +2 -2
  171. data/lib/pubid/nist/identifiers/commercial_standards_monthly.rb +2 -2
  172. data/lib/pubid/nist/identifiers/crpl_report.rb +2 -2
  173. data/lib/pubid/nist/identifiers/handbook.rb +2 -2
  174. data/lib/pubid/nist/identifiers/internal_report.rb +2 -2
  175. data/lib/pubid/nist/identifiers/miscellaneous_publication.rb +2 -2
  176. data/lib/pubid/nist/identifiers/monograph.rb +2 -2
  177. data/lib/pubid/nist/identifiers/report.rb +2 -2
  178. data/lib/pubid/nist/parser.rb +19 -775
  179. data/lib/pubid/nist/router.rb +4 -1
  180. data/lib/pubid/nist/supplement_identifier.rb +2 -2
  181. data/lib/pubid/oasis/parser.rb +2 -16
  182. data/lib/pubid/ogc/parser.rb +2 -26
  183. data/lib/pubid/oiml/identifiers/certification_system.rb +7 -0
  184. data/lib/pubid/oiml/identifiers/dual_published.rb +2 -2
  185. data/lib/pubid/oiml/parser.rb +1 -303
  186. data/lib/pubid/oiml.rb +1 -2
  187. data/lib/pubid/omg/identifier.rb +6 -1
  188. data/lib/pubid/omg/parser.rb +2 -76
  189. data/lib/pubid/parser.rb +5 -4
  190. data/lib/pubid/parsers/mr_string.rb +1 -1
  191. data/lib/pubid/plateau/parser.rb +1 -66
  192. data/lib/pubid/plateau.rb +1 -2
  193. data/lib/pubid/renderers/directives_renderer.rb +1 -1
  194. data/lib/pubid/renderers/iwa_renderer.rb +1 -1
  195. data/lib/pubid/renderers/publisher_stripper.rb +82 -0
  196. data/lib/pubid/renderers/supplement_renderer.rb +1 -1
  197. data/lib/pubid/renderers.rb +1 -0
  198. data/lib/pubid/sae/parser.rb +1 -48
  199. data/lib/pubid/tgpp/identifier.rb +1 -1
  200. data/lib/pubid/tgpp/parser.rb +2 -59
  201. data/lib/pubid/un/identifier.rb +1 -1
  202. data/lib/pubid/un/parser.rb +1 -18
  203. data/lib/pubid/version.rb +1 -1
  204. data/lib/pubid/w3c/parser.rb +2 -27
  205. data/lib/pubid/xsf/identifier.rb +10 -6
  206. data/lib/pubid/xsf/parser.rb +3 -31
  207. data/lib/pubid/xsf/renderer.rb +2 -4
  208. data/lib/pubid.rb +8 -9
  209. metadata +9 -23
  210. data/lib/pubid/ieee/aiee/parser.rb +0 -130
  211. data/lib/pubid/ieee/ire/parser.rb +0 -109
  212. data/lib/pubid/ieee/nesc/parser.rb +0 -155
  213. data/lib/pubid/iho/parser.rb +0 -68
  214. data/lib/pubid/parser/common_parse_methods.rb +0 -13
  215. data/lib/pubid/parser/common_parse_rules.rb +0 -56
  216. data/lib/pubid/parser/grammar.rb +0 -96
data/data/parg/nesc.json CHANGED
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"PubidNesc","shape":"parsanol-tree/v2","binding_version":1,"entries":{"nesc_identifier":{"root":"nesc_identifier","grammar":{"atoms":[{"Entity":{"atom":40}},{"Str":{"pattern":"Draft"}},{"Named":{"name":"draft","atom":1}},{"Entity":{"atom":4}},{"Str":{"pattern":" "}},{"Entity":{"atom":12}},{"Entity":{"atom":9}},{"Str":{"pattern":"National Electrical Safety Code"}},{"Str":{"pattern":"National Electric Safety Code"}},{"Alternative":{"atoms":[7,8]}},{"Entity":{"atom":11}},{"Str":{"pattern":"NESC"}},{"Alternative":{"atoms":[6,10]}},{"Entity":{"atom":14}},{"Str":{"pattern":"(R)"}},{"Repetition":{"atom":13,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":17}},{"Str":{"pattern":","}},{"Entity":{"atom":4}},{"Entity":{"atom":33}},{"Str":{"pattern":"January"}},{"Str":{"pattern":"February"}},{"Str":{"pattern":"March"}},{"Str":{"pattern":"April"}},{"Str":{"pattern":"May"}},{"Str":{"pattern":"June"}},{"Str":{"pattern":"July"}},{"Str":{"pattern":"August"}},{"Str":{"pattern":"September"}},{"Str":{"pattern":"October"}},{"Str":{"pattern":"November"}},{"Str":{"pattern":"December"}},{"Alternative":{"atoms":[20,21,22,23,24,25,26,27,28,29,30,31]}},{"Named":{"name":"month","atom":32}},{"Entity":{"atom":4}},{"Entity":{"atom":38}},{"Entity":{"atom":37}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":36,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":35}},{"Sequence":{"atoms":[2,3,5,15,16,18,19,34,39]}},{"Entity":{"atom":71}},{"Str":{"pattern":"Preprint"}},{"Named":{"name":"preprint","atom":42}},{"Entity":{"atom":4}},{"Str":{"pattern":"Proposals"}},{"Str":{"pattern":"Proposal"}},{"Alternative":{"atoms":[45,46]}},{"Entity":{"atom":4}},{"Str":{"pattern":"for"}},{"Entity":{"atom":4}},{"Str":{"pattern":"the"}},{"Entity":{"atom":4}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":53}},{"Entity":{"atom":4}},{"Str":{"pattern":"Edition"}},{"Entity":{"atom":4}},{"Str":{"pattern":"of"}},{"Entity":{"atom":4}},{"Str":{"pattern":"the"}},{"Entity":{"atom":4}},{"Entity":{"atom":9}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":11}},{"Entity":{"atom":14}},{"Repetition":{"atom":66,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[63,64,65,67,68]}},{"Repetition":{"atom":69,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[43,44,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,70]}},{"Entity":{"atom":96}},{"Entity":{"atom":9}},{"Entity":{"atom":14}},{"Repetition":{"atom":74,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[73,75]}},{"Entity":{"atom":17}},{"Entity":{"atom":4}},{"Entity":{"atom":81}},{"Str":{"pattern":"C2"}},{"Named":{"name":"code","atom":80}},{"Entity":{"atom":83}},{"Str":{"pattern":"-"}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":84}},{"Entity":{"atom":4}},{"Str":{"pattern":"-"}},{"Entity":{"atom":4}},{"Entity":{"atom":93}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Redline"}},{"Alternative":{"atoms":[90,91]}},{"Named":{"name":"variant","atom":92}},{"Sequence":{"atoms":[86,87,88,89]}},{"Repetition":{"atom":94,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[76,77,78,79,82,85,95]}},{"Entity":{"atom":119}},{"Entity":{"atom":81}},{"Entity":{"atom":100}},{"Str":{"pattern":"."}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":101}},{"Entity":{"atom":100}},{"Sequence":{"atoms":[99,102,103]}},{"Entity":{"atom":83}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":106}},{"Entity":{"atom":83}},{"Sequence":{"atoms":[105,107,108]}},{"Entity":{"atom":83}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":111}},{"Entity":{"atom":114}},{"Str":{"pattern":"/"}},{"Sequence":{"atoms":[110,112,113]}},{"Alternative":{"atoms":[104,109,115]}},{"Str":{"pattern":"Preprint"}},{"Named":{"name":"preprint","atom":117}},{"Sequence":{"atoms":[98,116,118]}},{"Entity":{"atom":141}},{"Entity":{"atom":81}},{"Entity":{"atom":83}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":123}},{"Entity":{"atom":17}},{"Repetition":{"atom":125,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Sequence":{"atoms":[126,127]}},{"Repetition":{"atom":128,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":9}},{"Entity":{"atom":14}},{"Repetition":{"atom":131,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":11}},{"Entity":{"atom":14}},{"Repetition":{"atom":136,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[133,134,135,137,138]}},{"Repetition":{"atom":139,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[121,122,124,129,130,132,140]}},{"Entity":{"atom":191}},{"Entity":{"atom":38}},{"Named":{"name":"year","atom":143}},{"Entity":{"atom":4}},{"Entity":{"atom":9}},{"Named":{"name":"full_name","atom":146}},{"Entity":{"atom":14}},{"Named":{"name":"name_registered","atom":148}},{"Repetition":{"atom":149,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":11}},{"Named":{"name":"paren_abbr","atom":153}},{"Entity":{"atom":14}},{"Named":{"name":"paren_registered","atom":155}},{"Repetition":{"atom":156,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[151,152,154,157,158]}},{"Repetition":{"atom":159,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[147,150,160]}},{"Entity":{"atom":11}},{"Named":{"name":"abbr","atom":162}},{"Entity":{"atom":14}},{"Named":{"name":"abbr_registered","atom":164}},{"Repetition":{"atom":165,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[163,166]}},{"Alternative":{"atoms":[161,167]}},{"Entity":{"atom":4}},{"Entity":{"atom":93}},{"Sequence":{"atoms":[169,170]}},{"Repetition":{"atom":171,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":17}},{"Entity":{"atom":4}},{"Entity":{"atom":188}},{"Str":{"pattern":"Premier Edition"}},{"Str":{"pattern":"Second Edition"}},{"Str":{"pattern":"Third Edition"}},{"Str":{"pattern":"Fourth Edition"}},{"Str":{"pattern":"Fifth Edition"}},{"Str":{"pattern":"Sixth Edition"}},{"Str":{"pattern":"Seventh Edition"}},{"Str":{"pattern":"Eighth Edition"}},{"Str":{"pattern":"Ninth Edition"}},{"Str":{"pattern":"Tenth Edition"}},{"Str":{"pattern":"First Edition"}},{"Alternative":{"atoms":[176,177,178,179,180,181,182,183,184,185,186]}},{"Named":{"name":"edition","atom":187}},{"Sequence":{"atoms":[173,174,175]}},{"Repetition":{"atom":189,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[144,145,168,172,190]}},{"Alternative":{"atoms":[0,41,72,97,120,142]}}],"root":192},"bindings":[]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule nesc_full_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule nesc_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule nesc_identifier: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"nesc_identifier","render":{},"derive":{},"tests":[{"entry":"nesc_identifier","kind":"accept","input":"C2-2023 National Electrical Safety Code","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"2023 NESC","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"National Electrical Safety Code, C2-2017","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Draft NESC, January 2016","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2.2012.Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2-2012-Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2-2002/Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Preprint Proposal for the 2017 Edition of the National Electrical Safety Code","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Preprint Proposals for the 2022 Edition of the National Electrical Safety Code (NESC(R))","expect":{}},{"entry":"nesc_identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/ieee/nesc/parser.rb — National Electrical Safety\n# Code designations: C2-year, year-first, name-first and Draft forms\n# with (R) marks, editions and variants. Consumed by the ieee grammar\n# via `use nesc`.\n\ngrammar PubidNesc version \"0.1.0\" mode \"v1\" {\n digit = %x30-39\n digits = 1*digit\n space = \" \"\n comma = \",\"\n dash = \"-\"\n dot = \".\"\n slash = \"/\"\n\n year = 4digit\n c2_code = \"C2\" as code\n nesc_full_name = \"National Electrical Safety Code\" / \"National Electric Safety Code\"\n nesc_abbr = \"NESC\"\n nesc_name = nesc_full_name / nesc_abbr\n registered = \"(R)\"\n edition = (\"Premier Edition\" / \"Second Edition\" / \"Third Edition\" / \"Fourth Edition\" / \"Fifth Edition\" / \"Sixth Edition\" / \"Seventh Edition\" / \"Eighth Edition\" / \"Ninth Edition\" / \"Tenth Edition\" / \"First Edition\") as edition\n variant = (\"Handbook\" / \"Redline\") as variant\n month = (\"January\" / \"February\" / \"March\" / \"April\" / \"May\" / \"June\" / \"July\" / \"August\" / \"September\" / \"October\" / \"November\" / \"December\") as month\n\n c2_standard = (c2_code dash (year) as year [([comma] space)] nesc_full_name [registered] [(space \"(\" nesc_abbr [registered] \")\")])\n year_first = ((year) as year) space (((nesc_full_name) as full_name [(registered) as name_registered] [(space \"(\" (nesc_abbr) as paren_abbr [(registered) as paren_registered] \")\")]) / (((nesc_abbr) as abbr [(registered) as abbr_registered]))) [(space variant)] [(comma space edition)]\n name_first = ((nesc_full_name [registered]) comma space c2_code dash (year) as year [(space \"-\" space variant)])\n draft_nesc = ((\"Draft\") as draft space nesc_name [registered] comma space (month) space (year) as year)\n # Preprint is a draft STAGE of the C2 code (NESC terminology for its\n # pre-edition drafts), not a variant: dotted is the canonical spelling\n # (C2.2012.Preprint); dash (C2-2012-Preprint) and the catalogue's\n # slash tail (C2-2002/Preprint) are aliases. The verbose\n # \"Preprint Proposal(s) for the YYYY Edition of ...\" forms cite the same\n # draft by its target edition year.\n c2_preprint = (c2_code ((dot (year) as year dot) / (dash (year) as year dash) / (dash (year) as year slash)) (\"Preprint\") as preprint)\n preprint_proposal = ((\"Preprint\") as preprint space (\"Proposals\" / \"Proposal\") space \"for\" space \"the\" space (year) as year space \"Edition\" space \"of\" space \"the\" space nesc_full_name [(space \"(\" nesc_abbr [registered] \")\")])\n nesc_identifier = draft_nesc / preprint_proposal / name_first / c2_preprint / c2_standard / year_first\n\n entry nesc_identifier: nesc_identifier\n\n test {\n accept \"C2-2023 National Electrical Safety Code\"\n accept \"2023 NESC\"\n accept \"National Electrical Safety Code, C2-2017\"\n accept \"Draft NESC, January 2016\"\n accept \"C2.2012.Preprint\"\n accept \"C2-2012-Preprint\"\n accept \"C2-2002/Preprint\"\n accept \"Preprint Proposal for the 2017 Edition of the National Electrical Safety Code\"\n accept \"Preprint Proposals for the 2022 Edition of the National Electrical Safety Code (NESC(R))\"\n reject \"nonsense\"\n }\n}\n","source_hash":"07550149202698984f686873c2ddb51f4a41d23b872b151129b176e9c4ed9552","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":1,"checksum":"sha256:48aaf8e7955ea5adc1c3d18940e728ecc30d1cbdc22c95d845e7a0f3ccb984a0"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"PubidNesc","shape":"parsanol-tree/v2","binding_version":1,"entries":{"nesc_identifier":{"root":"nesc_identifier","grammar":{"atoms":[{"Entity":{"atom":44}},{"Str":{"pattern":"Draft"}},{"Named":{"name":"nesc_draft_marker","atom":1}},{"Entity":{"atom":4}},{"Str":{"pattern":" "}},{"Entity":{"atom":14}},{"Entity":{"atom":9}},{"Str":{"pattern":"National Electrical Safety Code"}},{"Str":{"pattern":"National Electric Safety Code"}},{"Alternative":{"atoms":[7,8]}},{"Named":{"name":"nesc_full_name","atom":6}},{"Entity":{"atom":12}},{"Str":{"pattern":"NESC"}},{"Named":{"name":"nesc_abbr","atom":11}},{"Alternative":{"atoms":[10,13]}},{"Entity":{"atom":16}},{"Str":{"pattern":"(R)"}},{"Named":{"name":"registered","atom":15}},{"Repetition":{"atom":17,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Str":{"pattern":","}},{"Named":{"name":"comma","atom":19}},{"Entity":{"atom":4}},{"Sequence":{"atoms":[21,22]}},{"Entity":{"atom":38}},{"Str":{"pattern":"January"}},{"Str":{"pattern":"February"}},{"Str":{"pattern":"March"}},{"Str":{"pattern":"April"}},{"Str":{"pattern":"May"}},{"Str":{"pattern":"June"}},{"Str":{"pattern":"July"}},{"Str":{"pattern":"August"}},{"Str":{"pattern":"September"}},{"Str":{"pattern":"October"}},{"Str":{"pattern":"November"}},{"Str":{"pattern":"December"}},{"Alternative":{"atoms":[25,26,27,28,29,30,31,32,33,34,35,36]}},{"Named":{"name":"month","atom":37}},{"Entity":{"atom":4}},{"Entity":{"atom":41}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":40,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":42}},{"Sequence":{"atoms":[2,3,5,18,23,24,39,43]}},{"Entity":{"atom":79}},{"Str":{"pattern":"Preprint"}},{"Named":{"name":"preprint","atom":46}},{"Entity":{"atom":4}},{"Str":{"pattern":"Proposals"}},{"Str":{"pattern":"Proposal"}},{"Alternative":{"atoms":[49,50]}},{"Entity":{"atom":4}},{"Str":{"pattern":"for"}},{"Entity":{"atom":4}},{"Str":{"pattern":"the"}},{"Entity":{"atom":4}},{"Entity":{"atom":41}},{"Repetition":{"atom":57,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":58}},{"Entity":{"atom":4}},{"Str":{"pattern":"Edition"}},{"Entity":{"atom":4}},{"Str":{"pattern":"of"}},{"Entity":{"atom":4}},{"Str":{"pattern":"the"}},{"Entity":{"atom":4}},{"Entity":{"atom":9}},{"Named":{"name":"nesc_full_name","atom":67}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":12}},{"Named":{"name":"nesc_abbr","atom":71}},{"Entity":{"atom":16}},{"Named":{"name":"registered","atom":73}},{"Repetition":{"atom":74,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[69,70,72,75,76]}},{"Repetition":{"atom":77,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[47,48,51,52,53,54,55,56,59,60,61,62,63,64,65,66,68,78]}},{"Entity":{"atom":110}},{"Entity":{"atom":9}},{"Named":{"name":"nesc_full_name","atom":81}},{"Entity":{"atom":16}},{"Named":{"name":"registered","atom":83}},{"Repetition":{"atom":84,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[82,85]}},{"Entity":{"atom":20}},{"Named":{"name":"comma","atom":87}},{"Entity":{"atom":4}},{"Sequence":{"atoms":[88,89]}},{"Entity":{"atom":93}},{"Str":{"pattern":"C2"}},{"Named":{"name":"code","atom":92}},{"Entity":{"atom":95}},{"Str":{"pattern":"-"}},{"Named":{"name":"dash","atom":94}},{"Entity":{"atom":41}},{"Repetition":{"atom":97,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":98}},{"Entity":{"atom":4}},{"Str":{"pattern":"-"}},{"Entity":{"atom":4}},{"Entity":{"atom":107}},{"Str":{"pattern":"Handbook"}},{"Str":{"pattern":"Redline"}},{"Alternative":{"atoms":[104,105]}},{"Named":{"name":"variant","atom":106}},{"Sequence":{"atoms":[100,101,102,103]}},{"Repetition":{"atom":108,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[86,90,91,96,99,109]}},{"Entity":{"atom":142}},{"Entity":{"atom":93}},{"Entity":{"atom":114}},{"Str":{"pattern":"."}},{"Named":{"name":"dot","atom":113}},{"Entity":{"atom":41}},{"Repetition":{"atom":116,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":117}},{"Entity":{"atom":114}},{"Named":{"name":"dot","atom":119}},{"Sequence":{"atoms":[115,118,120]}},{"Entity":{"atom":95}},{"Named":{"name":"dash","atom":122}},{"Entity":{"atom":41}},{"Repetition":{"atom":124,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":125}},{"Entity":{"atom":95}},{"Named":{"name":"dash","atom":127}},{"Sequence":{"atoms":[123,126,128]}},{"Entity":{"atom":95}},{"Named":{"name":"dash","atom":130}},{"Entity":{"atom":41}},{"Repetition":{"atom":132,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":133}},{"Entity":{"atom":136}},{"Str":{"pattern":"/"}},{"Named":{"name":"slash","atom":135}},{"Sequence":{"atoms":[131,134,137]}},{"Alternative":{"atoms":[121,129,138]}},{"Str":{"pattern":"Preprint"}},{"Named":{"name":"preprint","atom":140}},{"Sequence":{"atoms":[112,139,141]}},{"Entity":{"atom":171}},{"Entity":{"atom":93}},{"Entity":{"atom":95}},{"Named":{"name":"dash","atom":145}},{"Entity":{"atom":41}},{"Repetition":{"atom":147,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":148}},{"Entity":{"atom":20}},{"Named":{"name":"comma","atom":150}},{"Repetition":{"atom":151,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Sequence":{"atoms":[152,153]}},{"Repetition":{"atom":154,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":9}},{"Named":{"name":"nesc_full_name","atom":156}},{"Entity":{"atom":16}},{"Named":{"name":"registered","atom":158}},{"Repetition":{"atom":159,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":12}},{"Named":{"name":"nesc_abbr","atom":163}},{"Entity":{"atom":16}},{"Named":{"name":"registered","atom":165}},{"Repetition":{"atom":166,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[161,162,164,167,168]}},{"Repetition":{"atom":169,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[144,146,149,155,157,160,170]}},{"Entity":{"atom":223}},{"Entity":{"atom":41}},{"Repetition":{"atom":173,"min":4,"max":4,"tag":"Repetition"}},{"Named":{"name":"year","atom":174}},{"Entity":{"atom":4}},{"Entity":{"atom":9}},{"Named":{"name":"full_name","atom":177}},{"Entity":{"atom":16}},{"Named":{"name":"name_registered","atom":179}},{"Repetition":{"atom":180,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":4}},{"Str":{"pattern":"("}},{"Entity":{"atom":12}},{"Named":{"name":"paren_abbr","atom":184}},{"Entity":{"atom":16}},{"Named":{"name":"paren_registered","atom":186}},{"Repetition":{"atom":187,"min":0,"max":1,"tag":"Maybe"}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[182,183,185,188,189]}},{"Repetition":{"atom":190,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[178,181,191]}},{"Entity":{"atom":12}},{"Named":{"name":"abbr","atom":193}},{"Entity":{"atom":16}},{"Named":{"name":"abbr_registered","atom":195}},{"Repetition":{"atom":196,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[194,197]}},{"Alternative":{"atoms":[192,198]}},{"Entity":{"atom":4}},{"Entity":{"atom":107}},{"Sequence":{"atoms":[200,201]}},{"Repetition":{"atom":202,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":20}},{"Named":{"name":"comma","atom":204}},{"Entity":{"atom":4}},{"Entity":{"atom":220}},{"Str":{"pattern":"Premier Edition"}},{"Str":{"pattern":"Second Edition"}},{"Str":{"pattern":"Third Edition"}},{"Str":{"pattern":"Fourth Edition"}},{"Str":{"pattern":"Fifth Edition"}},{"Str":{"pattern":"Sixth Edition"}},{"Str":{"pattern":"Seventh Edition"}},{"Str":{"pattern":"Eighth Edition"}},{"Str":{"pattern":"Ninth Edition"}},{"Str":{"pattern":"Tenth Edition"}},{"Str":{"pattern":"First Edition"}},{"Alternative":{"atoms":[208,209,210,211,212,213,214,215,216,217,218]}},{"Named":{"name":"edition","atom":219}},{"Sequence":{"atoms":[205,206,207]}},{"Repetition":{"atom":221,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[175,176,199,203,222]}},{"Alternative":{"atoms":[0,45,80,111,143,172]}}],"root":224},"bindings":[{"capture":"code","path":"code","type":"string","card":null,"preprocess":null},{"capture":"year","path":"year","type":"string","card":null,"preprocess":null},{"capture":"full_name","path":"full_name","type":"string","card":null,"preprocess":null},{"capture":"name_registered","path":"name_registered","type":"string","card":null,"preprocess":null},{"capture":"paren_abbr","path":"paren_abbr","type":"string","card":null,"preprocess":null},{"capture":"paren_registered","path":"paren_registered","type":"string","card":null,"preprocess":null},{"capture":"abbr","path":"abbr","type":"string","card":null,"preprocess":null},{"capture":"abbr_registered","path":"abbr_registered","type":"string","card":null,"preprocess":null},{"capture":"variant","path":"variant","type":"string","card":null,"preprocess":null},{"capture":"edition","path":"edition","type":"string","card":null,"preprocess":null},{"capture":"month","path":"month","type":"string","card":null,"preprocess":null},{"capture":"preprint","path":"preprint","type":"string","card":null,"preprocess":null}]}},"preprocess":{},"tables":{},"lint":{"order_warnings":["rule nesc_full_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule nesc_name: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule nesc_identifier: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"nesc_identifier","render":{},"derive":{},"tests":[{"entry":"nesc_identifier","kind":"accept","input":"C2-2023 National Electrical Safety Code","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"2023 NESC","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"National Electrical Safety Code, C2-2017","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Draft NESC, January 2016","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2.2012.Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2-2012-Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"C2-2002/Preprint","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Preprint Proposal for the 2017 Edition of the National Electrical Safety Code","expect":{}},{"entry":"nesc_identifier","kind":"accept","input":"Preprint Proposals for the 2022 Edition of the National Electrical Safety Code (NESC(R))","expect":{}},{"entry":"nesc_identifier","kind":"reject","input":"nonsense","expect":{}}],"docs":{},"source":"# Port of lib/pubid/ieee/nesc/parser.rb — National Electrical Safety\n# Code designations: C2-year, year-first, name-first and Draft forms\n# with (R) marks, editions and variants. Consumed by the ieee grammar\n# via `use nesc`.\n#\n# Edition-2 notes: the year body (4digit — a bounded repetition of a\n# ref) inlines at every capture site, since a capture wrapping a\n# repetition ref expands to node lists inside the capture while the\n# inlined body binds as one scalar string. The month / edition /\n# variant captures stay on their rules — pure literal alternations\n# bind as spans — and the (R)/NESC abbreviation marks capture their\n# literal tokens directly.\n\ngrammar PubidNesc version \"0.1.0\" edition 2 {\n digit = %x30-39\n space = \" \"\n comma = \",\"\n dash = \"-\"\n dot = \".\"\n slash = \"/\"\n\n c2_code = \"C2\" as code\n nesc_full_name = \"National Electrical Safety Code\" / \"National Electric Safety Code\"\n nesc_abbr = \"NESC\"\n nesc_name = nesc_full_name / nesc_abbr\n registered = \"(R)\"\n edition = {\n (\n \"Premier Edition\"\n / \"Second Edition\"\n / \"Third Edition\"\n / \"Fourth Edition\"\n / \"Fifth Edition\"\n / \"Sixth Edition\"\n / \"Seventh Edition\"\n / \"Eighth Edition\"\n / \"Ninth Edition\"\n / \"Tenth Edition\"\n / \"First Edition\"\n ) as edition\n }\n variant = {\n (\"Handbook\" / \"Redline\") as variant\n }\n month = {\n (\n \"January\"\n / \"February\"\n / \"March\"\n / \"April\"\n / \"May\"\n / \"June\"\n / \"July\"\n / \"August\"\n / \"September\"\n / \"October\"\n / \"November\"\n / \"December\"\n ) as month\n }\n\n c2_standard = {\n (c2_code) (dash) ((4digit)) as year [([comma] space)] nesc_full_name\n [registered]\n [(space \"(\" (nesc_abbr) [(registered)] \")\")]\n }\n year_first = {\n ((4digit)) as year space\n (\n ((nesc_full_name)) as full_name [(registered) as name_registered]\n [(space \"(\" (nesc_abbr) as paren_abbr [(registered) as paren_registered] \")\")]\n / ((nesc_abbr)) as abbr [(registered) as abbr_registered]\n )\n [(space (variant))]\n [((comma space edition))]\n }\n name_first = {\n ((nesc_full_name [registered])) (comma space) c2_code (dash)\n ((4digit)) as year\n [((space \"-\" space (variant)))]\n }\n draft_nesc = {\n (\"Draft\") as nesc_draft_marker space nesc_name [registered] (comma space) (month) space\n ((4digit)) as year\n }\n # Preprint is a draft STAGE of the C2 code (NESC terminology for its\n # pre-edition drafts), not a variant: dotted is the canonical spelling\n # (C2.2012.Preprint); dash (C2-2012-Preprint) and the catalogue's\n # slash tail (C2-2002/Preprint) are aliases. The verbose\n # \"Preprint Proposal(s) for the YYYY Edition of ...\" forms cite the same\n # draft by its target edition year.\n c2_preprint = {\n c2_code\n (\n (dot ((4digit)) as year dot)\n / (dash ((4digit)) as year dash)\n / (dash ((4digit)) as year slash)\n )\n ((\"Preprint\")) as preprint\n }\n preprint_proposal = {\n ((\"Preprint\")) as preprint space (\"Proposals\" / \"Proposal\") space \"for\" space\n \"the\" space ((4digit)) as year space \"Edition\" space \"of\" space \"the\" space\n nesc_full_name\n [(space \"(\" (nesc_abbr) [registered] \")\")]\n }\n nesc_identifier = draft_nesc / preprint_proposal / name_first / c2_preprint / c2_standard / year_first\n\n entry nesc_identifier: nesc_identifier\n\n bindings nesc_identifier {\n code -> code (string)\n year -> year (string)\n full_name -> full_name (string)\n name_registered -> name_registered (string)\n paren_abbr -> paren_abbr (string)\n paren_registered -> paren_registered (string)\n abbr -> abbr (string)\n abbr_registered -> abbr_registered (string)\n variant -> variant (string)\n edition -> edition (string)\n month -> month (string)\n preprint -> preprint (string)\n }\n\n test {\n accept \"C2-2023 National Electrical Safety Code\"\n accept \"2023 NESC\"\n accept \"National Electrical Safety Code, C2-2017\"\n accept \"Draft NESC, January 2016\"\n accept \"C2.2012.Preprint\"\n accept \"C2-2012-Preprint\"\n accept \"C2-2002/Preprint\"\n accept \"Preprint Proposal for the 2017 Edition of the National Electrical Safety Code\"\n accept \"Preprint Proposals for the 2022 Edition of the National Electrical Safety Code (NESC(R))\"\n reject \"nonsense\"\n }\n}\n","source_hash":"e57b2445fd3b2f73eedab7c42cb26e901a214cdc440063785dca3831c8a07704","unicode_tables":"onigmo (Ruby 3.4.8)","compiler_version":"1.3.114","edition":2,"checksum":"sha256:6c4bd90aeca680e71e85e1e265666d5ccb61df8cc9e3e674d51147f2ba93f475"}
data/data/parg/nesc.parg CHANGED
@@ -2,42 +2,127 @@
2
2
  # Code designations: C2-year, year-first, name-first and Draft forms
3
3
  # with (R) marks, editions and variants. Consumed by the ieee grammar
4
4
  # via `use nesc`.
5
+ #
6
+ # Edition-2 notes: the year body (4digit — a bounded repetition of a
7
+ # ref) inlines at every capture site, since a capture wrapping a
8
+ # repetition ref expands to node lists inside the capture while the
9
+ # inlined body binds as one scalar string. The month / edition /
10
+ # variant captures stay on their rules — pure literal alternations
11
+ # bind as spans — and the (R)/NESC abbreviation marks capture their
12
+ # literal tokens directly.
5
13
 
6
- grammar PubidNesc version "0.1.0" {
14
+ grammar PubidNesc version "0.1.0" edition 2 {
7
15
  digit = %x30-39
8
- digits = 1*digit
9
16
  space = " "
10
17
  comma = ","
11
18
  dash = "-"
12
19
  dot = "."
13
20
  slash = "/"
14
21
 
15
- year = 4digit
16
22
  c2_code = "C2" as code
17
23
  nesc_full_name = "National Electrical Safety Code" / "National Electric Safety Code"
18
24
  nesc_abbr = "NESC"
19
25
  nesc_name = nesc_full_name / nesc_abbr
20
26
  registered = "(R)"
21
- edition = ("Premier Edition" / "Second Edition" / "Third Edition" / "Fourth Edition" / "Fifth Edition" / "Sixth Edition" / "Seventh Edition" / "Eighth Edition" / "Ninth Edition" / "Tenth Edition" / "First Edition") as edition
22
- variant = ("Handbook" / "Redline") as variant
23
- month = ("January" / "February" / "March" / "April" / "May" / "June" / "July" / "August" / "September" / "October" / "November" / "December") as month
27
+ edition = {
28
+ (
29
+ "Premier Edition"
30
+ / "Second Edition"
31
+ / "Third Edition"
32
+ / "Fourth Edition"
33
+ / "Fifth Edition"
34
+ / "Sixth Edition"
35
+ / "Seventh Edition"
36
+ / "Eighth Edition"
37
+ / "Ninth Edition"
38
+ / "Tenth Edition"
39
+ / "First Edition"
40
+ ) as edition
41
+ }
42
+ variant = {
43
+ ("Handbook" / "Redline") as variant
44
+ }
45
+ month = {
46
+ (
47
+ "January"
48
+ / "February"
49
+ / "March"
50
+ / "April"
51
+ / "May"
52
+ / "June"
53
+ / "July"
54
+ / "August"
55
+ / "September"
56
+ / "October"
57
+ / "November"
58
+ / "December"
59
+ ) as month
60
+ }
24
61
 
25
- c2_standard = (c2_code dash (year) as year [([comma] space)] nesc_full_name [registered] [(space "(" nesc_abbr [registered] ")")])
26
- year_first = ((year) as year) space (((nesc_full_name) as full_name [(registered) as name_registered] [(space "(" (nesc_abbr) as paren_abbr [(registered) as paren_registered] ")")]) / (((nesc_abbr) as abbr [(registered) as abbr_registered]))) [(space variant)] [(comma space edition)]
27
- name_first = ((nesc_full_name [registered]) comma space c2_code dash (year) as year [(space "-" space variant)])
28
- draft_nesc = (("Draft") as draft space nesc_name [registered] comma space (month) space (year) as year)
62
+ c2_standard = {
63
+ (c2_code) (dash) ((4digit)) as year [([comma] space)] nesc_full_name
64
+ [registered]
65
+ [(space "(" (nesc_abbr) [(registered)] ")")]
66
+ }
67
+ year_first = {
68
+ ((4digit)) as year space
69
+ (
70
+ ((nesc_full_name)) as full_name [(registered) as name_registered]
71
+ [(space "(" (nesc_abbr) as paren_abbr [(registered) as paren_registered] ")")]
72
+ / ((nesc_abbr)) as abbr [(registered) as abbr_registered]
73
+ )
74
+ [(space (variant))]
75
+ [((comma space edition))]
76
+ }
77
+ name_first = {
78
+ ((nesc_full_name [registered])) (comma space) c2_code (dash)
79
+ ((4digit)) as year
80
+ [((space "-" space (variant)))]
81
+ }
82
+ draft_nesc = {
83
+ ("Draft") as nesc_draft_marker space nesc_name [registered] (comma space) (month) space
84
+ ((4digit)) as year
85
+ }
29
86
  # Preprint is a draft STAGE of the C2 code (NESC terminology for its
30
87
  # pre-edition drafts), not a variant: dotted is the canonical spelling
31
88
  # (C2.2012.Preprint); dash (C2-2012-Preprint) and the catalogue's
32
89
  # slash tail (C2-2002/Preprint) are aliases. The verbose
33
90
  # "Preprint Proposal(s) for the YYYY Edition of ..." forms cite the same
34
91
  # draft by its target edition year.
35
- c2_preprint = (c2_code ((dot (year) as year dot) / (dash (year) as year dash) / (dash (year) as year slash)) ("Preprint") as preprint)
36
- preprint_proposal = (("Preprint") as preprint space ("Proposals" / "Proposal") space "for" space "the" space (year) as year space "Edition" space "of" space "the" space nesc_full_name [(space "(" nesc_abbr [registered] ")")])
92
+ c2_preprint = {
93
+ c2_code
94
+ (
95
+ (dot ((4digit)) as year dot)
96
+ / (dash ((4digit)) as year dash)
97
+ / (dash ((4digit)) as year slash)
98
+ )
99
+ (("Preprint")) as preprint
100
+ }
101
+ preprint_proposal = {
102
+ (("Preprint")) as preprint space ("Proposals" / "Proposal") space "for" space
103
+ "the" space ((4digit)) as year space "Edition" space "of" space "the" space
104
+ nesc_full_name
105
+ [(space "(" (nesc_abbr) [registered] ")")]
106
+ }
37
107
  nesc_identifier = draft_nesc / preprint_proposal / name_first / c2_preprint / c2_standard / year_first
38
108
 
39
109
  entry nesc_identifier: nesc_identifier
40
110
 
111
+ bindings nesc_identifier {
112
+ code -> code (string)
113
+ year -> year (string)
114
+ full_name -> full_name (string)
115
+ name_registered -> name_registered (string)
116
+ paren_abbr -> paren_abbr (string)
117
+ paren_registered -> paren_registered (string)
118
+ abbr -> abbr (string)
119
+ abbr_registered -> abbr_registered (string)
120
+ variant -> variant (string)
121
+ edition -> edition (string)
122
+ month -> month (string)
123
+ preprint -> preprint (string)
124
+ }
125
+
41
126
  test {
42
127
  accept "C2-2023 National Electrical Safety Code"
43
128
  accept "2023 NESC"