@plurnk/plurnk-grammar 0.25.0 → 0.26.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.
- package/README.md +9 -9
- package/dist/plurnk.gbnf +139 -139
- package/dist/schema/LogEntry.json +2 -2
- package/dist/schema/MatcherBody.json +1 -1
- package/dist/schema/PlurnkStatement.json +7 -7
- package/dist/src/AstBuilder.js +12 -12
- package/dist/src/PlurnkErrorStrategy.js +2 -2
- package/dist/src/generated/plurnkLexer.d.ts +4 -4
- package/dist/src/generated/plurnkLexer.js +13 -13
- package/dist/src/generated/plurnkParser.d.ts +12 -12
- package/dist/src/generated/plurnkParser.js +36 -36
- package/dist/src/generated/plurnkParserVisitor.d.ts +6 -6
- package/dist/src/generated/plurnkParserVisitor.js +4 -4
- package/dist/src/index.d.ts +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.generated.d.ts +8 -8
- package/package.json +1 -1
- package/plurnk.md +9 -9
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ const result = PlurnkParser.parse(input);
|
|
|
19
19
|
// result.unparsedTail?: { from, reason }
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
Discriminate on `item.kind`. For `statement` items, narrow on `statement.op` (one of `FIND READ EDIT COPY MOVE
|
|
22
|
+
Discriminate on `item.kind`. For `statement` items, narrow on `statement.op` (one of `FIND READ EDIT COPY MOVE OPEN FOLD SEND EXEC`) to access per-OP typed fields. Full API: [SPEC.md §12](SPEC.md#12-public-api).
|
|
23
23
|
|
|
24
24
|
## cli
|
|
25
25
|
|
|
@@ -38,7 +38,7 @@ Exit `0` on clean parse, `1` on any error or unparsed tail.
|
|
|
38
38
|
|
|
39
39
|
| slot | shape |
|
|
40
40
|
|----------|----------------------------------------------------|
|
|
41
|
-
| `OP` | `FIND READ EDIT COPY MOVE
|
|
41
|
+
| `OP` | `FIND READ EDIT COPY MOVE OPEN FOLD SEND EXEC` |
|
|
42
42
|
| `suffix` | `[A-Za-z0-9_]*` glued to `OP`; used for nesting |
|
|
43
43
|
| `[…]` | optional CSV; per-OP semantics |
|
|
44
44
|
| `(…)` | optional URI |
|
|
@@ -52,8 +52,8 @@ Exit `0` on clean parse, `1` on any error or unparsed tail.
|
|
|
52
52
|
| EDIT | tags | content (empty=clear) | entry lines |
|
|
53
53
|
| COPY | tags-to-apply | destination URI | entry lines |
|
|
54
54
|
| MOVE | tags-to-apply | destination URI | entry lines |
|
|
55
|
-
|
|
|
56
|
-
|
|
|
55
|
+
| OPEN | tag filter | matcher | result-set range |
|
|
56
|
+
| FOLD | tag filter | matcher | result-set range |
|
|
57
57
|
| SEND | HTTP status int | payload (JSON conv.) | n/a |
|
|
58
58
|
| EXEC | executor | command or code | n/a |
|
|
59
59
|
|
|
@@ -109,10 +109,10 @@ Nesting: outer body may contain inner `<<OP:…:OP` statements; outer must use a
|
|
|
109
109
|
<<EDIT(known://countries/france/capital)::EDIT
|
|
110
110
|
|
|
111
111
|
13. Collapse every distilled fetch-log row
|
|
112
|
-
<<
|
|
112
|
+
<<FOLD(log://1/*/*/get)::FOLD
|
|
113
113
|
|
|
114
114
|
14. Restore collapsed log rows by tag filter
|
|
115
|
-
<<
|
|
115
|
+
<<OPEN[france](log://**)::OPEN
|
|
116
116
|
|
|
117
117
|
15. Rename a draft entry
|
|
118
118
|
<<MOVE(known://draft):known://final/answer:MOVE
|
|
@@ -148,16 +148,16 @@ Nesting: outer body may contain inner `<<OP:…:OP` statements; outer must use a
|
|
|
148
148
|
:EXEC
|
|
149
149
|
|
|
150
150
|
25. Restore log rows tagged france whose content matches (combined filters)
|
|
151
|
-
<<
|
|
151
|
+
<<OPEN[france](log://**):Paris*:OPEN
|
|
152
152
|
|
|
153
153
|
26. Collapse the second hundred of stale fetch-log rows (pagination)
|
|
154
|
-
<<
|
|
154
|
+
<<FOLD(log://**/get)<101-200>::FOLD
|
|
155
155
|
|
|
156
156
|
27. Deliver a structured answer (JSON body)
|
|
157
157
|
<<SEND[200]:{"answer":"Paris","confidence":0.95}:SEND
|
|
158
158
|
|
|
159
159
|
28. Report a client error (JSON body the model can traverse with jsonpath)
|
|
160
|
-
<<SEND[400]:{"reason":"unrecognized OP","got":"FOOBAR","expected":["FIND","READ","EDIT","COPY","MOVE","
|
|
160
|
+
<<SEND[400]:{"reason":"unrecognized OP","got":"FOOBAR","expected":["FIND","READ","EDIT","COPY","MOVE","OPEN","FOLD","SEND","EXEC"]}:SEND
|
|
161
161
|
|
|
162
162
|
29. Report a server error with explicit recipient
|
|
163
163
|
<<SEND[503](log://errors):{"reason":"git unavailable","command":"git status"}:SEND
|
package/dist/plurnk.gbnf
CHANGED
|
@@ -344,144 +344,144 @@ move-9-b3 ::= ("V" move-9-b4 | ":" move-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F
|
|
|
344
344
|
move-9-b4 ::= ("E" move-9-b5 | ":" move-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] move-9-b0)?
|
|
345
345
|
move-9-b5 ::= (":" move-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:9] move-9-b0)?
|
|
346
346
|
move-9 ::= "<<MOVE9" tags? target line? ":" move-9-b0 ":MOVE9"
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
347
|
+
open-b0 ::= (":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-b0)?
|
|
348
|
+
open-b1 ::= ("O" open-b2 | ":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-b0)?
|
|
349
|
+
open-b2 ::= ("P" open-b3 | ":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-b0)?
|
|
350
|
+
open-b3 ::= ("E" open-b4 | ":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-b0)?
|
|
351
|
+
open-b4 ::= (":" open-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-b0)?
|
|
352
|
+
open ::= "<<OPEN" tags? target line? ":" open-b0 ":OPEN"
|
|
353
|
+
open-1-b0 ::= (":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-1-b0)?
|
|
354
|
+
open-1-b1 ::= ("O" open-1-b2 | ":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-1-b0)?
|
|
355
|
+
open-1-b2 ::= ("P" open-1-b3 | ":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-1-b0)?
|
|
356
|
+
open-1-b3 ::= ("E" open-1-b4 | ":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-1-b0)?
|
|
357
|
+
open-1-b4 ::= ("N" open-1-b5 | ":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-1-b0)?
|
|
358
|
+
open-1-b5 ::= (":" open-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] open-1-b0)?
|
|
359
|
+
open-1 ::= "<<OPEN1" tags? target line? ":" open-1-b0 ":OPEN1"
|
|
360
|
+
open-2-b0 ::= (":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-2-b0)?
|
|
361
|
+
open-2-b1 ::= ("O" open-2-b2 | ":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-2-b0)?
|
|
362
|
+
open-2-b2 ::= ("P" open-2-b3 | ":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-2-b0)?
|
|
363
|
+
open-2-b3 ::= ("E" open-2-b4 | ":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-2-b0)?
|
|
364
|
+
open-2-b4 ::= ("N" open-2-b5 | ":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-2-b0)?
|
|
365
|
+
open-2-b5 ::= (":" open-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] open-2-b0)?
|
|
366
|
+
open-2 ::= "<<OPEN2" tags? target line? ":" open-2-b0 ":OPEN2"
|
|
367
|
+
open-3-b0 ::= (":" open-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-3-b0)?
|
|
368
|
+
open-3-b1 ::= ("O" open-3-b2 | ":" open-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-3-b0)?
|
|
369
|
+
open-3-b2 ::= ("P" open-3-b3 | ":" open-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-3-b0)?
|
|
370
|
+
open-3-b3 ::= ("E" open-3-b4 | ":" open-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-3-b0)?
|
|
371
|
+
open-3-b4 ::= ("N" open-3-b5 | ":" open-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-3-b0)?
|
|
372
|
+
open-3-b5 ::= (":" open-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:3] open-3-b0)?
|
|
373
|
+
open-3 ::= "<<OPEN3" tags? target line? ":" open-3-b0 ":OPEN3"
|
|
374
|
+
open-4-b0 ::= (":" open-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-4-b0)?
|
|
375
|
+
open-4-b1 ::= ("O" open-4-b2 | ":" open-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-4-b0)?
|
|
376
|
+
open-4-b2 ::= ("P" open-4-b3 | ":" open-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-4-b0)?
|
|
377
|
+
open-4-b3 ::= ("E" open-4-b4 | ":" open-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-4-b0)?
|
|
378
|
+
open-4-b4 ::= ("N" open-4-b5 | ":" open-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-4-b0)?
|
|
379
|
+
open-4-b5 ::= (":" open-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:4] open-4-b0)?
|
|
380
|
+
open-4 ::= "<<OPEN4" tags? target line? ":" open-4-b0 ":OPEN4"
|
|
381
|
+
open-5-b0 ::= (":" open-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-5-b0)?
|
|
382
|
+
open-5-b1 ::= ("O" open-5-b2 | ":" open-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-5-b0)?
|
|
383
|
+
open-5-b2 ::= ("P" open-5-b3 | ":" open-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-5-b0)?
|
|
384
|
+
open-5-b3 ::= ("E" open-5-b4 | ":" open-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-5-b0)?
|
|
385
|
+
open-5-b4 ::= ("N" open-5-b5 | ":" open-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-5-b0)?
|
|
386
|
+
open-5-b5 ::= (":" open-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:5] open-5-b0)?
|
|
387
|
+
open-5 ::= "<<OPEN5" tags? target line? ":" open-5-b0 ":OPEN5"
|
|
388
|
+
open-6-b0 ::= (":" open-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-6-b0)?
|
|
389
|
+
open-6-b1 ::= ("O" open-6-b2 | ":" open-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-6-b0)?
|
|
390
|
+
open-6-b2 ::= ("P" open-6-b3 | ":" open-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-6-b0)?
|
|
391
|
+
open-6-b3 ::= ("E" open-6-b4 | ":" open-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-6-b0)?
|
|
392
|
+
open-6-b4 ::= ("N" open-6-b5 | ":" open-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-6-b0)?
|
|
393
|
+
open-6-b5 ::= (":" open-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:6] open-6-b0)?
|
|
394
|
+
open-6 ::= "<<OPEN6" tags? target line? ":" open-6-b0 ":OPEN6"
|
|
395
|
+
open-7-b0 ::= (":" open-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-7-b0)?
|
|
396
|
+
open-7-b1 ::= ("O" open-7-b2 | ":" open-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-7-b0)?
|
|
397
|
+
open-7-b2 ::= ("P" open-7-b3 | ":" open-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-7-b0)?
|
|
398
|
+
open-7-b3 ::= ("E" open-7-b4 | ":" open-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-7-b0)?
|
|
399
|
+
open-7-b4 ::= ("N" open-7-b5 | ":" open-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-7-b0)?
|
|
400
|
+
open-7-b5 ::= (":" open-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:7] open-7-b0)?
|
|
401
|
+
open-7 ::= "<<OPEN7" tags? target line? ":" open-7-b0 ":OPEN7"
|
|
402
|
+
open-8-b0 ::= (":" open-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-8-b0)?
|
|
403
|
+
open-8-b1 ::= ("O" open-8-b2 | ":" open-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-8-b0)?
|
|
404
|
+
open-8-b2 ::= ("P" open-8-b3 | ":" open-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-8-b0)?
|
|
405
|
+
open-8-b3 ::= ("E" open-8-b4 | ":" open-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-8-b0)?
|
|
406
|
+
open-8-b4 ::= ("N" open-8-b5 | ":" open-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-8-b0)?
|
|
407
|
+
open-8-b5 ::= (":" open-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:8] open-8-b0)?
|
|
408
|
+
open-8 ::= "<<OPEN8" tags? target line? ":" open-8-b0 ":OPEN8"
|
|
409
|
+
open-9-b0 ::= (":" open-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] open-9-b0)?
|
|
410
|
+
open-9-b1 ::= ("O" open-9-b2 | ":" open-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] open-9-b0)?
|
|
411
|
+
open-9-b2 ::= ("P" open-9-b3 | ":" open-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:P] open-9-b0)?
|
|
412
|
+
open-9-b3 ::= ("E" open-9-b4 | ":" open-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] open-9-b0)?
|
|
413
|
+
open-9-b4 ::= ("N" open-9-b5 | ":" open-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:N] open-9-b0)?
|
|
414
|
+
open-9-b5 ::= (":" open-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:9] open-9-b0)?
|
|
415
|
+
open-9 ::= "<<OPEN9" tags? target line? ":" open-9-b0 ":OPEN9"
|
|
416
|
+
fold-b0 ::= (":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-b0)?
|
|
417
|
+
fold-b1 ::= ("F" fold-b2 | ":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-b0)?
|
|
418
|
+
fold-b2 ::= ("O" fold-b3 | ":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-b0)?
|
|
419
|
+
fold-b3 ::= ("L" fold-b4 | ":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-b0)?
|
|
420
|
+
fold-b4 ::= (":" fold-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-b0)?
|
|
421
|
+
fold ::= "<<FOLD" tags? target line? ":" fold-b0 ":FOLD"
|
|
422
|
+
fold-1-b0 ::= (":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-1-b0)?
|
|
423
|
+
fold-1-b1 ::= ("F" fold-1-b2 | ":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-1-b0)?
|
|
424
|
+
fold-1-b2 ::= ("O" fold-1-b3 | ":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-1-b0)?
|
|
425
|
+
fold-1-b3 ::= ("L" fold-1-b4 | ":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-1-b0)?
|
|
426
|
+
fold-1-b4 ::= ("D" fold-1-b5 | ":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-1-b0)?
|
|
427
|
+
fold-1-b5 ::= (":" fold-1-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:1] fold-1-b0)?
|
|
428
|
+
fold-1 ::= "<<FOLD1" tags? target line? ":" fold-1-b0 ":FOLD1"
|
|
429
|
+
fold-2-b0 ::= (":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-2-b0)?
|
|
430
|
+
fold-2-b1 ::= ("F" fold-2-b2 | ":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-2-b0)?
|
|
431
|
+
fold-2-b2 ::= ("O" fold-2-b3 | ":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-2-b0)?
|
|
432
|
+
fold-2-b3 ::= ("L" fold-2-b4 | ":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-2-b0)?
|
|
433
|
+
fold-2-b4 ::= ("D" fold-2-b5 | ":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-2-b0)?
|
|
434
|
+
fold-2-b5 ::= (":" fold-2-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:2] fold-2-b0)?
|
|
435
|
+
fold-2 ::= "<<FOLD2" tags? target line? ":" fold-2-b0 ":FOLD2"
|
|
436
|
+
fold-3-b0 ::= (":" fold-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-3-b0)?
|
|
437
|
+
fold-3-b1 ::= ("F" fold-3-b2 | ":" fold-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-3-b0)?
|
|
438
|
+
fold-3-b2 ::= ("O" fold-3-b3 | ":" fold-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-3-b0)?
|
|
439
|
+
fold-3-b3 ::= ("L" fold-3-b4 | ":" fold-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-3-b0)?
|
|
440
|
+
fold-3-b4 ::= ("D" fold-3-b5 | ":" fold-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-3-b0)?
|
|
441
|
+
fold-3-b5 ::= (":" fold-3-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:3] fold-3-b0)?
|
|
442
|
+
fold-3 ::= "<<FOLD3" tags? target line? ":" fold-3-b0 ":FOLD3"
|
|
443
|
+
fold-4-b0 ::= (":" fold-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-4-b0)?
|
|
444
|
+
fold-4-b1 ::= ("F" fold-4-b2 | ":" fold-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-4-b0)?
|
|
445
|
+
fold-4-b2 ::= ("O" fold-4-b3 | ":" fold-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-4-b0)?
|
|
446
|
+
fold-4-b3 ::= ("L" fold-4-b4 | ":" fold-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-4-b0)?
|
|
447
|
+
fold-4-b4 ::= ("D" fold-4-b5 | ":" fold-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-4-b0)?
|
|
448
|
+
fold-4-b5 ::= (":" fold-4-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:4] fold-4-b0)?
|
|
449
|
+
fold-4 ::= "<<FOLD4" tags? target line? ":" fold-4-b0 ":FOLD4"
|
|
450
|
+
fold-5-b0 ::= (":" fold-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-5-b0)?
|
|
451
|
+
fold-5-b1 ::= ("F" fold-5-b2 | ":" fold-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-5-b0)?
|
|
452
|
+
fold-5-b2 ::= ("O" fold-5-b3 | ":" fold-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-5-b0)?
|
|
453
|
+
fold-5-b3 ::= ("L" fold-5-b4 | ":" fold-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-5-b0)?
|
|
454
|
+
fold-5-b4 ::= ("D" fold-5-b5 | ":" fold-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-5-b0)?
|
|
455
|
+
fold-5-b5 ::= (":" fold-5-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:5] fold-5-b0)?
|
|
456
|
+
fold-5 ::= "<<FOLD5" tags? target line? ":" fold-5-b0 ":FOLD5"
|
|
457
|
+
fold-6-b0 ::= (":" fold-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-6-b0)?
|
|
458
|
+
fold-6-b1 ::= ("F" fold-6-b2 | ":" fold-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-6-b0)?
|
|
459
|
+
fold-6-b2 ::= ("O" fold-6-b3 | ":" fold-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-6-b0)?
|
|
460
|
+
fold-6-b3 ::= ("L" fold-6-b4 | ":" fold-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-6-b0)?
|
|
461
|
+
fold-6-b4 ::= ("D" fold-6-b5 | ":" fold-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-6-b0)?
|
|
462
|
+
fold-6-b5 ::= (":" fold-6-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:6] fold-6-b0)?
|
|
463
|
+
fold-6 ::= "<<FOLD6" tags? target line? ":" fold-6-b0 ":FOLD6"
|
|
464
|
+
fold-7-b0 ::= (":" fold-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-7-b0)?
|
|
465
|
+
fold-7-b1 ::= ("F" fold-7-b2 | ":" fold-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-7-b0)?
|
|
466
|
+
fold-7-b2 ::= ("O" fold-7-b3 | ":" fold-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-7-b0)?
|
|
467
|
+
fold-7-b3 ::= ("L" fold-7-b4 | ":" fold-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-7-b0)?
|
|
468
|
+
fold-7-b4 ::= ("D" fold-7-b5 | ":" fold-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-7-b0)?
|
|
469
|
+
fold-7-b5 ::= (":" fold-7-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:7] fold-7-b0)?
|
|
470
|
+
fold-7 ::= "<<FOLD7" tags? target line? ":" fold-7-b0 ":FOLD7"
|
|
471
|
+
fold-8-b0 ::= (":" fold-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-8-b0)?
|
|
472
|
+
fold-8-b1 ::= ("F" fold-8-b2 | ":" fold-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-8-b0)?
|
|
473
|
+
fold-8-b2 ::= ("O" fold-8-b3 | ":" fold-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-8-b0)?
|
|
474
|
+
fold-8-b3 ::= ("L" fold-8-b4 | ":" fold-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-8-b0)?
|
|
475
|
+
fold-8-b4 ::= ("D" fold-8-b5 | ":" fold-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-8-b0)?
|
|
476
|
+
fold-8-b5 ::= (":" fold-8-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:8] fold-8-b0)?
|
|
477
|
+
fold-8 ::= "<<FOLD8" tags? target line? ":" fold-8-b0 ":FOLD8"
|
|
478
|
+
fold-9-b0 ::= (":" fold-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] fold-9-b0)?
|
|
479
|
+
fold-9-b1 ::= ("F" fold-9-b2 | ":" fold-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:F] fold-9-b0)?
|
|
480
|
+
fold-9-b2 ::= ("O" fold-9-b3 | ":" fold-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:O] fold-9-b0)?
|
|
481
|
+
fold-9-b3 ::= ("L" fold-9-b4 | ":" fold-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:L] fold-9-b0)?
|
|
482
|
+
fold-9-b4 ::= ("D" fold-9-b5 | ":" fold-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:D] fold-9-b0)?
|
|
483
|
+
fold-9-b5 ::= (":" fold-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:9] fold-9-b0)?
|
|
484
|
+
fold-9 ::= "<<FOLD9" tags? target line? ":" fold-9-b0 ":FOLD9"
|
|
485
485
|
send-b0 ::= (":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:] send-b0)?
|
|
486
486
|
send-b1 ::= ("S" send-b2 | ":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:S] send-b0)?
|
|
487
487
|
send-b2 ::= ("E" send-b3 | ":" send-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:E] send-b0)?
|
|
@@ -622,7 +622,7 @@ exec-9-b5 ::= (":" exec-9-b1 | [^\x00-\x08\x0B-\x0C\x0E-\x1F\x7F:9] exec-9-b0)?
|
|
|
622
622
|
exec-9 ::= "<<EXEC9" exec-sig? target? ":" exec-9-b0 ":EXEC9"
|
|
623
623
|
root ::= "\n"* statement root-rest* "\n"*
|
|
624
624
|
root-rest ::= "\n"+ statement
|
|
625
|
-
statement ::= find | find-1 | find-2 | find-3 | find-4 | find-5 | find-6 | find-7 | find-8 | find-9 | read | read-1 | read-2 | read-3 | read-4 | read-5 | read-6 | read-7 | read-8 | read-9 | edit | edit-1 | edit-2 | edit-3 | edit-4 | edit-5 | edit-6 | edit-7 | edit-8 | edit-9 | copy | copy-1 | copy-2 | copy-3 | copy-4 | copy-5 | copy-6 | copy-7 | copy-8 | copy-9 | move | move-1 | move-2 | move-3 | move-4 | move-5 | move-6 | move-7 | move-8 | move-9 |
|
|
625
|
+
statement ::= find | find-1 | find-2 | find-3 | find-4 | find-5 | find-6 | find-7 | find-8 | find-9 | read | read-1 | read-2 | read-3 | read-4 | read-5 | read-6 | read-7 | read-8 | read-9 | edit | edit-1 | edit-2 | edit-3 | edit-4 | edit-5 | edit-6 | edit-7 | edit-8 | edit-9 | copy | copy-1 | copy-2 | copy-3 | copy-4 | copy-5 | copy-6 | copy-7 | copy-8 | copy-9 | move | move-1 | move-2 | move-3 | move-4 | move-5 | move-6 | move-7 | move-8 | move-9 | open | open-1 | open-2 | open-3 | open-4 | open-5 | open-6 | open-7 | open-8 | open-9 | fold | fold-1 | fold-2 | fold-3 | fold-4 | fold-5 | fold-6 | fold-7 | fold-8 | fold-9 | send | send-1 | send-2 | send-3 | send-4 | send-5 | send-6 | send-7 | send-8 | send-9 | exec | exec-1 | exec-2 | exec-3 | exec-4 | exec-5 | exec-6 | exec-7 | exec-8 | exec-9
|
|
626
626
|
tags ::= "[" tag tag-rest* "]"
|
|
627
627
|
tag ::= [A-Za-z0-9_.-]+
|
|
628
628
|
tag-rest ::= "," tag
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"sequence": { "type": "integer", "minimum": 1, "description": "1-based within the turn; resets at each new turn." },
|
|
27
27
|
"at": { "type": "string", "format": "date-time" },
|
|
28
28
|
"origin": { "enum": ["model", "client", "system", "plugin"] },
|
|
29
|
-
"op": { "enum": ["FIND", "READ", "EDIT", "COPY", "MOVE", "
|
|
29
|
+
"op": { "enum": ["FIND", "READ", "EDIT", "COPY", "MOVE", "OPEN", "FOLD", "SEND", "EXEC"] },
|
|
30
30
|
"suffix": { "type": "string" },
|
|
31
31
|
"signal": {
|
|
32
32
|
"oneOf": [
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
}
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
|
-
"if": { "properties": { "op": { "enum": ["FIND", "READ", "EDIT", "COPY", "MOVE", "
|
|
96
|
+
"if": { "properties": { "op": { "enum": ["FIND", "READ", "EDIT", "COPY", "MOVE", "OPEN", "FOLD"] } } },
|
|
97
97
|
"then": {
|
|
98
98
|
"properties": {
|
|
99
99
|
"signal": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://schemas.plurnk.dev/v0/MatcherBody.json",
|
|
4
4
|
"title": "MatcherBody",
|
|
5
|
-
"description": "Parsed body of a FIND/READ/
|
|
5
|
+
"description": "Parsed body of a FIND/READ/OPEN/FOLD statement, discriminated on `dialect`. The dialect is determined by the body's leading characters (`//` xpath, `/` regex, `$` jsonpath, `~` semantic, `@` graph, else glob). The regex variant carries pattern/flags split out of the `/pattern/flags` literal; the compiled `RegExp` object on the in-memory AST is a runtime ergonomic only and is not part of the persisted/wire contract.",
|
|
6
6
|
"oneOf": [
|
|
7
7
|
{ "$ref": "#/$defs/XPathBody" },
|
|
8
8
|
{ "$ref": "#/$defs/RegexBody" },
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://schemas.plurnk.dev/v0/PlurnkStatement.json",
|
|
4
4
|
"title": "PlurnkStatement",
|
|
5
|
-
"description": "The parsed AST of one plurnk statement. Discriminated on `op`. SEND and EXEC have no `<L>` slot — `lineMarker` is always null for those. `target` is the URI of the operand (parsed into ParsedPath structure); null when the operand slot was omitted. Body shape varies per op: matcher dialect for FIND/READ/
|
|
5
|
+
"description": "The parsed AST of one plurnk statement. Discriminated on `op`. SEND and EXEC have no `<L>` slot — `lineMarker` is always null for those. `target` is the URI of the operand (parsed into ParsedPath structure); null when the operand slot was omitted. Body shape varies per op: matcher dialect for FIND/READ/OPEN/FOLD, raw string for EDIT/EXEC, ParsedPath for COPY/MOVE (destination URI), SendBody for SEND.",
|
|
6
6
|
"oneOf": [
|
|
7
7
|
{ "$ref": "#/$defs/FindStatement" },
|
|
8
8
|
{ "$ref": "#/$defs/ReadStatement" },
|
|
9
|
-
{ "$ref": "#/$defs/
|
|
10
|
-
{ "$ref": "#/$defs/
|
|
9
|
+
{ "$ref": "#/$defs/OpenStatement" },
|
|
10
|
+
{ "$ref": "#/$defs/FoldStatement" },
|
|
11
11
|
{ "$ref": "#/$defs/EditStatement" },
|
|
12
12
|
{ "$ref": "#/$defs/CopyStatement" },
|
|
13
13
|
{ "$ref": "#/$defs/MoveStatement" },
|
|
@@ -76,12 +76,12 @@
|
|
|
76
76
|
"position": { "$ref": "#/$defs/PositionRef" }
|
|
77
77
|
}
|
|
78
78
|
},
|
|
79
|
-
"
|
|
79
|
+
"OpenStatement": {
|
|
80
80
|
"type": "object",
|
|
81
81
|
"required": ["op", "suffix", "signal", "target", "lineMarker", "body", "position"],
|
|
82
82
|
"additionalProperties": false,
|
|
83
83
|
"properties": {
|
|
84
|
-
"op": { "const": "
|
|
84
|
+
"op": { "const": "OPEN" },
|
|
85
85
|
"suffix": { "type": "string" },
|
|
86
86
|
"signal": { "$ref": "#/$defs/TagSignal" },
|
|
87
87
|
"target": { "$ref": "#/$defs/PathOrNull" },
|
|
@@ -90,12 +90,12 @@
|
|
|
90
90
|
"position": { "$ref": "#/$defs/PositionRef" }
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
|
-
"
|
|
93
|
+
"FoldStatement": {
|
|
94
94
|
"type": "object",
|
|
95
95
|
"required": ["op", "suffix", "signal", "target", "lineMarker", "body", "position"],
|
|
96
96
|
"additionalProperties": false,
|
|
97
97
|
"properties": {
|
|
98
|
-
"op": { "const": "
|
|
98
|
+
"op": { "const": "FOLD" },
|
|
99
99
|
"suffix": { "type": "string" },
|
|
100
100
|
"signal": { "$ref": "#/$defs/TagSignal" },
|
|
101
101
|
"target": { "$ref": "#/$defs/PathOrNull" },
|
package/dist/src/AstBuilder.js
CHANGED
|
@@ -30,12 +30,12 @@ export default class AstBuilder {
|
|
|
30
30
|
const move = ctx.moveStatement();
|
|
31
31
|
if (move)
|
|
32
32
|
return AstBuilder.#buildMove(move);
|
|
33
|
-
const
|
|
34
|
-
if (
|
|
35
|
-
return AstBuilder.#
|
|
36
|
-
const
|
|
37
|
-
if (
|
|
38
|
-
return AstBuilder.#
|
|
33
|
+
const open = ctx.openStatement();
|
|
34
|
+
if (open)
|
|
35
|
+
return AstBuilder.#buildOpen(open);
|
|
36
|
+
const fold = ctx.foldStatement();
|
|
37
|
+
if (fold)
|
|
38
|
+
return AstBuilder.#buildFold(fold);
|
|
39
39
|
const send = ctx.sendStatement();
|
|
40
40
|
if (send)
|
|
41
41
|
return AstBuilder.#buildSend(send);
|
|
@@ -68,25 +68,25 @@ export default class AstBuilder {
|
|
|
68
68
|
position,
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
|
-
static #
|
|
71
|
+
static #buildOpen(ctx) {
|
|
72
72
|
const position = AstBuilder.#positionOf(ctx);
|
|
73
73
|
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
74
74
|
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
75
75
|
return {
|
|
76
|
-
op: "
|
|
77
|
-
suffix: AstBuilder.#splitSuffix(ctx.
|
|
76
|
+
op: "OPEN",
|
|
77
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_OPEN().getText(), "OPEN"),
|
|
78
78
|
...slots,
|
|
79
79
|
body: raw !== null ? AstBuilder.#parseMatcherBody(raw, position) : null,
|
|
80
80
|
position,
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
|
-
static #
|
|
83
|
+
static #buildFold(ctx) {
|
|
84
84
|
const position = AstBuilder.#positionOf(ctx);
|
|
85
85
|
const slots = AstBuilder.#extractTagSlots(ctx.tagOpModifiers(), position);
|
|
86
86
|
const raw = AstBuilder.#bodyTextOf(ctx);
|
|
87
87
|
return {
|
|
88
|
-
op: "
|
|
89
|
-
suffix: AstBuilder.#splitSuffix(ctx.
|
|
88
|
+
op: "FOLD",
|
|
89
|
+
suffix: AstBuilder.#splitSuffix(ctx.OPEN_FOLD().getText(), "FOLD"),
|
|
90
90
|
...slots,
|
|
91
91
|
body: raw !== null ? AstBuilder.#parseMatcherBody(raw, position) : null,
|
|
92
92
|
position,
|
|
@@ -17,8 +17,8 @@ export default class PlurnkErrorStrategy extends DefaultErrorStrategy {
|
|
|
17
17
|
[plurnkParser.OPEN_EDIT]: "open tag `<<OPsuffix`",
|
|
18
18
|
[plurnkParser.OPEN_COPY]: "open tag `<<OPsuffix`",
|
|
19
19
|
[plurnkParser.OPEN_MOVE]: "open tag `<<OPsuffix`",
|
|
20
|
-
[plurnkParser.
|
|
21
|
-
[plurnkParser.
|
|
20
|
+
[plurnkParser.OPEN_OPEN]: "open tag `<<OPsuffix`",
|
|
21
|
+
[plurnkParser.OPEN_FOLD]: "open tag `<<OPsuffix`",
|
|
22
22
|
[plurnkParser.OPEN_SEND]: "open tag `<<OPsuffix`",
|
|
23
23
|
[plurnkParser.OPEN_EXEC]: "open tag `<<OPsuffix`",
|
|
24
24
|
[plurnkParser.LBRACKET]: "`[` (signal slot opener)",
|
|
@@ -19,8 +19,8 @@ export declare class plurnkLexer extends antlr.Lexer {
|
|
|
19
19
|
static readonly OPEN_EDIT = 17;
|
|
20
20
|
static readonly OPEN_COPY = 18;
|
|
21
21
|
static readonly OPEN_MOVE = 19;
|
|
22
|
-
static readonly
|
|
23
|
-
static readonly
|
|
22
|
+
static readonly OPEN_OPEN = 20;
|
|
23
|
+
static readonly OPEN_FOLD = 21;
|
|
24
24
|
static readonly OPEN_SEND = 22;
|
|
25
25
|
static readonly OPEN_EXEC = 23;
|
|
26
26
|
static readonly SLOTS_WS = 24;
|
|
@@ -67,8 +67,8 @@ export declare class plurnkLexer extends antlr.Lexer {
|
|
|
67
67
|
private OPEN_EDIT_action;
|
|
68
68
|
private OPEN_COPY_action;
|
|
69
69
|
private OPEN_MOVE_action;
|
|
70
|
-
private
|
|
71
|
-
private
|
|
70
|
+
private OPEN_OPEN_action;
|
|
71
|
+
private OPEN_FOLD_action;
|
|
72
72
|
private OPEN_SEND_action;
|
|
73
73
|
private OPEN_EXEC_action;
|
|
74
74
|
private B_CLOSE_action;
|
|
@@ -19,8 +19,8 @@ export class plurnkLexer extends antlr.Lexer {
|
|
|
19
19
|
static OPEN_EDIT = 17;
|
|
20
20
|
static OPEN_COPY = 18;
|
|
21
21
|
static OPEN_MOVE = 19;
|
|
22
|
-
static
|
|
23
|
-
static
|
|
22
|
+
static OPEN_OPEN = 20;
|
|
23
|
+
static OPEN_FOLD = 21;
|
|
24
24
|
static OPEN_SEND = 22;
|
|
25
25
|
static OPEN_EXEC = 23;
|
|
26
26
|
static SLOTS_WS = 24;
|
|
@@ -47,7 +47,7 @@ export class plurnkLexer extends antlr.Lexer {
|
|
|
47
47
|
null, "LBRACKET", "RBRACKET", "LPAREN", "RPAREN", "L_MARKER", "COLON",
|
|
48
48
|
"COMMA", "INT", "IDENT", "TAG", "TARGET_TEXT", "BODY_TEXT", "CLOSE_TAG",
|
|
49
49
|
"TEXT", "OPEN_FIND", "OPEN_READ", "OPEN_EDIT", "OPEN_COPY", "OPEN_MOVE",
|
|
50
|
-
"
|
|
50
|
+
"OPEN_OPEN", "OPEN_FOLD", "OPEN_SEND", "OPEN_EXEC", "SLOTS_WS",
|
|
51
51
|
"ST_WS", "SI_WS", "SD_WS", "ST_COMMA", "B_COLON"
|
|
52
52
|
];
|
|
53
53
|
static modeNames = [
|
|
@@ -56,7 +56,7 @@ export class plurnkLexer extends antlr.Lexer {
|
|
|
56
56
|
];
|
|
57
57
|
static ruleNames = [
|
|
58
58
|
"SUFFIX", "L_PATTERN", "OPEN_FIND", "OPEN_READ", "OPEN_EDIT", "OPEN_COPY",
|
|
59
|
-
"OPEN_MOVE", "
|
|
59
|
+
"OPEN_MOVE", "OPEN_OPEN", "OPEN_FOLD", "OPEN_SEND", "OPEN_EXEC",
|
|
60
60
|
"TEXT", "SLOTS_WS", "SLOTS_LB_TAGS", "SLOTS_LB_INT", "SLOTS_LB_IDENT",
|
|
61
61
|
"SLOTS_LPAREN", "SLOTS_L", "SLOTS_COLON", "ST_WS", "ST_COMMA", "ST_TAG",
|
|
62
62
|
"ST_END", "SI_WS", "SI_INT", "SI_END", "SD_WS", "SD_IDENT", "SD_END",
|
|
@@ -102,7 +102,7 @@ export class plurnkLexer extends antlr.Lexer {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
isOpKeywordAfterLtLt() {
|
|
105
|
-
const ops = ["FIND", "READ", "EDIT", "COPY", "MOVE", "
|
|
105
|
+
const ops = ["FIND", "READ", "EDIT", "COPY", "MOVE", "OPEN", "FOLD", "SEND", "EXEC"];
|
|
106
106
|
for (const op of ops) {
|
|
107
107
|
let matches = true;
|
|
108
108
|
for (let i = 0; i < op.length; i++) {
|
|
@@ -147,10 +147,10 @@ export class plurnkLexer extends antlr.Lexer {
|
|
|
147
147
|
this.OPEN_MOVE_action(localContext, actionIndex);
|
|
148
148
|
break;
|
|
149
149
|
case 7:
|
|
150
|
-
this.
|
|
150
|
+
this.OPEN_OPEN_action(localContext, actionIndex);
|
|
151
151
|
break;
|
|
152
152
|
case 8:
|
|
153
|
-
this.
|
|
153
|
+
this.OPEN_FOLD_action(localContext, actionIndex);
|
|
154
154
|
break;
|
|
155
155
|
case 9:
|
|
156
156
|
this.OPEN_SEND_action(localContext, actionIndex);
|
|
@@ -198,14 +198,14 @@ export class plurnkLexer extends antlr.Lexer {
|
|
|
198
198
|
break;
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
|
-
|
|
201
|
+
OPEN_OPEN_action(localContext, actionIndex) {
|
|
202
202
|
switch (actionIndex) {
|
|
203
203
|
case 5:
|
|
204
204
|
this.setOpenTag();
|
|
205
205
|
break;
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
|
-
|
|
208
|
+
OPEN_FOLD_action(localContext, actionIndex) {
|
|
209
209
|
switch (actionIndex) {
|
|
210
210
|
case 6:
|
|
211
211
|
this.setOpenTag();
|
|
@@ -363,12 +363,12 @@ export class plurnkLexer extends antlr.Lexer {
|
|
|
363
363
|
166, 167, 5, 77, 0, 0, 167, 168, 5, 79, 0, 0, 168, 169, 5, 86, 0, 0, 169, 170, 5, 69,
|
|
364
364
|
0, 0, 170, 172, 1, 0, 0, 0, 171, 173, 3, 7, 0, 0, 172, 171, 1, 0, 0, 0, 172, 173, 1, 0,
|
|
365
365
|
0, 0, 173, 174, 1, 0, 0, 0, 174, 175, 6, 6, 5, 0, 175, 176, 1, 0, 0, 0, 176, 177, 6, 6,
|
|
366
|
-
1, 0, 177, 20, 1, 0, 0, 0, 178, 179, 5, 60, 0, 0, 179, 180, 5, 60, 0, 0, 180, 181, 5,
|
|
367
|
-
0, 0, 181, 182, 5,
|
|
366
|
+
1, 0, 177, 20, 1, 0, 0, 0, 178, 179, 5, 60, 0, 0, 179, 180, 5, 60, 0, 0, 180, 181, 5, 79,
|
|
367
|
+
0, 0, 181, 182, 5, 80, 0, 0, 182, 183, 5, 69, 0, 0, 183, 184, 5, 78, 0, 0, 184, 186, 1,
|
|
368
368
|
0, 0, 0, 185, 187, 3, 7, 0, 0, 186, 185, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 188, 1,
|
|
369
369
|
0, 0, 0, 188, 189, 6, 7, 6, 0, 189, 190, 1, 0, 0, 0, 190, 191, 6, 7, 1, 0, 191, 22, 1, 0,
|
|
370
|
-
0, 0, 192, 193, 5, 60, 0, 0, 193, 194, 5, 60, 0, 0, 194, 195, 5,
|
|
371
|
-
|
|
370
|
+
0, 0, 192, 193, 5, 60, 0, 0, 193, 194, 5, 60, 0, 0, 194, 195, 5, 70, 0, 0, 195, 196, 5,
|
|
371
|
+
79, 0, 0, 196, 197, 5, 76, 0, 0, 197, 198, 5, 68, 0, 0, 198, 200, 1, 0, 0, 0, 199, 201,
|
|
372
372
|
3, 7, 0, 0, 200, 199, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203,
|
|
373
373
|
6, 8, 7, 0, 203, 204, 1, 0, 0, 0, 204, 205, 6, 8, 1, 0, 205, 24, 1, 0, 0, 0, 206, 207, 5,
|
|
374
374
|
60, 0, 0, 207, 208, 5, 60, 0, 0, 208, 209, 5, 83, 0, 0, 209, 210, 5, 69, 0, 0, 210, 211,
|
|
@@ -20,8 +20,8 @@ export declare class plurnkParser extends antlr.Parser {
|
|
|
20
20
|
static readonly OPEN_EDIT = 17;
|
|
21
21
|
static readonly OPEN_COPY = 18;
|
|
22
22
|
static readonly OPEN_MOVE = 19;
|
|
23
|
-
static readonly
|
|
24
|
-
static readonly
|
|
23
|
+
static readonly OPEN_OPEN = 20;
|
|
24
|
+
static readonly OPEN_FOLD = 21;
|
|
25
25
|
static readonly OPEN_SEND = 22;
|
|
26
26
|
static readonly OPEN_EXEC = 23;
|
|
27
27
|
static readonly SLOTS_WS = 24;
|
|
@@ -37,8 +37,8 @@ export declare class plurnkParser extends antlr.Parser {
|
|
|
37
37
|
static readonly RULE_editStatement = 4;
|
|
38
38
|
static readonly RULE_copyStatement = 5;
|
|
39
39
|
static readonly RULE_moveStatement = 6;
|
|
40
|
-
static readonly
|
|
41
|
-
static readonly
|
|
40
|
+
static readonly RULE_openStatement = 7;
|
|
41
|
+
static readonly RULE_foldStatement = 8;
|
|
42
42
|
static readonly RULE_sendStatement = 9;
|
|
43
43
|
static readonly RULE_execStatement = 10;
|
|
44
44
|
static readonly RULE_tagOpModifiers = 11;
|
|
@@ -67,8 +67,8 @@ export declare class plurnkParser extends antlr.Parser {
|
|
|
67
67
|
editStatement(): EditStatementContext;
|
|
68
68
|
copyStatement(): CopyStatementContext;
|
|
69
69
|
moveStatement(): MoveStatementContext;
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
openStatement(): OpenStatementContext;
|
|
71
|
+
foldStatement(): FoldStatementContext;
|
|
72
72
|
sendStatement(): SendStatementContext;
|
|
73
73
|
execStatement(): ExecStatementContext;
|
|
74
74
|
tagOpModifiers(): TagOpModifiersContext;
|
|
@@ -104,8 +104,8 @@ export declare class StatementContext extends antlr.ParserRuleContext {
|
|
|
104
104
|
editStatement(): EditStatementContext | null;
|
|
105
105
|
copyStatement(): CopyStatementContext | null;
|
|
106
106
|
moveStatement(): MoveStatementContext | null;
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
openStatement(): OpenStatementContext | null;
|
|
108
|
+
foldStatement(): FoldStatementContext | null;
|
|
109
109
|
sendStatement(): SendStatementContext | null;
|
|
110
110
|
execStatement(): ExecStatementContext | null;
|
|
111
111
|
get ruleIndex(): number;
|
|
@@ -161,9 +161,9 @@ export declare class MoveStatementContext extends antlr.ParserRuleContext {
|
|
|
161
161
|
get ruleIndex(): number;
|
|
162
162
|
accept<Result>(visitor: plurnkParserVisitor<Result>): Result | null;
|
|
163
163
|
}
|
|
164
|
-
export declare class
|
|
164
|
+
export declare class OpenStatementContext extends antlr.ParserRuleContext {
|
|
165
165
|
constructor(parent: antlr.ParserRuleContext | null, invokingState: number);
|
|
166
|
-
|
|
166
|
+
OPEN_OPEN(): antlr.TerminalNode;
|
|
167
167
|
COLON(): antlr.TerminalNode;
|
|
168
168
|
CLOSE_TAG(): antlr.TerminalNode;
|
|
169
169
|
tagOpModifiers(): TagOpModifiersContext | null;
|
|
@@ -171,9 +171,9 @@ export declare class ShowStatementContext extends antlr.ParserRuleContext {
|
|
|
171
171
|
get ruleIndex(): number;
|
|
172
172
|
accept<Result>(visitor: plurnkParserVisitor<Result>): Result | null;
|
|
173
173
|
}
|
|
174
|
-
export declare class
|
|
174
|
+
export declare class FoldStatementContext extends antlr.ParserRuleContext {
|
|
175
175
|
constructor(parent: antlr.ParserRuleContext | null, invokingState: number);
|
|
176
|
-
|
|
176
|
+
OPEN_FOLD(): antlr.TerminalNode;
|
|
177
177
|
COLON(): antlr.TerminalNode;
|
|
178
178
|
CLOSE_TAG(): antlr.TerminalNode;
|
|
179
179
|
tagOpModifiers(): TagOpModifiersContext | null;
|
|
@@ -19,8 +19,8 @@ export class plurnkParser extends antlr.Parser {
|
|
|
19
19
|
static OPEN_EDIT = 17;
|
|
20
20
|
static OPEN_COPY = 18;
|
|
21
21
|
static OPEN_MOVE = 19;
|
|
22
|
-
static
|
|
23
|
-
static
|
|
22
|
+
static OPEN_OPEN = 20;
|
|
23
|
+
static OPEN_FOLD = 21;
|
|
24
24
|
static OPEN_SEND = 22;
|
|
25
25
|
static OPEN_EXEC = 23;
|
|
26
26
|
static SLOTS_WS = 24;
|
|
@@ -36,8 +36,8 @@ export class plurnkParser extends antlr.Parser {
|
|
|
36
36
|
static RULE_editStatement = 4;
|
|
37
37
|
static RULE_copyStatement = 5;
|
|
38
38
|
static RULE_moveStatement = 6;
|
|
39
|
-
static
|
|
40
|
-
static
|
|
39
|
+
static RULE_openStatement = 7;
|
|
40
|
+
static RULE_foldStatement = 8;
|
|
41
41
|
static RULE_sendStatement = 9;
|
|
42
42
|
static RULE_execStatement = 10;
|
|
43
43
|
static RULE_tagOpModifiers = 11;
|
|
@@ -58,12 +58,12 @@ export class plurnkParser extends antlr.Parser {
|
|
|
58
58
|
null, "LBRACKET", "RBRACKET", "LPAREN", "RPAREN", "L_MARKER", "COLON",
|
|
59
59
|
"COMMA", "INT", "IDENT", "TAG", "TARGET_TEXT", "BODY_TEXT", "CLOSE_TAG",
|
|
60
60
|
"TEXT", "OPEN_FIND", "OPEN_READ", "OPEN_EDIT", "OPEN_COPY", "OPEN_MOVE",
|
|
61
|
-
"
|
|
61
|
+
"OPEN_OPEN", "OPEN_FOLD", "OPEN_SEND", "OPEN_EXEC", "SLOTS_WS",
|
|
62
62
|
"ST_WS", "SI_WS", "SD_WS", "ST_COMMA", "B_COLON"
|
|
63
63
|
];
|
|
64
64
|
static ruleNames = [
|
|
65
65
|
"document", "statement", "findStatement", "readStatement", "editStatement",
|
|
66
|
-
"copyStatement", "moveStatement", "
|
|
66
|
+
"copyStatement", "moveStatement", "openStatement", "foldStatement",
|
|
67
67
|
"sendStatement", "execStatement", "tagOpModifiers", "sendModifiers",
|
|
68
68
|
"execModifiers", "tagSignal", "intSignal", "identSignal", "target",
|
|
69
69
|
"lineMarker", "body",
|
|
@@ -100,8 +100,8 @@ export class plurnkParser extends antlr.Parser {
|
|
|
100
100
|
case plurnkParser.OPEN_EDIT:
|
|
101
101
|
case plurnkParser.OPEN_COPY:
|
|
102
102
|
case plurnkParser.OPEN_MOVE:
|
|
103
|
-
case plurnkParser.
|
|
104
|
-
case plurnkParser.
|
|
103
|
+
case plurnkParser.OPEN_OPEN:
|
|
104
|
+
case plurnkParser.OPEN_FOLD:
|
|
105
105
|
case plurnkParser.OPEN_SEND:
|
|
106
106
|
case plurnkParser.OPEN_EXEC:
|
|
107
107
|
{
|
|
@@ -183,18 +183,18 @@ export class plurnkParser extends antlr.Parser {
|
|
|
183
183
|
this.moveStatement();
|
|
184
184
|
}
|
|
185
185
|
break;
|
|
186
|
-
case plurnkParser.
|
|
186
|
+
case plurnkParser.OPEN_OPEN:
|
|
187
187
|
this.enterOuterAlt(localContext, 6);
|
|
188
188
|
{
|
|
189
189
|
this.state = 54;
|
|
190
|
-
this.
|
|
190
|
+
this.openStatement();
|
|
191
191
|
}
|
|
192
192
|
break;
|
|
193
|
-
case plurnkParser.
|
|
193
|
+
case plurnkParser.OPEN_FOLD:
|
|
194
194
|
this.enterOuterAlt(localContext, 7);
|
|
195
195
|
{
|
|
196
196
|
this.state = 55;
|
|
197
|
-
this.
|
|
197
|
+
this.foldStatement();
|
|
198
198
|
}
|
|
199
199
|
break;
|
|
200
200
|
case plurnkParser.OPEN_SEND:
|
|
@@ -464,15 +464,15 @@ export class plurnkParser extends antlr.Parser {
|
|
|
464
464
|
}
|
|
465
465
|
return localContext;
|
|
466
466
|
}
|
|
467
|
-
|
|
468
|
-
let localContext = new
|
|
469
|
-
this.enterRule(localContext, 14, plurnkParser.
|
|
467
|
+
openStatement() {
|
|
468
|
+
let localContext = new OpenStatementContext(this.context, this.state);
|
|
469
|
+
this.enterRule(localContext, 14, plurnkParser.RULE_openStatement);
|
|
470
470
|
let _la;
|
|
471
471
|
try {
|
|
472
472
|
this.enterOuterAlt(localContext, 1);
|
|
473
473
|
{
|
|
474
474
|
this.state = 110;
|
|
475
|
-
this.match(plurnkParser.
|
|
475
|
+
this.match(plurnkParser.OPEN_OPEN);
|
|
476
476
|
this.state = 112;
|
|
477
477
|
this.errorHandler.sync(this);
|
|
478
478
|
_la = this.tokenStream.LA(1);
|
|
@@ -511,15 +511,15 @@ export class plurnkParser extends antlr.Parser {
|
|
|
511
511
|
}
|
|
512
512
|
return localContext;
|
|
513
513
|
}
|
|
514
|
-
|
|
515
|
-
let localContext = new
|
|
516
|
-
this.enterRule(localContext, 16, plurnkParser.
|
|
514
|
+
foldStatement() {
|
|
515
|
+
let localContext = new FoldStatementContext(this.context, this.state);
|
|
516
|
+
this.enterRule(localContext, 16, plurnkParser.RULE_foldStatement);
|
|
517
517
|
let _la;
|
|
518
518
|
try {
|
|
519
519
|
this.enterOuterAlt(localContext, 1);
|
|
520
520
|
{
|
|
521
521
|
this.state = 120;
|
|
522
|
-
this.match(plurnkParser.
|
|
522
|
+
this.match(plurnkParser.OPEN_FOLD);
|
|
523
523
|
this.state = 122;
|
|
524
524
|
this.errorHandler.sync(this);
|
|
525
525
|
_la = this.tokenStream.LA(1);
|
|
@@ -1302,11 +1302,11 @@ export class StatementContext extends antlr.ParserRuleContext {
|
|
|
1302
1302
|
moveStatement() {
|
|
1303
1303
|
return this.getRuleContext(0, MoveStatementContext);
|
|
1304
1304
|
}
|
|
1305
|
-
|
|
1306
|
-
return this.getRuleContext(0,
|
|
1305
|
+
openStatement() {
|
|
1306
|
+
return this.getRuleContext(0, OpenStatementContext);
|
|
1307
1307
|
}
|
|
1308
|
-
|
|
1309
|
-
return this.getRuleContext(0,
|
|
1308
|
+
foldStatement() {
|
|
1309
|
+
return this.getRuleContext(0, FoldStatementContext);
|
|
1310
1310
|
}
|
|
1311
1311
|
sendStatement() {
|
|
1312
1312
|
return this.getRuleContext(0, SendStatementContext);
|
|
@@ -1481,12 +1481,12 @@ export class MoveStatementContext extends antlr.ParserRuleContext {
|
|
|
1481
1481
|
}
|
|
1482
1482
|
}
|
|
1483
1483
|
}
|
|
1484
|
-
export class
|
|
1484
|
+
export class OpenStatementContext extends antlr.ParserRuleContext {
|
|
1485
1485
|
constructor(parent, invokingState) {
|
|
1486
1486
|
super(parent, invokingState);
|
|
1487
1487
|
}
|
|
1488
|
-
|
|
1489
|
-
return this.getToken(plurnkParser.
|
|
1488
|
+
OPEN_OPEN() {
|
|
1489
|
+
return this.getToken(plurnkParser.OPEN_OPEN, 0);
|
|
1490
1490
|
}
|
|
1491
1491
|
COLON() {
|
|
1492
1492
|
return this.getToken(plurnkParser.COLON, 0);
|
|
@@ -1501,23 +1501,23 @@ export class ShowStatementContext extends antlr.ParserRuleContext {
|
|
|
1501
1501
|
return this.getRuleContext(0, BodyContext);
|
|
1502
1502
|
}
|
|
1503
1503
|
get ruleIndex() {
|
|
1504
|
-
return plurnkParser.
|
|
1504
|
+
return plurnkParser.RULE_openStatement;
|
|
1505
1505
|
}
|
|
1506
1506
|
accept(visitor) {
|
|
1507
|
-
if (visitor.
|
|
1508
|
-
return visitor.
|
|
1507
|
+
if (visitor.visitOpenStatement) {
|
|
1508
|
+
return visitor.visitOpenStatement(this);
|
|
1509
1509
|
}
|
|
1510
1510
|
else {
|
|
1511
1511
|
return visitor.visitChildren(this);
|
|
1512
1512
|
}
|
|
1513
1513
|
}
|
|
1514
1514
|
}
|
|
1515
|
-
export class
|
|
1515
|
+
export class FoldStatementContext extends antlr.ParserRuleContext {
|
|
1516
1516
|
constructor(parent, invokingState) {
|
|
1517
1517
|
super(parent, invokingState);
|
|
1518
1518
|
}
|
|
1519
|
-
|
|
1520
|
-
return this.getToken(plurnkParser.
|
|
1519
|
+
OPEN_FOLD() {
|
|
1520
|
+
return this.getToken(plurnkParser.OPEN_FOLD, 0);
|
|
1521
1521
|
}
|
|
1522
1522
|
COLON() {
|
|
1523
1523
|
return this.getToken(plurnkParser.COLON, 0);
|
|
@@ -1532,11 +1532,11 @@ export class HideStatementContext extends antlr.ParserRuleContext {
|
|
|
1532
1532
|
return this.getRuleContext(0, BodyContext);
|
|
1533
1533
|
}
|
|
1534
1534
|
get ruleIndex() {
|
|
1535
|
-
return plurnkParser.
|
|
1535
|
+
return plurnkParser.RULE_foldStatement;
|
|
1536
1536
|
}
|
|
1537
1537
|
accept(visitor) {
|
|
1538
|
-
if (visitor.
|
|
1539
|
-
return visitor.
|
|
1538
|
+
if (visitor.visitFoldStatement) {
|
|
1539
|
+
return visitor.visitFoldStatement(this);
|
|
1540
1540
|
}
|
|
1541
1541
|
else {
|
|
1542
1542
|
return visitor.visitChildren(this);
|
|
@@ -6,8 +6,8 @@ import { ReadStatementContext } from "./plurnkParser.ts";
|
|
|
6
6
|
import { EditStatementContext } from "./plurnkParser.ts";
|
|
7
7
|
import { CopyStatementContext } from "./plurnkParser.ts";
|
|
8
8
|
import { MoveStatementContext } from "./plurnkParser.ts";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { OpenStatementContext } from "./plurnkParser.ts";
|
|
10
|
+
import { FoldStatementContext } from "./plurnkParser.ts";
|
|
11
11
|
import { SendStatementContext } from "./plurnkParser.ts";
|
|
12
12
|
import { ExecStatementContext } from "./plurnkParser.ts";
|
|
13
13
|
import { TagOpModifiersContext } from "./plurnkParser.ts";
|
|
@@ -70,17 +70,17 @@ export declare class plurnkParserVisitor<Result> extends AbstractParseTreeVisito
|
|
|
70
70
|
*/
|
|
71
71
|
visitMoveStatement?: (ctx: MoveStatementContext) => Result;
|
|
72
72
|
/**
|
|
73
|
-
* Visit a parse tree produced by `plurnkParser.
|
|
73
|
+
* Visit a parse tree produced by `plurnkParser.openStatement`.
|
|
74
74
|
* @param ctx the parse tree
|
|
75
75
|
* @return the visitor result
|
|
76
76
|
*/
|
|
77
|
-
|
|
77
|
+
visitOpenStatement?: (ctx: OpenStatementContext) => Result;
|
|
78
78
|
/**
|
|
79
|
-
* Visit a parse tree produced by `plurnkParser.
|
|
79
|
+
* Visit a parse tree produced by `plurnkParser.foldStatement`.
|
|
80
80
|
* @param ctx the parse tree
|
|
81
81
|
* @return the visitor result
|
|
82
82
|
*/
|
|
83
|
-
|
|
83
|
+
visitFoldStatement?: (ctx: FoldStatementContext) => Result;
|
|
84
84
|
/**
|
|
85
85
|
* Visit a parse tree produced by `plurnkParser.sendStatement`.
|
|
86
86
|
* @param ctx the parse tree
|
|
@@ -50,17 +50,17 @@ export class plurnkParserVisitor extends AbstractParseTreeVisitor {
|
|
|
50
50
|
*/
|
|
51
51
|
visitMoveStatement;
|
|
52
52
|
/**
|
|
53
|
-
* Visit a parse tree produced by `plurnkParser.
|
|
53
|
+
* Visit a parse tree produced by `plurnkParser.openStatement`.
|
|
54
54
|
* @param ctx the parse tree
|
|
55
55
|
* @return the visitor result
|
|
56
56
|
*/
|
|
57
|
-
|
|
57
|
+
visitOpenStatement;
|
|
58
58
|
/**
|
|
59
|
-
* Visit a parse tree produced by `plurnkParser.
|
|
59
|
+
* Visit a parse tree produced by `plurnkParser.foldStatement`.
|
|
60
60
|
* @param ctx the parse tree
|
|
61
61
|
* @return the visitor result
|
|
62
62
|
*/
|
|
63
|
-
|
|
63
|
+
visitFoldStatement;
|
|
64
64
|
/**
|
|
65
65
|
* Visit a parse tree produced by `plurnkParser.sendStatement`.
|
|
66
66
|
* @param ctx the parse tree
|
package/dist/src/index.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export { default as RecordingListener } from "./RecordingListener.ts";
|
|
|
6
6
|
export { default as Validator } from "./Validator.ts";
|
|
7
7
|
export type { ValidationResult } from "./Validator.ts";
|
|
8
8
|
export type { ErrorSource } from "./PlurnkParseError.ts";
|
|
9
|
-
export type { ContentOffset, CopyStatement, EditStatement, ExecStatement, FindStatement,
|
|
9
|
+
export type { ContentOffset, CopyStatement, EditStatement, ExecStatement, FindStatement, FoldStatement, LineMarker, LocalPath, LogCoordinate, MatcherBody, MoveStatement, ParseItem, ParseResult, ParsedPath, PlurnkOp, PlurnkStatement, Position, ReadStatement, SendBody, SendStatement, OpenStatement, TelemetryEvent, UrlPath, } from "./types.ts";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from "./types.generated.ts";
|
|
2
2
|
import type { Position, PlurnkStatement } from "./types.generated.ts";
|
|
3
3
|
import type PlurnkParseError from "./PlurnkParseError.ts";
|
|
4
|
-
export type PlurnkOp = "FIND" | "READ" | "EDIT" | "COPY" | "MOVE" | "
|
|
4
|
+
export type PlurnkOp = "FIND" | "READ" | "EDIT" | "COPY" | "MOVE" | "OPEN" | "FOLD" | "SEND" | "EXEC";
|
|
5
5
|
export type ParseItem = {
|
|
6
6
|
kind: "statement";
|
|
7
7
|
statement: PlurnkStatement;
|
|
@@ -117,7 +117,7 @@ export type LogEntry = ({
|
|
|
117
117
|
sequence: number;
|
|
118
118
|
at: string;
|
|
119
119
|
origin: ("model" | "client" | "system" | "plugin");
|
|
120
|
-
op: ("FIND" | "READ" | "EDIT" | "COPY" | "MOVE" | "
|
|
120
|
+
op: ("FIND" | "READ" | "EDIT" | "COPY" | "MOVE" | "OPEN" | "FOLD" | "SEND" | "EXEC");
|
|
121
121
|
suffix: string;
|
|
122
122
|
signal: (string[] | number | string | null);
|
|
123
123
|
scheme: (string | null);
|
|
@@ -221,13 +221,13 @@ export interface GlobBody {
|
|
|
221
221
|
dialect: "glob";
|
|
222
222
|
raw: string;
|
|
223
223
|
}
|
|
224
|
-
export type PlurnkStatement = (FindStatement | ReadStatement |
|
|
224
|
+
export type PlurnkStatement = (FindStatement | ReadStatement | OpenStatement | FoldStatement | EditStatement | CopyStatement | MoveStatement | SendStatement | ExecStatement);
|
|
225
225
|
/**
|
|
226
226
|
* A parsed path slot from a plurnk statement. Discriminated on `kind`: either a bare local path (no scheme) or a fully decomposed URL.
|
|
227
227
|
*/
|
|
228
228
|
export type ParsedPath = (LocalPath | UrlPath);
|
|
229
229
|
/**
|
|
230
|
-
* Parsed body of a FIND/READ/
|
|
230
|
+
* Parsed body of a FIND/READ/OPEN/FOLD statement, discriminated on `dialect`. The dialect is determined by the body's leading characters (`//` xpath, `/` regex, `$` jsonpath, `~` semantic, `@` graph, else glob). The regex variant carries pattern/flags split out of the `/pattern/flags` literal; the compiled `RegExp` object on the in-memory AST is a runtime ergonomic only and is not part of the persisted/wire contract.
|
|
231
231
|
*/
|
|
232
232
|
export interface Packet {
|
|
233
233
|
/**
|
|
@@ -372,8 +372,8 @@ export interface ReadStatement {
|
|
|
372
372
|
body: (MatcherBody | null);
|
|
373
373
|
position: Position;
|
|
374
374
|
}
|
|
375
|
-
export interface
|
|
376
|
-
op: "
|
|
375
|
+
export interface OpenStatement {
|
|
376
|
+
op: "OPEN";
|
|
377
377
|
suffix: string;
|
|
378
378
|
signal: (string[] | null);
|
|
379
379
|
target: (ParsedPath | null);
|
|
@@ -381,8 +381,8 @@ export interface ShowStatement {
|
|
|
381
381
|
body: (MatcherBody | null);
|
|
382
382
|
position: Position;
|
|
383
383
|
}
|
|
384
|
-
export interface
|
|
385
|
-
op: "
|
|
384
|
+
export interface FoldStatement {
|
|
385
|
+
op: "FOLD";
|
|
386
386
|
suffix: string;
|
|
387
387
|
signal: (string[] | null);
|
|
388
388
|
target: (ParsedPath | null);
|
|
@@ -450,7 +450,7 @@ export type PathOrNull = (ParsedPath | null);
|
|
|
450
450
|
export type LineMarkerOrNull = (LineMarker | null);
|
|
451
451
|
export type MatcherBodyOrNull = (MatcherBody | null);
|
|
452
452
|
/**
|
|
453
|
-
* Parsed body of a FIND/READ/
|
|
453
|
+
* Parsed body of a FIND/READ/OPEN/FOLD statement, discriminated on `dialect`. The dialect is determined by the body's leading characters (`//` xpath, `/` regex, `$` jsonpath, `~` semantic, `@` graph, else glob). The regex variant carries pattern/flags split out of the `/pattern/flags` literal; the compiled `RegExp` object on the in-memory AST is a runtime ergonomic only and is not part of the persisted/wire contract.
|
|
454
454
|
*/
|
|
455
455
|
export type SendBodyOrNull = (SendBody | null);
|
|
456
456
|
export interface Run {
|
package/package.json
CHANGED
package/plurnk.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Plurnk System Grammar
|
|
2
2
|
|
|
3
|
-
YOU MUST ONLY use the Extended HEREDOC Plurnk Operations (FIND|READ|EDIT|COPY|MOVE|
|
|
3
|
+
YOU MUST ONLY use the Extended HEREDOC Plurnk Operations (FIND|READ|EDIT|COPY|MOVE|OPEN|FOLD|SEND|EXEC).
|
|
4
4
|
|
|
5
5
|
## Syntax
|
|
6
6
|
|
|
@@ -17,8 +17,8 @@ Slots between `<<OPsuffix` and `:body:` are all optional. `:body:` fences are re
|
|
|
17
17
|
| EDIT | tags | required | lines `N,M` | content |
|
|
18
18
|
| COPY | apply tags | required | lines `N,M` | destination URI |
|
|
19
19
|
| MOVE | apply tags | required | lines `N,M` | destination URI |
|
|
20
|
-
|
|
|
21
|
-
|
|
|
20
|
+
| OPEN | filter tags | log path | results `N,M` | matcher |
|
|
21
|
+
| FOLD | filter tags | log path | results `N,M` | matcher |
|
|
22
22
|
| SEND | status code | recipient | — | message body |
|
|
23
23
|
| EXEC | executor | cwd | — | command or code |
|
|
24
24
|
|
|
@@ -31,12 +31,12 @@ EXEC defaults to `sh`; override with an optional executor (`node`, `python`, `se
|
|
|
31
31
|
|
|
32
32
|
The agent maintains two surfaces for budgeting working-memory tokens:
|
|
33
33
|
|
|
34
|
-
- **Log** — what you did: the chronological record of every operation.
|
|
34
|
+
- **Log** — what you did: the chronological record of every operation. FOLD contracts a log row to its one-line summary and saves tokens; OPEN restores the complete record and spends tokens. Non-destructive — folded rows remain listed and re-OPENable.
|
|
35
35
|
- **`plurnk://manifest.json`** — what's available: the complete, unranked directory of every entry (items are `{ path, channels }`). Query it to discover what exists; the system never ranks for you.
|
|
36
36
|
|
|
37
|
-
READ pulls an entry's content (full, ranged, or matcher-filtered) and appends a fresh log row.
|
|
37
|
+
READ pulls an entry's content (full, ranged, or matcher-filtered) and appends a fresh log row. OPEN and FOLD operate on the log only; against an entry they return 501.
|
|
38
38
|
|
|
39
|
-
YOU SHOULD
|
|
39
|
+
YOU SHOULD FOLD distilled and irrelevant log rows to save tokens and optimize context relevance.
|
|
40
40
|
YOU SHOULD distill durable findings into `known://` entries with EDIT.
|
|
41
41
|
YOU MAY permanently delete entries by MOVE to `/dev/null` (works regardless of environment).
|
|
42
42
|
|
|
@@ -51,7 +51,7 @@ Clearing content: `<1,-1>` selects every position; combine with an empty body to
|
|
|
51
51
|
|
|
52
52
|
On structured entries, `<Result>` addresses result index, not line number.
|
|
53
53
|
|
|
54
|
-
## Body matcher dispatch (FIND, READ,
|
|
54
|
+
## Body matcher dispatch (FIND, READ, OPEN, FOLD)
|
|
55
55
|
|
|
56
56
|
| leading prefix | dialect | form |
|
|
57
57
|
|----------------|----------|-----------------------------------|
|
|
@@ -120,9 +120,9 @@ Body content is character-perfect, exactly matching whitespace.
|
|
|
120
120
|
<<COPY[archive,2026-05-14](known://draft.md):known://archive/2026-05-14/draft.md:COPY
|
|
121
121
|
<<MOVE[final](known://draft/answer.md):known://final/answer.md:MOVE
|
|
122
122
|
<<MOVE(known://obsolete/note.md):/dev/null:MOVE
|
|
123
|
-
<<
|
|
123
|
+
<<OPEN(log://**/get)<1,10>::OPEN
|
|
124
124
|
<<FIND(known://**)<5>:~french revolutionary history:FIND
|
|
125
|
-
<<
|
|
125
|
+
<<FOLD(log://**/get)<101,200>::FOLD
|
|
126
126
|
<<FIND(log://**/error):/timeout|deadline exceeded/i:FIND
|
|
127
127
|
<<FIND(known://**):revolution:FIND
|
|
128
128
|
<<FIND(src/**):@<createCoder:FIND
|