@@ -61,7 +61,7 @@ export default function mustache(parser: Parser) {
61
61
62
62
parser . eat ( expected , true ) ;
63
63
parser . allowWhitespace ( ) ;
64
- parser . eat ( '}}' , true ) ;
64
+ parser . eat ( parser . v2 ? '}' : '}}' , true ) ;
65
65
66
66
while ( block . elseif ) {
67
67
block . end = parser . index ;
@@ -83,7 +83,7 @@ export default function mustache(parser: Parser) {
83
83
84
84
block . end = parser . index ;
85
85
parser . stack . pop ( ) ;
86
- } else if ( parser . eat ( 'elseif' ) ) {
86
+ } else if ( parser . eat ( parser . v2 ? ':elseif' : 'elseif' ) ) {
87
87
const block = parser . current ( ) ;
88
88
if ( block . type !== 'IfBlock' )
89
89
parser . error (
@@ -95,7 +95,7 @@ export default function mustache(parser: Parser) {
95
95
const expression = readExpression ( parser ) ;
96
96
97
97
parser . allowWhitespace ( ) ;
98
- parser . eat ( '}}' , true ) ;
98
+ parser . eat ( parser . v2 ? '}' : '}}' , true ) ;
99
99
100
100
block . else = {
101
101
start : parser . index ,
@@ -114,7 +114,7 @@ export default function mustache(parser: Parser) {
114
114
} ;
115
115
116
116
parser . stack . push ( block . else . children [ 0 ] ) ;
117
- } else if ( parser . eat ( 'else' ) ) {
117
+ } else if ( parser . eat ( parser . v2 ? ':else' : 'else' ) ) {
118
118
const block = parser . current ( ) ;
119
119
if ( block . type !== 'IfBlock' && block . type !== 'EachBlock' ) {
120
120
parser . error (
@@ -123,7 +123,7 @@ export default function mustache(parser: Parser) {
123
123
}
124
124
125
125
parser . allowWhitespace ( ) ;
126
- parser . eat ( '}}' , true ) ;
126
+ parser . eat ( parser . v2 ? '}' : '}}' , true ) ;
127
127
128
128
block . else = {
129
129
start : parser . index ,
@@ -133,7 +133,7 @@ export default function mustache(parser: Parser) {
133
133
} ;
134
134
135
135
parser . stack . push ( block . else ) ;
136
- } else if ( parser . eat ( 'then' ) ) {
136
+ } else if ( parser . eat ( parser . v2 ? ':then' : 'then' ) ) {
137
137
// TODO DRY out this and the next section
138
138
const pendingBlock = parser . current ( ) ;
139
139
if ( pendingBlock . type === 'PendingBlock' ) {
@@ -145,7 +145,7 @@ export default function mustache(parser: Parser) {
145
145
awaitBlock . value = parser . readIdentifier ( ) ;
146
146
147
147
parser . allowWhitespace ( ) ;
148
- parser . eat ( '}}' , true ) ;
148
+ parser . eat ( parser . v2 ? '}' : '}}' , true ) ;
149
149
150
150
const thenBlock : Node = {
151
151
start,
@@ -157,7 +157,7 @@ export default function mustache(parser: Parser) {
157
157
awaitBlock . then = thenBlock ;
158
158
parser . stack . push ( thenBlock ) ;
159
159
}
160
- } else if ( parser . eat ( 'catch' ) ) {
160
+ } else if ( parser . eat ( parser . v2 ? ':catch' : 'catch' ) ) {
161
161
const thenBlock = parser . current ( ) ;
162
162
if ( thenBlock . type === 'ThenBlock' ) {
163
163
thenBlock . end = start ;
@@ -168,7 +168,7 @@ export default function mustache(parser: Parser) {
168
168
awaitBlock . error = parser . readIdentifier ( ) ;
169
169
170
170
parser . allowWhitespace ( ) ;
171
- parser . eat ( '}}' , true ) ;
171
+ parser . eat ( parser . v2 ? '}' : '}}' , true ) ;
172
172
173
173
const catchBlock : Node = {
174
174
start,
@@ -288,7 +288,7 @@ export default function mustache(parser: Parser) {
288
288
parser . allowWhitespace ( ) ;
289
289
}
290
290
291
- parser . eat ( '}}' , true ) ;
291
+ parser . eat ( parser . v2 ? '}' : '}}' , true ) ;
292
292
293
293
parser . current ( ) . children . push ( block ) ;
294
294
parser . stack . push ( block ) ;
@@ -302,22 +302,40 @@ export default function mustache(parser: Parser) {
302
302
// {{yield}}
303
303
// TODO deprecate
304
304
parser . allowWhitespace ( ) ;
305
- parser . eat ( '}}' , true ) ;
306
305
307
- parser . current ( ) . children . push ( {
308
- start,
309
- end : parser . index ,
310
- type : 'Element' ,
311
- name : 'slot' ,
312
- attributes : [ ] ,
313
- children : [ ]
314
- } ) ;
315
- } else if ( parser . eat ( '{' ) ) {
306
+ if ( parser . v2 ) {
307
+ const expressionEnd = parser . index ;
308
+
309
+ parser . eat ( '}' , true ) ;
310
+ parser . current ( ) . children . push ( {
311
+ start,
312
+ end : parser . index ,
313
+ type : 'MustacheTag' ,
314
+ expression : {
315
+ start : expressionEnd - 5 ,
316
+ end : expressionEnd ,
317
+ type : 'Identifier' ,
318
+ name : 'yield'
319
+ }
320
+ } ) ;
321
+ } else {
322
+ parser . eat ( '}}' , true ) ;
323
+
324
+ parser . current ( ) . children . push ( {
325
+ start,
326
+ end : parser . index ,
327
+ type : 'Element' ,
328
+ name : 'slot' ,
329
+ attributes : [ ] ,
330
+ children : [ ]
331
+ } ) ;
332
+ }
333
+ } else if ( parser . eat ( parser . v2 ? '@html' : '{' ) ) {
316
334
// {{{raw}}} mustache
317
335
const expression = readExpression ( parser ) ;
318
336
319
337
parser . allowWhitespace ( ) ;
320
- parser . eat ( '}}}' , true ) ;
338
+ parser . eat ( parser . v2 ? '}' : '}}}' , true ) ;
321
339
322
340
parser . current ( ) . children . push ( {
323
341
start,
0 commit comments