Improved handling of escape sequences
This commit is contained in:
parent
2a6e78d67b
commit
48afa46adc
@ -65,7 +65,16 @@ export class TokenStream {
|
|||||||
// Skip shebang (can be used to execute templates directly with an
|
// Skip shebang (can be used to execute templates directly with an
|
||||||
// interpreter that first builds the template and then executes)
|
// interpreter that first builds the template and then executes)
|
||||||
this._skipShebang();
|
this._skipShebang();
|
||||||
} else if (this._cs.isNext(TokenStream.ESCAPE)) {
|
} else if (this._isNextEscapedTag([
|
||||||
|
// Allow escaping of open and full-line tags
|
||||||
|
TokenStream.OPEN_STATEMENT,
|
||||||
|
TokenStream.OPEN_INLINE,
|
||||||
|
TokenStream.OPEN_INLINE_UNESCAPED,
|
||||||
|
TokenStream.OPEN_INLINE_STATEMENT,
|
||||||
|
TokenStream.OPEN_INLINE_STATEMENT_UNESCAPED,
|
||||||
|
TokenStream.STATEMENT,
|
||||||
|
TokenStream.COMMENT
|
||||||
|
])) {
|
||||||
// Skip escape
|
// Skip escape
|
||||||
this._cs.next(TokenStream.ESCAPE.length);
|
this._cs.next(TokenStream.ESCAPE.length);
|
||||||
// Treat everything as raw until next space
|
// Treat everything as raw until next space
|
||||||
@ -132,7 +141,7 @@ export class TokenStream {
|
|||||||
let value = '';
|
let value = '';
|
||||||
while (!this._cs.eof() && !this._cs.isNext(closeTag)) {
|
while (!this._cs.eof() && !this._cs.isNext(closeTag)) {
|
||||||
// Handle any escaped closing tag
|
// Handle any escaped closing tag
|
||||||
if (this._cs.isNext(TokenStream.ESCAPE)) {
|
if (this._isNextEscapedTag([closeTag])) {
|
||||||
// Skip escape
|
// Skip escape
|
||||||
this._cs.next(TokenStream.ESCAPE.length);
|
this._cs.next(TokenStream.ESCAPE.length);
|
||||||
|
|
||||||
@ -243,4 +252,12 @@ export class TokenStream {
|
|||||||
_isSpace(c) {
|
_isSpace(c) {
|
||||||
return /[^\S\r\n]/.test(c);
|
return /[^\S\r\n]/.test(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_isNextEscapedTag(possibleTags=[]) {
|
||||||
|
if (!this._cs.isNext(TokenStream.ESCAPE)) return false;
|
||||||
|
|
||||||
|
return !!possibleTags.find(tag =>
|
||||||
|
this._cs.isNext(TokenStream.ESCAPE + tag)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user