class DiagramTreeBuilder: def build(self, tree): self.diagram = Diagram() self.instantiate(tree) return self.diagram def instantiate(self, tree): for stmt in tree.stmts: if isinstance(stmt, parser.Attr): self.diagram.set_attribute(stmt) elif isinstance(stmt, parser.FieldItem): item = FieldItem(stmt.begin, stmt.end, unquote(stmt.label)) item.set_attributes(stmt.attrs) if item.number is None: if len(self.diagram.fields) == 0: item.number = 0 else: last_item = self.diagram.fields[-1] item.number = last_item.number + last_item.colwidth self.diagram.fields.append(item) elif isinstance(stmt, parser.AttrPlugin): self.diagram.set_plugin(stmt.name, stmt.attrs)
def build(self, tree): self.diagram = Diagram() self.instantiate(tree) return self.diagram
def build(cls, tree): DiagramNode.clear() Diagram.clear() return cls(tree).run()