docs/tutorial/mypandocfilters/graphviz-file.py
author Pulkit Goyal <7895pulkit@gmail.com>
Sat, 24 Mar 2018 13:17:05 +0530
changeset 3630 2789c0ec2ad7
parent 3376 aad37ffd7d58
permissions -rwxr-xr-x
evolve: move logic to complete interrupted relocation to new fn This moves logic which completed the interrupted relocation to it's own separate function as we will need that function in continuing phase-divergence and content-divergence too.

#!/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)