/
dot.py
43 lines (39 loc) · 1.28 KB
/
dot.py
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
"""
dot directive (require graphviz)
"""
from docutils import nodes
from docutils.parsers.rst import directives, Directive
import gv
#import subprocess as sp
nthUnnamed = 0
class Dot(Directive):
required_arguments = 0
optional_arguments = 1
has_content = True
final_argument_whitespace = True
'''dot image generator'''
def run(self):
self.assert_has_content()
# global nthUnnamed
# try:
# filename = self.arguments[0]
# except:
# filename = ('dot%d.png' % nthUnnamed)
# nthUnnamed += 1
# content = '\n'.join(self.content)
# filetype = filename[filename.rfind('.')+1:]
# args = ['dot', '-o'+filename, '-T'+filetype]
# dot = sp.Popen(args, 0, None, sp.PIPE)
# dot.stdin.write( content )
# dot.stdin.close()
# ret = dot.wait()
# if ret:
# return [nodes.error('some error occured')]
# else:
# return [nodes.raw('', '<img src="%s" alt="%s"/>'%(filename, filename), format='html')]
content = "\n".join(self.content).encode("utf-8")
graph = gv.readstring(content)
gv.layout(graph, 'dot')
res = gv.renderdata(graph, 'svg')
res = res[res.index('<svg'):]
return [nodes.raw('', res, format='html')]