1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
--------------------------------------------------------------------------------
-- | Module exporting convenientpandoc bindings
module Hakyll.Web.Pandoc
( -- * The basic building blocks
readPandoc
, readPandocWith
, writePandoc
, writePandocWith
, renderPandoc
, renderPandocWith
-- * Default options
, defaultHakyllParserState
, defaultHakyllWriterOptions
) where
--------------------------------------------------------------------------------
import Text.Pandoc
--------------------------------------------------------------------------------
import Hakyll.Core.Item
import Hakyll.Web.Pandoc.FileType
--------------------------------------------------------------------------------
-- | Read a string using pandoc, with the default options
readPandoc :: Item String -- ^ String to read
-> Item Pandoc -- ^ Resulting document
readPandoc = readPandocWith defaultHakyllParserState
--------------------------------------------------------------------------------
-- | Read a string using pandoc, with the supplied options
readPandocWith :: ParserState -- ^ Parser options
-> Item String -- ^ String to read
-> Item Pandoc -- ^ Resulting document
readPandocWith state item = fmap (reader state (itemFileType item)) item
where
reader s t = case t of
Html -> readHtml s
LaTeX -> readLaTeX s
LiterateHaskell t' -> reader s {stateLiterateHaskell = True} t'
Markdown -> readMarkdown s
Rst -> readRST s
Textile -> readTextile s
_ -> error $
"Hakyll.Web.readPandocWith: I don't know how to read a file of the " ++
"type " ++ show t ++ " for: " ++ show (itemIdentifier item)
--------------------------------------------------------------------------------
-- | Write a document (as HTML) using pandoc, with the default options
writePandoc :: Item Pandoc -- ^ Document to write
-> Item String -- ^ Resulting HTML
writePandoc = writePandocWith defaultHakyllWriterOptions
--------------------------------------------------------------------------------
-- | Write a document (as HTML) using pandoc, with the supplied options
writePandocWith :: WriterOptions -- ^ Writer options for pandoc
-> Item Pandoc -- ^ Document to write
-> Item String -- ^ Resulting HTML
writePandocWith options = fmap $ writeHtmlString options
--------------------------------------------------------------------------------
-- | Render the resource using pandoc
renderPandoc :: Item String -> Item String
renderPandoc =
renderPandocWith defaultHakyllParserState defaultHakyllWriterOptions
--------------------------------------------------------------------------------
-- | Render the resource using pandoc
renderPandocWith :: ParserState -> WriterOptions -> Item String -> Item String
renderPandocWith state options = writePandocWith options . readPandocWith state
--------------------------------------------------------------------------------
-- | The default reader options for pandoc parsing in hakyll
defaultHakyllParserState :: ParserState
defaultHakyllParserState = defaultParserState
{ -- The following option causes pandoc to read smart typography, a nice
-- and free bonus.
stateSmart = True
}
--------------------------------------------------------------------------------
-- | The default writer options for pandoc rendering in hakyll
defaultHakyllWriterOptions :: WriterOptions
defaultHakyllWriterOptions = defaultWriterOptions
{ -- This option causes literate haskell to be written using '>' marks in
-- html, which I think is a good default.
writerLiterateHaskell = True
}
|