Mercurial > evolve
diff docs/tutorial/mypandocfilters/graphviz-file.py @ 3376:aad37ffd7d58
doc: import the training support
Import the training support which was stored in a private-repository before.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Mon, 08 Jan 2018 11:46:53 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/tutorial/mypandocfilters/graphviz-file.py Mon Jan 08 11:46:53 2018 +0100 @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +""" +Pandoc filter to process code blocks with class "graphviz" into +graphviz-generated images. + +Needs pygraphviz +""" + +import os +import sys + +import pygraphviz + +from pandocfilters import toJSONFilter, Para, Image, get_filename4code, get_caption, get_extension, get_value + +def graphviz(key, value, format, _): + if key == 'CodeBlock': + [[ident, classes, keyvals], file] = value + if "graphviz-file" in classes: + caption, typef, keyvals = get_caption(keyvals) + prog, keyvals = get_value(keyvals, u"prog", u"dot") + filetype = get_extension(format, "svg", html="svg", latex="pdf") + with open(file) as f: + code = f.read() + dest = get_filename4code("graphviz", code, filetype) + + if not os.path.isfile(dest): + g = pygraphviz.AGraph(string=code) + g.layout() + g.draw(dest, prog=prog) + sys.stderr.write('Created image ' + dest + '\n') + + return Para([Image([ident, ['graphviz'], keyvals], caption, [dest, typef])]) + +if __name__ == "__main__": + toJSONFilter(graphviz)