1#!/usr/bin/env python 2 3""" 4Pandoc filter to process code blocks with class "graphviz" into 5graphviz-generated images. 6 7Needs pygraphviz 8""" 9 10import os 11import sys 12 13import pygraphviz 14 15from pandocfilters import toJSONFilter, Para, Image, get_filename4code, get_caption, get_extension, get_value 16 17def graphviz(key, value, format, _): 18 if key == 'CodeBlock': 19 [[ident, classes, keyvals], code] = value 20 if "graphviz" in classes: 21 caption, typef, keyvals = get_caption(keyvals) 22 prog, keyvals = get_value(keyvals, u"prog", u"dot") 23 filetype = get_extension(format, "png", html="png", latex="pdf") 24 dest = get_filename4code("graphviz", code, filetype) 25 26 if not os.path.isfile(dest): 27 g = pygraphviz.AGraph(string=code) 28 g.layout() 29 g.draw(dest, prog=prog) 30 sys.stderr.write('Created image ' + dest + '\n') 31 32 return Para([Image([ident, [], keyvals], caption, [dest, typef])]) 33 34if __name__ == "__main__": 35 toJSONFilter(graphviz) 36