def parse(tokens)
@nodelist ||= []
@nodelist.clear
while token = tokens.shift
case token
when /^#{TagStart}/
if token =~ /^#{TagStart}\s*(\w+)\s*(.*)?#{TagEnd}$/
if block_delimiter == $1
end_tag
return
end
if tag = Template.tags[$1]
@nodelist << tag.new($1, $2, tokens)
else
unknown_tag($1, $2, tokens)
end
else
raise SyntaxError, "Tag '#{token}' was not properly terminated with regexp: #{TagEnd.inspect} "
end
when /^#{VariableStart}/
@nodelist << create_variable(token)
when ''
else
@nodelist << token
end
end
assert_missing_delimitation!
end