def ref(self, obj, name, label): """ Set up a ref for resolution Required Arguments: obj -- object to put the referenced object onto name -- name of key in idref dictionary where object is stored label -- label to resolve See Also: self.label() """ label = clean_label(label) if not label: return # Resolve ref if label already exists if self.labels.has_key(label): obj.idref[name] = self.labels[label] return # If the label doesn't exist, store away the object for later if not self.refs.has_key(label): self.refs[label] = [] self.refs[label].append(obj) # Make a fake node with the ID on it for now node = self['Macro']() node.id = label obj.idref[name] = node
def label(self, label, node=None): """ Set a label to the current labelable object Required Arguments: label -- string that contains the label Keyword Arguments: node -- a node to apply the label to rather than the currently labelable object See Also: self.ref() """ label = clean_label(label) if not label: return if node is None: node = self.currentlabel if node is not None: self.persistentLabels[label] = self.labels[label] = node node.id = label # Resolve any outstanding references to this object if self.refs.has_key(label) and self.labels.has_key(label): for obj in self.refs[label]: for key, value in obj.idref.items(): if value.id != label: continue obj.idref[key] = self.labels[label] del self.refs[label]