summaryrefslogtreecommitdiff
path: root/src/Hakyll/TeX/TikZ.hs
diff options
context:
space:
mode:
authorChris Wells <chris@mathematicaster.org>2024-12-30 21:23:52 -0600
committerChris Wells <chris@mathematicaster.org>2024-12-30 21:23:52 -0600
commit42a2d42eecf551dd1990c97c1ae2586cd46674be (patch)
tree873e80c07aca811167aa06caa19de7334c94048d /src/Hakyll/TeX/TikZ.hs
downloadmain-42a2d42eecf551dd1990c97c1ae2586cd46674be.tar
main-42a2d42eecf551dd1990c97c1ae2586cd46674be.tar.gz
main-42a2d42eecf551dd1990c97c1ae2586cd46674be.tar.bz2
main-42a2d42eecf551dd1990c97c1ae2586cd46674be.tar.lz
main-42a2d42eecf551dd1990c97c1ae2586cd46674be.tar.xz
main-42a2d42eecf551dd1990c97c1ae2586cd46674be.tar.zst
main-42a2d42eecf551dd1990c97c1ae2586cd46674be.zip
Started writing the main utilities for my webpage
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