summaryrefslogtreecommitdiff
path: root/pystache
diff options
context:
space:
mode:
authorChris Jerdonek <chris.jerdonek@gmail.com>2012-05-05 14:55:14 -0700
committerChris Jerdonek <chris.jerdonek@gmail.com>2012-05-05 14:55:14 -0700
commit01a2daf493d23fe8058ed64c522ddbe301b50db8 (patch)
tree8c4b0e675b4c0e4e2f385b98f6980e63b74ac378 /pystache
parente4108154d7394e218695747b18543376d03ead42 (diff)
downloadpystache-01a2daf493d23fe8058ed64c522ddbe301b50db8.tar.gz
Added parse() function and made parser classes private.
Diffstat (limited to 'pystache')
-rw-r--r--pystache/parser.py39
-rw-r--r--pystache/renderengine.py5
2 files changed, 26 insertions, 18 deletions
diff --git a/pystache/parser.py b/pystache/parser.py
index 74ffc01..5215c64 100644
--- a/pystache/parser.py
+++ b/pystache/parser.py
@@ -17,6 +17,15 @@ END_OF_LINE_CHARACTERS = [u'\r', u'\n']
NON_BLANK_RE = re.compile(ur'^(.)', re.M)
+def parse(template, delimiters=None):
+ """
+ Parse a unicode template string and return a ParsedTemplate instance.
+
+ """
+ parser = _Parser(delimiters)
+ return parser.parse(template)
+
+
def _compile_template_re(delimiters=None):
"""
Return a regular expresssion object (re.RegexObject) instance.
@@ -56,13 +65,13 @@ class ParsingError(Exception):
## Node types
-class CommentNode(object):
+class _CommentNode(object):
def render(self, engine, context):
return u''
-class ChangeNode(object):
+class _ChangeNode(object):
def __init__(self, delimiters):
self.delimiters = delimiters
@@ -71,7 +80,7 @@ class ChangeNode(object):
return u''
-class Tag(object):
+class _TagNode(object):
def __init__(self, key):
self.key = key
@@ -81,7 +90,7 @@ class Tag(object):
return engine.escape(s)
-class LiteralNode(object):
+class _LiteralNode(object):
def __init__(self, key):
self.key = key
@@ -91,7 +100,7 @@ class LiteralNode(object):
return engine.literal(s)
-class PartialNode(object):
+class _PartialNode(object):
def __init__(self, key, indent):
self.key = key
@@ -105,7 +114,7 @@ class PartialNode(object):
return engine.render(template, context)
-class InvertedNode(object):
+class _InvertedNode(object):
def __init__(self, key, parsed_section):
self.key = key
@@ -122,7 +131,7 @@ class InvertedNode(object):
return engine.render_parsed(self.parsed_section, context)
-class SectionNode(object):
+class _SectionNode(object):
# TODO: the template_ and parsed_template_ arguments don't both seem
# to be necessary. Can we remove one of them? For example, if
@@ -168,7 +177,7 @@ class SectionNode(object):
return unicode(''.join(parts))
-class Parser(object):
+class _Parser(object):
_delimiters = None
_template_re = None
@@ -292,21 +301,21 @@ class Parser(object):
"""
# TODO: switch to using a dictionary instead of a bunch of ifs and elifs.
if tag_type == '!':
- return CommentNode()
+ return _CommentNode()
if tag_type == '=':
delimiters = tag_key.split()
self._change_delimiters(delimiters)
- return ChangeNode(delimiters)
+ return _ChangeNode(delimiters)
if tag_type == '':
- return Tag(tag_key)
+ return _TagNode(tag_key)
if tag_type == '&':
- return LiteralNode(tag_key)
+ return _LiteralNode(tag_key)
if tag_type == '>':
- return PartialNode(tag_key, leading_whitespace)
+ return _PartialNode(tag_key, leading_whitespace)
raise Exception("Invalid symbol for interpolation tag: %s" % repr(tag_type))
@@ -317,10 +326,10 @@ class Parser(object):
"""
if tag_type == '#':
- return SectionNode(tag_key, parsed_section, self._delimiters,
+ return _SectionNode(tag_key, parsed_section, self._delimiters,
template, section_start_index, section_end_index)
if tag_type == '^':
- return InvertedNode(tag_key, parsed_section)
+ return _InvertedNode(tag_key, parsed_section)
raise Exception("Invalid symbol for section tag: %s" % repr(tag_type))
diff --git a/pystache/renderengine.py b/pystache/renderengine.py
index 8a05760..9259544 100644
--- a/pystache/renderengine.py
+++ b/pystache/renderengine.py
@@ -8,7 +8,7 @@ Defines a class responsible for rendering logic.
import re
from pystache.common import is_string
-from pystache.parser import Parser
+from pystache.parser import parse
def context_get(stack, name):
@@ -165,7 +165,6 @@ class RenderEngine(object):
context_stack: a ContextStack instance.
"""
- parser = Parser(delimiters=delimiters)
- parsed_template = parser.parse(template)
+ parsed_template = parse(template, delimiters)
return self.render_parsed(parsed_template, context_stack)