chiark / gitweb /
graph faffing, now knows who's king
[familyTree.git] / cgiFiles / make_dot.py
index 8006a79b636b1d32f6f2ed73087a505f1f0316a0..abf3071dfd4d90829524e668e29bc53848c20e8d 100755 (executable)
@@ -4,6 +4,10 @@ import cgi
 import cgitb
 import gv
 import re
+import sys
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import askQuestion as aQ
+
 
 cgitb.enable()
 def add_quotes(s):
@@ -105,6 +109,7 @@ def add_subgraphs():
 
 def end_dot():
        global dot
+
         dot = dot + "}"
 
 def start_dot(fs):
@@ -117,16 +122,35 @@ def start_dot(fs):
        edges=[]
        cNodes={}
        dot = "digraph G{\n"
-       dot = dot + "ranksep = 0.5 nodesep = 0\n"
+       dot = dot + "ranksep = 0.2 nodesep = 0\n"
        subgraphs=[]
        set_attr(fs)
 
 def add_highlight(name):
-       add_node(name,highlight_attr)
+       global dot
 
-def add_person(name):
-       add_node(name,person_attr)
+       add_person(name)
+       dot = dot +'\n'\
+       'subgraph clusterhl {'+add_quotes(name)+';\n'
+       for a in highlight_attr:
+               dot = dot + a[0] + '=' +a[1] +';\n'
+       dot = dot + '}'
+       
 
+def add_person(name):
+       try:
+               k=aQ.isKing(name)
+       except:
+               k=0
+       ln = name.replace(', ','\\n')
+       ln = ln.replace(',','\\n')
+       ln = ln.replace(' ','\\n')
+       myLabel = '"'+str(ln)+'"'
+
+       if k==1:
+                add_node(name,king_attr+[('label',myLabel)])
+       else:
+               add_node(name,person_attr+[('label',myLabel)])
 def add_spot(name):
        add_node(name,spot_attr)
 
@@ -134,6 +158,7 @@ def add_spot(name):
 def set_attr(fs):
        global person_attr
         global highlight_attr
+       global king_attr
         global spot_attr
         global edge_attr
         global invis_attr
@@ -143,9 +168,14 @@ def set_attr(fs):
        global debug_attr
        global debug_edge_attr
        zero_size = [('width','0'),('height','0')]
-        person_attr = [('fontsize',str(fs)),('shape','plaintext')] + zero_size
-       highlight_attr = person_attr + \
-               [('fontcolor','red'),('shape','box'),('color','red')]
+        person_attr = [('fontsize',str(fs))]+\
+               [('shape','plaintext'),('margin','0.1'),\
+               ('style','filled'),('fillcolor','white')] +\
+               zero_size
+       highlight_attr =  \
+               [('shape','box'),('color','red'),('style','filled')]
+       king_attr = person_attr +\
+               [('fontcolor','purple4'),('shape','house'),('color','purple4')]
        debug_attr = person_attr + [('fontcolor','green')]
        spot_attr = [('shape','point')] + zero_size
        edge_attr = [('len','0'),('arrowsize','0.5')]
@@ -167,6 +197,11 @@ def attr_string(attr):
        return attr_str
 
 def render_dot():
+
+       f = open('tempfile','w')
+       f.write(dot)
+       f.close
+
        gvv = gv.readstring(dot)
         gv.layout(gvv,'dot')