| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # 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):
- copied = deepcopy(self)
- copied.negated += 1
- return copied
- def __str__(self):
- return '<Node value=%s nodes=%s negated=%d>' \
- % (str(self.value), str(self.nodes), self.negated)
- def __repr__(self):
- return self.__str__()
- 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 __str__(self):
- return '-' * self.negated + str(self.value)
- def __repr__(self):
- return '<Leaf %s>' % repr(str(self))
|