diff --git a/djhtml/modes.py b/djhtml/modes.py index 56b57e9..90e0b27 100644 --- a/djhtml/modes.py +++ b/djhtml/modes.py @@ -500,7 +500,7 @@ def create_token( # Tokens that mess with relative offset elif raw_token.lstrip().startswith("..."): token = Token.Text(raw_token, mode=DjJS) - elif not line and raw_token.lstrip().startswith((".", ": ", "? ")): + elif not line and raw_token.lstrip().startswith((".", "?.", ": ", "? ")): token = Token.Text(raw_token, mode=DjJS, relative=1) elif not line and raw_token in ["if", "else", "for", "while"]: token = Token.Text(raw_token, mode=DjJS, **self.offsets) diff --git a/tests/suite/js.html b/tests/suite/js.html index c8f0c6a..89b89ea 100644 --- a/tests/suite/js.html +++ b/tests/suite/js.html @@ -373,6 +373,14 @@ + + + + ', 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(' ', mode=DjJS), Text('const ', mode=DjJS), Text('ids = a?.b', mode=DjJS, absolute=6)], level=1) +Line([Text(' ?.filter', mode=DjJS, relative=1), Open('(', mode=DjJS, level=2), Text('o => o > 0', mode=DjJS), Close(')', mode=DjJS)], level=2) +Line([Text(' .map', mode=DjJS, relative=1), Open('(', mode=DjJS, level=2), Text('o => o.id', mode=DjJS), Close(')', mode=DjJS), Text(' || ', mode=DjJS), Open('[', mode=DjJS, level=2), Close(']', mode=DjJS), Text(';', mode=DjJS)], level=2) +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(' ', mode=DjJS), Text('var ', mode=DjJS), Text('foo = ', mode=DjJS, absolute=4), Text("'\\'{'", mode=DjJS, relative=1, absolute=4)], level=1)