diff options
author | Jo-Philipp Wich <jo@mein.io> | 2022-07-12 15:26:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-12 15:26:33 +0200 |
commit | 1219d7efa170bf38fb1bf6a10fa0d1f96e62f091 (patch) | |
tree | bc7572abb64a48b57641902c028074eaab87ef0a | |
parent | 0229aea78553da64ebdc128257e8ab43c300842c (diff) | |
parent | fd433aa285ff2b4f6270d6993d1b258ad48af36e (diff) |
Merge pull request #95 from jow-/lexer-fix-non-lstrip-parsing
lexer: fix parsing with disabled block left stripping
-rw-r--r-- | lexer.c | 9 | ||||
-rw-r--r-- | tests/custom/04_bugs/40_lexer_bug_on_lstrip_off | 20 |
2 files changed, 26 insertions, 3 deletions
@@ -887,9 +887,12 @@ lex_step(uc_lexer_t *lex, FILE *fp) buf_consume(lex, 1); } - /* global block lstrip */ - else if (lex->config && lex->config->lstrip_blocks) { - rv = lookbehind_to_text(lex, lex->source->off, TK_TEXT, " \t\v\f\r"); + /* put out text leading up to the opening tag and potentially + * strip trailing white space from it depending on the global + * block lstrip setting */ + else { + rv = lookbehind_to_text(lex, lex->source->off, TK_TEXT, + (lex->config && lex->config->lstrip_blocks) ? " \t\v\f\r" : NULL); } } else { diff --git a/tests/custom/04_bugs/40_lexer_bug_on_lstrip_off b/tests/custom/04_bugs/40_lexer_bug_on_lstrip_off new file mode 100644 index 0000000..dc4f8dd --- /dev/null +++ b/tests/custom/04_bugs/40_lexer_bug_on_lstrip_off @@ -0,0 +1,20 @@ +When a template was parsed with global block left stripping disabled, +then any text preceding an expression or statement block start tag was +incorrectly prepended to the first token value of the block, leading +to syntax errors in the compiler. + +-- Testcase -- +{% for (let x in [1, 2, 3]): %} +{{ x }} +{% endfor %} +-- End -- + +-- Args -- +-Tno-lstrip +-- End -- + +-- Expect stdout -- +1 +2 +3 +-- End -- |