diff --git a/doc/build/unreleased/346.rst b/doc/build/unreleased/346.rst new file mode 100644 index 00000000..329116c2 --- /dev/null +++ b/doc/build/unreleased/346.rst @@ -0,0 +1,9 @@ +.. change:: + :tags: bug, lexer + :tickets: 346 + :versions: 1.2.0, 1.1.6 + + Fixed issue where control statements on multi lines with a backslash would + not parse correctly if the template itself contained CR/LF pairs as on + Windows. Pull request courtesy Charles Pigott. + diff --git a/mako/lexer.py b/mako/lexer.py index 6226e268..bbf0c3a5 100644 --- a/mako/lexer.py +++ b/mako/lexer.py @@ -443,7 +443,7 @@ def match_expression(self): def match_control_line(self): match = self.match( - r"(?<=^)[\t ]*(%(?!%)|##)[\t ]*((?:(?:\\r?\n)|[^\r\n])*)" + r"(?<=^)[\t ]*(%(?!%)|##)[\t ]*((?:(?:\\\r?\n)|[^\r\n])*)" r"(?:\r?\n|\Z)", re.M, ) diff --git a/test/test_template.py b/test/test_template.py index f9727be3..47d2f801 100644 --- a/test/test_template.py +++ b/test/test_template.py @@ -35,6 +35,23 @@ def __exit__(self, *arg): pass +class MiscTest(TemplateTest): + def test_crlf_linebreaks(self): + + crlf = r""" +<% + foo = True + bar = True +%> +% if foo and \ + bar: + foo and bar +%endif +""" + crlf = crlf.replace("\n", "\r\n") + self._do_test(Template(crlf), "\r\n\r\n foo and bar\r\n") + + class EncodingTest(TemplateTest): def test_escapes_html_tags(self): from mako.exceptions import html_error_template