|
|
|
@ -15,6 +15,7 @@ export class TokenStream {
|
|
|
|
|
static CLOSE_INLINE_STATEMENT_UNESCAPED = '%>'; |
|
|
|
|
static STATEMENT = '$'; |
|
|
|
|
static COMMENT = '#'; |
|
|
|
|
static SOURCE = '.INCLUDE'; |
|
|
|
|
|
|
|
|
|
constructor() { |
|
|
|
|
this.reset(); |
|
|
|
@ -73,7 +74,8 @@ export class TokenStream {
|
|
|
|
|
TokenStream.OPEN_INLINE_STATEMENT, |
|
|
|
|
TokenStream.OPEN_INLINE_STATEMENT_UNESCAPED, |
|
|
|
|
TokenStream.STATEMENT, |
|
|
|
|
TokenStream.COMMENT |
|
|
|
|
TokenStream.COMMENT, |
|
|
|
|
TokenStream.SOURCE |
|
|
|
|
])) { |
|
|
|
|
// Skip escape
|
|
|
|
|
this._cs.next(TokenStream.ESCAPE.length); |
|
|
|
@ -89,16 +91,12 @@ export class TokenStream {
|
|
|
|
|
return flushRaw() || this._readInlineStatement(); |
|
|
|
|
} else if (this._cs.isNext(TokenStream.OPEN_INLINE_STATEMENT_UNESCAPED)) { |
|
|
|
|
return flushRaw() || this._readInlineStatementUnescaped(); |
|
|
|
|
} else if ( |
|
|
|
|
this._cs.column === 0 && |
|
|
|
|
this._cs.peekAfter(this._isSpace) === TokenStream.STATEMENT |
|
|
|
|
) { |
|
|
|
|
} else if (this._matchFullLine(TokenStream.STATEMENT)) { |
|
|
|
|
return flushRaw() || this._readStatement(); |
|
|
|
|
} else if ( |
|
|
|
|
this._cs.column === 0 && |
|
|
|
|
this._cs.peekAfter(this._isSpace) === TokenStream.COMMENT |
|
|
|
|
) { |
|
|
|
|
} else if (this._matchFullLine(TokenStream.COMMENT)) { |
|
|
|
|
return flushRaw() || this._readComment(); |
|
|
|
|
} else if (this._matchFullLine(TokenStream.SOURCE)) { |
|
|
|
|
return flushRaw() || this._readSource(); |
|
|
|
|
} else { |
|
|
|
|
raw += this._cs.next(); |
|
|
|
|
} |
|
|
|
@ -248,6 +246,13 @@ export class TokenStream {
|
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_readSource() { |
|
|
|
|
return this._readFullLineGeneric( |
|
|
|
|
'source', |
|
|
|
|
TokenStream.SOURCE |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Utility methods
|
|
|
|
|
_isSpace(c) { |
|
|
|
|
return /[^\S\r\n]/.test(c); |
|
|
|
@ -260,4 +265,11 @@ export class TokenStream {
|
|
|
|
|
this._cs.isNext(TokenStream.ESCAPE + tag) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_matchFullLine(tag) { |
|
|
|
|
return ( |
|
|
|
|
this._cs.column === 0 && |
|
|
|
|
this._cs.peekAfter(this._isSpace, tag.length) === tag |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|