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