on master help sign in
Include file name in error messages
871cfd3Lorenzo
src/Hakyll/Web/Feed.hs+5−1
@@ -33,6 +33,7 @@ import Hakyll.Core.Compiler.Internal
33import Hakyll.Core.Item
33import Hakyll.Core.Item
34import Hakyll.Web.Template
34import Hakyll.Web.Template
35import Hakyll.Web.Template.Context
35import Hakyll.Web.Template.Context
36+import Hakyll.Web.Template.Internal
36import Hakyll.Web.Template.List
37import Hakyll.Web.Template.List
37
38
38
39
@@ -72,7 +73,10 @@ renderFeed feedPath itemPath config itemContext items = do
72 applyTemplate feedTpl feedContext body
73 applyTemplate feedTpl feedContext body
73 where
74 where
74 -- Auxiliary: load a template from a datafile
75 -- Auxiliary: load a template from a datafile
75− loadTemplate = fmap readTemplate . readFile <=< getDataFileName
76+ loadTemplate path = do
77+ file <- getDataFileName path
78+ templ <- readFile file
79+ return $ readTemplateFile file templ
76
80
77 itemContext' = mconcat
81 itemContext' = mconcat
78 [ itemContext
82 [ itemContext
src/Hakyll/Web/Template.hs+6−3
@@ -147,14 +147,16 @@ import Hakyll.Web.Template.Internal
147templateBodyCompiler :: Compiler (Item Template)
147templateBodyCompiler :: Compiler (Item Template)
148templateBodyCompiler = cached "Hakyll.Web.Template.templateBodyCompiler" $ do
148templateBodyCompiler = cached "Hakyll.Web.Template.templateBodyCompiler" $ do
149 item <- getResourceBody
149 item <- getResourceBody
150+ file <- getResourceFilePath
150− return $ fmap readTemplate item
151+ return $ fmap (readTemplateFile file) item
151
152
152--------------------------------------------------------------------------------
153--------------------------------------------------------------------------------
153-- | Read complete file contents as a template
154-- | Read complete file contents as a template
154templateCompiler :: Compiler (Item Template)
155templateCompiler :: Compiler (Item Template)
155templateCompiler = cached "Hakyll.Web.Template.templateCompiler" $ do
156templateCompiler = cached "Hakyll.Web.Template.templateCompiler" $ do
156 item <- getResourceString
157 item <- getResourceString
158+ file <- getResourceFilePath
157− return $ fmap readTemplate item
159+ return $ fmap (readTemplateFile file) item
158
160
159
161
160--------------------------------------------------------------------------------
162--------------------------------------------------------------------------------
@@ -259,5 +261,6 @@ applyAsTemplate :: Context String -- ^ Context
259 -> Item String -- ^ Item and template
261 -> Item String -- ^ Item and template
260 -> Compiler (Item String) -- ^ Resulting item
262 -> Compiler (Item String) -- ^ Resulting item
261applyAsTemplate context item =
263applyAsTemplate context item =
262− let tpl = readTemplate $ itemBody item
264+ let tpl = readTemplateFile file (itemBody item)
265+ file = toFilePath $ itemIdentifier item
263 in applyTemplate tpl context item
266 in applyTemplate tpl context item
src/Hakyll/Web/Template/Internal.hs+8−1
@@ -8,6 +8,7 @@ module Hakyll.Web.Template.Internal
8 , TemplateExpr (..)
8 , TemplateExpr (..)
9 , TemplateElement (..)
9 , TemplateElement (..)
10 , readTemplate
10 , readTemplate
11+ , readTemplateFile
11 ) where
12 ) where
12
13
13
14
@@ -120,10 +121,16 @@ instance Binary TemplateExpr where
120
121
121--------------------------------------------------------------------------------
122--------------------------------------------------------------------------------
122readTemplate :: String -> Template
123readTemplate :: String -> Template
124+readTemplate = readTemplateFile "{literal}"
125+
126+
127+--------------------------------------------------------------------------------
128+readTemplateFile :: FilePath -> String -> Template
123−readTemplate input = case P.parse topLevelTemplate "" input of
129+readTemplateFile file input = case P.parse topLevelTemplate file input of
124 Left err -> error $ "Cannot parse template: " ++ show err
130 Left err -> error $ "Cannot parse template: " ++ show err
125 Right t -> t
131 Right t -> t
126
132
133+
127--------------------------------------------------------------------------------
134--------------------------------------------------------------------------------
128topLevelTemplate :: P.Parser Template
135topLevelTemplate :: P.Parser Template
129topLevelTemplate = Template <$>
136topLevelTemplate = Template <$>