# 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 '' \ % (str(self.value), str(self.nodes), self.negated) 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.negated + str(self.value)) def __str__(self): return '' % repr(self)