module Hakyllbars.Template ( applyTemplates, applyContent, applyContentWith, fileTemplate, applyCompiler, applyContext, applyTemplate, applyAsTemplate, ) where import Control.Monad.State.Strict (evalStateT) import Hakyll (defaultHakyllReaderOptions, defaultHakyllWriterOptions) import Hakyllbars.Common import Hakyllbars.Compiler (applyAsTemplate, applyTemplate) import Hakyllbars.Context import Hakyllbars.Pandoc (pandocCompilerWith) import Text.Pandoc (ReaderOptions, WriterOptions) applyTemplates :: TemplateRunner a () -> Item a -> Compiler (Item a) applyTemplates :: forall a. TemplateRunner a () -> Item a -> Compiler (Item a) applyTemplates TemplateRunner a () templates Item a item = forall (m :: * -> *) s a. Monad m => StateT s m a -> s -> m a evalStateT (TemplateRunner a () templates forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> forall a. TemplateRunner a (Item a) tplItem) forall a b. (a -> b) -> a -> b $ TemplateState { tplContextStack :: [(Context a, Context a)] tplContextStack = [], tplItemStack :: [Item a] tplItemStack = [Item a item], tplCallStack :: [String] tplCallStack = [String "item " forall a. [a] -> [a] -> [a] ++ forall a. Item a -> String itemFilePath Item a item] } applyContent :: TemplateRunner String () applyContent :: TemplateRunner String () applyContent = ReaderOptions -> WriterOptions -> TemplateRunner String () applyContentWith ReaderOptions defaultHakyllReaderOptions WriterOptions defaultHakyllWriterOptions applyContentWith :: ReaderOptions -> WriterOptions -> TemplateRunner String () applyContentWith :: ReaderOptions -> WriterOptions -> TemplateRunner String () applyContentWith ReaderOptions readerOpts WriterOptions writerOpts = do TemplateRunner String () applyAsTemplate forall a. (Item a -> TemplateRunner a (Item a)) -> TemplateRunner a () tplModifyItem forall a b. (a -> b) -> a -> b $ forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift forall b c a. (b -> c) -> (a -> b) -> a -> c . ReaderOptions -> WriterOptions -> Item String -> Compiler (Item String) pandocCompilerWith ReaderOptions readerOpts WriterOptions writerOpts fileTemplate :: FilePath -> TemplateRunner String () fileTemplate :: String -> TemplateRunner String () fileTemplate String filePath = Identifier -> TemplateRunner String () applyTemplate (String -> Identifier fromFilePath String filePath) applyCompiler :: (Item a -> Compiler (Item a)) -> TemplateRunner a () applyCompiler :: forall a. (Item a -> Compiler (Item a)) -> TemplateRunner a () applyCompiler Item a -> Compiler (Item a) compiler = forall a. (Item a -> TemplateRunner a (Item a)) -> TemplateRunner a () tplModifyItem forall a b. (a -> b) -> a -> b $ forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift forall b c a. (b -> c) -> (a -> b) -> a -> c . Item a -> Compiler (Item a) compiler applyContext :: Context a -> TemplateRunner a () applyContext :: forall a. Context a -> TemplateRunner a () applyContext = forall a. Context a -> TemplateRunner a () tplPushContext {-# INLINE applyContext #-}