diff --git a/djhtml/modes.py b/djhtml/modes.py index 56b57e9..60437fe 100644 --- a/djhtml/modes.py +++ b/djhtml/modes.py @@ -451,8 +451,6 @@ def __init__( self.haskell_re = re.compile(r"^ *, ([$\w-]+ *=|[$\w-]+;?)") self.variable_re = re.compile(r"^ *([$\w-]+ *=|[$\w-]+;?)") self.previous_line_ended_with_comma = False - self.extra_blocks = {} - self.extra_middle_tags = [] def create_token( self, raw_token: str, src: str, line: Line @@ -638,11 +636,15 @@ def create_token( token, mode = Token.Text(raw_token, mode=DjHTML), self.return_mode elif self.tagname == "style": token, mode = Token.Open(raw_token, mode=DjHTML), DjCSS( - return_mode=self.return_mode + return_mode=self.return_mode, + extra_blocks=self.return_mode.extra_blocks, + extra_middle_tags=self.return_mode.extra_middle_tags, ) elif self.tagname == "script": token, mode = Token.Open(raw_token, mode=DjHTML), DjJS( - return_mode=self.return_mode + return_mode=self.return_mode, + extra_blocks=self.return_mode.extra_blocks, + extra_middle_tags=self.return_mode.extra_middle_tags, ) else: token, mode = ( diff --git a/tests/generate_tokens.py b/tests/generate_tokens.py index cf87c04..d5797d3 100755 --- a/tests/generate_tokens.py +++ b/tests/generate_tokens.py @@ -14,5 +14,9 @@ with open(DIR / filename) as html: with open(DIR / (filename.stem + ".tokens"), "w") as f: f.write( - DjHTML(html.read(), extra_blocks={"weird_tag": "endweird"}).debug() + DjHTML( + html.read(), + extra_blocks={"weird_tag": "endweird"}, + extra_middle_tags=["weird_middle"], + ).debug() ) diff --git a/tests/suite/js.html b/tests/suite/js.html index c8f0c6a..503c55b 100644 --- a/tests/suite/js.html +++ b/tests/suite/js.html @@ -461,3 +461,21 @@ /function() {/ return + + + + diff --git a/tests/suite/js.tokens b/tests/suite/js.tokens index 783a19d..49f5517 100644 --- a/tests/suite/js.tokens +++ b/tests/suite/js.tokens @@ -452,4 +452,22 @@ Line([Text(' ', mode=DjJS), Text('// The following is no longer broken \\o/', Line([Text(' ', mode=DjJS), Text('/function() {/', mode=DjJS)], level=1) Line([Text(' return', mode=DjJS)], level=1) Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('script', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML)]) +Line([Text(' f', mode=DjJS), Open('(', mode=DjJS, level=1), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' => ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' ', mode=DjJS), Open('{% weird_tag %}', mode=DjTXT, level=2)], level=2) +Line([Text(' a', mode=DjJS), Open('(', mode=DjJS, level=3), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), CloseAndOpen('{% weird_middle %}', mode=DjTXT, level=2)], level=2) +Line([Text(' b', mode=DjJS), Open('(', mode=DjJS, level=3), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('{% endweird %}', mode=DjTXT)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([]) +Line([Text(' ', mode=DjJS), Open('{% if foo %}', mode=DjTXT, level=1)], level=1) +Line([Text(' c', mode=DjJS), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), CloseAndOpen('{% else %}', mode=DjTXT, level=1)], level=1) +Line([Text(' d', mode=DjJS), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('{% endif %}', mode=DjTXT)], level=1) +Line([Close('', mode=DjHTML)]) Line([]) \ No newline at end of file