| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # vim: set fileencoding=utf-8 :
- from copy import deepcopy
- class Node(object):
- def __init__(self, value, *nodes):
- super(Node, self).__init__()
- self.value, self.nodes = value, list(nodes)
- self.is_leaf = False
- self.negated = 0
- def __getitem__(self, n):
- return self.nodes[n]
- def __setitem__(self, n, node):
- self.nodes[n] = node
- def __iter__(self):
- return iter(self.nodes)
- def __len__(self):
- return len(self.nodes)
- def __eq__(self, node):
- return isinstance(node, Node) \
- and self.value == node.value and self.nodes == node.nodes
- def __neg__(self):
- copy = deepcopy(self)
- copy.negated += 1
- return copy
- def __str__(self):
- return '<Node value=%s nodes=%s>' % (str(self.value), str(self.nodes))
- def title(self):
- return str(self.value)
- class Leaf(Node):
- def __init__(self, value):
- super(Leaf, self).__init__(value)
- self.value = value
- self.nodes = None
- self.is_leaf = True
- def __len__(self):
- return len(str(self.value))
- def __repr__(self):
- return repr(self.value)
- def __str__(self):
- return str(self.value)
|