blob: 3bd9bb53d717444c6c525028bd504b9abb43f058 (
plain)
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
|
-- | Support for Hamlet templates in Hakyll.
--
module Text.Hakyll.Internal.Template.Hamlet
( isHamletRTFile
, readHamletRT
, fromHamletRT
) where
import Control.Monad.Trans (liftIO)
import System.FilePath (takeExtension)
import Text.Hamlet.RT
import Text.Hakyll.Internal.Template.Template
import Text.Hakyll.HakyllMonad (Hakyll, askHakyll, hamletSettings)
-- | Determine if a file is a hamlet template by extension.
--
isHamletRTFile :: FilePath -> Bool
isHamletRTFile fileName = takeExtension fileName `elem` [".hamlet", ".hml"]
-- | Read a 'HamletRT' by file name.
--
readHamletRT :: FilePath -- ^ Filename of the template
-> Hakyll HamletRT -- ^ Resulting hamlet template
readHamletRT fileName = do
settings <- askHakyll hamletSettings
string <- liftIO $ readFile fileName
liftIO $ parseHamletRT settings string
-- | Convert a 'HamletRT' to a 'Template'
--
fromHamletRT :: HamletRT -- ^ Hamlet runtime template
-> Template -- ^ Hakyll template
fromHamletRT (HamletRT sd) = Template $ map fromSimpleDoc sd
where
fromSimpleDoc :: SimpleDoc -> TemplateElement
fromSimpleDoc (SDRaw chunk) = Chunk chunk
fromSimpleDoc (SDVar [var]) = Identifier var
fromSimpleDoc (SDVar _) =
error "Hakyll does not support '.' in identifier names when using \
\hamlet templates."
fromSimpleDoc _ =
error "Only simple $key$ identifiers are allowed when using hamlet \
\templates."
|