|  | #!/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:]) |