on master help sign in
Provide an arrow-based interface to Pandoc module
9d99edaJasper Van der Jeugt
src/Text/Hakyll/Pandoc.hs+19−20
@@ -7,7 +7,7 @@ module Text.Hakyll.Pandoc
7
7
8import Data.Maybe (fromMaybe)
8import Data.Maybe (fromMaybe)
9import qualified Data.Map as M
9import qualified Data.Map as M
10−import Control.Arrow (second, (>>>), arr)
10+import Control.Arrow (second, (>>>), arr, (&&&))
11
11
12import Text.Pandoc
12import Text.Pandoc
13
13
@@ -19,15 +19,15 @@ import Text.Hakyll.Context
19
19
20-- | Get a render function for a given extension.
20-- | Get a render function for a given extension.
21--
21--
22−getRenderFunction :: FileType -> Hakyll (String -> String)
22+getRenderFunction :: HakyllAction FileType (String -> String)
23+getRenderFunction = createHakyllAction $ \fileType -> case fileType of
23−getRenderFunction Html = return id
24+ Html -> return id
24−getRenderFunction Text = return id
25+ Text -> return id
25−getRenderFunction UnknownFileType = return id
26+ UnknownFileType -> return id
26−getRenderFunction fileType = do
27− parserState <- askHakyll pandocParserState
27+ _ -> do parserState <- askHakyll pandocParserState
28− writerOptions <- askHakyll pandocWriterOptions
28+ writerOptions <- askHakyll pandocWriterOptions
29− return $ writeHtmlString writerOptions
29+ return $ writeHtmlString writerOptions
30− . readFunction fileType (readOptions parserState fileType)
30+ . readFunction fileType (readOptions parserState fileType)
31 where
31 where
32 readFunction ReStructuredText = readRST
32 readFunction ReStructuredText = readRST
33 readFunction LaTeX = readLaTeX
33 readFunction LaTeX = readLaTeX
@@ -42,17 +42,16 @@ getRenderFunction fileType = do
42-- | An action that renders the list of page sections to a context using pandoc
42-- | An action that renders the list of page sections to a context using pandoc
43--
43--
44renderAction :: HakyllAction [PageSection] Context
44renderAction :: HakyllAction [PageSection] Context
45−renderAction = createHakyllAction $ \sections -> do
45+renderAction = (arr id &&& (getFileType' >>> getRenderFunction))
46+ >>> renderActionWith
47+ where
46− let path = fromMaybe "unknown" $ lookup "path"
48+ getFileType' = arr $ getFileType . fromMaybe "unknown" . lookup "path"
47− $ map (\(x, y, _) -> (x, y))
48− $ map unPageSection sections
49+ . map (\(x, y, _) -> (x, y)) . map unPageSection
49− render' <- getRenderFunction $ getFileType path
50− runHakyllAction $ arr (const sections) >>> renderActionWith render'
51
50
52-- | An action to render pages, offering just a little more flexibility
51-- | An action to render pages, offering just a little more flexibility
53--
52--
54−renderActionWith :: (String -> String) -> HakyllAction [PageSection] Context
53+renderActionWith :: HakyllAction ([PageSection], String -> String) Context
55−renderActionWith render' = createHakyllAction $ \sections -> return $
54+renderActionWith = createHakyllAction $ \(sections, render') -> return $
56− Context $ M.fromList $ map (renderTriple . unPageSection) sections
55+ Context $ M.fromList $ map (renderTriple render' . unPageSection) sections
57 where
56 where
58− renderTriple (k, v, r) = second (if r then render' else id) (k, v)
57+ renderTriple render' (k, v, r) = second (if r then render' else id) (k, v)