@@ -0,0 +1,67 @@
1+#!/usr/bin/env python
2+
3+"""
4+Pandoc filter to process raw latex tikz environments into images.
5+Assumes that pdflatex is in the path, and that the standalone
6+package is available. Also assumes that ImageMagick's convert
7+is in the path. Images are put in the tikz-images directory.
8+"""
9+
10+import hashlib
11+import re
12+import os
13+import sys
14+import shutil
15+from pandoc import toJSONFilter
16+from subprocess import Popen, PIPE, call
17+from tempfile import mkdtemp
18+
19+imagedir = "tikz-images"
20+
21+def sha1(x):
22+ return hashlib.sha1(x).hexdigest()
23+
24+def tikz2image(tikz, filetype, outfile):
25+ tmpdir = mkdtemp()
26+ olddir = os.getcwd()
27+ os.chdir(tmpdir)
28+ f = open('tikz.tex', 'w')
29+ f.write("""\\documentclass{standalone}
30+ \\usepackage{tikz}
31+ \\begin{document}
32+ """)
33+ f.write(tikz)
34+ f.write("\n\\end{document}\n")
35+ f.close()
36+ p = call(["pdflatex", 'tikz.tex'], stdout=sys.stderr)
37+ os.chdir(olddir)
38+ if filetype == 'pdf':
39+ shutil.copyfile(tmpdir + '/tikz.pdf', outfile + '.pdf')
40+ else:
41+ call(["convert", tmpdir + '/tikz.pdf', outfile + '.' + filetype])
42+ shutil.rmtree(tmpdir)
43+
44+def tikz(key, value, format):
45+ if key == 'RawBlock':
46+ [fmt, code] = value
47+ if fmt['unFormat'] == "latex" and re.match("\\\\begin{tikzpicture}", code):
48+ outfile = imagedir + '/' + sha1(code)
49+ if format == "html":
50+ filetype = "png"
51+ elif format == "latex":
52+ filetype = "pdf"
53+ else:
54+ filetype = "png"
55+ src = outfile + '.' + filetype
56+ if not os.path.isfile(src):
57+ try:
58+ os.mkdir(imagedir)
59+ sys.stderr.write('Created directory ' + imagedir + '\n')
60+ except OSError:
61+ pass
62+ tikz2image(code, filetype, outfile)
63+ sys.stderr.write('Created image ' + src + '\n')
64+ return {'Para': [{'Image': [[], [src,""]]}]}
65+
66+if __name__ == "__main__":
67+ toJSONFilter(tikz)