Created
March 12, 2019 08:23
-
-
Save giantneco/0d0a9af11d4d9ed766f260824aecc695 to your computer and use it in GitHub Desktop.
pandoc filter for packetdiag
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
""" | |
Pandoc filter to process code blocks with class "packetdiag" into | |
packetdiag-generated images. | |
""" | |
import os | |
import sys | |
import subprocess | |
from pandocfilters import toJSONFilter, Para, Image | |
from pandocfilters import get_filename4code, get_caption, get_extension | |
import cairosvg | |
PACKETDIAG_BIN = os.environ.get('PACKETDIAG_BIN', 'packetdiag') | |
def packetdiag(key, value, format_, _): | |
if key == 'CodeBlock': | |
[[ident, classes, keyvals], code] = value | |
if "packetdiag" in classes: | |
caption, typef, keyvals = get_caption(keyvals) | |
filename = get_filename4code("packetdiag", code) | |
filetype = get_extension(format_, "png", html="svg", latex="png") | |
src = filename + '.diag' | |
med = filename + '.svg' | |
dest = filename + '.' + filetype | |
if not os.path.isfile(dest): | |
txt = code.encode(sys.getfilesystemencoding()) | |
with open(src, "wb") as f: | |
f.write(txt) | |
subprocess.check_call(PACKETDIAG_BIN.split() + ["-T", "svg", src, "-o", med]) | |
sys.stderr.write('Created image ' + dest + '\n') | |
if filetype == 'png': | |
cairosvg.svg2png(url=med, write_to=dest) | |
return Para([Image([ident, [], keyvals], caption, [dest, typef])]) | |
def main(): | |
toJSONFilter(packetdiag) | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment