def get(amount=1):
data = template.read(amount)
if len(data) != amount:
- raise EOFError()
+ template.close()
return data
def grab_literal(until=None):
until = until or l_del
literal = get()
- while literal[-2:] != until:
+ while not template.closed:
+ if literal[-2:] == until:
+ return literal[:-2]
+
literal += get()
- return literal[:-2]
+ return literal
+
tag_types = {
'!': 'comment',
l_del = '{{'
r_del = '}}'
while not template.closed:
- try:
- literal = grab_literal()
- except EOFError:
- return
-
- if literal:
- if len(literal) > 1 and literal.startswith('\n'):
- literal = literal[1:]
+ literal = grab_literal()
+
+ if literal == '':
+ continue
+ else:
yield ('literal', literal)
+ if template.closed:
+ break
+
tag_type = tag_types.get(peek(0, 1), 'variable')
if tag_type != 'variable':
template.seek(template.tell() + 1)
if tag == 'end':
scopes = scopes[1:]
- elif not scopes[0]:
+ elif not scopes[0] and len(scopes) != 1:
pass
elif tag == 'literal':