Created
July 18, 2015 07:04
-
-
Save LeoJavaAI/5fd77585a239eac3708c to your computer and use it in GitHub Desktop.
Pull syntax error
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
self = <jinja2.lexer.Lexer object at 0x7f1099f56128> | |
source = '<!doctype html>\n<html class="no-js" lang="en">\n <head>\n <meta charset="utf-8" />\n <meta name="vi...on.min.js"></script>\n <script>\n $(document).foundation();\n </script>\n </body>\n</html>' | |
name = 'layout.html' | |
filename = '/home/travis/build/Leo-g/Flask-Scaffold/app/templates/layout.html' | |
state = 'root' | |
def tokeniter(self, source, name, filename=None, state=None): | |
"""This method tokenizes the text and returns the tokens in a | |
generator. Use this method if you just want to tokenize a template. | |
""" | |
source = text_type(source) | |
lines = source.splitlines() | |
if self.keep_trailing_newline and source: | |
for newline in ('\r\n', '\r', '\n'): | |
if source.endswith(newline): | |
lines.append('') | |
break | |
source = '\n'.join(lines) | |
pos = 0 | |
lineno = 1 | |
stack = ['root'] | |
if state is not None and state != 'root': | |
assert state in ('variable', 'block'), 'invalid state' | |
stack.append(state + '_begin') | |
else: | |
state = 'root' | |
statetokens = self.rules[stack[-1]] | |
source_length = len(source) | |
balancing_stack = [] | |
while 1: | |
# tokenizer loop | |
for regex, tokens, new_state in statetokens: | |
m = regex.match(source, pos) | |
# if no match we try again with the next rule | |
if m is None: | |
continue | |
# we only match blocks and variables if braces / parentheses | |
# are balanced. continue parsing with the lower rule which | |
# is the operator rule. do this only if the end tags look | |
# like operators | |
if balancing_stack and \ | |
tokens in ('variable_end', 'block_end', | |
'linestatement_end'): | |
continue | |
# tuples support more options | |
if isinstance(tokens, tuple): | |
for idx, token in enumerate(tokens): | |
# failure group | |
if token.__class__ is Failure: | |
raise token(lineno, filename) | |
# bygroup is a bit more complex, in that case we | |
# yield for the current token the first named | |
# group that matched | |
elif token == '#bygroup': | |
for key, value in iteritems(m.groupdict()): | |
if value is not None: | |
yield lineno, key, value | |
lineno += value.count('\n') | |
break | |
else: | |
raise RuntimeError('%r wanted to resolve ' | |
'the token dynamically' | |
' but no group matched' | |
% regex) | |
# normal group | |
else: | |
data = m.group(idx + 1) | |
if data or token not in ignore_if_empty: | |
yield lineno, token, data | |
lineno += data.count('\n') | |
# strings as token just are yielded as it. | |
else: | |
data = m.group() | |
# update brace/parentheses balance | |
if tokens == 'operator': | |
if data == '{': | |
balancing_stack.append('}') | |
elif data == '(': | |
balancing_stack.append(')') | |
elif data == '[': | |
balancing_stack.append(']') | |
elif data in ('}', ')', ']'): | |
if not balancing_stack: | |
raise TemplateSyntaxError('unexpected \'%s\'' % | |
data, lineno, name, | |
filename) | |
expected_op = balancing_stack.pop() | |
if expected_op != data: | |
raise TemplateSyntaxError('unexpected \'%s\', ' | |
'expected \'%s\'' % | |
(data, expected_op), | |
lineno, name, | |
> filename) | |
E jinja2.exceptions.TemplateSyntaxError: unexpected '}', expected ')' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment