diff options
Diffstat (limited to 'plugins/DotPlugin.hs')
-rw-r--r-- | plugins/DotPlugin.hs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/plugins/DotPlugin.hs b/plugins/DotPlugin.hs new file mode 100644 index 000000000..db1a02e1c --- /dev/null +++ b/plugins/DotPlugin.hs @@ -0,0 +1,30 @@ +module DotPlugin (transform) where +import Text.Pandoc +import Text.Pandoc.Shared +import System.Process (readProcess) +import Data.Char (ord) +-- from the utf8-string package on HackageDB: +import Data.ByteString.Lazy.UTF8 (fromString) +-- from the SHA package on HackageDB: +import Data.Digest.Pure.SHA + +-- This plugin allows you to include a graphviz "dot" diagram +-- in a document like this: +-- +-- ~~~ {.dot name="diagram1"} +-- digraph G {Hello->World} +-- ~~~ + +transform :: Block -> IO Block +transform (CodeBlock (id, classes, namevals) contents) | "dot" `elem` classes = do + let (name, outfile) = case lookup "name" namevals of + Just fn -> ([Str fn], fn ++ ".png") + Nothing -> ([], uniqueName contents ++ ".png") + result <- readProcess "dot" ["-Tpng"] contents + writeFile outfile result + return $ Para [Image name (outfile, "")] +transform x = return x + +-- | Generate a unique filename given the file's contents. +uniqueName :: String -> String +uniqueName = showDigest . sha1 . fromString |