@plurnk/plurnk-contracts 1.4.0

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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/SPEC.md +954 -0
  4. package/bin/plurnk-contracts.js +43 -0
  5. package/dist/plurnk.gbnf +394 -0
  6. package/dist/schema/ClientDisplayCapabilities.json +54 -0
  7. package/dist/schema/ClientStatement.json +68 -0
  8. package/dist/schema/EntryReadResult.json +101 -0
  9. package/dist/schema/LineMarker.json +16 -0
  10. package/dist/schema/LoopFlags.json +16 -0
  11. package/dist/schema/MatcherBody.json +84 -0
  12. package/dist/schema/Notice.json +67 -0
  13. package/dist/schema/OperationResult.json +44 -0
  14. package/dist/schema/ParsedPath.json +64 -0
  15. package/dist/schema/PlurnkStatement.json +264 -0
  16. package/dist/schema/Position.json +20 -0
  17. package/dist/schema/ProblemDetails.json +51 -0
  18. package/dist/schema/ProposalDisposition.json +26 -0
  19. package/dist/schema/ProposalProjection.json +44 -0
  20. package/dist/schema/ProviderCost.json +69 -0
  21. package/dist/schema/ResourceSelection.json +20 -0
  22. package/dist/schema/SendBody.json +13 -0
  23. package/dist/schema/TextRegion.json +31 -0
  24. package/dist/src/AstBuilder.d.ts +24 -0
  25. package/dist/src/AstBuilder.d.ts.map +1 -0
  26. package/dist/src/AstBuilder.js +609 -0
  27. package/dist/src/AstBuilder.js.map +1 -0
  28. package/dist/src/PathSyntax.d.ts +9 -0
  29. package/dist/src/PathSyntax.d.ts.map +1 -0
  30. package/dist/src/PathSyntax.js +36 -0
  31. package/dist/src/PathSyntax.js.map +1 -0
  32. package/dist/src/PlurnkErrorStrategy.d.ts +10 -0
  33. package/dist/src/PlurnkErrorStrategy.d.ts.map +1 -0
  34. package/dist/src/PlurnkErrorStrategy.js +147 -0
  35. package/dist/src/PlurnkErrorStrategy.js.map +1 -0
  36. package/dist/src/PlurnkParseError.d.ts +17 -0
  37. package/dist/src/PlurnkParseError.d.ts.map +1 -0
  38. package/dist/src/PlurnkParseError.js +24 -0
  39. package/dist/src/PlurnkParseError.js.map +1 -0
  40. package/dist/src/PlurnkParser.d.ts +9 -0
  41. package/dist/src/PlurnkParser.d.ts.map +1 -0
  42. package/dist/src/PlurnkParser.js +396 -0
  43. package/dist/src/PlurnkParser.js.map +1 -0
  44. package/dist/src/Problems.d.ts +8 -0
  45. package/dist/src/Problems.d.ts.map +1 -0
  46. package/dist/src/Problems.js +23 -0
  47. package/dist/src/Problems.js.map +1 -0
  48. package/dist/src/RecordingListener.d.ts +9 -0
  49. package/dist/src/RecordingListener.d.ts.map +1 -0
  50. package/dist/src/RecordingListener.js +19 -0
  51. package/dist/src/RecordingListener.js.map +1 -0
  52. package/dist/src/Validator.d.ts +49 -0
  53. package/dist/src/Validator.d.ts.map +1 -0
  54. package/dist/src/Validator.js +211 -0
  55. package/dist/src/Validator.js.map +1 -0
  56. package/dist/src/generated/plurnkLexer.d.ts +129 -0
  57. package/dist/src/generated/plurnkLexer.d.ts.map +1 -0
  58. package/dist/src/generated/plurnkLexer.js +808 -0
  59. package/dist/src/generated/plurnkLexer.js.map +1 -0
  60. package/dist/src/generated/plurnkParser.d.ts +525 -0
  61. package/dist/src/generated/plurnkParser.d.ts.map +1 -0
  62. package/dist/src/generated/plurnkParser.js +3896 -0
  63. package/dist/src/generated/plurnkParser.js.map +1 -0
  64. package/dist/src/generated/plurnkParserVisitor.d.ts +298 -0
  65. package/dist/src/generated/plurnkParserVisitor.d.ts.map +1 -0
  66. package/dist/src/generated/plurnkParserVisitor.js +257 -0
  67. package/dist/src/generated/plurnkParserVisitor.js.map +1 -0
  68. package/dist/src/index.d.ts +13 -0
  69. package/dist/src/index.d.ts.map +1 -0
  70. package/dist/src/index.js +10 -0
  71. package/dist/src/index.js.map +1 -0
  72. package/dist/src/types.d.ts +29 -0
  73. package/dist/src/types.d.ts.map +1 -0
  74. package/dist/src/types.generated.d.ts +450 -0
  75. package/dist/src/types.generated.d.ts.map +1 -0
  76. package/dist/src/types.generated.js +4 -0
  77. package/dist/src/types.generated.js.map +1 -0
  78. package/dist/src/types.js +23 -0
  79. package/dist/src/types.js.map +1 -0
  80. package/package.json +87 -0
  81. package/plurnk.md +220 -0
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from "node:fs";
3
+ import { parseArgs } from "node:util";
4
+ import { PlurnkParser } from "../dist/src/index.js";
5
+
6
+ const USAGE = `Usage:
7
+ plurnk-contracts [file] Parse plurnk source from a file (or stdin if omitted or '-')
8
+ and print the result as JSON.
9
+ plurnk-contracts --help Show this message.
10
+
11
+ Exit codes:
12
+ 0 parse succeeded with no errors and no unparsed tail
13
+ 1 parse produced one or more errors, or left an unparsed tail`;
14
+
15
+ const { values, positionals } = parseArgs({
16
+ args: process.argv.slice(2),
17
+ options: {
18
+ help: { type: "boolean", short: "h" },
19
+ },
20
+ allowPositionals: true,
21
+ });
22
+
23
+ if (values.help) {
24
+ process.stdout.write(`${USAGE}\n`);
25
+ process.exit(0);
26
+ }
27
+
28
+ const target = positionals[0];
29
+ const input = !target || target === "-"
30
+ ? readFileSync(0, "utf8")
31
+ : readFileSync(target, "utf8");
32
+
33
+ const result = PlurnkParser.parse(input);
34
+
35
+ const serialized = JSON.stringify(
36
+ result,
37
+ (_key, value) => (value instanceof RegExp ? value.toString() : value),
38
+ 2,
39
+ );
40
+ process.stdout.write(`${serialized}\n`);
41
+
42
+ const hasIssues = result.items.some((i) => i.kind === "error") || result.unparsedTail !== undefined;
43
+ process.exit(hasIssues ? 1 : 0);
@@ -0,0 +1,394 @@
1
+ # @generated by scriptify/generate-gbnf.ts — do not edit; run `npm run build:gbnf`.
2
+ root ::= root-turn
3
+ find-b0 ::= (":" find-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] find-b0)?
4
+ find-b1 ::= ("F" find-b2 | ":" find-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:F] find-b0)?
5
+ find-b2 ::= ("I" find-b3 | ":" find-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:I] find-b0)?
6
+ find-b3 ::= ("N" find-b4 | ":" find-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:N] find-b0)?
7
+ find-b4 ::= (":" find-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] find-b0)?
8
+ find-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] find-b0)?
9
+ find-1-b0 ::= (":" find-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] find-1-b0)?
10
+ find-1-b1 ::= ("F" find-1-b2 | ":" find-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:F] find-1-b0)?
11
+ find-1-b2 ::= ("I" find-1-b3 | ":" find-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:I] find-1-b0)?
12
+ find-1-b3 ::= ("N" find-1-b4 | ":" find-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:N] find-1-b0)?
13
+ find-1-b4 ::= ("D" find-1-b5 | ":" find-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] find-1-b0)?
14
+ find-1-b5 ::= (":" find-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:1] find-1-b0)?
15
+ find-1-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] find-1-b0)?
16
+ find-2-b0 ::= (":" find-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] find-2-b0)?
17
+ find-2-b1 ::= ("F" find-2-b2 | ":" find-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:F] find-2-b0)?
18
+ find-2-b2 ::= ("I" find-2-b3 | ":" find-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:I] find-2-b0)?
19
+ find-2-b3 ::= ("N" find-2-b4 | ":" find-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:N] find-2-b0)?
20
+ find-2-b4 ::= ("D" find-2-b5 | ":" find-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] find-2-b0)?
21
+ find-2-b5 ::= (":" find-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:2] find-2-b0)?
22
+ find-2-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] find-2-b0)?
23
+ read-b0 ::= (":" read-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] read-b0)?
24
+ read-b1 ::= ("R" read-b2 | ":" read-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:R] read-b0)?
25
+ read-b2 ::= ("E" read-b3 | ":" read-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:E] read-b0)?
26
+ read-b3 ::= ("A" read-b4 | ":" read-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:A] read-b0)?
27
+ read-b4 ::= (":" read-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] read-b0)?
28
+ read-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] read-b0)?
29
+ read-1-b0 ::= (":" read-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] read-1-b0)?
30
+ read-1-b1 ::= ("R" read-1-b2 | ":" read-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:R] read-1-b0)?
31
+ read-1-b2 ::= ("E" read-1-b3 | ":" read-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:E] read-1-b0)?
32
+ read-1-b3 ::= ("A" read-1-b4 | ":" read-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:A] read-1-b0)?
33
+ read-1-b4 ::= ("D" read-1-b5 | ":" read-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] read-1-b0)?
34
+ read-1-b5 ::= (":" read-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:1] read-1-b0)?
35
+ read-1-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] read-1-b0)?
36
+ read-2-b0 ::= (":" read-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] read-2-b0)?
37
+ read-2-b1 ::= ("R" read-2-b2 | ":" read-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:R] read-2-b0)?
38
+ read-2-b2 ::= ("E" read-2-b3 | ":" read-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:E] read-2-b0)?
39
+ read-2-b3 ::= ("A" read-2-b4 | ":" read-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:A] read-2-b0)?
40
+ read-2-b4 ::= ("D" read-2-b5 | ":" read-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] read-2-b0)?
41
+ read-2-b5 ::= (":" read-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:2] read-2-b0)?
42
+ read-2-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] read-2-b0)?
43
+ edit-b0 ::= (":" edit-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] edit-b0)?
44
+ edit-b1 ::= ("E" edit-b2 | ":" edit-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] edit-b0)?
45
+ edit-b2 ::= ("D" edit-b3 | ":" edit-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] edit-b0)?
46
+ edit-b3 ::= ("I" edit-b4 | ":" edit-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:I] edit-b0)?
47
+ edit-b4 ::= (":" edit-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:T] edit-b0)?
48
+ edit-1-b0 ::= (":" edit-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] edit-1-b0)?
49
+ edit-1-b1 ::= ("E" edit-1-b2 | ":" edit-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] edit-1-b0)?
50
+ edit-1-b2 ::= ("D" edit-1-b3 | ":" edit-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] edit-1-b0)?
51
+ edit-1-b3 ::= ("I" edit-1-b4 | ":" edit-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:I] edit-1-b0)?
52
+ edit-1-b4 ::= ("T" edit-1-b5 | ":" edit-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:T] edit-1-b0)?
53
+ edit-1-b5 ::= (":" edit-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] edit-1-b0)?
54
+ edit-2-b0 ::= (":" edit-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] edit-2-b0)?
55
+ edit-2-b1 ::= ("E" edit-2-b2 | ":" edit-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] edit-2-b0)?
56
+ edit-2-b2 ::= ("D" edit-2-b3 | ":" edit-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] edit-2-b0)?
57
+ edit-2-b3 ::= ("I" edit-2-b4 | ":" edit-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:I] edit-2-b0)?
58
+ edit-2-b4 ::= ("T" edit-2-b5 | ":" edit-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:T] edit-2-b0)?
59
+ edit-2-b5 ::= (":" edit-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] edit-2-b0)?
60
+ copy-b0 ::= (":" copy-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] copy-b0)?
61
+ copy-b1 ::= ("C" copy-b2 | ":" copy-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:C] copy-b0)?
62
+ copy-b2 ::= ("O" copy-b3 | ":" copy-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] copy-b0)?
63
+ copy-b3 ::= ("P" copy-b4 | ":" copy-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] copy-b0)?
64
+ copy-b4 ::= (":" copy-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:Y] copy-b0)?
65
+ copy-1-b0 ::= (":" copy-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] copy-1-b0)?
66
+ copy-1-b1 ::= ("C" copy-1-b2 | ":" copy-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:C] copy-1-b0)?
67
+ copy-1-b2 ::= ("O" copy-1-b3 | ":" copy-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] copy-1-b0)?
68
+ copy-1-b3 ::= ("P" copy-1-b4 | ":" copy-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] copy-1-b0)?
69
+ copy-1-b4 ::= ("Y" copy-1-b5 | ":" copy-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:Y] copy-1-b0)?
70
+ copy-1-b5 ::= (":" copy-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] copy-1-b0)?
71
+ copy-2-b0 ::= (":" copy-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] copy-2-b0)?
72
+ copy-2-b1 ::= ("C" copy-2-b2 | ":" copy-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:C] copy-2-b0)?
73
+ copy-2-b2 ::= ("O" copy-2-b3 | ":" copy-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] copy-2-b0)?
74
+ copy-2-b3 ::= ("P" copy-2-b4 | ":" copy-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] copy-2-b0)?
75
+ copy-2-b4 ::= ("Y" copy-2-b5 | ":" copy-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:Y] copy-2-b0)?
76
+ copy-2-b5 ::= (":" copy-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] copy-2-b0)?
77
+ move-b0 ::= (":" move-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] move-b0)?
78
+ move-b1 ::= ("M" move-b2 | ":" move-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:M] move-b0)?
79
+ move-b2 ::= ("O" move-b3 | ":" move-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] move-b0)?
80
+ move-b3 ::= ("V" move-b4 | ":" move-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:V] move-b0)?
81
+ move-b4 ::= (":" move-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] move-b0)?
82
+ move-1-b0 ::= (":" move-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] move-1-b0)?
83
+ move-1-b1 ::= ("M" move-1-b2 | ":" move-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:M] move-1-b0)?
84
+ move-1-b2 ::= ("O" move-1-b3 | ":" move-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] move-1-b0)?
85
+ move-1-b3 ::= ("V" move-1-b4 | ":" move-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:V] move-1-b0)?
86
+ move-1-b4 ::= ("E" move-1-b5 | ":" move-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] move-1-b0)?
87
+ move-1-b5 ::= (":" move-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] move-1-b0)?
88
+ move-2-b0 ::= (":" move-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] move-2-b0)?
89
+ move-2-b1 ::= ("M" move-2-b2 | ":" move-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:M] move-2-b0)?
90
+ move-2-b2 ::= ("O" move-2-b3 | ":" move-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] move-2-b0)?
91
+ move-2-b3 ::= ("V" move-2-b4 | ":" move-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:V] move-2-b0)?
92
+ move-2-b4 ::= ("E" move-2-b5 | ":" move-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] move-2-b0)?
93
+ move-2-b5 ::= (":" move-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] move-2-b0)?
94
+ open-b0 ::= (":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] open-b0)?
95
+ open-b1 ::= ("O" open-b2 | ":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:O] open-b0)?
96
+ open-b2 ::= ("P" open-b3 | ":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:P] open-b0)?
97
+ open-b3 ::= ("E" open-b4 | ":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:E] open-b0)?
98
+ open-b4 ::= (":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:N] open-b0)?
99
+ open-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] open-b0)?
100
+ open-1-b0 ::= (":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] open-1-b0)?
101
+ open-1-b1 ::= ("O" open-1-b2 | ":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:O] open-1-b0)?
102
+ open-1-b2 ::= ("P" open-1-b3 | ":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:P] open-1-b0)?
103
+ open-1-b3 ::= ("E" open-1-b4 | ":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:E] open-1-b0)?
104
+ open-1-b4 ::= ("N" open-1-b5 | ":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:N] open-1-b0)?
105
+ open-1-b5 ::= (":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:1] open-1-b0)?
106
+ open-1-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] open-1-b0)?
107
+ open-2-b0 ::= (":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] open-2-b0)?
108
+ open-2-b1 ::= ("O" open-2-b2 | ":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:O] open-2-b0)?
109
+ open-2-b2 ::= ("P" open-2-b3 | ":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:P] open-2-b0)?
110
+ open-2-b3 ::= ("E" open-2-b4 | ":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:E] open-2-b0)?
111
+ open-2-b4 ::= ("N" open-2-b5 | ":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:N] open-2-b0)?
112
+ open-2-b5 ::= (":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:2] open-2-b0)?
113
+ open-2-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] open-2-b0)?
114
+ fold-b0 ::= (":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] fold-b0)?
115
+ fold-b1 ::= ("F" fold-b2 | ":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:F] fold-b0)?
116
+ fold-b2 ::= ("O" fold-b3 | ":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:O] fold-b0)?
117
+ fold-b3 ::= ("L" fold-b4 | ":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:L] fold-b0)?
118
+ fold-b4 ::= (":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] fold-b0)?
119
+ fold-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] fold-b0)?
120
+ fold-1-b0 ::= (":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] fold-1-b0)?
121
+ fold-1-b1 ::= ("F" fold-1-b2 | ":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:F] fold-1-b0)?
122
+ fold-1-b2 ::= ("O" fold-1-b3 | ":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:O] fold-1-b0)?
123
+ fold-1-b3 ::= ("L" fold-1-b4 | ":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:L] fold-1-b0)?
124
+ fold-1-b4 ::= ("D" fold-1-b5 | ":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] fold-1-b0)?
125
+ fold-1-b5 ::= (":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:1] fold-1-b0)?
126
+ fold-1-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] fold-1-b0)?
127
+ fold-2-b0 ::= (":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] fold-2-b0)?
128
+ fold-2-b1 ::= ("F" fold-2-b2 | ":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:F] fold-2-b0)?
129
+ fold-2-b2 ::= ("O" fold-2-b3 | ":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:O] fold-2-b0)?
130
+ fold-2-b3 ::= ("L" fold-2-b4 | ":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:L] fold-2-b0)?
131
+ fold-2-b4 ::= ("D" fold-2-b5 | ":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:D] fold-2-b0)?
132
+ fold-2-b5 ::= (":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:2] fold-2-b0)?
133
+ fold-2-pattern-start ::= ([^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\n\r:] fold-2-b0)?
134
+ send-b0 ::= (":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] send-b0)?
135
+ send-b1 ::= ("S" send-b2 | ":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:S] send-b0)?
136
+ send-b2 ::= ("E" send-b3 | ":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] send-b0)?
137
+ send-b3 ::= ("N" send-b4 | ":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] send-b0)?
138
+ send-b4 ::= (":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] send-b0)?
139
+ send-b0ne ::= ":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] send-b0
140
+ send-1-b0 ::= (":" send-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] send-1-b0)?
141
+ send-1-b1 ::= ("S" send-1-b2 | ":" send-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:S] send-1-b0)?
142
+ send-1-b2 ::= ("E" send-1-b3 | ":" send-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] send-1-b0)?
143
+ send-1-b3 ::= ("N" send-1-b4 | ":" send-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] send-1-b0)?
144
+ send-1-b4 ::= ("D" send-1-b5 | ":" send-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] send-1-b0)?
145
+ send-1-b5 ::= (":" send-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] send-1-b0)?
146
+ send-1-b0ne ::= ":" send-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] send-1-b0
147
+ send-2-b0 ::= (":" send-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] send-2-b0)?
148
+ send-2-b1 ::= ("S" send-2-b2 | ":" send-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:S] send-2-b0)?
149
+ send-2-b2 ::= ("E" send-2-b3 | ":" send-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] send-2-b0)?
150
+ send-2-b3 ::= ("N" send-2-b4 | ":" send-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] send-2-b0)?
151
+ send-2-b4 ::= ("D" send-2-b5 | ":" send-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] send-2-b0)?
152
+ send-2-b5 ::= (":" send-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] send-2-b0)?
153
+ send-2-b0ne ::= ":" send-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] send-2-b0
154
+ exec-b0 ::= (":" exec-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] exec-b0)?
155
+ exec-b1 ::= ("E" exec-b2 | ":" exec-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] exec-b0)?
156
+ exec-b2 ::= ("X" exec-b3 | ":" exec-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:X] exec-b0)?
157
+ exec-b3 ::= ("E" exec-b4 | ":" exec-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] exec-b0)?
158
+ exec-b4 ::= (":" exec-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:C] exec-b0)?
159
+ exec-1-b0 ::= (":" exec-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] exec-1-b0)?
160
+ exec-1-b1 ::= ("E" exec-1-b2 | ":" exec-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] exec-1-b0)?
161
+ exec-1-b2 ::= ("X" exec-1-b3 | ":" exec-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:X] exec-1-b0)?
162
+ exec-1-b3 ::= ("E" exec-1-b4 | ":" exec-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] exec-1-b0)?
163
+ exec-1-b4 ::= ("C" exec-1-b5 | ":" exec-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:C] exec-1-b0)?
164
+ exec-1-b5 ::= (":" exec-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] exec-1-b0)?
165
+ exec-2-b0 ::= (":" exec-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] exec-2-b0)?
166
+ exec-2-b1 ::= ("E" exec-2-b2 | ":" exec-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] exec-2-b0)?
167
+ exec-2-b2 ::= ("X" exec-2-b3 | ":" exec-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:X] exec-2-b0)?
168
+ exec-2-b3 ::= ("E" exec-2-b4 | ":" exec-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] exec-2-b0)?
169
+ exec-2-b4 ::= ("C" exec-2-b5 | ":" exec-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:C] exec-2-b0)?
170
+ exec-2-b5 ::= (":" exec-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] exec-2-b0)?
171
+ work-b0 ::= (":" work-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] work-b0)?
172
+ work-b1 ::= ("W" work-b2 | ":" work-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:W] work-b0)?
173
+ work-b2 ::= ("O" work-b3 | ":" work-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] work-b0)?
174
+ work-b3 ::= ("R" work-b4 | ":" work-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:R] work-b0)?
175
+ work-b4 ::= (":" work-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] work-b0)?
176
+ work-b0ne ::= ":" work-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] work-b0
177
+ work-1-b0 ::= (":" work-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] work-1-b0)?
178
+ work-1-b1 ::= ("W" work-1-b2 | ":" work-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:W] work-1-b0)?
179
+ work-1-b2 ::= ("O" work-1-b3 | ":" work-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] work-1-b0)?
180
+ work-1-b3 ::= ("R" work-1-b4 | ":" work-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:R] work-1-b0)?
181
+ work-1-b4 ::= ("K" work-1-b5 | ":" work-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] work-1-b0)?
182
+ work-1-b5 ::= (":" work-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] work-1-b0)?
183
+ work-1-b0ne ::= ":" work-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] work-1-b0
184
+ work-2-b0 ::= (":" work-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] work-2-b0)?
185
+ work-2-b1 ::= ("W" work-2-b2 | ":" work-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:W] work-2-b0)?
186
+ work-2-b2 ::= ("O" work-2-b3 | ":" work-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] work-2-b0)?
187
+ work-2-b3 ::= ("R" work-2-b4 | ":" work-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:R] work-2-b0)?
188
+ work-2-b4 ::= ("K" work-2-b5 | ":" work-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] work-2-b0)?
189
+ work-2-b5 ::= (":" work-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] work-2-b0)?
190
+ work-2-b0ne ::= ":" work-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] work-2-b0
191
+ fork-b0 ::= (":" fork-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fork-b0)?
192
+ fork-b1 ::= ("F" fork-b2 | ":" fork-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fork-b0)?
193
+ fork-b2 ::= ("O" fork-b3 | ":" fork-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fork-b0)?
194
+ fork-b3 ::= ("R" fork-b4 | ":" fork-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:R] fork-b0)?
195
+ fork-b4 ::= (":" fork-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] fork-b0)?
196
+ fork-b0ne ::= ":" fork-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fork-b0
197
+ fork-1-b0 ::= (":" fork-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fork-1-b0)?
198
+ fork-1-b1 ::= ("F" fork-1-b2 | ":" fork-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fork-1-b0)?
199
+ fork-1-b2 ::= ("O" fork-1-b3 | ":" fork-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fork-1-b0)?
200
+ fork-1-b3 ::= ("R" fork-1-b4 | ":" fork-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:R] fork-1-b0)?
201
+ fork-1-b4 ::= ("K" fork-1-b5 | ":" fork-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] fork-1-b0)?
202
+ fork-1-b5 ::= (":" fork-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] fork-1-b0)?
203
+ fork-1-b0ne ::= ":" fork-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fork-1-b0
204
+ fork-2-b0 ::= (":" fork-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fork-2-b0)?
205
+ fork-2-b1 ::= ("F" fork-2-b2 | ":" fork-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fork-2-b0)?
206
+ fork-2-b2 ::= ("O" fork-2-b3 | ":" fork-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fork-2-b0)?
207
+ fork-2-b3 ::= ("R" fork-2-b4 | ":" fork-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:R] fork-2-b0)?
208
+ fork-2-b4 ::= ("K" fork-2-b5 | ":" fork-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] fork-2-b0)?
209
+ fork-2-b5 ::= (":" fork-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] fork-2-b0)?
210
+ fork-2-b0ne ::= ":" fork-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fork-2-b0
211
+ kill-b0 ::= (":" kill-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] kill-b0)?
212
+ kill-b1 ::= ("K" kill-b2 | ":" kill-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] kill-b0)?
213
+ kill-b2 ::= ("I" kill-b3 | ":" kill-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:I] kill-b0)?
214
+ kill-b3 ::= ("L" kill-b4 | ":" kill-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] kill-b0)?
215
+ kill-b4 ::= (":" kill-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] kill-b0)?
216
+ kill-1-b0 ::= (":" kill-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] kill-1-b0)?
217
+ kill-1-b1 ::= ("K" kill-1-b2 | ":" kill-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] kill-1-b0)?
218
+ kill-1-b2 ::= ("I" kill-1-b3 | ":" kill-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:I] kill-1-b0)?
219
+ kill-1-b3 ::= ("L" kill-1-b4 | ":" kill-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] kill-1-b0)?
220
+ kill-1-b4 ::= ("L" kill-1-b5 | ":" kill-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] kill-1-b0)?
221
+ kill-1-b5 ::= (":" kill-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] kill-1-b0)?
222
+ kill-2-b0 ::= (":" kill-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] kill-2-b0)?
223
+ kill-2-b1 ::= ("K" kill-2-b2 | ":" kill-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:K] kill-2-b0)?
224
+ kill-2-b2 ::= ("I" kill-2-b3 | ":" kill-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:I] kill-2-b0)?
225
+ kill-2-b3 ::= ("L" kill-2-b4 | ":" kill-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] kill-2-b0)?
226
+ kill-2-b4 ::= ("L" kill-2-b5 | ":" kill-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] kill-2-b0)?
227
+ kill-2-b5 ::= (":" kill-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] kill-2-b0)?
228
+ plan-b0 ::= (":" plan-b1 | "<" plan-lt | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:<] plan-b0)?
229
+ plan-b1 ::= ("P" plan-b2 | ":" plan-b1 | "<" plan-lt | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P<] plan-b0)?
230
+ plan-b2 ::= ("L" plan-b3 | ":" plan-b1 | "<" plan-lt | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L<] plan-b0)?
231
+ plan-b3 ::= ("A" plan-b4 | ":" plan-b1 | "<" plan-lt | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:A<] plan-b0)?
232
+ plan-b4 ::= (":" plan-b1 | "<" plan-lt | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N<] plan-b0)?
233
+ plan-lt ::= (":" plan-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:<] plan-b0)?
234
+ plan-b0ne ::= ":" plan-b1 | "<" plan-lt | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:<] plan-b0
235
+ plan ::= "<<PLAN" ":" plan-b0ne ":PLAN"
236
+ sep ::= [ \t\r\n]? [ \t\r\n]? [ \t\r\n]? [ \t\r\n]? [ \t\r\n]? [ \t\r\n]? [ \t\r\n]?
237
+ rz-chan-b0 ::= ("<" rz-chan-b1 | [|chanel>toug\n] rz-chan-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
238
+ rz-chan-b1 ::= ("<" rz-chan-b1 | "|" rz-chan-b2 | "c" rz-chan-b18 | [hanel>toug\n] rz-chan-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
239
+ rz-chan-b2 ::= ("<" rz-chan-b1 | [|hanel>toug\n] rz-chan-b0 | "c" rz-chan-b3 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
240
+ rz-chan-b3 ::= ("<" rz-chan-b1 | [|canel>toug\n] rz-chan-b0 | "h" rz-chan-b4 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
241
+ rz-chan-b4 ::= ("<" rz-chan-b1 | [|chnel>toug\n] rz-chan-b0 | "a" rz-chan-b5 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
242
+ rz-chan-b5 ::= ("<" rz-chan-b1 | [|chael>toug\n] rz-chan-b0 | "n" rz-chan-b6 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
243
+ rz-chan-b6 ::= ("<" rz-chan-b1 | [|chael>toug\n] rz-chan-b0 | "n" rz-chan-b7 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
244
+ rz-chan-b7 ::= ("<" rz-chan-b1 | [|chanl>toug\n] rz-chan-b0 | "e" rz-chan-b8 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
245
+ rz-chan-b8 ::= ("<" rz-chan-b1 | [|chane>toug\n] rz-chan-b0 | "l" rz-chan-b9 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
246
+ rz-chan-b9 ::= ("<" rz-chan-b1 | [|chaneltoug\n] rz-chan-b0 | ">" rz-chan-b10 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
247
+ rz-chan-b10 ::= ("<" rz-chan-b1 | [|chanel>oug\n] rz-chan-b0 | "t" rz-chan-b11 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
248
+ rz-chan-b11 ::= ("<" rz-chan-b1 | [|canel>toug\n] rz-chan-b0 | "h" rz-chan-b12 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
249
+ rz-chan-b12 ::= ("<" rz-chan-b1 | [|chanel>tug\n] rz-chan-b0 | "o" rz-chan-b13 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
250
+ rz-chan-b13 ::= ("<" rz-chan-b1 | [|chanel>tog\n] rz-chan-b0 | "u" rz-chan-b14 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
251
+ rz-chan-b14 ::= ("<" rz-chan-b1 | [|chanel>tou\n] rz-chan-b0 | "g" rz-chan-b15 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
252
+ rz-chan-b15 ::= ("<" rz-chan-b1 | [|canel>toug\n] rz-chan-b0 | "h" rz-chan-b16 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
253
+ rz-chan-b16 ::= ("<" rz-chan-b1 | [|chanel>oug\n] rz-chan-b0 | "t" rz-chan-b17 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
254
+ rz-chan-b17 ::= ("<" rz-chan-b1 | [|chanel>toug] rz-chan-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
255
+ rz-chan-b18 ::= ("<" rz-chan-b1 | [|canel>toug\n] rz-chan-b0 | "h" rz-chan-b19 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
256
+ rz-chan-b19 ::= ("<" rz-chan-b1 | [|chnel>toug\n] rz-chan-b0 | "a" rz-chan-b20 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
257
+ rz-chan-b20 ::= ("<" rz-chan-b1 | [|chael>toug\n] rz-chan-b0 | "n" rz-chan-b21 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
258
+ rz-chan-b21 ::= ("<" rz-chan-b1 | [|chael>toug\n] rz-chan-b0 | "n" rz-chan-b22 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
259
+ rz-chan-b22 ::= ("<" rz-chan-b1 | [|chanl>toug\n] rz-chan-b0 | "e" rz-chan-b23 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
260
+ rz-chan-b23 ::= ("<" rz-chan-b1 | [|chane>toug\n] rz-chan-b0 | "l" rz-chan-b24 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
261
+ rz-chan-b24 ::= ("<" rz-chan-b1 | "|" rz-chan-b25 | [chanel>toug\n] rz-chan-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
262
+ rz-chan-b25 ::= ("<" rz-chan-b1 | [|chaneltoug\n] rz-chan-b0 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F<|chanel>toug\n] rz-chan-b0)?
263
+ channel ::= "<|channel>thought\n" rz-chan-b0 "<channel|>"
264
+ tail-0 ::= send-mid-any sep tail-1 | op-statement sep tail-1 | send-final-first sep
265
+ tail-1 ::= send-mid-any sep tail-2 | op-statement sep tail-2 | send-final-any sep
266
+ tail-2 ::= send-mid-any sep tail-3 | op-statement sep tail-3 | send-final-any sep
267
+ tail-3 ::= send-mid-any sep tail-4 | op-statement sep tail-4 | send-final-any sep
268
+ tail-4 ::= send-mid-any sep tail-5 | op-statement sep tail-5 | send-final-any sep
269
+ tail-5 ::= send-mid-any sep tail-6 | op-statement sep tail-6 | send-final-any sep
270
+ tail-6 ::= send-mid-any sep tail-7 | op-statement sep tail-7 | send-final-any sep
271
+ tail-7 ::= send-mid-any sep tail-8 | op-statement sep tail-8 | send-final-any sep
272
+ tail-8 ::= send-mid-any sep tail-9 | op-statement sep tail-9 | send-final-any sep
273
+ tail-9 ::= send-mid-any sep tail-10 | op-statement sep tail-10 | send-final-any sep
274
+ tail-10 ::= send-mid-any sep tail-11 | op-statement sep tail-11 | send-final-any sep
275
+ tail-11 ::= send-mid-any sep tail-12 | op-statement sep tail-12 | send-final-any sep
276
+ tail-12 ::= send-mid-any sep tail-13 | op-statement sep tail-13 | send-final-any sep
277
+ tail-13 ::= send-mid-any sep tail-14 | op-statement sep tail-14 | send-final-any sep
278
+ tail-14 ::= send-final-any sep
279
+ root-turn ::= channel sep plan sep tail-0
280
+ op-statement-6 ::= tags? target line? ":" copy-1-b0 ":COPY1"
281
+ op-statement-7 ::= tags? target line? ":" copy-2-b0 ":COPY2"
282
+ op-statement-5 ::= tags? target line? ":" copy-b0 ":COPY" | "1" op-statement-6 | "2" op-statement-7
283
+ op-statement-4 ::= "Y" op-statement-5
284
+ op-statement-3 ::= "P" op-statement-4
285
+ op-statement-2 ::= "O" op-statement-3
286
+ op-statement-12 ::= tags? target line? ":" edit-1-b0 ":EDIT1"
287
+ op-statement-13 ::= tags? target line? ":" edit-2-b0 ":EDIT2"
288
+ op-statement-11 ::= tags? target line? ":" edit-b0 ":EDIT" | "1" op-statement-12 | "2" op-statement-13
289
+ op-statement-10 ::= "T" op-statement-11
290
+ op-statement-9 ::= "I" op-statement-10
291
+ op-statement-17 ::= exec-sig? target? line? ":" exec-1-b0 ":EXEC1"
292
+ op-statement-18 ::= exec-sig? target? line? ":" exec-2-b0 ":EXEC2"
293
+ op-statement-16 ::= exec-sig? target? line? ":" exec-b0 ":EXEC" | "1" op-statement-17 | "2" op-statement-18
294
+ op-statement-15 ::= "C" op-statement-16
295
+ op-statement-14 ::= "E" op-statement-15
296
+ op-statement-8 ::= "D" op-statement-9 | "X" op-statement-14
297
+ op-statement-23 ::= tags? target line? ":" find-1-pattern-start ":FIND1"
298
+ op-statement-24 ::= tags? target line? ":" find-2-pattern-start ":FIND2"
299
+ op-statement-22 ::= tags? target line? ":" find-pattern-start ":FIND" | "1" op-statement-23 | "2" op-statement-24
300
+ op-statement-21 ::= "D" op-statement-22
301
+ op-statement-20 ::= "N" op-statement-21
302
+ op-statement-28 ::= tags? target ":" fold-1-pattern-start ":FOLD1"
303
+ op-statement-29 ::= tags? target ":" fold-2-pattern-start ":FOLD2"
304
+ op-statement-27 ::= tags? target ":" fold-pattern-start ":FOLD" | "1" op-statement-28 | "2" op-statement-29
305
+ op-statement-26 ::= "D" op-statement-27
306
+ op-statement-32 ::= branch? target ":" fork-1-b0ne ":FORK1"
307
+ op-statement-33 ::= branch? target ":" fork-2-b0ne ":FORK2"
308
+ op-statement-31 ::= branch? target ":" fork-b0ne ":FORK" | "1" op-statement-32 | "2" op-statement-33
309
+ op-statement-30 ::= "K" op-statement-31
310
+ op-statement-25 ::= "L" op-statement-26 | "R" op-statement-30
311
+ op-statement-19 ::= "I" op-statement-20 | "O" op-statement-25
312
+ op-statement-38 ::= kill-sig? target ":" kill-1-b0 ":KILL1"
313
+ op-statement-39 ::= kill-sig? target ":" kill-2-b0 ":KILL2"
314
+ op-statement-37 ::= kill-sig? target ":" kill-b0 ":KILL" | "1" op-statement-38 | "2" op-statement-39
315
+ op-statement-36 ::= "L" op-statement-37
316
+ op-statement-35 ::= "L" op-statement-36
317
+ op-statement-34 ::= "I" op-statement-35
318
+ op-statement-44 ::= tags? target line? ":" move-1-b0 ":MOVE1"
319
+ op-statement-45 ::= tags? target line? ":" move-2-b0 ":MOVE2"
320
+ op-statement-43 ::= tags? target line? ":" move-b0 ":MOVE" | "1" op-statement-44 | "2" op-statement-45
321
+ op-statement-42 ::= "E" op-statement-43
322
+ op-statement-41 ::= "V" op-statement-42
323
+ op-statement-40 ::= "O" op-statement-41
324
+ op-statement-50 ::= tags? target ":" open-1-pattern-start ":OPEN1"
325
+ op-statement-51 ::= tags? target ":" open-2-pattern-start ":OPEN2"
326
+ op-statement-49 ::= tags? target ":" open-pattern-start ":OPEN" | "1" op-statement-50 | "2" op-statement-51
327
+ op-statement-48 ::= "N" op-statement-49
328
+ op-statement-47 ::= "E" op-statement-48
329
+ op-statement-46 ::= "P" op-statement-47
330
+ op-statement-56 ::= tags? target line? ":" read-1-pattern-start ":READ1"
331
+ op-statement-57 ::= tags? target line? ":" read-2-pattern-start ":READ2"
332
+ op-statement-55 ::= tags? target line? ":" read-pattern-start ":READ" | "1" op-statement-56 | "2" op-statement-57
333
+ op-statement-54 ::= "D" op-statement-55
334
+ op-statement-53 ::= "A" op-statement-54
335
+ op-statement-52 ::= "E" op-statement-53
336
+ op-statement-62 ::= branch? target ":" work-1-b0ne ":WORK1"
337
+ op-statement-63 ::= branch? target ":" work-2-b0ne ":WORK2"
338
+ op-statement-61 ::= branch? target ":" work-b0ne ":WORK" | "1" op-statement-62 | "2" op-statement-63
339
+ op-statement-60 ::= "K" op-statement-61
340
+ op-statement-59 ::= "R" op-statement-60
341
+ op-statement-58 ::= "O" op-statement-59
342
+ op-statement-1 ::= "C" op-statement-2 | "E" op-statement-8 | "F" op-statement-19 | "K" op-statement-34 | "M" op-statement-40 | "O" op-statement-46 | "R" op-statement-52 | "W" op-statement-58
343
+ op-statement-0 ::= "<" op-statement-1
344
+ op-statement ::= "<" op-statement-0
345
+ send-mid-any-6 ::= "[" status-mid "]" target ":" send-1-b0 ":SEND1" | target ":" send-1-b0 ":SEND1" | "[" status-mid "]" ":" send-1-b0 ":SEND1" | ":" send-1-b0 ":SEND1"
346
+ send-mid-any-7 ::= "[" status-mid "]" target ":" send-2-b0 ":SEND2" | target ":" send-2-b0 ":SEND2" | "[" status-mid "]" ":" send-2-b0 ":SEND2" | ":" send-2-b0 ":SEND2"
347
+ send-mid-any-5 ::= "[" status-mid "]" target ":" send-b0 ":SEND" | target ":" send-b0 ":SEND" | "[" status-mid "]" ":" send-b0 ":SEND" | ":" send-b0 ":SEND" | "1" send-mid-any-6 | "2" send-mid-any-7
348
+ send-mid-any-4 ::= "D" send-mid-any-5
349
+ send-mid-any-3 ::= "N" send-mid-any-4
350
+ send-mid-any-2 ::= "E" send-mid-any-3
351
+ send-mid-any-1 ::= "S" send-mid-any-2
352
+ send-mid-any-0 ::= "<" send-mid-any-1
353
+ send-mid-any ::= "<" send-mid-any-0
354
+ send-final-any-6 ::= "[102]" target? ":" send-1-b0ne ":SEND1" | "[202]" target? park? ":" send-1-b0ne ":SEND1" | "[" status-final-rest "]" target? ":" send-1-b0ne ":SEND1"
355
+ send-final-any-7 ::= "[102]" target? ":" send-2-b0ne ":SEND2" | "[202]" target? park? ":" send-2-b0ne ":SEND2" | "[" status-final-rest "]" target? ":" send-2-b0ne ":SEND2"
356
+ send-final-any-5 ::= "[102]" target? ":" send-b0ne ":SEND" | "[202]" target? park? ":" send-b0ne ":SEND" | "[" status-final-rest "]" target? ":" send-b0ne ":SEND" | "1" send-final-any-6 | "2" send-final-any-7
357
+ send-final-any-4 ::= "D" send-final-any-5
358
+ send-final-any-3 ::= "N" send-final-any-4
359
+ send-final-any-2 ::= "E" send-final-any-3
360
+ send-final-any-1 ::= "S" send-final-any-2
361
+ send-final-any-0 ::= "<" send-final-any-1
362
+ send-final-any ::= "<" send-final-any-0
363
+ send-final-first-6 ::= "[202]" target? park? ":" send-1-b0ne ":SEND1" | "[" status-final-rest "]" target? ":" send-1-b0ne ":SEND1"
364
+ send-final-first-7 ::= "[202]" target? park? ":" send-2-b0ne ":SEND2" | "[" status-final-rest "]" target? ":" send-2-b0ne ":SEND2"
365
+ send-final-first-5 ::= "[202]" target? park? ":" send-b0ne ":SEND" | "[" status-final-rest "]" target? ":" send-b0ne ":SEND" | "1" send-final-first-6 | "2" send-final-first-7
366
+ send-final-first-4 ::= "D" send-final-first-5
367
+ send-final-first-3 ::= "N" send-final-first-4
368
+ send-final-first-2 ::= "E" send-final-first-3
369
+ send-final-first-1 ::= "S" send-final-first-2
370
+ send-final-first-0 ::= "<" send-final-first-1
371
+ send-final-first ::= "<" send-final-first-0
372
+ status-final-rest ::= "200" | "300" | "499"
373
+ park ::= "<" park-t park-poll? ">"
374
+ park-t ::= "-1" | [0-9]+
375
+ park-poll ::= "," [0-9]+
376
+ status-mid ::= [05-9] [0-9] [0-9] | "1" status-mid-1 | "2" status-mid-2 | "3" status-mid-3 | "4" status-mid-4
377
+ status-mid-1 ::= "0" [0-13-9] | [1-9] [0-9]
378
+ status-mid-2 ::= "0" [13-9] | [1-9] [0-9]
379
+ status-mid-3 ::= "0" [1-9] | [1-9] [0-9]
380
+ status-mid-4 ::= "9" [0-8] | [0-8] [0-9]
381
+ tags ::= "[" tag tag-rest* "]"
382
+ branch ::= "[" [A-Za-z0-9_./-]+ "]"
383
+ tag ::= [A-Za-z0-9_.-]+
384
+ tag-rest ::= "," tag
385
+ target ::= "(" target-inner ")"
386
+ target-inner ::= target-atom+
387
+ target-atom ::= [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F\\()<\r\n] | target-escape
388
+ target-escape ::= "\\\\" | "\\(" | "\\)"
389
+ line ::= "<" int line-rest* ">"
390
+ line-rest ::= "," " "? int
391
+ int ::= "-"? [0-9]+ frac?
392
+ frac ::= "." [0-9]+
393
+ exec-sig ::= "[" [a-z] [a-z0-9_-]* "]"
394
+ kill-sig ::= "[" [0-9] [0-9]? "]"
@@ -0,0 +1,54 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.plurnk.dev/v0/ClientDisplayCapabilities.json",
4
+ "title": "ClientDisplayCapabilities",
5
+ "description": "The installed scheme and MIME capability identities with optional opaque client presentation metadata.",
6
+ "type": "array",
7
+ "items": {
8
+ "oneOf": [
9
+ { "$ref": "#/$defs/schemeCapability" },
10
+ { "$ref": "#/$defs/mimetypeCapability" }
11
+ ]
12
+ },
13
+ "$defs": {
14
+ "display": {
15
+ "title": "CapabilityDisplay",
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "properties": {
19
+ "glyph": {
20
+ "type": "string",
21
+ "minLength": 1
22
+ }
23
+ }
24
+ },
25
+ "schemeCapability": {
26
+ "title": "SchemeDisplayCapability",
27
+ "type": "object",
28
+ "required": ["kind", "scheme", "display"],
29
+ "additionalProperties": false,
30
+ "properties": {
31
+ "kind": { "const": "scheme" },
32
+ "scheme": {
33
+ "type": "string",
34
+ "minLength": 1
35
+ },
36
+ "display": { "$ref": "#/$defs/display" }
37
+ }
38
+ },
39
+ "mimetypeCapability": {
40
+ "title": "MimetypeDisplayCapability",
41
+ "type": "object",
42
+ "required": ["kind", "mimetype", "display"],
43
+ "additionalProperties": false,
44
+ "properties": {
45
+ "kind": { "const": "mimetype" },
46
+ "mimetype": {
47
+ "type": "string",
48
+ "minLength": 1
49
+ },
50
+ "display": { "$ref": "#/$defs/display" }
51
+ }
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.plurnk.dev/v0/ClientStatement.json",
4
+ "title": "ClientStatement",
5
+ "description": "The client-tier AST returned by PlurnkParser.parseClient: the closed protocol PlurnkStatement union plus read-shaped LOOK and BUFF utility statements.",
6
+ "oneOf": [
7
+ { "$ref": "https://schemas.plurnk.dev/v0/PlurnkStatement.json" },
8
+ { "$ref": "#/$defs/LookStatement" },
9
+ { "$ref": "#/$defs/BuffStatement" }
10
+ ],
11
+ "$defs": {
12
+ "TagSignal": {
13
+ "oneOf": [
14
+ { "type": "array", "items": { "type": "string" } },
15
+ { "type": "null" }
16
+ ]
17
+ },
18
+ "PathOrNull": {
19
+ "oneOf": [
20
+ { "$ref": "https://schemas.plurnk.dev/v0/ParsedPath.json" },
21
+ { "type": "null" }
22
+ ]
23
+ },
24
+ "LineMarkerOrNull": {
25
+ "oneOf": [
26
+ { "$ref": "https://schemas.plurnk.dev/v0/LineMarker.json" },
27
+ { "type": "null" }
28
+ ]
29
+ },
30
+ "MatcherBodyOrNull": {
31
+ "oneOf": [
32
+ { "$ref": "https://schemas.plurnk.dev/v0/MatcherBody.json" },
33
+ { "type": "null" }
34
+ ]
35
+ },
36
+ "PositionRef": {
37
+ "$ref": "https://schemas.plurnk.dev/v0/Position.json"
38
+ },
39
+ "LookStatement": {
40
+ "type": "object",
41
+ "required": ["op", "suffix", "signal", "target", "lineMarker", "body", "position"],
42
+ "additionalProperties": false,
43
+ "properties": {
44
+ "op": { "const": "LOOK" },
45
+ "suffix": { "type": "string" },
46
+ "signal": { "$ref": "#/$defs/TagSignal" },
47
+ "target": { "$ref": "#/$defs/PathOrNull" },
48
+ "lineMarker": { "$ref": "#/$defs/LineMarkerOrNull" },
49
+ "body": { "$ref": "#/$defs/MatcherBodyOrNull" },
50
+ "position": { "$ref": "#/$defs/PositionRef" }
51
+ }
52
+ },
53
+ "BuffStatement": {
54
+ "type": "object",
55
+ "required": ["op", "suffix", "signal", "target", "lineMarker", "body", "position"],
56
+ "additionalProperties": false,
57
+ "properties": {
58
+ "op": { "const": "BUFF" },
59
+ "suffix": { "type": "string" },
60
+ "signal": { "$ref": "#/$defs/TagSignal" },
61
+ "target": { "$ref": "#/$defs/PathOrNull" },
62
+ "lineMarker": { "$ref": "#/$defs/LineMarkerOrNull" },
63
+ "body": { "$ref": "#/$defs/MatcherBodyOrNull" },
64
+ "position": { "$ref": "#/$defs/PositionRef" }
65
+ }
66
+ }
67
+ }
68
+ }