1import sys 2 3# manually generated list 4# colors=[ 5# "#ff0000", 6# "#00ff00", 7# "#0000ff", 8# "#ffff00", 9# "#ff00ff", 10# "#00ffff", 11# "#ff9900", 12# "#ff0099", 13# "#00ff99", 14# "#99ff00", 15# "#9900ff", 16# "#0099ff", 17# "#ff9933", 18# "#ff3399", 19# "#99ff33", 20# "#9933ff", 21# "#33ff99", 22# "#3399ff" 23# ] 24 25# from: http://en.wikipedia.org/wiki/HSL_and_HSV 26colors = [ 27#"#FFFFFF", 28"#808080", 29"#000000", 30"#FF0000", 31"#BFBF00", 32"#008000", 33"#80FFFF", 34"#8080FF", 35"#BF40BF", 36"#A0A424", 37"#411BEA", 38"#1EAC41", 39"#F0C80E", 40"#B430E5", 41"#ED7651", 42#"#FEF888", 43"#19CB97", 44"#362698", 45"#7E7EB8", 46] 47 48# taken from http://www.mcfedries.com/books/cightml/x11color.htm 49# colors=[ 50# "#DC143C", # Crimson 51# "#228B22", # ForestGreen 52# "#FF00FF", # Magenta 53# "#808000", # Olive 54# "#8B008B", # DarkMagenta 55# "#7B68EE", # MediumSlateBlue 56# "#DAA520", # Goldenrod 57# "#191970", # MidnightBlue 58# "#FFA500", # Orange 59# "#00CED1", # DarkTurquoise 60# "#8B4513", # SaddleBrown 61# "#8B0000", # DarkRed 62# "#808080", # Gray 63# ] 64 65# colors = [ 66# "aquamarine4", 67# "azure4", 68# "bisque3", 69# "blue1", 70# "brown", 71# "burlywood", 72# "cadetblue", 73# "chartreuse", 74# "chocolate", 75# "coral", 76# "cornflowerblue", 77# "cornsilk4", 78# "cyan3", 79# "darkgoldenrod3", 80# "darkolivegreen1", 81# "darkorange1", 82# "darkorchid1", 83# "darkseagreen", 84# "darkslateblue", 85# "darkslategray4", 86# "deeppink1", 87# "deepskyblue1", 88# "dimgrey", 89# "dodgerblue4", 90# "firebrick4", 91# "gold" 92# ] 93 94#colors = ["blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen"] 95 96dep_type = sys.argv[1] 97 98# open file 99f = open("dep.txt") 100 101entries_1 = dict() 102entries_2 = dict() 103 104# read first list until "---" 105i = 0; 106for line in f: 107 line = line.strip() 108 if line.startswith("---"): 109 break 110 entries_1[line] = [line+"_1", colors[i % len(colors)]] 111 entries_2[line] = [line+"_2", colors[i % len(colors)]] 112 i += 1 113 114# create 2d dict from list 115deps = dict() 116for entry in entries_1.keys(): 117 deps[entry] = dict() 118 e_dep = deps[entry] 119 for entry2 in entries_1.keys(): 120 e_dep[entry2] = dict() 121 e_dep[entry2]["base"] = 0 122 e_dep[entry2]["type"] = "x" 123 124# read rest of file 125for line in f: 126 line = line.strip() 127 parts = line.split(None) # split on whitespace 128 if line.startswith("#"): 129 continue 130 if len(parts) >= 3: 131 deps[parts[0]][parts[1]]["base"] = parts[2] 132 if parts[2] != 0 and len(parts) >= 4: 133 deps[parts[0]][parts[1]]["type"] = parts[3] 134 135f.close() 136 137# write dot graph header 138print "# process with: dot -Tpdf mydep2.dot -O -Gratio=0.5" 139print "digraph dep {" 140print "\tcolorscheme=x11;" 141 142# write actual dot content 143for dep1 in deps.keys(): 144 for dep2 in deps[dep1].keys(): 145 if deps[dep1][dep2]["base"] == "0": 146 # no dependency 147 continue 148 if dep_type != "a" and deps[dep1][dep2]["type"][0] != dep_type: 149 # HACK: [0] to deal with fb type 150 # we only want desired dependency 151 continue 152 if deps[dep1][dep2]["base"] == "1": 153 print entries_1[dep1][0], " -> ", entries_2[dep2][0], " [color=\"", entries_1[dep1][1], "\"][style=\"bold\"];" 154 elif deps[dep1][dep2]["base"] == "2": 155 print entries_1[dep1][0], " -> ", entries_2[dep2][0], " [color=\"", entries_1[dep1][1], "\"][style=\"dashed\"];" 156 else: 157 # this dependency hasn't been processed yet 158 continue 159# print entries_1[dep1], " -> ", entries_2[dep2], " [color=\"yellow\"];" 160 161# write dot graph footer 162print "}" 163 164