1 2colors=[ 3"#ff0000", 4"#00ff00", 5"#0000ff", 6"#ffff00", 7"#ff00ff", 8"#00ffff", 9"#ff9900", 10"#ff0099", 11"#00ff99", 12"#99ff00", 13"#9900ff", 14"#0099ff", 15"#ff9933", 16"#ff3399", 17"#99ff33", 18"#9933ff", 19"#33ff99", 20"#3399ff" 21] 22 23entries = dict() 24 25# open file 26f = open("dep.txt") 27 28# read first list until "---" 29i = 0 30for line in f: 31 line = line.strip() 32 if line.startswith("---"): 33 break 34 entries[line] = colors[i % len(colors)] 35 i += 1 36 37# create 2d dict from list 38deps = dict() 39for entry in entries.keys(): 40 deps[entry] = dict() 41 e_dep = deps[entry] 42 for entry2 in entries: 43 e_dep[entry2] = 0 44 45# read rest of file to get all dependencies 46for line in f: 47 line = line.strip() 48 parts = line.split(None) # split on whitespace 49 if line.startswith("#"): 50 continue 51 if len(parts) >= 3: 52 deps[parts[0]][parts[1]] = parts[2] 53 54f.close() 55 56# write dot graph header 57print "# process with: dot -Tpdf mydep.dot -O" 58print "digraph dep {" 59print "\tcolorscheme=x11;" 60 61# write actual dot content 62for dep1 in deps.keys(): 63 for dep2 in deps[dep1].keys(): 64 if deps[dep1][dep2] == "0": 65 # no dependency 66 continue 67 if deps[dep1][dep2] == "1": 68 print dep1, " -> ", dep2, " [color=\"", entries[dep1], "\"];" 69 elif deps[dep1][dep2] == "2": 70 print dep1, " -> ", dep2, " [color=\"", entries[dep1], "\"][style=\"dotted\"];" 71 else: 72 # this dependency hasn't been processed yet 73 continue 74# print dep1, " -> ", dep2, " [color=\"yellow\"];" 75 76# write dot graph footer 77print "}" 78 79