@@ -4,56 +4,57 @@ module Hakyll.Web.Template.Read
44 ( readTemplate
55 ) where
66
7+
78--------------------------------------------------------------------------------
8−import Control.Applicative ((<$>), (<$), (<*>))
9−import Control.Monad (void, mzero)
9+import Control.Applicative ((<$), (<$>))
10+import Control.Monad (void)
1011import Text.Parsec
1112import Text.Parsec.String
1213
14+
1315--------------------------------------------------------------------------------
16+import Hakyll.Core.Util.Parser
1417import Hakyll.Web.Template.Internal
1518
16−--------------------------------------------------------------------------------
1719
20+--------------------------------------------------------------------------------
1821readTemplate :: String -> Template
19−readTemplate input =
20− case parse template "" input of
22+readTemplate input = case parse template "" input of
2123 Left err -> error $ "Cannot parse template: " ++ show err
2224 Right t -> t
2325
26+
27+--------------------------------------------------------------------------------
2428template :: Parser Template
25−template = Template <$>
26− (many1 $ chunk <|> escaped <|> conditional <|> key)
29+template = Template <$> (many1 $ chunk <|> escaped <|> conditional <|> key)
30+
2731
32+--------------------------------------------------------------------------------
2833chunk :: Parser TemplateElement
2934chunk = Chunk <$> (many1 $ noneOf "$")
3035
36+
37+--------------------------------------------------------------------------------
3138escaped :: Parser TemplateElement
3239escaped = Escaped <$ (try $ string "$$")
3340
41+
42+--------------------------------------------------------------------------------
3443conditional :: Parser TemplateElement
3544conditional = try $ do
36− void $ string "$if("
37− i <- ident
38− void $ string ")$"
39− thenBranch <- template
40− elseBranch <- optionMaybe $ try (string "$else$") >> template
41− void $ string "$endif$"
42− return $ If i thenBranch elseBranch
43−
44−ident :: Parser String
45−ident = do
46− i <- (:) <$> letter <*> (many $ alphaNum <|> oneOf " _-.")
47− if i `elem` reserved
48− then mzero
49− else return i
50−
51−reserved :: [String]
52−reserved = ["if", "else","endif"]
45+ void $ string "$if("
46+ i <- metadataKey
47+ void $ string ")$"
48+ thenBranch <- template
49+ elseBranch <- optionMaybe $ try (string "$else$") >> template
50+ void $ string "$endif$"
51+ return $ If i thenBranch elseBranch
52+
5353
54+--------------------------------------------------------------------------------
5455key :: Parser TemplateElement
5556key = try $ do
56− void $ char '$'
57− k <- ident
58− void $ char '$'
59− return $ Key k
57+ void $ char '$'
58+ k <- metadataKey
59+ void $ char '$'
60+ return $ Key k