| #!/usr/bin/env python |
| # |
| # The LLVM Compiler Infrastructure |
| # |
| # This file is distributed under the University of Illinois Open Source |
| # License. See LICENSE.TXT for details. |
| # |
| ##===--------------------------------------------------------------------===## |
| # |
| # This script reads visualization data emitted by the static analyzer for |
| # display in Ubigraph. |
| # |
| ##===--------------------------------------------------------------------===## |
| |
| import xmlrpclib |
| import sys |
| |
| |
| def Error(message): |
| print >> sys.stderr, 'ubiviz: ' + message |
| sys.exit(1) |
| |
| |
| def StreamData(filename): |
| file = open(filename) |
| for ln in file: |
| yield eval(ln) |
| file.close() |
| |
| |
| def Display(G, data): |
| action = data[0] |
| if action == 'vertex': |
| vertex = data[1] |
| G.new_vertex_w_id(vertex) |
| for attribute in data[2:]: |
| G.set_vertex_attribute(vertex, attribute[0], attribute[1]) |
| elif action == 'edge': |
| src = data[1] |
| dst = data[2] |
| edge = G.new_edge(src, dst) |
| for attribute in data[3:]: |
| G.set_edge_attribute(edge, attribute[0], attribute[1]) |
| elif action == "vertex_style": |
| style_id = data[1] |
| parent_id = data[2] |
| G.new_vertex_style_w_id(style_id, parent_id) |
| for attribute in data[3:]: |
| G.set_vertex_style_attribute(style_id, attribute[0], attribute[1]) |
| elif action == "vertex_style_attribute": |
| style_id = data[1] |
| for attribute in data[2:]: |
| G.set_vertex_style_attribute(style_id, attribute[0], attribute[1]) |
| elif action == "change_vertex_style": |
| vertex_id = data[1] |
| style_id = data[2] |
| G.change_vertex_style(vertex_id, style_id) |
| |
| |
| def main(args): |
| if len(args) == 0: |
| Error('no input files') |
| |
| server = xmlrpclib.Server('http://127.0.0.1:20738/RPC2') |
| G = server.ubigraph |
| |
| for arg in args: |
| G.clear() |
| for x in StreamData(arg): |
| Display(G, x) |
| |
| sys.exit(0) |
| |
| |
| if __name__ == '__main__': |
| main(sys.argv[1:]) |