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