@@ -4,56 +4,57 @@ module Hakyll.Web.Template.Read
4 ( readTemplate
4 ( readTemplate
7--------------------------------------------------------------------------------
8--------------------------------------------------------------------------------
8−import Control.Applicative ((<$>), (<$), (<*>))
9+import Control.Applicative ((<$), (<$>))
9−import Control.Monad (void, mzero)
10+import Control.Monad (void)
10import Text.Parsec
11import Text.Parsec
11import Text.Parsec.String
12import Text.Parsec.String
13--------------------------------------------------------------------------------
15--------------------------------------------------------------------------------
16+import Hakyll.Core.Util.Parser
14import Hakyll.Web.Template.Internal
17import Hakyll.Web.Template.Internal
16−--------------------------------------------------------------------------------
20+--------------------------------------------------------------------------------
18readTemplate :: String -> Template
21readTemplate :: String -> Template
20− case parse template "" input of
22+readTemplate input = case parse template "" input of
21 Left err -> error $ "Cannot parse template: " ++ show err
23 Left err -> error $ "Cannot parse template: " ++ show err
22 Right t -> t
24 Right t -> t
27+--------------------------------------------------------------------------------
24template :: Parser Template
28template :: Parser Template
25−template = Template <$>
26− (many1 $ chunk <|> escaped <|> conditional <|> key)
29+template = Template <$> (many1 $ chunk <|> escaped <|> conditional <|> key)
32+--------------------------------------------------------------------------------
28chunk :: Parser TemplateElement
33chunk :: Parser TemplateElement
29chunk = Chunk <$> (many1 $ noneOf "$")
34chunk = Chunk <$> (many1 $ noneOf "$")
37+--------------------------------------------------------------------------------
31escaped :: Parser TemplateElement
38escaped :: Parser TemplateElement
32escaped = Escaped <$ (try $ string "$$")
39escaped = Escaped <$ (try $ string "$$")
42+--------------------------------------------------------------------------------
34conditional :: Parser TemplateElement
43conditional :: Parser TemplateElement
35conditional = try $ do
44conditional = try $ do
36− void $ string "$if("
45+ void $ string "$if("
37− i <- ident
46+ i <- metadataKey
38− void $ string ")$"
47+ void $ string ")$"
39− thenBranch <- template
48+ thenBranch <- template
40− elseBranch <- optionMaybe $ try (string "$else$") >> template
49+ elseBranch <- optionMaybe $ try (string "$else$") >> template
41− void $ string "$endif$"
50+ void $ string "$endif$"
42− return $ If i thenBranch elseBranch
51+ return $ If i thenBranch elseBranch
44−ident :: Parser String
46− i <- (:) <$> letter <*> (many $ alphaNum <|> oneOf " _-.")
52−reserved = ["if", "else","endif"]
54+--------------------------------------------------------------------------------
54key :: Parser TemplateElement
55key :: Parser TemplateElement
55key = try $ do
56key = try $ do
56− void $ char '$'
57+ void $ char '$'
57− k <- ident
58+ k <- metadataKey
58− void $ char '$'
59+ void $ char '$'
59− return $ Key k
60+ return $ Key k