|
2 | 2 |
|
3 | 3 | %ebnf
|
4 | 4 |
|
5 |
| -%{ |
6 |
| - |
7 |
| -function stripFlags(open, close) { |
8 |
| - return { |
9 |
| - left: open.charAt(2) === '~', |
10 |
| - right: close.charAt(0) === '~' || close.charAt(1) === '~' |
11 |
| - }; |
12 |
| -} |
13 |
| - |
14 |
| -%} |
15 |
| - |
16 | 5 | %%
|
17 | 6 |
|
18 | 7 | root
|
19 |
| - : statements EOF { return new yy.ProgramNode($1, @$); } |
20 |
| - | EOF { return new yy.ProgramNode([], @$); } |
| 8 | + : program EOF { return $1; } |
21 | 9 | ;
|
22 | 10 |
|
23 | 11 | program
|
24 |
| - : simpleInverse statements -> new yy.ProgramNode([], $1, $2, @$) |
25 |
| - | statements simpleInverse statements -> new yy.ProgramNode($1, $2, $3, @$) |
26 |
| - | statements simpleInverse -> new yy.ProgramNode($1, $2, [], @$) |
27 |
| - | statements -> new yy.ProgramNode($1, @$) |
28 |
| - | simpleInverse -> new yy.ProgramNode([], @$) |
29 |
| - | "" -> new yy.ProgramNode([], @$) |
30 |
| - ; |
31 |
| - |
32 |
| -statements |
33 |
| - : statement -> [$1] |
34 |
| - | statements statement { $1.push($2); $$ = $1; } |
| 12 | + : statement* -> new yy.ProgramNode($1, {}, @$) |
35 | 13 | ;
|
36 | 14 |
|
37 | 15 | statement
|
38 |
| - : openRawBlock CONTENT END_RAW_BLOCK -> new yy.RawBlockNode($1, $2, $3, @$) |
39 |
| - | openInverse program closeBlock -> new yy.BlockNode($1, $2.inverse, $2, $3, @$) |
40 |
| - | openBlock program closeBlock -> new yy.BlockNode($1, $2, $2.inverse, $3, @$) |
41 |
| - | mustache -> $1 |
| 16 | + : mustache -> $1 |
| 17 | + | block -> $1 |
| 18 | + | rawBlock -> $1 |
42 | 19 | | partial -> $1
|
43 | 20 | | CONTENT -> new yy.ContentNode($1, @$)
|
44 | 21 | | COMMENT -> new yy.CommentNode($1, @$)
|
45 | 22 | ;
|
46 | 23 |
|
| 24 | +rawBlock |
| 25 | + : openRawBlock CONTENT END_RAW_BLOCK -> new yy.RawBlockNode($1, $2, $3, @$) |
| 26 | + ; |
| 27 | + |
47 | 28 | openRawBlock
|
48 | 29 | : OPEN_RAW_BLOCK sexpr CLOSE_RAW_BLOCK -> new yy.MustacheNode($2, null, '', '', @$)
|
49 | 30 | ;
|
50 | 31 |
|
| 32 | +block |
| 33 | + : openBlock program inverseAndProgram? closeBlock -> yy.prepareBlock($1, $2, $3, $4, false, @$) |
| 34 | + | openInverse program inverseAndProgram? closeBlock -> yy.prepareBlock($1, $2, $3, $4, true, @$) |
| 35 | + ; |
| 36 | + |
51 | 37 | openBlock
|
52 |
| - : OPEN_BLOCK sexpr CLOSE -> new yy.MustacheNode($2, null, $1, stripFlags($1, $3), @$) |
| 38 | + : OPEN_BLOCK sexpr CLOSE -> new yy.MustacheNode($2, null, $1, yy.stripFlags($1, $3), @$) |
53 | 39 | ;
|
54 | 40 |
|
55 | 41 | openInverse
|
56 |
| - : OPEN_INVERSE sexpr CLOSE -> new yy.MustacheNode($2, null, $1, stripFlags($1, $3), @$) |
| 42 | + : OPEN_INVERSE sexpr CLOSE -> new yy.MustacheNode($2, null, $1, yy.stripFlags($1, $3), @$) |
| 43 | + ; |
| 44 | + |
| 45 | +inverseAndProgram |
| 46 | + : INVERSE program -> { strip: yy.stripFlags($1, $1), program: $2 } |
57 | 47 | ;
|
58 | 48 |
|
59 | 49 | closeBlock
|
60 |
| - : OPEN_ENDBLOCK path CLOSE -> {path: $2, strip: stripFlags($1, $3)} |
| 50 | + : OPEN_ENDBLOCK path CLOSE -> {path: $2, strip: yy.stripFlags($1, $3)} |
61 | 51 | ;
|
62 | 52 |
|
63 | 53 | mustache
|
64 | 54 | // Parsing out the '&' escape token at AST level saves ~500 bytes after min due to the removal of one parser node.
|
65 | 55 | // This also allows for handler unification as all mustache node instances can utilize the same handler
|
66 |
| - : OPEN sexpr CLOSE -> new yy.MustacheNode($2, null, $1, stripFlags($1, $3), @$) |
67 |
| - | OPEN_UNESCAPED sexpr CLOSE_UNESCAPED -> new yy.MustacheNode($2, null, $1, stripFlags($1, $3), @$) |
| 56 | + : OPEN sexpr CLOSE -> new yy.MustacheNode($2, null, $1, yy.stripFlags($1, $3), @$) |
| 57 | + | OPEN_UNESCAPED sexpr CLOSE_UNESCAPED -> new yy.MustacheNode($2, null, $1, yy.stripFlags($1, $3), @$) |
68 | 58 | ;
|
69 | 59 |
|
70 | 60 | partial
|
71 |
| - : OPEN_PARTIAL partialName param hash? CLOSE -> new yy.PartialNode($2, $3, $4, stripFlags($1, $5), @$) |
72 |
| - | OPEN_PARTIAL partialName hash? CLOSE -> new yy.PartialNode($2, undefined, $3, stripFlags($1, $4), @$) |
| 61 | + : OPEN_PARTIAL partialName param hash? CLOSE -> new yy.PartialNode($2, $3, $4, yy.stripFlags($1, $5), @$) |
| 62 | + | OPEN_PARTIAL partialName hash? CLOSE -> new yy.PartialNode($2, undefined, $3, yy.stripFlags($1, $4), @$) |
73 | 63 | ;
|
74 | 64 |
|
75 | 65 | simpleInverse
|
76 |
| - : OPEN_INVERSE CLOSE -> stripFlags($1, $2) |
| 66 | + : INVERSE -> yy.stripFlags($1, $1) |
77 | 67 | ;
|
78 | 68 |
|
79 | 69 | sexpr
|
|
0 commit comments