mirror of
https://github.com/jgm/pandoc.git
synced 2026-10-02 04:07:56 +00:00
47 lines
1.1 KiB
Python
Executable File
47 lines
1.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
"""Pandoc filter to process code blocks with class "graphviz" into
|
|
graphviz-generated images.
|
|
"""
|
|
|
|
import pygraphviz
|
|
import hashlib
|
|
import os
|
|
import sys
|
|
from pandoc import toJSONFilter
|
|
|
|
def sha1(x):
|
|
return hashlib.sha1(x).hexdigest()
|
|
|
|
imagedir = "graphviz-images"
|
|
|
|
def graphviz(key, value, format):
|
|
if key == 'CodeBlock':
|
|
[[ident,classes,keyvals], code] = value
|
|
caption = "caption"
|
|
if "graphviz" in classes:
|
|
G = pygraphviz.AGraph(string = code)
|
|
G.layout()
|
|
filename = sha1(code)
|
|
if format == "html":
|
|
filetype = "png"
|
|
elif format == "latex":
|
|
filetype = "pdf"
|
|
else:
|
|
filetype = "png"
|
|
alt = [{'Str': caption}]
|
|
src = imagedir + '/' + filename + '.' + filetype
|
|
if not os.path.isfile(src):
|
|
try:
|
|
os.mkdir(imagedir)
|
|
sys.stderr.write('Created directory ' + imagedir + '\n')
|
|
except OSError:
|
|
pass
|
|
G.draw(src)
|
|
sys.stderr.write('Created image ' + src + '\n')
|
|
tit = ""
|
|
return {'Para': [{'Image': [alt, [src,tit]]}]}
|
|
|
|
if __name__ == "__main__":
|
|
toJSONFilter(graphviz)
|