summaryrefslogtreecommitdiff
path: root/src/Hakyll/TeX/TikZ.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Hakyll/TeX/TikZ.hs')
-rw-r--r--src/Hakyll/TeX/TikZ.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/Hakyll/TeX/TikZ.hs b/src/Hakyll/TeX/TikZ.hs
new file mode 100644
index 0000000..9df98fd
--- /dev/null
+++ b/src/Hakyll/TeX/TikZ.hs
@@ -0,0 +1,29 @@
+module Hakyll.TeX.TikZ
+ ( TikzTemplate
+ , tikzfilter
+ , tikzBlockFilter
+ ) where
+
+import Network.URI.Encode qualified as URI
+import Text.Pandoc.Definition
+import Text.Pandoc.Walk (walkM)
+
+import Hakyll
+
+import Prolog
+
+import Hakyll.TeX.LaTeX (rubberPipe)
+
+type TikzTemplate = Identifier
+
+tikzFilter :: TikzTemplate -> Pandoc -> Compiler Pandoc
+tikzFilter = walkM tikzBlockFilter
+
+-- | Requires `rubber` and `poppler_utils`
+tikzBlockFilter :: TikzTemplate -> Block -> Compiler Block
+tikzBlockFilter tmpl (CodeBlock info@(_, "tikzpicture":_, _) contents) = do
+ let imageBlock fname = Para [ Image info [] (toSL fname, "") ]
+ makeItem (toSL contents) >>= loadAndApplyTemplate tmpl (bodyField "body") >>=
+ traverse (convSL $ rubberPipe [ "--pdf" ] >=> unixFilterLBS "pdftocairo" [ "-svg", "-", "-" ]) >>=
+ \(Item _ b) -> imageBlock $ ("data:image/svg+sml;utf8," <>) $ URI.encode $ filter (/= '\n') b
+tikzBlockFilter _ x = pure x