aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mako/parsetree.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mako/parsetree.py')
-rw-r--r--lib/mako/parsetree.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/mako/parsetree.py b/lib/mako/parsetree.py
index 9a4d5e3..8d9cfdc 100644
--- a/lib/mako/parsetree.py
+++ b/lib/mako/parsetree.py
@@ -7,9 +7,23 @@ class Node(object):
def __init__(self, lineno, pos):
self.lineno = lineno
self.pos = pos
+ def get_children(self):
+ return []
def accept_visitor(self, visitor):
- method = getattr(visitor, "visit" + self.__class__.__name__)
+ def traverse(node):
+ for n in node.get_children():
+ n.accept_visitor(visitor)
+ method = getattr(visitor, "visit" + self.__class__.__name__, traverse)
method(self)
+
+class TemplateNode(Node):
+ """a 'container' node that stores the overall collection of nodes."""
+ def __init__(self):
+ super(TemplateNode, self).__init__(0, 0)
+ self.nodes = []
+ self.page_attributes = {}
+ def __repr__(self):
+ return "TemplateNode(%s, %s)" % (repr(self.page_attributes), repr(self.nodes))
class ControlLine(Node):
"""defines a control line, a line-oriented python line or end tag.
@@ -120,6 +134,8 @@ class Tag(Node):
self.keyword = keyword
self.attributes = attributes
self.nodes = []
+ def get_children(self):
+ return self.nodes
def __repr__(self):
return "%s(%s, %s, %s, %s)" % (self.__class__.__name__, repr(self.keyword), repr(self.attributes), repr((self.lineno, self.pos)), repr([repr(x) for x in self.nodes]))
@@ -132,4 +148,6 @@ class ComponentTag(Tag):
class CallTag(Tag):
__keyword__ = 'call'
class InheritTag(Tag):
- __keyword__ = 'inherit' \ No newline at end of file
+ __keyword__ = 'inherit'
+class PageTag(Tag):
+ __keyword__ = 'page' \ No newline at end of file