summaryrefslogtreecommitdiff
path: root/pystache
diff options
context:
space:
mode:
authorChris Jerdonek <chris.jerdonek@gmail.com>2012-05-05 08:16:14 -0700
committerChris Jerdonek <chris.jerdonek@gmail.com>2012-05-05 08:16:14 -0700
commit4f85f1f06c3d27683d1fdba563e985fd18c65d9f (patch)
tree92fa847d60ee46b8543f0ca5a59b20d1a315fdeb /pystache
parenta6105f89965b61a8ae70b5953059d1f986d42abb (diff)
downloadpystache-4f85f1f06c3d27683d1fdba563e985fd18c65d9f.tar.gz
Created _make_interpolation_node() and _make_section_node().
Diffstat (limited to 'pystache')
-rw-r--r--pystache/parser.py29
1 files changed, 19 insertions, 10 deletions
diff --git a/pystache/parser.py b/pystache/parser.py
index 12e887e..446ceb8 100644
--- a/pystache/parser.py
+++ b/pystache/parser.py
@@ -154,20 +154,22 @@ class Parser(object):
continue
+ start_index = end_index
+
if tag_type == '/':
if tag_key != section_key:
raise ParsingError("Section end tag mismatch: %s != %s" % (tag_key, section_key))
# Restore previous state with newly found section data.
- start_index, content_end_index, parsed_section = end_index, match_index, parsed_template
+ content_end_index, parsed_section = match_index, parsed_template
(tag_type, tag_key, leading_whitespace, end_index, section_key, parsed_template) = states.pop()
+ node = self._make_section_node(template, tag_type, tag_key, parsed_section,
+ end_index, content_end_index)
else:
- start_index = end_index
+ node = self._make_interpolation_node(tag_type, tag_key, leading_whitespace)
- node = self._make_node(template, tag_type, tag_key, leading_whitespace,
- end_index, content_end_index, parsed_section)
parsed_template.add(node)
# Save the rest of the template.
@@ -175,8 +177,7 @@ class Parser(object):
return parsed_template
- def _make_node(self, template, tag_type, tag_key, leading_whitespace,
- section_start_index, section_end_index, parsed_section):
+ def _make_interpolation_node(self, tag_type, tag_key, leading_whitespace):
"""
Create and return a node of the parse tree.
@@ -196,6 +197,17 @@ class Parser(object):
if tag_type == '&':
return self.engine._make_get_literal(tag_key)
+ if tag_type == '>':
+ return self.engine._make_get_partial(tag_key, leading_whitespace)
+
+ raise Exception("Invalid symbol for interpolation tag: %s" % repr(tag_type))
+
+ def _make_section_node(self, template, tag_type, tag_key, parsed_section,
+ section_start_index, section_end_index):
+ """
+ Create and return a node of the parse tree.
+
+ """
if tag_type == '#':
return self.engine._make_get_section(tag_key, parsed_section, self._delimiters,
template, section_start_index, section_end_index)
@@ -203,7 +215,4 @@ class Parser(object):
if tag_type == '^':
return self.engine._make_get_inverse(tag_key, parsed_section)
- if tag_type == '>':
- return self.engine._make_get_partial(tag_key, leading_whitespace)
-
- raise Exception("Unrecognized tag type: %s" % repr(tag_type))
+ raise Exception("Invalid symbol for section tag: %s" % repr(tag_type))