diff options
author | Jasper Van der Jeugt <jaspervdj@gmail.com> | 2010-10-04 01:20:17 +0200 |
---|---|---|
committer | Jasper Van der Jeugt <jaspervdj@gmail.com> | 2010-10-04 01:20:17 +0200 |
commit | 08c4d74a2fe9c667e725f2ebb41bc01006a703a1 (patch) | |
tree | 4134171be17ce36ca109b7fc72d574a5c2113308 /src/Text/Hakyll/Pandoc.hs | |
parent | cd246971582639666bb1afe1b51bbd3db1ac744a (diff) | |
download | hakyll-08c4d74a2fe9c667e725f2ebb41bc01006a703a1.tar.gz |
Separate pandoc from page reading, general caching
Diffstat (limited to 'src/Text/Hakyll/Pandoc.hs')
-rw-r--r-- | src/Text/Hakyll/Pandoc.hs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/Text/Hakyll/Pandoc.hs b/src/Text/Hakyll/Pandoc.hs new file mode 100644 index 0000000..9dbe3d4 --- /dev/null +++ b/src/Text/Hakyll/Pandoc.hs @@ -0,0 +1,48 @@ +module Text.Hakyll.Pandoc where + +import Data.Maybe (fromMaybe) +import qualified Data.Map as M +import Control.Arrow (second) + +import Text.Pandoc + +import Text.Hakyll.Internal.FileType +import Text.Hakyll.Internal.Page +import Text.Hakyll.HakyllMonad +import Text.Hakyll.HakyllAction +import Text.Hakyll.Context + +-- | Get a render function for a given extension. +-- +getRenderFunction :: FileType -> Hakyll (String -> String) +getRenderFunction Html = return id +getRenderFunction Text = return id +getRenderFunction UnknownFileType = return id +getRenderFunction fileType = do + parserState <- askHakyll pandocParserState + writerOptions <- askHakyll pandocWriterOptions + return $ writeHtmlString writerOptions + . readFunction fileType (readOptions parserState fileType) + where + readFunction ReStructuredText = readRST + readFunction LaTeX = readLaTeX + readFunction Markdown = readMarkdown + readFunction LiterateHaskellMarkdown = readMarkdown + readFunction t = error $ "Cannot render " ++ show t + + readOptions options LiterateHaskellMarkdown = options + { stateLiterateHaskell = True } + readOptions options _ = options + +-- | Path must be there +-- +renderAction :: HakyllAction [PageSection] Context +renderAction = createHakyllAction $ \sections -> do + let triples = unPageSection =<< sections + path = fromMaybe "unknown" $ lookup "path" + $ map (\(x, y, _) -> (x, y)) + $ triples + render' <- getRenderFunction $ getFileType path + let pairs = map (\(k, v, r) -> second (if r then render' else id) (k, v)) + triples + return $ Context $ M.fromList pairs |