8 sys.path.append('/home/naath/familyTreeProject/familyTree')
9 import askQuestion as aQ
14 return '\"'+str(s)+'\"'
16 def add_node(node,node_attr):
19 node_attr = attr_string(node_attr)
21 dot = dot + add_quotes(node) + node_attr + ";\n"
30 edge[0] = add_quotes(edge[0])
31 edge[1] = add_quotes(edge[1])
37 def add_edge(n1,n2,edge_attr):
40 edge = (add_quotes(n1),add_quotes(n2))
41 edge_attr = attr_string(edge_attr)
43 dot = dot + edge[0] + ' -> ' + edge[1] + edge_attr + ";"
47 add_edge(n1,n2,edge_attr)
49 def add_no_arrow(n1,n2):
50 add_edge(n1,n2,nodir_attr)
52 def add_marriage(n1,n2,children,joinChildren):
65 if len(children)>0 and joinChildren==1:
67 tcNode = cNode + children[0]
69 if cNodes.has_key(cNode):
70 if not has_node(tcNode):
71 if len(cNodes[cNode])>0:
72 last = cNodes[cNode][-1]
74 cNodes[cNode].append(tcNode)
75 add_no_arrow(last,tcNode)
76 add_subgraph([tcNode,last])
79 cNodes[cNode] = [tcNode]
80 add_no_arrow(jN,tcNode)
90 add_edge(n,jN,marriage_attr)
94 def add_subgraph(myG):
101 line = "\n{rank=same "
104 line = line +add_quotes(n) + ' '
125 dot = dot + "ranksep = 0.2 nodesep = 0.1\n"
129 def add_highlight(name):
134 'subgraph clusterhl {'+add_quotes(name)+';\n'
135 for a in highlight_attr:
136 dot = dot + a[0] + '=' +a[1] +';\n'
140 def add_person(name):
145 ln = name.replace(', ','\\n')
146 ln = ln.replace(',','\\n')
147 ln = ln.replace(' ','\\n')
148 myLabel = '"'+str(ln)+'"'
151 add_node(name,king_attr+[('label',myLabel)])
153 add_node(name,person_attr+[('label',myLabel)])
155 add_node(name,spot_attr)
160 global highlight_attr
169 global debug_edge_attr
170 zero_size = [('width','0'),('height','0')]
171 person_attr = [('fontsize',str(fs))]+\
172 [('shape','plaintext'),('margin','0'),\
173 ('style','filled'),('fillcolor','white')] +\
176 [('shape','box'),('color','red'),('style','filled')]
177 king_attr = person_attr +\
178 [('fontcolor','purple4'),('shape','house'),('color','purple4')]
179 debug_attr = person_attr + [('fontcolor','green')]
180 spot_attr = [('shape','point')] + zero_size
181 edge_attr = [('len','0'),('arrowsize','0.5')]
182 debug_edge_attr = edge_attr + [('color','green')]
183 invis_attr = edge_attr + [('style','invis')]
184 nodir_attr = edge_attr + [('dir','none')]
185 marriage_attr = nodir_attr + [('weight','10'),('color','red')]
186 ignored_attr =edge_attr + [('constraint','false')] + nodir_attr
188 def attr_string(attr):
192 attr_str = attr_str + a[0] + '=' + a[1]
194 attr_str = attr_str +','
196 attr_str = attr_str + ']'
201 f = open('tempfile','w')
205 gvv = gv.readstring(dot)
210 print "Content-type: image/" + format + "\n"
211 print gv.render(gvv,format)