summaryrefslogtreecommitdiff
path: root/src/Hakyll/TeX
diff options
context:
space:
mode:
Diffstat (limited to 'src/Hakyll/TeX')
-rw-r--r--src/Hakyll/TeX/BibTeX.hs16
-rw-r--r--src/Hakyll/TeX/HaTeX.hs3
-rw-r--r--src/Hakyll/TeX/TikZ.hs25
3 files changed, 31 insertions, 13 deletions
diff --git a/src/Hakyll/TeX/BibTeX.hs b/src/Hakyll/TeX/BibTeX.hs
index 434ca54..ddf9166 100644
--- a/src/Hakyll/TeX/BibTeX.hs
+++ b/src/Hakyll/TeX/BibTeX.hs
@@ -2,6 +2,7 @@
module Hakyll.TeX.BibTeX
( bibtexCompiler
, compileBibtex
+ , BibEntry
, BibTeX
) where
@@ -10,28 +11,29 @@ import Prolog
import Data.List qualified as L
import Hakyll
import Text.BibTeX.Entry qualified as B
-import Text.BibTeX.Format qualified as B
+import Text.BibTeX.Format qualified as BF
import Text.BibTeX.Parse qualified as B
import Text.Parsec qualified as P
-import Hakyll.Parsec.Parsec
+import Hakyll.Parsec
-type BibTeX = B.T
+type BibEntry = B.T
+type BibTeX = [BibEntry]
deriving instance Generic B.T
instance Binary B.T
instance Writable B.T where
- write p = write p . B.entry
+ write p = write p . fmap BF.entry
instance Writable [B.T] where
- write p = write p . fold . L.intersperse "\n" . fmap B.entry
+ write p = write p . fmap (fold . L.intersperse "\n" . fmap BF.entry)
-compileBibtex :: (StringConv s String) => Item s -> Compiler (Item [B.T])
+compileBibtex :: (StringConv s String) => Item s -> Compiler (Item BibTeX)
compileBibtex = compileParsec_ p . fmap toSL
where
p = B.skippingLeadingSpace $ B.file <* P.eof
-bibtexCompiler :: Compiler (Item [B.T])
+bibtexCompiler :: Compiler (Item BibTeX)
bibtexCompiler = getResourceBody >>= compileBibtex
diff --git a/src/Hakyll/TeX/HaTeX.hs b/src/Hakyll/TeX/HaTeX.hs
index c71ad09..790d57c 100644
--- a/src/Hakyll/TeX/HaTeX.hs
+++ b/src/Hakyll/TeX/HaTeX.hs
@@ -8,9 +8,10 @@ import Prolog
import Hakyll
import Hakyll.Error
-- import Hakyll.Parsec.Parsec
+import Text.LaTeX.Base
import Text.LaTeX.Base.Parser
-compileHatex :: (StringConv s Text, Traversable t, MonadError [String] m) => t s -> m (t LaTeX)
+compileHatex :: (StringConv s StrictText, Traversable t, MonadError [String] m) => t s -> m (t LaTeX)
compileHatex = traverse $ liftErr . parseLaTeX . toSL
hatexCompiler :: Compiler (Item LaTeX)
diff --git a/src/Hakyll/TeX/TikZ.hs b/src/Hakyll/TeX/TikZ.hs
index 9df98fd..c9087e7 100644
--- a/src/Hakyll/TeX/TikZ.hs
+++ b/src/Hakyll/TeX/TikZ.hs
@@ -1,7 +1,12 @@
+{-# LANGUAGE TemplateHaskell #-}
module Hakyll.TeX.TikZ
( TikzTemplate
- , tikzfilter
+ , tikzFilter
, tikzBlockFilter
+ -- * Using the default TikZ template
+ , tikzTemplate
+ , tikzFilter_
+ , tikzBlockFilter_
) where
import Network.URI.Encode qualified as URI
@@ -14,16 +19,26 @@ import Prolog
import Hakyll.TeX.LaTeX (rubberPipe)
-type TikzTemplate = Identifier
+type TikzTemplate = Template
tikzFilter :: TikzTemplate -> Pandoc -> Compiler Pandoc
-tikzFilter = walkM tikzBlockFilter
+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") >>=
+ makeItem (toSL contents) >>= applyTemplate tmpl (bodyField "body") >>=
traverse (convSL $ rubberPipe [ "--pdf" ] >=> unixFilterLBS "pdftocairo" [ "-svg", "-", "-" ]) >>=
- \(Item _ b) -> imageBlock $ ("data:image/svg+sml;utf8," <>) $ URI.encode $ filter (/= '\n') b
+ \(Item _ b) -> pure $ imageBlock $ ("data:image/svg+sml;utf8," <>) $ URI.encode $ filter (/= '\n') b
tikzBlockFilter _ x = pure x
+
+
+tikzTemplate :: TikzTemplate
+tikzTemplate = $(embedTemplate "templates/tikz.tex")
+
+tikzBlockFilter_ :: Block -> Compiler Block
+tikzBlockFilter_ = tikzBlockFilter tikzTemplate
+
+tikzFilter_ :: Pandoc -> Compiler Pandoc
+tikzFilter_ = tikzFilter tikzTemplate