[go: up one dir, main page]

Menu

[390b88]: / dot / writer.py  Maximize  Restore  History

Download this file

75 lines (56 with data), 1.5 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
'''Dot writing.'''
from aterm import walker
class Writer(walker.Walker):
'''Walker which writes dot in aterm to a file stream.'''
def __init__(self, fp):
walker.Walker.__init__(self)
self.fp = fp
def write(self, dot):
self.writeGraph(*dot.args)
def writeGraph(self, nodes):
self.fp.write("digraph {\n")
for node in nodes:
self.writeNode(*node.args)
for node in nodes:
self.writeNodeEdges(*node.args)
self.fp.write("}")
def writeNode(self, id, attrs, edges):
self.writeId(id)
self.writeAttrs(attrs)
self.fp.write('\n')
def writeNodeEdges(self, src, attrs, edges):
for edge in edges:
self.writeEdge(src, *edge.args)
def writeEdge(self, src, dst, attrs):
self.writeId(src)
self.fp.write('->')
self.writeId(dst)
self.writeAttrs(attrs)
self.fp.write('\n')
def writeAttrs(self, attrs):
self.fp.write('[')
sep = ''
for attr in attrs:
self.fp.write(sep)
self.writeAttr(*attr.args)
sep = ','
self.fp.write(']')
def writeAttr(self, name, value):
self.writeId(name)
self.fp.write('=')
self.writeId(value)
def writeId(self, id):
self.fp.write(str(id.value))
def write(dot, fp):
'''Write the dot in aterm to a file stream.'''
writer = Writer(fp)
writer.write(dot)
def stringify(dot):
'''Convert the dot in aterm to a string.'''
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
fp = StringIO()
write(dot, fp)
return fp.getvalue()