diff --git a/tests/generate_tokens.py b/tests/generate_tokens.py new file mode 100755 index 0000000..5ffb11f --- /dev/null +++ b/tests/generate_tokens.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +""" +Generate *.tokens files from *.html files in the suite directory. + +""" + +from pathlib import Path + +from djhtml.modes import DjHTML + +DIR = Path(__file__).parent / "suite" + +for filename in DIR.iterdir(): + if filename.suffix == ".html": + with open(DIR / filename) as html: + with open(DIR / (filename.stem + ".tokens"), "w") as f: + f.write(DjHTML(html.read()).debug()) diff --git a/tests/suite/css.tokens b/tests/suite/css.tokens new file mode 100644 index 0000000..12da6cb --- /dev/null +++ b/tests/suite/css.tokens @@ -0,0 +1,190 @@ +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' a ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('text-decoration: ', mode=DjCSS), Text('none', mode=DjCSS, absolute=17), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' a ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('text-decoration: ', mode=DjCSS), Text('none', mode=DjCSS, absolute=17), Text(';', mode=DjCSS)], level=2) +Line([Text(' &:hover ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('text-decoration: ', mode=DjCSS), Text('underline', mode=DjCSS, absolute=17), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjCSS), Open('/*', mode=DjCSS, level=1, ignore=True)], level=1, ignore=True) +Line([Text(' * Hi mom!', mode=Comment, ignore=True)], level=2, ignore=True) +Line([Text(' *', mode=Comment, ignore=True)], level=2, ignore=True) +Line([Text(' ', mode=Comment, ignore=True), Close('*/', mode=DjCSS, ignore=True)], level=1, ignore=True) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' #gradient ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('background: ', mode=DjCSS), Text('linear-gradient', mode=DjCSS, absolute=12), Open('(', mode=DjCSS, level=2, absolute=12)], level=2) +Line([Text(' to top left,', mode=DjCSS, absolute=12)], level=3, offset=12) +Line([Text(' rgba', mode=DjCSS, absolute=12), Open('(', mode=DjCSS, level=3, absolute=12), Text('204,0,0,1', mode=DjCSS, absolute=12), Close(')', mode=DjCSS, absolute=12), Text(',', mode=DjCSS, absolute=12)], level=3, offset=12) +Line([Text(' rgba', mode=DjCSS, absolute=12), Open('(', mode=DjCSS, level=3, absolute=12), Text('204,0,0,0', mode=DjCSS, absolute=12), Close(')', mode=DjCSS, absolute=12)], level=3, offset=12) +Line([Text(' ', mode=DjCSS, absolute=12), Close(')', mode=DjCSS, absolute=12), Text(';', mode=DjCSS)], level=2, offset=12) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' @font-face ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('font-family: ', mode=DjCSS), Text("'Open Sans'", mode=DjCSS, absolute=13), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Text('font-style: ', mode=DjCSS), Text('normal', mode=DjCSS, absolute=12), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Text('font-weight: ', mode=DjCSS), Text('normal', mode=DjCSS, absolute=13), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Text('src: ', mode=DjCSS), Text('url', mode=DjCSS, absolute=5), Open('(', mode=DjCSS, level=2, absolute=5), Text("'Open_Sans.woff2') format('woff2'", mode=DjCSS, absolute=5), Close(')', mode=DjCSS, absolute=5), Text(',', mode=DjCSS, absolute=5)], level=2) +Line([Text(' url', mode=DjCSS, absolute=5), Open('(', mode=DjCSS, level=2, absolute=5), Text("'Open_Sans.woff') format('woff'", mode=DjCSS, absolute=5), Close(')', mode=DjCSS, absolute=5), Text(',', mode=DjCSS, absolute=5)], level=2, offset=5) +Line([Text(' url', mode=DjCSS, absolute=5), Open('(', mode=DjCSS, level=2, absolute=5), Text("'Open_Sans.eot?#iefix') format('embedded-opentype'", mode=DjCSS, absolute=5), Close(')', mode=DjCSS, absolute=5), Text(',', mode=DjCSS, absolute=5)], level=2, offset=5) +Line([Text(' url', mode=DjCSS, absolute=5), Open('(', mode=DjCSS, level=2, absolute=5), Text("'Open_Sans.svg#OpenSans') format('svg'", mode=DjCSS, absolute=5), Close(')', mode=DjCSS, absolute=5), Text(',', mode=DjCSS, absolute=5)], level=2, offset=5) +Line([Text(' url', mode=DjCSS, absolute=5), Open('(', mode=DjCSS, level=2, absolute=5), Text("'Open_Sans.ttf') format('truetype'", mode=DjCSS, absolute=5), Close(')', mode=DjCSS, absolute=5), Text(';', mode=DjCSS)], level=2, offset=5) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' @font-face ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('font-family: ', mode=DjCSS), Text('Helvetica', mode=DjCSS, absolute=13), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Text('src: ', mode=DjCSS), Open('{% for format, filename in licensed_fonts %}', mode=DjTXT, level=2, absolute=5)], level=2) +Line([Text(' url', mode=DjCSS, absolute=5), Open('(', mode=DjCSS, level=3, absolute=5), Text("'{% static filename %}') format('{{ format }}'", mode=DjCSS, absolute=5), Close(')', mode=DjCSS, absolute=5), Text(',', mode=DjCSS, absolute=5)], level=3, offset=5) +Line([Text(' ', mode=DjCSS, absolute=5), Close('{% endfor %}', mode=DjTXT, absolute=5)], level=2, offset=5) +Line([Text(' url', mode=DjCSS, absolute=5), Open('(', mode=DjCSS, level=2, absolute=5), Text("'Arial.woff2') format('woff2'", mode=DjCSS, absolute=5), Close(')', mode=DjCSS, absolute=5), Text(',', mode=DjCSS, absolute=5)], level=2, offset=5) +Line([Text(' url', mode=DjCSS, absolute=5), Open('(', mode=DjCSS, level=2, absolute=5), Text("'Arial.woff') format('woff'", mode=DjCSS, absolute=5), Close(')', mode=DjCSS, absolute=5), Text(';', mode=DjCSS)], level=2, offset=5) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' @media', mode=DjCSS), Open('(', mode=DjCSS, level=1), Text('max-width: ', mode=DjCSS), Text('800px', mode=DjCSS, absolute=18), Close(')', mode=DjCSS, absolute=18), Text(' ', mode=DjCSS, absolute=18), Open('{', mode=DjCSS, level=1, absolute=18)], level=1) +Line([Text(' body ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('margin-top: ', mode=DjCSS), Text('1em', mode=DjCSS, absolute=12), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Text('margin-bottom: ', mode=DjCSS), Text('1em', mode=DjCSS, absolute=15), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' p ', mode=DjCSS), Open('{', mode=DjCSS, level=1), Text(' ', mode=DjCSS), Text('align: ', mode=DjCSS), Text('left ', mode=DjCSS, absolute=11), Close('}', mode=DjCSS)], level=1) +Line([Text(' h1 ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('font-weight: ', mode=DjCSS), Text('bold', mode=DjCSS, absolute=13), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Text('font-size: ', mode=DjCSS), Text('huge', mode=DjCSS, absolute=11)], level=2) +Line([Text(' ', mode=DjCSS, absolute=11), Close('}', mode=DjCSS)], level=1) +Line([Text(' footnote ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('dontread: ', mode=DjCSS), Text('true !important', mode=DjCSS, absolute=10)], level=2) +Line([Text(' ', mode=DjCSS, absolute=10), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' article ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' p ', mode=DjCSS), Open('{', mode=DjCSS, level=2), Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('#999', mode=DjCSS, absolute=11), Text(';', mode=DjCSS), Text(' ', mode=DjCSS), Text('align: ', mode=DjCSS), Text('left ', mode=DjCSS, absolute=24), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Text(' article ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' p ', mode=DjCSS), Open('{', mode=DjCSS, level=2), Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('#999', mode=DjCSS, absolute=11), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Text('align: ', mode=DjCSS), Text('left ', mode=DjCSS, absolute=7), Close('}', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Text(' article ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' p ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('#999', mode=DjCSS, absolute=7), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Text('align: ', mode=DjCSS), Text('left ', mode=DjCSS, absolute=7), Close('}', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Text(' article ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' p ', mode=DjCSS), Open('{', mode=DjCSS, level=2), Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('#999', mode=DjCSS, absolute=11), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Text('align: ', mode=DjCSS), Text('left', mode=DjCSS, absolute=7)], level=3) +Line([Text(' ', mode=DjCSS, absolute=7), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Text(' article ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' p ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('#999', mode=DjCSS, absolute=7), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Text('align: ', mode=DjCSS), Text('left', mode=DjCSS, absolute=7)], level=3) +Line([Text(' ', mode=DjCSS, absolute=7), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Text(' article ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' p', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('#999', mode=DjCSS, absolute=7), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Text('align: ', mode=DjCSS), Text('left', mode=DjCSS, absolute=7), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' blockquote:before ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('content: ', mode=DjCSS), Text('"text-align: right"', mode=DjCSS, absolute=9), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Text(' @media', mode=DjCSS), Open('(', mode=DjCSS, level=1), Text('text-align: ', mode=DjCSS), Text('right', mode=DjCSS, absolute=19), Close(')', mode=DjCSS, absolute=19), Text(' ', mode=DjCSS, absolute=19), Open('{', mode=DjCSS, level=1, absolute=19)], level=1) +Line([Text(' a:hover, a:active ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' text-decoration:none', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=2) +Line([Text(' p::first-line ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('red', mode=DjCSS, absolute=7), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' a:hover, a:active ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('foo: ', mode=DjCSS), Text('bar,', mode=DjCSS, absolute=5)], level=2) +Line([Text(' baz', mode=DjCSS, absolute=5), Text(';', mode=DjCSS)], level=2, offset=5) +Line([]) +Line([Text(' a:hover, a:active ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('foo: ', mode=DjCSS), Text('bar', mode=DjCSS, absolute=5)], level=3) +Line([Text(' baz', mode=DjCSS, absolute=5)], level=3, offset=5) +Line([Text(' ', mode=DjCSS, absolute=5), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' body ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('font-family: ', mode=DjCSS), Text('Arial,', mode=DjCSS, absolute=13)], level=2) +Line([Text(' Helvetica', mode=DjCSS, absolute=13), Text(';', mode=DjCSS)], level=2, offset=13) +Line([Text(' a:link,', mode=DjCSS)], level=2) +Line([Text(' a:hover,', mode=DjCSS)], level=2) +Line([Text(' a:active ', mode=DjCSS), Open('{', mode=DjCSS, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('red', mode=DjCSS, absolute=7), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([]) +Line([Text(' ', mode=DjCSS), Open('/*', mode=DjCSS, level=1, ignore=True), Text(' Since DjCSS expects a space between the property and the value,', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' the following is currently broken ', mode=Comment, ignore=True), Close('*/', mode=DjCSS, ignore=True)], level=2, ignore=True) +Line([Text(' body ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' font-family:Arial,', mode=DjCSS)], level=2) +Line([Text(' Helvetica', mode=DjCSS), Text(';', mode=DjCSS)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' body ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('green', mode=DjCSS, absolute=7), Text(';', mode=DjCSS), Text(' ', mode=DjCSS), Text('font-family: ', mode=DjCSS), Text('Arial,', mode=DjCSS, absolute=27)], level=2) +Line([Text(' Helvetica', mode=DjCSS, absolute=27), Text(';', mode=DjCSS)], level=2, offset=27) +Line([]) +Line([Text(' ', mode=DjCSS), Open('/*', mode=DjCSS, level=2, ignore=True), Text(' Spaces within lines are always preserved ', mode=Comment, ignore=True), Close('*/', mode=DjCSS, ignore=True)], level=2, ignore=True) +Line([Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('red', mode=DjCSS, absolute=7), Text(';', mode=DjCSS), Text(' ', mode=DjCSS), Text('font-family: ', mode=DjCSS), Text('Arial,', mode=DjCSS, absolute=27)], level=2) +Line([Text(' Helvetica', mode=DjCSS, absolute=27), Text(';', mode=DjCSS)], level=2, offset=27) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) \ No newline at end of file diff --git a/tests/suite/django.tokens b/tests/suite/django.tokens new file mode 100644 index 0000000..6a7cf0a --- /dev/null +++ b/tests/suite/django.tokens @@ -0,0 +1,166 @@ +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=12), Open('{#', mode=DjTXT, ignore=True), Text(' fmt:off #}', mode=Comment, ignore=True)], ignore=True) +Line([Text(' ,-._|\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' / .\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' \\_,--._/', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' ', mode=Comment, ignore=True), Close('{# fmt:on #}', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' ', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11), Text('/>', mode=DjHTML)], offset=11) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('{% load static %}', mode=DjTXT)]) +Line([Open('{% block content %}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Open('{% if request.user.is_authenticated %}', mode=DjTXT, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('h1', mode=InsideHTMLTag, absolute=4), Open('>', mode=DjHTML, level=2), Text('Welcome, ', mode=DjHTML), Text('{{ request.user }}', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), CloseAndOpen('{% else %}', mode=DjTXT, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=9), Text("{% url 'login' %}", mode=DjTXT, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=2), Text('Click here to login', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endif %}', mode=DjTXT)], level=1) +Line([Close('{% endblock %}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('style', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML)]) +Line([Text(' a ', mode=DjCSS), Open('{', mode=DjCSS, level=1)], level=1) +Line([Text(' ', mode=DjCSS), Open('{% block color %}', mode=DjTXT, level=2)], level=2) +Line([Text(' ', mode=DjCSS), Text('color: ', mode=DjCSS), Text('red', mode=DjCSS, absolute=7), Text(';', mode=DjCSS)], level=3) +Line([Text(' ', mode=DjCSS), Close('{% endblock %}', mode=DjTXT)], level=2) +Line([Text(' ', mode=DjCSS), Close('}', mode=DjCSS)], 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(' $', mode=DjJS), Open('(', mode=DjJS, level=1), Text('function', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' ', mode=DjJS), Open('{% if verbose %}', mode=DjTXT, level=2)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text('"Hi mom!"', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('{% endif %}', mode=DjTXT)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% comment %}', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' ,-._|\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' / .\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' \\_,--._/', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Close('{% endcomment %}', mode=DjTXT, ignore=True)], ignore=True) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% verbatim %}', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' ,-._|\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' / .\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' \\_,--._/', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Close('{% endverbatim %}', mode=DjTXT, ignore=True)], ignore=True) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% comment "Yo dawg" %}', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' I heard you like comments', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Close('{% endcomment %}', mode=DjTXT, ignore=True)], ignore=True) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{%comment %}', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' %}', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Close('{% endcomment%}', mode=DjTXT, ignore=True)], ignore=True) +Line([Open('{%if%}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Open('{%block content %}', mode=DjTXT, level=1)], level=1) +Line([Text(' Yuck!', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endblock%}', mode=DjTXT)], level=1) +Line([Close('{% endif %}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% block %}', mode=DjTXT)]) +Line([Text(' 1', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Open('{% with %}', mode=DjTXT, level=1)], level=1) +Line([Text(' 2', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endblock %}', mode=DjTXT)], level=1) +Line([Text(' 1', mode=DjHTML)], level=1) +Line([Close('{% endwith %}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% blocktrans count count=queryset.count %}', mode=DjTXT)]) +Line([Text(' There is 1 item.', mode=DjHTML)], level=1) +Line([CloseAndOpen('{% plural %}', mode=DjTXT)]) +Line([Text(' There are ', mode=DjHTML), Text('{{ count }}', mode=DjHTML), Text(' items.', mode=DjHTML)], level=1) +Line([Close('{% endblocktrans %}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% if %}', mode=DjTXT)]) +Line([CloseAndOpen('{% elif %}', mode=DjTXT)]) +Line([CloseAndOpen('{% else %}', mode=DjTXT)]) +Line([Close('{% endif %}', mode=DjTXT)]) +Line([Open('{% for %}', mode=DjTXT)]) +Line([CloseAndOpen('{% empty %}', mode=DjTXT)]) +Line([Close('{% endfor %}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('a', mode=InsideHTMLTag, absolute=3), Open('{% if %}', mode=DjTXT, absolute=3), Text(' ', mode=InsideHTMLTag, absolute=3), Text('class=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=18), Text('"', mode=InsideHTMLTag, absolute=17), Close('{% endif %}', mode=DjTXT, absolute=3), Open('>', mode=DjHTML)]) +Line([Text(' Click here!', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% video form.instance.video as my_video %}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Text("{% video my_video '360 x 200' %}", mode=DjTXT)], level=1) +Line([Close('{% endvideo %}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% component_block "instruction" border_top=True header="Login" %}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Open('{% slot "body" %}', mode=DjTXT, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Open('{% with "login --token="|add:token as content %}', mode=DjTXT, level=2)], level=2) +Line([Text(' ', mode=DjHTML), Text('{% component "copy_field" field_selector="token-field" content=content %}', mode=DjTXT)], level=3) +Line([Text(' ', mode=DjHTML), Close('{% endwith %}', mode=DjTXT)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endslot %}', mode=DjTXT)], level=1) +Line([Close('{% endcomponent_block %}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text("{{ '' if condition }}", mode=DjHTML)]) +Line([Text('some text', mode=DjHTML)]) +Line([Text("{{ '' if condition }}", mode=DjHTML)]) +Line([Text('more text', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text("{{ '", mode=DjHTML), Text('<', mode=DjHTML), Text('b', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML), Text("'", mode=DjHTML)]) +Line([Text(' if condition }}', mode=DjHTML)], level=1) +Line([Text(' some text', mode=DjHTML)], level=1) +Line([Text(" {{ '", mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Text('if condition }}', mode=DjHTML)]) +Line([Text('more text', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% block main %}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('section', mode=InsideHTMLTag, absolute=9), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=3)], level=3) +Line([Text(' ', mode=DjHTML), Text('{% placeholder "placeholder1" %}', mode=DjTXT)], level=4) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=3) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=3)], level=3) +Line([Text(' ', mode=DjHTML), Open('{% placeholder "placeholder2" or %}', mode=DjTXT, level=4)], level=4) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('img ', mode=InsideHTMLTag, absolute=5), Text('src=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=10), Text('"', mode=InsideHTMLTag, absolute=9), Text(' ', mode=InsideHTMLTag, absolute=5), Text('alt=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=17), Text('"', mode=InsideHTMLTag, absolute=16), Text(' ', mode=InsideHTMLTag, absolute=5), Text('/>', mode=DjHTML)], level=5) +Line([Text(' ', mode=DjHTML), Close('{% endplaceholder %}', mode=DjTXT)], level=4) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=3) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('section', mode=InsideHTMLTag, absolute=9), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' ', mode=DjHTML), Text('{% placeholder "placeholder3" %}', mode=DjTXT)], level=3) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('section', mode=InsideHTMLTag, absolute=9), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' ', mode=DjHTML), Text('{% placeholder "placeholder4" %}', mode=DjTXT)], level=3) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Close('{% endblock %}', mode=DjTXT)]) +Line([]) \ No newline at end of file diff --git a/tests/suite/html.tokens b/tests/suite/html.tokens new file mode 100644 index 0000000..e66c65f --- /dev/null +++ b/tests/suite/html.tokens @@ -0,0 +1,355 @@ +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('!doctype html>', mode=DjHTML)]) +Line([Text('<', mode=DjHTML), Text('html', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('head', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('title', mode=InsideHTMLTag, absolute=7), Open('>', mode=DjHTML, level=2), Text('Plain', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('script ', mode=InsideHTMLTag, absolute=8), Text('src=', mode=InsideHTMLTag, absolute=8), Text('"', mode=InsideHTMLTag, absolute=13), Text('test.js', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12), Open('>', mode=DjHTML, level=2), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('link ', mode=InsideHTMLTag, absolute=6), Text('rel=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=11), Text('stylesheet', mode=InsideHTMLTag, absolute=11), Text('"', mode=InsideHTMLTag, absolute=10), Text(' ', mode=InsideHTMLTag, absolute=6), Text('href=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=29), Text('test.css', mode=InsideHTMLTag, absolute=29), Text('"', mode=InsideHTMLTag, absolute=28), Text('>', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('body', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('h1', mode=InsideHTMLTag, absolute=4), Open('>', mode=DjHTML, level=2), Text('Title', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=11), Open('>', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' text', mode=DjHTML)], level=3) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML), Close('', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([]) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, relative=-1, absolute=10), Open('>', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, relative=-1, absolute=15), Open('>', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([Close('', mode=DjHTML)]) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([Text('<', mode=DjHTML), Text('div0', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML), Text('<', mode=DjHTML), Text('div1', mode=InsideHTMLTag, relative=-1, absolute=12), Open('>', mode=DjHTML)]) +Line([Text(' text2', mode=DjHTML), Close('', mode=DjHTML), Text('<', mode=DjHTML), Text('div1', mode=InsideHTMLTag, absolute=18), Open('>', mode=DjHTML, level=1), Text('<', mode=DjHTML), Text('div2', mode=InsideHTMLTag, absolute=24), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' text3', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML), Text('<', mode=DjHTML), Text('div2', mode=InsideHTMLTag, absolute=13), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' text3', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([Text('<', mode=DjHTML), Text('div0', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div1', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div2', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' text3', mode=DjHTML)], level=3) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML), Close('', mode=DjHTML), Close('', mode=DjHTML), Text('<', mode=DjHTML), Text('div0', mode=InsideHTMLTag, absolute=27), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' text1', mode=DjHTML)], level=3) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Text('/>', mode=DjHTML)], level=1) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('img', mode=InsideHTMLTag, absolute=5), Text('>', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('input', mode=InsideHTMLTag, absolute=7), Text('>', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('input ', mode=InsideHTMLTag, absolute=7), Text('/>', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('input', mode=InsideHTMLTag, absolute=7), Text('>', mode=DjHTML), Text('', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('!doctype>', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +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=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('
', mode=DjHTML, ignore=True)], ignore=True)
+Line([Text('   
', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text('
', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text('
', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Close('
', mode=DjHTML, ignore=True)], ignore=True) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text(' ', mode=DjHTML), Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text(' ', mode=DjHTML), Open('
', mode=DjHTML, ignore=True)], ignore=True)
+Line([Text('    ', mode=Comment, ignore=True), Close('
', mode=DjHTML, ignore=True)], ignore=True) +Line([Text(' ', mode=DjHTML), Open('{#', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' ', mode=Comment, ignore=True), Close('#}', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' ', mode=DjHTML), Open('{#', mode=DjTXT, ignore=True), Close('#}', mode=DjTXT, ignore=True)], ignore=True) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12), Text('row', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12), Text('input-group date', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11), Text(' ', mode=InsideHTMLTag, absolute=5), Text('data-provide=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=44), Text('datepicker', mode=InsideHTMLTag, absolute=44), Text('"', mode=InsideHTMLTag, absolute=43), Text(' ', mode=InsideHTMLTag, absolute=5), Text('data-date-format=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=74), Text('yyyy/mm/dd', mode=InsideHTMLTag, absolute=74), Text('"', mode=InsideHTMLTag, absolute=73), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12), Text('btn', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Close('', mode=DjHTML), Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=11), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12), Text('custom-control custom-switch', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('input ', mode=InsideHTMLTag, absolute=7), Text('type=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=13), Text('checkbox', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12), Text(' ', mode=InsideHTMLTag, absolute=7), Text('name=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=29), Text('filter-changes', mode=InsideHTMLTag, absolute=29), Text('"', mode=InsideHTMLTag, absolute=28), Text(' ', mode=InsideHTMLTag, absolute=7), Text('id=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=49), Text('filter-changes', mode=InsideHTMLTag, absolute=49), Text('"', mode=InsideHTMLTag, absolute=48), Text(' ', mode=InsideHTMLTag, absolute=7), Text('class=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=72), Text('custom-control-input fs-nano', mode=InsideHTMLTag, absolute=72), Text('"', mode=InsideHTMLTag, absolute=71), Text(' ', mode=InsideHTMLTag, absolute=7), Text('value=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=109), Text('0', mode=InsideHTMLTag, absolute=109), Text('"', mode=InsideHTMLTag, absolute=108), Text(' ', mode=InsideHTMLTag, absolute=7), Open('{% if request.session.manage_filter_changes %}', mode=DjTXT, level=2, absolute=7), Open('{% if request.session.manage_filter_changes == True %}', mode=DjTXT, level=2, absolute=7), Text('checked', mode=InsideHTMLTag, absolute=7), Close('{% endif %}', mode=DjTXT, absolute=7), Close('{% endif %}', mode=DjTXT, absolute=7), Text('>', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('form ', mode=InsideHTMLTag, absolute=6), Text('class=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=13), Text('form-inline', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12), Text('custom-control custom-switch', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('input ', mode=InsideHTMLTag, absolute=7), Text('type=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=13), Text('checkbox', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12), Text(' ', mode=InsideHTMLTag, absolute=7), Text('name=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=29), Text('filter-status-new', mode=InsideHTMLTag, absolute=29), Text('"', mode=InsideHTMLTag, absolute=28), Text(' ', mode=InsideHTMLTag, absolute=7), Text('id=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=52), Text('filter-status-new', mode=InsideHTMLTag, absolute=52), Text('"', mode=InsideHTMLTag, absolute=51), Text(' ', mode=InsideHTMLTag, absolute=7), Text('class=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=78), Text('custom-control-input fs-nano', mode=InsideHTMLTag, absolute=78), Text('"', mode=InsideHTMLTag, absolute=77), Text(' ', mode=InsideHTMLTag, absolute=7), Text('value=', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=115), Text('0', mode=InsideHTMLTag, absolute=115), Text('"', mode=InsideHTMLTag, absolute=114), Text(' ', mode=InsideHTMLTag, absolute=7), Open('{% if request.session.manage_filter_status_new %}', mode=DjTXT, level=3, absolute=7), Open('{% if request.session.manage_filter_status_new == True %}', mode=DjTXT, level=3, absolute=7), Text('checked', mode=InsideHTMLTag, absolute=7), Close('{% endif %}', mode=DjTXT, absolute=7), Close('{% endif %}', mode=DjTXT, absolute=7), Text('>', mode=DjHTML)], level=3) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('svg ', mode=InsideHTMLTag, absolute=5), Text('width=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12), Text('325', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11), Text(' ', mode=InsideHTMLTag, absolute=5), Text('height=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=25), Text('325', mode=InsideHTMLTag, absolute=25), Text('"', mode=InsideHTMLTag, absolute=24), Text(' ', mode=InsideHTMLTag, absolute=5), Text('xmlns=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=37), Text('http://www.w3.org/2000/svg', mode=InsideHTMLTag, absolute=37), Text('"', mode=InsideHTMLTag, absolute=36), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('path', mode=InsideHTMLTag, absolute=6)], level=1) +Line([Text(' ', mode=InsideHTMLTag, absolute=6), Text('d=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=9), Text('M 80 80', mode=InsideHTMLTag, absolute=9)], level=1, offset=6) +Line([Text(' A 45 45, 0, 0, 0, 125 125', mode=InsideHTMLTag, absolute=9)], level=1, offset=9) +Line([Text(' L 125 80 Z', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)], level=1, offset=9) +Line([Text(' ', mode=InsideHTMLTag, absolute=6), Text('fill=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=12), Text('green', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11)], level=1, offset=6) +Line([Text(' ', mode=InsideHTMLTag, absolute=6), Text('/>', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('path', mode=InsideHTMLTag, absolute=6)], level=1) +Line([Text(' ', mode=InsideHTMLTag, absolute=6), Text('d=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=9)], level=1, offset=6) +Line([Text(' M 80 80', mode=InsideHTMLTag, absolute=9)], level=1, offset=9) +Line([Text(' A 45 45, 0, 0, 0, 125 125', mode=InsideHTMLTag, absolute=9)], level=1, offset=9) +Line([Text(' L 125 80 Z', mode=InsideHTMLTag, absolute=9)], level=1, offset=9) +Line([Text(' ', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)], level=1, offset=8) +Line([Text(' ', mode=InsideHTMLTag, absolute=6), Text('fill=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=12), Text('green', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11)], level=1, offset=6) +Line([Text(' ', mode=InsideHTMLTag, absolute=6), Text('/>', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('path ', mode=InsideHTMLTag, absolute=6), Text('d=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=9), Text('M 80 80', mode=InsideHTMLTag, absolute=9)], level=1) +Line([Text(' A 45 45, 0, 0, 0, 125 125', mode=InsideHTMLTag, absolute=9)], level=1, offset=9) +Line([Text(' L 125 80 Z', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)], level=1, offset=9) +Line([Text(' ', mode=InsideHTMLTag, absolute=6), Text('fill=', mode=InsideHTMLTag, absolute=6), Text('"', mode=InsideHTMLTag, absolute=12), Text('green', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11)], level=1, offset=6) +Line([Text(' ', mode=InsideHTMLTag, absolute=6), Text('/>', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Open('{% if foo > bar %}', mode=DjTXT, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=30), Text('baz', mode=InsideHTMLTag, absolute=30), Text('"', mode=InsideHTMLTag, absolute=29), Close('{% endif %}', mode=DjTXT, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' quux', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Open('{% block class %}', mode=DjTXT, absolute=5)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12), Text('foo', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11)], level=1, offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Close('{% endblock %}', mode=DjTXT, absolute=5)], offset=5) +Line([Open('>', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Open('{% block classes %}', mode=DjTXT, absolute=5)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=12)], level=1, offset=5) +Line([Text(' foo', mode=InsideHTMLTag, absolute=12)], level=1, offset=12) +Line([Text(' bar', mode=InsideHTMLTag, absolute=12)], level=1, offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=11)], level=1, offset=11) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Close('{% endblock %}', mode=DjTXT, absolute=5)], offset=5) +Line([Open('>', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('id=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=9), Text('1', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Text(' ', mode=InsideHTMLTag, absolute=5), Text('class=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=19), Open('{% block classes %}', mode=DjTXT, absolute=19)]) +Line([Text(' foo', mode=InsideHTMLTag, absolute=19)], level=1, offset=19) +Line([Text(' bar', mode=InsideHTMLTag, absolute=19)], level=1, offset=19) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Open('{% if %}', mode=DjTXT, level=1, absolute=19)], level=1, offset=19) +Line([Text(' baz', mode=InsideHTMLTag, absolute=19)], level=2, offset=19) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), CloseAndOpen('{% elif %}', mode=DjTXT, level=1, absolute=19)], level=1, offset=19) +Line([Text(' quux', mode=InsideHTMLTag, absolute=19)], level=2, offset=19) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Close('{% endif %}', mode=DjTXT, absolute=19)], level=1, offset=19) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Close('{% endblock %}', mode=DjTXT, absolute=19)], offset=19) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Text('"', mode=InsideHTMLTag, absolute=18)], offset=18) +Line([Text(' hidden', mode=InsideHTMLTag, absolute=5)], offset=5) +Line([Open('>', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=9), Text('{% url %}', mode=DjTXT, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('class=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=10), Text('button', mode=InsideHTMLTag, absolute=10), Text('"', mode=InsideHTMLTag, absolute=9)], offset=3) +Line([Open('>', mode=DjHTML)]) +Line([Text(' Click me!', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' >', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('button ', mode=InsideHTMLTag, absolute=8), Text('action=', mode=InsideHTMLTag, absolute=8), Text('"', mode=InsideHTMLTag, absolute=16), Text('a-', mode=InsideHTMLTag, absolute=16), Text('>', mode=InsideHTMLTag, absolute=16), Text('b', mode=InsideHTMLTag, absolute=16), Text('"', mode=InsideHTMLTag, absolute=15), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' hi', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('id=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=7), Text('1', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=6), Text(' ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=16), Text('"', mode=InsideHTMLTag, absolute=15)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('class=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=10), Text('button', mode=InsideHTMLTag, absolute=10), Text('"', mode=InsideHTMLTag, absolute=9), Open('>', mode=DjHTML)], offset=3) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([Text('<', mode=DjHTML), Text('a', mode=InsideHTMLTag, absolute=3)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('id=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=7), Text('2', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=6), Text(' ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=16), Text('"', mode=InsideHTMLTag, absolute=15)], offset=3) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('class=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=10), Text('button', mode=InsideHTMLTag, absolute=10), Text('"', mode=InsideHTMLTag, absolute=9), Open('>', mode=DjHTML)], offset=3) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('id=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=7), Text('3', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=6), Text(' ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=16), Text('"', mode=InsideHTMLTag, absolute=15)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('class=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=10), Text('button', mode=InsideHTMLTag, absolute=10), Text('"', mode=InsideHTMLTag, absolute=9)], offset=3) +Line([Open('>', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([Text('<', mode=DjHTML), Text('a', mode=InsideHTMLTag, absolute=3)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('id=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=7), Text('4', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=6), Text(' ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=16), Text('"', mode=InsideHTMLTag, absolute=15)], offset=3) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('class=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=10), Text('button', mode=InsideHTMLTag, absolute=10), Text('"', mode=InsideHTMLTag, absolute=9)], offset=3) +Line([Open('>', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('img ', mode=InsideHTMLTag, absolute=5), Text('src=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=10), Text('/some/long/path', mode=InsideHTMLTag, absolute=10), Text('"', mode=InsideHTMLTag, absolute=9)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('id=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=9), Text('1', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Text('>', mode=DjHTML)], offset=5) +Line([Text('<', mode=DjHTML), Text('blockquote ', mode=InsideHTMLTag, absolute=12), Text('class=', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=19), Text('dishy', mode=InsideHTMLTag, absolute=19), Text('"', mode=InsideHTMLTag, absolute=18)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=12), Text('id=', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=16), Text('2', mode=InsideHTMLTag, absolute=16), Text('"', mode=InsideHTMLTag, absolute=15), Text(' ', mode=InsideHTMLTag, absolute=12), Text('/>', mode=DjHTML)], offset=12) +Line([Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=9), Text('/some/long/path', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('id=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=7), Text('3', mode=InsideHTMLTag, absolute=7), Text('"', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML), Close('', mode=DjHTML)], offset=3) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('id=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=9)]) +Line([Text(' 1', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML)], offset=9) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('id=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=9), Text('2', mode=InsideHTMLTag, absolute=9)], level=1) +Line([Text(' ', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=1)], level=1, offset=8) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('id=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=9)], level=2) +Line([Text(' 3', mode=InsideHTMLTag, absolute=9)], level=2, offset=9) +Line([Text(' ', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=2)], level=2, offset=8) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('id=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=9)], level=3) +Line([Text(' 4', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)], level=3, offset=9) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=3)], level=3) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('id=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=9), Text('5', mode=InsideHTMLTag, absolute=9)], level=4) +Line([Text(' ', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)], level=4, offset=8) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=4)], level=4) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('id=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=9)], level=5) +Line([Text(' 6', mode=InsideHTMLTag, absolute=9)], level=5, offset=9) +Line([Text(' ', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)], level=5, offset=8) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML, level=5)], level=5) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=5) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=4) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=3) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div ', mode=InsideHTMLTag, absolute=5), Text('!click=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=13)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('@click=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=13)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('#click=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=13)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('$click=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=13)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('%click=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=13)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('^click=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=13)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('&click=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=13)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('*click=', mode=InsideHTMLTag, absolute=5), Text('"', mode=InsideHTMLTag, absolute=13)], offset=5) +Line([Text(' ', mode=InsideHTMLTag, absolute=13), Text('"', mode=InsideHTMLTag, absolute=12)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=5), Text('', mode=DjHTML)]) +Line([Text(' text', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('my-component', mode=InsideHTMLTag, absolute=14)]) +Line([Text(' hidden', mode=InsideHTMLTag, absolute=14), Text('/>', mode=DjHTML)], offset=14) +Line([Text('<', mode=DjHTML), Text('my.component', mode=InsideHTMLTag, absolute=14)]) +Line([Text(' hidden', mode=InsideHTMLTag, absolute=14), Text('/>', mode=DjHTML)], offset=14) +Line([Text('<', mode=DjHTML), Text('my:component', mode=InsideHTMLTag, absolute=14)]) +Line([Text(' hidden', mode=InsideHTMLTag, absolute=14), Text('/>', mode=DjHTML)], offset=14) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML), Text('text', mode=DjHTML), Text('<', mode=DjHTML), Text('blockquote ', mode=InsideHTMLTag, relative=-1, absolute=21), Text('id=', mode=InsideHTMLTag, relative=-1, absolute=21), Text('"', mode=InsideHTMLTag, relative=-1, absolute=25), Text('1', mode=InsideHTMLTag, relative=-1, absolute=25), Text('"', mode=InsideHTMLTag, relative=-1, absolute=24), Text(' ', mode=InsideHTMLTag, relative=-1, absolute=21), Text('id=', mode=InsideHTMLTag, relative=-1, absolute=21), Text('"', mode=InsideHTMLTag, relative=-1, absolute=32), Text('2', mode=InsideHTMLTag, relative=-1, absolute=32), Text('"', mode=InsideHTMLTag, relative=-1, absolute=31)]) +Line([Text(' ', mode=InsideHTMLTag, relative=-1, absolute=21), Text('id=', mode=InsideHTMLTag, relative=-1, absolute=21), Text('"', mode=InsideHTMLTag, relative=-1, absolute=25), Text('3', mode=InsideHTMLTag, relative=-1, absolute=25), Text('"', mode=InsideHTMLTag, relative=-1, absolute=24), Text(' ', mode=InsideHTMLTag, relative=-1, absolute=21), Text('cite=', mode=InsideHTMLTag, relative=-1, absolute=21), Text('"', mode=InsideHTMLTag, relative=-1, absolute=34)], offset=21) +Line([Text(' Wikipedia', mode=InsideHTMLTag, relative=-1, absolute=34)], offset=34) +Line([Text(' ', mode=InsideHTMLTag, relative=-1, absolute=34), Text('"', mode=InsideHTMLTag, relative=-1, absolute=33)], offset=33) +Line([Text(' ', mode=InsideHTMLTag, relative=-1, absolute=21), Text('id=', mode=InsideHTMLTag, relative=-1, absolute=21), Text('"', mode=InsideHTMLTag, relative=-1, absolute=25), Text('4', mode=InsideHTMLTag, relative=-1, absolute=25), Text('"', mode=InsideHTMLTag, relative=-1, absolute=24), Text('/>', mode=DjHTML), Close('', mode=DjHTML)], offset=21) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('{% include "attrs.html" %}', mode=DjTXT, absolute=3)], offset=3) +Line([Text(' ', mode=InsideHTMLTag, absolute=3), Text('class=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=10)], offset=3) +Line([Text(' ', mode=InsideHTMLTag, absolute=10), Open('{% block classes %}', mode=DjTXT, absolute=10)], offset=10) +Line([Text(' foo', mode=InsideHTMLTag, absolute=10)], level=1, offset=10) +Line([Text(' bar', mode=InsideHTMLTag, absolute=10)], level=1, offset=10) +Line([Text(' ', mode=InsideHTMLTag, absolute=10), Close('{% endblock %}', mode=DjTXT, absolute=10)], offset=10) +Line([Text(' ', mode=InsideHTMLTag, absolute=10), Text('"', mode=InsideHTMLTag, absolute=9)], offset=9) +Line([Text('/>', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('blockquote ', mode=InsideHTMLTag, absolute=12), Text('cite=', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=18), Text('Guido Van Rossum', mode=InsideHTMLTag, absolute=18), Text('"', mode=InsideHTMLTag, absolute=17)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=12), Text('style=', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=19), Text('font-style: italic;', mode=InsideHTMLTag, absolute=19)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Open('{% if dark_mode %}', mode=DjTXT, absolute=19)], offset=19) +Line([Text(' background: black;', mode=InsideHTMLTag, absolute=19)], level=1, offset=19) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Close('{% endif %}', mode=DjTXT, absolute=19)], offset=19) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Text('"', mode=InsideHTMLTag, absolute=18), Open('>', mode=DjHTML)], offset=18) +Line([Text(" Don't you hate code that's not properly indented?", mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('blockquote ', mode=InsideHTMLTag, absolute=12), Text('class=', mode=InsideHTMLTag, absolute=12), Text("'", mode=InsideHTMLTag, absolute=19), Text('foo', mode=InsideHTMLTag, absolute=19)]) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Text("'", mode=InsideHTMLTag, absolute=18)], offset=18) +Line([Text(' ', mode=InsideHTMLTag, absolute=12), Text('class=', mode=InsideHTMLTag, absolute=12), Text("'", mode=InsideHTMLTag, absolute=19), Text('bar', mode=InsideHTMLTag, absolute=19), Text('"', mode=InsideHTMLTag, absolute=19)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Text("'", mode=InsideHTMLTag, absolute=18)], offset=18) +Line([Text(' ', mode=InsideHTMLTag, absolute=12), Text('class=', mode=InsideHTMLTag, absolute=12), Text('"', mode=InsideHTMLTag, absolute=19), Text('baz', mode=InsideHTMLTag, absolute=19), Text("'", mode=InsideHTMLTag, absolute=19)], offset=12) +Line([Text(' ', mode=InsideHTMLTag, absolute=19), Text('"', mode=InsideHTMLTag, absolute=18)], offset=18) +Line([Text('/>', mode=DjHTML)]) +Line([]) \ No newline at end of file diff --git a/tests/suite/jinja.tokens b/tests/suite/jinja.tokens new file mode 100644 index 0000000..744a4f2 --- /dev/null +++ b/tests/suite/jinja.tokens @@ -0,0 +1,55 @@ +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{#', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' ,-._|\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' / .\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' \\_,--._/', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Close('#}', mode=DjTXT, ignore=True)], ignore=True) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% raw %}', mode=DjTXT, ignore=True)], ignore=True) +Line([Text(' ,-._|\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' / .\\', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Text(' \\_,--._/', mode=Comment, ignore=True)], level=1, ignore=True) +Line([Close('{% endraw %}', mode=DjTXT, ignore=True)], ignore=True) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Open('{%+ if something %}', mode=DjTXT, level=1)], level=1) +Line([Text(' yay', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endif %}', mode=DjTXT)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Open('{% if something +%}', mode=DjTXT, level=1)], level=1) +Line([Text(' yay', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endif %}', mode=DjTXT)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([Open('{% for item in seq -%}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Text('{{ item }}', mode=DjHTML)], level=1) +Line([Close('{%- endfor %}', mode=DjTXT)]) +Line([]) +Line([Open('{%- macro render_currency(currency, amount) -%}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Text('{{ amount }}', mode=DjHTML)], level=1) +Line([Close('{%- endmacro -%}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('{% set "five" = 5 %}', mode=DjTXT)], level=1) +Line([Text(' Five is ', mode=DjHTML), Text('{{ five }}', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Open('{% set blockdata %}', mode=DjTXT, level=1)], level=1) +Line([Text(' Contents', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endset %}', mode=DjTXT)], level=1) +Line([Text(' Contents of block is block', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('{% if ( condition1 and', mode=DjHTML)]) +Line([Text('condition2 ) %}', mode=DjHTML)]) +Line([Text('text', mode=DjHTML)]) +Line([Close('{% endif %}', mode=DjTXT)]) +Line([]) \ No newline at end of file diff --git a/tests/suite/js.tokens b/tests/suite/js.tokens new file mode 100644 index 0000000..d7a5f82 --- /dev/null +++ b/tests/suite/js.tokens @@ -0,0 +1,447 @@ +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('script', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML)]) +Line([Text(' function f', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' return 42;', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', 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(' array = ', mode=DjJS), Open('[', mode=DjJS, level=1)], level=1) +Line([Text(' 1,', mode=DjJS)], level=2) +Line([Text(' 2,', mode=DjJS)], level=2) +Line([Text(' 3,', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close(']', mode=DjJS)], level=1) +Line([]) +Line([Text(' dictionary = ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' ', mode=DjJS), Text('value1:', mode=DjJS), Text(' 1,', mode=DjJS, relative=1)], level=2) +Line([Text(' ', mode=DjJS), Text('value2:', mode=DjJS), Text(' 2,', mode=DjJS, relative=1)], level=2) +Line([Text(' ', mode=DjJS), Text('value3:', mode=DjJS), Text(' 3,', mode=DjJS, relative=1)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=1) +Line([]) +Line([Text(' function_call', mode=DjJS), Open('(', mode=DjJS, level=1)], level=1) +Line([Text(' arg1,', mode=DjJS)], level=2) +Line([Text(' arg2,', mode=DjJS)], level=2) +Line([Text(' arg3,', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close(')', 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(' one', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS)], level=1) +Line([Text(' .two', mode=DjJS, relative=1), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS)], level=2) +Line([Text(' .three', mode=DjJS, relative=1), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' four', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([Text('<', mode=DjHTML), Text('script', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML)]) +Line([Text(' function f', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' return 42;', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', 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(' $', mode=DjJS), Open('(', mode=DjJS, level=1), Text('function', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' this.addEventListener', mode=DjJS), Open('(', mode=DjJS, level=2), Text("'change'", mode=DjJS), Text(', function ', mode=DjJS), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' doStuff', mode=DjJS), Open('(', mode=DjJS, level=3), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Text(';', 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(' ', mode=DjJS), Open('/*', mode=DjJS, level=1, ignore=True)], level=1, ignore=True) +Line([Text(' * Hi mom!', mode=Comment, ignore=True)], level=2, ignore=True) +Line([Text(' *', mode=Comment, ignore=True)], level=2, ignore=True) +Line([Text(' ', mode=Comment, ignore=True), Close('*/', mode=DjJS, ignore=True)], level=1, ignore=True) +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(' console.log', mode=DjJS), Open('(', mode=DjJS, level=1), Text('"$(function() {"', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=1), Text("'$(function() {'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=1), Text('`$(function() {`', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=1), Text('`\nfunction f() {\nreturn 42;\n}\n `', mode=DjJS), Close(')', mode=DjJS), Text(';', 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(' ', mode=DjJS), Text('const ', mode=DjJS), Text('format_duration_value = ', mode=DjJS, absolute=6), Open('(', mode=DjJS, level=1), Text('a', mode=DjJS), Close(')', mode=DjJS), Text(' => ', mode=DjJS, relative=1, absolute=6), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' ', mode=DjJS), Text('let ', mode=DjJS), Text('secs = a * 3600; ', mode=DjJS, absolute=4), Text('// get total amount of seconds from your input', mode=DjJS, ignore=True)], level=2) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('days = Math.floor', mode=DjJS, absolute=6), Open('(', mode=DjJS, level=2), Text('secs / ', mode=DjJS), Open('(', mode=DjJS, level=2), Text('3600 * 24', mode=DjJS), Close(')', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS, absolute=6)], level=2) +Line([Text(' return ', mode=DjJS), Open('(', mode=DjJS, level=2), Text('`\n
\n ${days.toString().padStart(2,\'0\')}\n m\n
\n `', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Text(';', mode=DjJS, absolute=6)], 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(' $', mode=DjJS), Open('(', mode=DjJS, level=1), Text('function1', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS)], level=1) +Line([Text(' ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' ', mode=DjJS), Text('var ', mode=DjJS), Text('foo = ', mode=DjJS, absolute=4), Open('(', mode=DjJS, level=3), Text('function2', mode=DjJS), Open('(', mode=DjJS, level=3), Close(')', mode=DjJS), Open('{', mode=DjJS, level=3)], level=3) +Line([Text(' doStuff', mode=DjJS), Open('(', mode=DjJS, level=4), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=4) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Open('(', mode=DjJS, level=3), Close(')', mode=DjJS), Text(';', mode=DjJS, relative=1, absolute=4)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Text('// Jeez', mode=DjJS, ignore=True)], level=1, ignore=True) +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('let ', mode=DjJS), Text('time = 10;', mode=DjJS, absolute=4)], level=1) +Line([Text(' ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=1), Text('time < 10', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=2), Text('"Good morning"', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Text(' else ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('time < 20', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=2), Text('"Good day"', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Text(' else ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=2), Text('"Good evening"', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', 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(' ', mode=DjJS), Text('const ', mode=DjJS), Text('mode = ', mode=DjJS, absolute=6), Text("'approved'", mode=DjJS, relative=1, absolute=6)], level=1) +Line([Text(' switch ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('mode', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'approved'", mode=DjJS), Text(':', mode=DjJS)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Approved'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'rejected'", mode=DjJS), Text(':', mode=DjJS)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Rejected'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), OpenDouble('default:', mode=DjJS, level=2)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Default'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=1) +Line([]) +Line([Text(' switch ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('mode', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'approved'", mode=DjJS), Text(':', mode=DjJS)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Approved'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), OpenDouble('default:', mode=DjJS, level=2)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Default'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'rejected'", mode=DjJS), Text(':', mode=DjJS)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Rejected'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=1) +Line([]) +Line([Text(' switch ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('mode', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'approved'", mode=DjJS), Text(':', mode=DjJS)], level=2) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'rejected'", mode=DjJS), Text(':', mode=DjJS)], level=2) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'invalid'", mode=DjJS), Text(':', mode=DjJS)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Not default'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), OpenDouble('default:', mode=DjJS, level=2)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Default'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=1) +Line([]) +Line([Text(' switch ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('mode', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'approved'", mode=DjJS), Text(': ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Approved'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=2) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text("'rejected'", mode=DjJS), Text(': ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Rejected'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=2) +Line([Text(' break;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), OpenDouble('default:', mode=DjJS, level=2), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=3), Text("'Default'", mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', 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(' ', mode=DjJS), Text('var ', mode=DjJS), Text('year = 2016;', mode=DjJS, absolute=4)], level=1) +Line([Text(' ', mode=DjJS), Text('var ', mode=DjJS), Text('month = 2;', mode=DjJS, absolute=4)], level=1) +Line([Text(' ', mode=DjJS), Text('var ', mode=DjJS), Text('dayCount;', mode=DjJS, absolute=4)], level=1) +Line([Text(' switch ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('month', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text('1:', mode=DjJS)], level=2) +Line([Text(' function switchFoo ', mode=DjJS), Open('(', mode=DjJS, level=3), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=3)], level=3) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=4), Text('"Foo"', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=4) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=3) +Line([Text(' switchFoo', mode=DjJS), Open('(', mode=DjJS, level=3), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=3) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text('12:', mode=DjJS)], level=2) +Line([Text(' dayCount = 31;', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text('4:', mode=DjJS)], level=2) +Line([Text(' switch', mode=DjJS), Open('(', mode=DjJS, level=3), Text('boo', mode=DjJS), Close(')', mode=DjJS), Open('{', mode=DjJS, level=3)], level=3) +Line([OpenDouble(' case ', mode=DjJS, level=4), Text('1:', mode=DjJS)], level=4) +Line([OpenDouble(' case ', mode=DjJS, level=4), Text('2:', mode=DjJS)], level=4) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=3) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text('11:', mode=DjJS)], level=2) +Line([Text(' dayCount = 30;', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text('2:', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=3), Open('(', mode=DjJS, level=3), Open('(', mode=DjJS, level=3), Text('year % 4 == 0', mode=DjJS), Close(')', mode=DjJS), Text(' && !', mode=DjJS), Open('(', mode=DjJS, level=3), Text('year % 100 == 0', mode=DjJS), Close(')', mode=DjJS), Close(')', mode=DjJS), Text(' || ', mode=DjJS), Open('(', mode=DjJS, level=3), Text('year % 400 == 0', mode=DjJS), Close(')', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('{', mode=DjJS, level=3)], level=3) +Line([Text(' dayCount = 29;', mode=DjJS)], level=4) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Text(' else ', mode=DjJS), Open('{', mode=DjJS, level=3)], level=3) +Line([Text(' dayCount = 28;', mode=DjJS)], level=4) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=3) +Line([Text(' break;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), OpenDouble('default:', mode=DjJS, level=2)], level=2) +Line([Text(' dayCount = -1; ', mode=DjJS), Text('// invalid month', mode=DjJS, ignore=True)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=1), Text('dayCount', mode=DjJS), Close(')', mode=DjJS), Text(';', 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(' switch ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('a', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text('b:', mode=DjJS)], level=2) +Line([Text(' switch ', mode=DjJS), Open('(', mode=DjJS, level=3), Text('c', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=3)], level=3) +Line([OpenDouble(' case ', mode=DjJS, level=4), Text('d:', mode=DjJS)], level=4) +Line([Text(' switch ', mode=DjJS), Open('(', mode=DjJS, level=5), Text('e', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=5)], level=5) +Line([Text(' ', mode=DjJS), OpenDouble('default:', mode=DjJS, level=6)], level=6) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=5) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', 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(' switch ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('foo', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text('bar:', mode=DjJS), Text(' break', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), OpenDouble('default:', mode=DjJS, level=2), Text(' return', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', 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(' function switchBoo ', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=2), Text('"Boo"', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=1) +Line([Text(' switchBoo', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([]) +Line([Text(' ', mode=DjJS), Text('let ', mode=DjJS), Text('arr = ', mode=DjJS, absolute=4), Open('[', mode=DjJS, level=1)], level=1) +Line([Text(' ', mode=DjJS), Text("'switch'", mode=DjJS), Text(',', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Text("'default:'", mode=DjJS), Text(',', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Text("'case '", mode=DjJS), Text(',', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close(']', mode=DjJS), Text(';', mode=DjJS, absolute=4)], 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(' switch ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('foo', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=1)], level=1) +Line([OpenDouble(' case ', mode=DjJS, level=2), Text('bar:', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=3), Text('baz', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('{', mode=DjJS, level=3)], level=3) +Line([Text(' switch ', mode=DjJS), Open('(', mode=DjJS, level=4), Text('foo', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=4)], level=4) +Line([OpenDouble(' case ', mode=DjJS, level=5), Text('bar:', mode=DjJS)], level=5) +Line([Text(' ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=6), Text('baz', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('{', mode=DjJS, level=6)], level=6) +Line([Text(' xizzy', mode=DjJS), Open('(', mode=DjJS, level=7), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=7) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=6) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=4) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', 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(' window.fetch', mode=DjJS), Open('(', mode=DjJS, level=1), Text("'/test.html'", mode=DjJS), Close(')', mode=DjJS)], level=1) +Line([Text(' .then', mode=DjJS, relative=1), Open('(', mode=DjJS, level=2), Open('(', mode=DjJS, level=2), Text('html', mode=DjJS), Close(')', mode=DjJS), Text(' => ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' document.body.innerHTML = html;', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=2) +Line([]) +Line([Text(' foo', mode=DjJS)], level=1) +Line([Text(' .bar', mode=DjJS, relative=1)], level=2) +Line([Text(' .baz', mode=DjJS, relative=1)], level=2) +Line([Text(' .then', mode=DjJS, relative=1), Open('(', mode=DjJS, level=2), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(' => ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' foo', mode=DjJS)], level=3) +Line([Text(' .bar', mode=DjJS, relative=1)], level=4) +Line([Text(' .baz', mode=DjJS, relative=1)], level=4) +Line([Text(' .then', mode=DjJS, relative=1), Open('(', mode=DjJS, level=4), Open('(', mode=DjJS, level=4), Close(')', mode=DjJS), Text(' => ', mode=DjJS), Open('{', mode=DjJS, level=4)], level=4) +Line([Text(' foo', mode=DjJS)], level=5) +Line([Text(' .bar', mode=DjJS, relative=1)], level=6) +Line([Text(' .baz', mode=DjJS, relative=1)], level=6) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=4) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), 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('head', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('script', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' function foo', mode=DjJS), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' ', mode=DjJS), Close('', mode=DjHTML)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('head', mode=InsideHTMLTag, absolute=6), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('script', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' function foo', mode=DjJS), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('', mode=DjHTML)], 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(' ', mode=DjJS), Text('// The following does not contain a comment', mode=DjJS, ignore=True)], level=1, ignore=True) +Line([Text(' wsHost = ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('/^wss?:\\/\\//', mode=DjJS), Text('i.test', mode=DjJS), Open('(', mode=DjJS, level=1), Text('me._host', mode=DjJS), Close(')', mode=DjJS), Text(' ? ', mode=DjJS), Text("''", mode=DjJS), Text(' : me._protocol', mode=DjJS), Close(')', mode=DjJS), Text(' + me._host;', mode=DjJS, relative=1)], level=1) +Line([]) +Line([Text(' foo; ', mode=DjJS), Text('// This is a comment', mode=DjJS, ignore=True)], level=1) +Line([Text(' bar ', mode=DjJS), Text('//This too', mode=DjJS, ignore=True)], level=1) +Line([Text(' baz', mode=DjJS), Text('//Even this', mode=DjJS, ignore=True)], level=1) +Line([]) +Line([Text(' foo ', mode=DjJS), Text('// function() {', mode=DjJS, ignore=True)], level=1) +Line([Text(' bar ', mode=DjJS), Text('// var a = 1;', mode=DjJS, ignore=True)], level=1) +Line([Text(' baz ', mode=DjJS), Text('// }', mode=DjJS, ignore=True)], 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(' ', mode=DjJS), Text('var ', mode=DjJS), Text('a = 1,', mode=DjJS, absolute=4)], level=1) +Line([Text(' b = 2,', mode=DjJS, absolute=4)], level=1, offset=4) +Line([Text(' c;', mode=DjJS, absolute=4)], level=1, offset=4) +Line([Text(' ', mode=DjJS), Text('var ', mode=DjJS), Text('foo = bar; ', mode=DjJS, absolute=4), Text('let ', mode=DjJS), Text('a = 1,', mode=DjJS, absolute=19)], level=1) +Line([Text(' b = 2,', mode=DjJS, absolute=19)], level=1, offset=19) +Line([Text(' c', mode=DjJS, absolute=19)], level=1, offset=19) +Line([]) +Line([Text(' ', mode=DjJS), Text('// Haskell-style indentation', mode=DjJS, ignore=True)], level=1, ignore=True) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('a = 1', mode=DjJS, absolute=6)], level=1) +Line([Text(' , b = 2', mode=DjJS, absolute=4)], level=1, offset=4) +Line([Text(' , c', mode=DjJS, absolute=4)], level=1, offset=4) +Line([]) +Line([Text(' ', mode=DjJS), Text('// Notice the first line is the same', mode=DjJS, ignore=True)], level=1, ignore=True) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('a = 1', mode=DjJS, absolute=6)], level=1) +Line([Text(' b = 2', mode=DjJS)], level=1) +Line([Text(' c = 3', mode=DjJS)], level=1) +Line([]) +Line([Text(' ', mode=DjJS), Text('// Yes, this makes sense', mode=DjJS, ignore=True)], level=1, ignore=True) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('func1 = function', mode=DjJS, absolute=6), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' ', mode=DjJS, absolute=6), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' return foo', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Text(',', mode=DjJS, absolute=6)], level=1) +Line([Text(' func2 = function', mode=DjJS, absolute=6), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' ', mode=DjJS, absolute=6), Open('{', mode=DjJS, level=1), Text(' return 2 ', mode=DjJS), Close('}', mode=DjJS), Text(',', mode=DjJS, absolute=6)], level=1, offset=6) +Line([Text(' func3 = function', mode=DjJS, absolute=6), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(' ', mode=DjJS, absolute=6), Open('{', mode=DjJS, level=1), Text(' return 3 ', mode=DjJS), Close('}', mode=DjJS)], level=1, offset=6) +Line([]) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('foo = bar,', mode=DjJS, absolute=6)], level=1) +Line([Text(' baz = ', mode=DjJS, absolute=6), Open('{', mode=DjJS, level=1)], level=1, offset=6) +Line([Text(' ...', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS)], level=1) +Line([]) +Line([Text(' ', mode=DjJS), Text('// We are not supporting madness like this', mode=DjJS, ignore=True)], level=1, ignore=True) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('a = 1,', mode=DjJS, absolute=6)], level=1) +Line([Text(' ', mode=DjJS), Open('{% if %}', mode=DjTXT, level=1)], level=1) +Line([Text(' b = 2,', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('{% endif %}', mode=DjTXT)], level=1) +Line([Text(' c = 3;', 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(' ', mode=DjJS), Text('var ', mode=DjJS), Text('case = ', mode=DjJS, absolute=4), Text('"foo"', mode=DjJS, relative=1, absolute=4)], level=1) +Line([Text(' ', mode=DjJS), Text('var ', mode=DjJS), Text('dict = ', mode=DjJS, absolute=4), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' ', mode=DjJS), Text('case:', mode=DjJS), Text(' ', mode=DjJS, relative=1), Text('"bar"', mode=DjJS, relative=1), Text(',', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Text('"default:"', mode=DjJS), Text(': ', mode=DjJS), Text('"baz"', mode=DjJS, relative=1), Text(',', mode=DjJS)], level=2) +Line([Text(' ...params,', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', 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(' foo', mode=DjJS)], level=1) +Line([Text(' ? bar', mode=DjJS, relative=1)], level=2) +Line([Text(' : baz', mode=DjJS, relative=1)], 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) +Line([Text(' ', mode=DjJS), Text('var ', mode=DjJS), Text('bar = ', mode=DjJS, absolute=4), Text('"\\"{"', mode=DjJS, relative=1, absolute=4)], level=1) +Line([Text(' ', mode=DjJS), Text('var ', mode=DjJS), Text('baz = ', mode=DjJS, absolute=4), Text('`\\`{`', mode=DjJS, relative=1, absolute=4)], 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(' ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=1), Text('foo', mode=DjJS), Close(')', mode=DjJS)], level=1) +Line([Text(' bar', mode=DjJS, relative=1)], level=2) +Line([]) +Line([Text(' ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=1), Text('foo', mode=DjJS), Close(')', mode=DjJS), Text(' return', mode=DjJS, relative=1)], level=1) +Line([Text(' bar', mode=DjJS)], level=1) +Line([]) +Line([Text(' ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=1)], level=1) +Line([Text(' foo &&', mode=DjJS)], level=2) +Line([Text(' bar', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close(')', mode=DjJS)], level=1) +Line([Text(' baz', mode=DjJS, relative=1)], level=2) +Line([Text(' ', mode=DjJS), Text('else', mode=DjJS)], level=1) +Line([Text(' return', mode=DjJS, relative=1)], level=2) +Line([]) +Line([Text(' ', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=1), Text('foo', mode=DjJS), Close(')', mode=DjJS)], level=1) +Line([Text(' ', mode=DjJS, relative=1), Text('if', mode=DjJS, relative=1), Text(' ', mode=DjJS, relative=2), Open('(', mode=DjJS, level=2), Text('bar', mode=DjJS), Close(')', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS, relative=2), Text('if', mode=DjJS, relative=2), Text(' ', mode=DjJS, relative=3), Open('(', mode=DjJS, level=3), Text('baz', mode=DjJS), Close(')', mode=DjJS)], level=3) +Line([Text(' return', mode=DjJS, relative=3)], level=4) +Line([Text(' ', mode=DjJS), Text('else', mode=DjJS)], level=1) +Line([Text(' console.log', mode=DjJS, relative=1), Open('(', mode=DjJS, level=2), Text('"Footgun detected!"', mode=DjJS), Close(')', mode=DjJS)], level=2) +Line([]) +Line([Text(' leitmot', mode=DjJS), Text('if', mode=DjJS), Text(' ', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS)], level=1) +Line([Text(' elsewhere ', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([Text(' mean', mode=DjJS), Text('while', mode=DjJS), Text(' ', mode=DjJS), Open('(', mode=DjJS, level=1), Text('true', mode=DjJS), Close(')', mode=DjJS)], level=1) +Line([]) +Line([Text(' ', mode=DjJS), Text('while', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=1), Text('true', mode=DjJS), Close(')', mode=DjJS)], level=1) +Line([Text(' break', mode=DjJS, relative=1)], level=2) +Line([]) +Line([Text(' ', mode=DjJS), Text('for', mode=DjJS), Text(' ', mode=DjJS, relative=1), Open('(', mode=DjJS, level=1), Text('i=1, 1<10, i++', mode=DjJS), Close(')', mode=DjJS)], level=1) +Line([Text(' ', mode=DjJS, relative=1), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' break', mode=DjJS)], level=2) +Line([Text(' ', mode=DjJS), Close('}', 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(' ', mode=DjJS), Text('var ', mode=DjJS), Text('foo =', mode=DjJS, absolute=4)], level=1) +Line([Text(' bar', mode=DjJS, relative=1)], level=2) +Line([]) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('func =', mode=DjJS, absolute=6)], level=1) +Line([Text(' function', mode=DjJS, relative=1), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' return', mode=DjJS)], level=3) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS)], level=2) +Line([]) +Line([Text(' ', mode=DjJS), Text('// Note that unquoted "default" is a reserved keyword', mode=DjJS, ignore=True)], level=1, ignore=True) +Line([Text(' ', mode=DjJS), Text('let ', mode=DjJS), Text('dict = ', mode=DjJS, absolute=4), Open('{', mode=DjJS, level=1)], level=1) +Line([Text(' ', mode=DjJS), Text('"default"', mode=DjJS), Text(':', mode=DjJS)], level=2) +Line([Text(' foo', mode=DjJS, relative=1)], level=3) +Line([Text(' ', mode=DjJS), Text('bar:', mode=DjJS)], level=2) +Line([Text(' baz', mode=DjJS, relative=1)], level=3) +Line([Text(' ', mode=DjJS), Close('}', 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(' re = ', mode=DjJS), Text('/ab+c/', mode=DjJS, relative=1)], level=1) +Line([Text(' space_re = ', mode=DjJS), Text('/ foo /', mode=DjJS, relative=1)], level=1) +Line([Text(' single_re = ', mode=DjJS), Text('/foo\\/ + bar/', mode=DjJS, relative=1)], level=1) +Line([Text(' double_re = ', mode=DjJS), Text('/foo/', mode=DjJS, relative=1), Text(' + ', mode=DjJS), Text('/bar/', mode=DjJS)], level=1) +Line([Text(' look_like_comment = ', mode=DjJS), Text('/\\(/', mode=DjJS, relative=1), Text('/', mode=DjJS)], level=1) +Line([]) +Line([Text(' ', mode=DjJS), Text('// The following is known to be broken', mode=DjJS, ignore=True)], level=1, ignore=True) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('x = 42', mode=DjJS, absolute=6)], level=1) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('y = 7', mode=DjJS, absolute=6)], level=1) +Line([Text(' ', mode=DjJS), Text('const ', mode=DjJS), Text('six = x ', mode=DjJS, absolute=6), Text('/ (function() { /', mode=DjJS, absolute=6), Text('/ comment', mode=DjJS, absolute=6)], level=1) +Line([Text(' return y', mode=DjJS)], level=1) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Open('(', mode=DjJS, level=1), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) \ No newline at end of file diff --git a/tests/suite/paradoxes.tokens b/tests/suite/paradoxes.tokens new file mode 100644 index 0000000..3fbcfab --- /dev/null +++ b/tests/suite/paradoxes.tokens @@ -0,0 +1,51 @@ +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Text('<', mode=DjHTML), Text('div', mode=InsideHTMLTag, absolute=5), Open('>', mode=DjHTML)]) +Line([Text(' ', mode=DjHTML), Open('{% if some_condition %}', mode=DjTXT, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=9), Text('{% url a %}', mode=DjTXT, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' ', mode=DjHTML), CloseAndOpen('{% elif some_other condition %}', mode=DjTXT, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=9), Text('{% url b %}', mode=DjTXT, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endif %}', mode=DjTXT)], level=1) +Line([Text(' .', mode=DjHTML)], level=1) +Line([Text(' ', mode=DjHTML), Open('{% if some_condition or some_other_condition %}', mode=DjTXT, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=2) +Line([Text(' ', mode=DjHTML), Close('{% endif %}', mode=DjTXT)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% if some_condition %}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=9), Text('{% url some_url', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=1)], level=1) +Line([CloseAndOpen('{% elif some_other_condition %}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a ', mode=InsideHTMLTag, absolute=3), Text('href=', mode=InsideHTMLTag, absolute=3), Text('"', mode=InsideHTMLTag, absolute=9), Text('{% url some_other_url', mode=InsideHTMLTag, absolute=9), Text('"', mode=InsideHTMLTag, absolute=8), Open('>', mode=DjHTML, level=1)], level=1) +Line([Close('{% endif %}', mode=DjTXT)]) +Line([Text('[a bunch of details go here]', mode=DjHTML)]) +Line([Open('{% if end_tag_needed %}', mode=DjTXT), Close('', mode=DjHTML), Close('{% endif %}', mode=DjTXT)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([Open('{% block %}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a', mode=InsideHTMLTag, absolute=3), Open('>', mode=DjHTML, level=1)], level=1) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a', mode=InsideHTMLTag, absolute=3), Open('>', mode=DjHTML, level=2)], level=2) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a', mode=InsideHTMLTag, absolute=3), Open('>', mode=DjHTML, level=3)], level=3) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a', mode=InsideHTMLTag, absolute=3), Open('>', mode=DjHTML, level=4)], level=4) +Line([Text(' ', mode=DjHTML), Text('<', mode=DjHTML), Text('a', mode=InsideHTMLTag, absolute=3), Open('>', mode=DjHTML, level=5)], level=5) +Line([Close('{% endblock %}', mode=DjTXT)]) +Line([Open('{% for x in [1,2,3,4,5] %}', mode=DjTXT)]) +Line([Text(' ', mode=DjHTML), Close('', mode=DjHTML)], level=1) +Line([Close('{% endfor %}', mode=DjTXT)]) +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), Open('{% if jquery %}', mode=DjTXT, level=1)], level=1) +Line([Text(' $', mode=DjJS), Open('(', mode=DjJS, level=2), Text('function', mode=DjJS), Open('(', mode=DjJS, level=2), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' ', mode=DjJS), CloseAndOpen('{% else %}', mode=DjTXT, level=1)], level=1) +Line([Text(' document.addEventListener', mode=DjJS), Open('(', mode=DjJS, level=2), Text('"DOMContentLoaded"', mode=DjJS), Text(', function', mode=DjJS), Open('(', mode=DjJS, level=2), Text('event', mode=DjJS), Close(')', mode=DjJS), Text(' ', mode=DjJS), Open('{', mode=DjJS, level=2)], level=2) +Line([Text(' ', mode=DjJS), Close('{% endif %}', mode=DjTXT)], level=1) +Line([Text(' console.log', mode=DjJS), Open('(', mode=DjJS, level=1), Text('"Time to ditch jQuery!"', mode=DjJS), Close(')', mode=DjJS)], level=1) +Line([Text(' ', mode=DjJS), Close('}', mode=DjJS), Close(')', mode=DjJS), Text(';', mode=DjJS)], level=1) +Line([Close('', mode=DjHTML)]) +Line([]) +Line([]) +Line([Open('', mode=DjHTML, ignore=True)], ignore=True) +Line([]) \ No newline at end of file diff --git a/tests/test_suite.py b/tests/test_suite.py index d1979e2..e7a5c1e 100644 --- a/tests/test_suite.py +++ b/tests/test_suite.py @@ -1,12 +1,12 @@ -import os import unittest +from pathlib import Path from djhtml.modes import DjHTML class TestSuite(unittest.TestCase): maxDiff = None - DIR = os.path.join(os.path.dirname(__file__), "suite") + DIR = Path(__file__).parent / "suite" def test_available_files(self): """ @@ -14,14 +14,18 @@ def test_available_files(self): expected output to the actual output. """ - for filename in os.listdir(self.DIR): - with self.subTest(filename): - self._test_file(filename) + for filename in self.DIR.iterdir(): + if filename.suffix == ".html": + with self.subTest(filename): + self._test_file(filename.stem) - def _test_file(self, filename): - with open(os.path.join(self.DIR, filename)) as f: + def _test_file(self, basename): + with open(self.DIR / (basename + ".html")) as f: expected_output = f.read() + with open(self.DIR / (basename + ".tokens")) as f: + expected_tokens = f.read() + # Indent the expected output to 0 (no indentation) unindented = DjHTML(expected_output).indent(0) self.assertNotEqual(unindented, expected_output) @@ -29,3 +33,7 @@ def _test_file(self, filename): # Re-indent the unindented output to 4 actual_output = DjHTML(unindented).indent(4) self.assertEqual(expected_output, actual_output) + + # Compare the tokenization + actual_tokens = DjHTML(actual_output).debug() + self.assertEqual(expected_tokens, actual_tokens)