aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/py/javatoolkit/parser/tree.py')
-rw-r--r--src/py/javatoolkit/parser/tree.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/py/javatoolkit/parser/tree.py b/src/py/javatoolkit/parser/tree.py
new file mode 100644
index 0000000..eb51874
--- /dev/null
+++ b/src/py/javatoolkit/parser/tree.py
@@ -0,0 +1,107 @@
+#! /usr/bin/python
+#
+# Copyright(c) 2006, James Le Cuirot <chewi@aura-online.co.uk>
+# Copyright(c) 2004, Karl Trygve Kalleberg <karltk@gentoo.org>
+# Copyright(c) 2004, Gentoo Foundation
+#
+# Licensed under the GNU General Public License, v2
+#
+# $Header: $
+
+import sys
+
+class ParseError:
+ def __init__(self, error):
+ self.error = error
+
+class NodeIter:
+ def __init__(self, node):
+ self._node = node
+ self._index = 0
+ def next(self):
+ self._index += 1
+ if self._index >= len(self._node._kids):
+ raise StopIteration
+ return self._node._kids[self._index]
+
+class Node:
+ def __init__(self, name = None, value = None):
+ self.name = name
+ self.value = value
+ self._kids = []
+
+ def __iter__(self):
+ return NodeIter(self)
+
+ def add_kid(self, kid):
+ for x in self._kids:
+ if x.name == kid.name:
+ return
+
+ self._kids.append(kid)
+
+ def _dump_kids(self, indent, ous):
+ for x in self._kids:
+ x.dump(indent + 1)
+
+ """
+ Dump self as text to stream.
+ """
+ def dump(self, indent = 0, ous = sys.stdout):
+ if self.name:
+ ous.write((" " * indent) + self.name + " = " + self.value + "\n")
+
+ self._dump_kids(indent, ous)
+
+ """
+ Output self as text to stream using the given format.
+ """
+ def output(self, before, between, after, wrap = None, indent = "", ous = sys.stdout):
+ if self.name:
+ outval = self.value
+
+ if wrap != None:
+ outval = outval.replace(wrap, wrap + "\n" + indent)
+
+ ous.write(before + self.name + between + outval + after + "\n")
+
+ for x in self._kids:
+ x.output(before, between, after, wrap, indent, ous)
+
+ """
+ Returns a lists of all the node names.
+ """
+ def node_names(self):
+ names = []
+
+ if self.name:
+ names.append(self.name)
+
+ for x in self._kids:
+ names.extend(x.node_names())
+
+ return names
+
+ """
+ Find a given node name in a tree.
+
+ @param tree - the tree to search in
+ @param nodename - the name of the node to search for
+
+ @return reference to the found node, if any
+ """
+ def find_node(self, nodename):
+ if self.name == nodename:
+ return self
+
+ else:
+ for x in self._kids:
+ y = x.find_node(nodename)
+
+ if y != None:
+ return y
+
+ return None
+
+if __name__ == "__main__":
+ print "This is not an executable module"