Merge pull request #451 from lortabac/master

Include file name in error messages
This commit is contained in:
Jasper Van der Jeugt 2016-07-23 16:04:17 +02:00 committed by GitHub
commit 68e9c77042
3 changed files with 19 additions and 5 deletions

View file

@ -33,6 +33,7 @@ import Hakyll.Core.Compiler.Internal
import Hakyll.Core.Item import Hakyll.Core.Item
import Hakyll.Web.Template import Hakyll.Web.Template
import Hakyll.Web.Template.Context import Hakyll.Web.Template.Context
import Hakyll.Web.Template.Internal
import Hakyll.Web.Template.List import Hakyll.Web.Template.List
@ -72,7 +73,10 @@ renderFeed feedPath itemPath config itemContext items = do
applyTemplate feedTpl feedContext body applyTemplate feedTpl feedContext body
where where
-- Auxiliary: load a template from a datafile -- Auxiliary: load a template from a datafile
loadTemplate = fmap readTemplate . readFile <=< getDataFileName loadTemplate path = do
file <- getDataFileName path
templ <- readFile file
return $ readTemplateFile file templ
itemContext' = mconcat itemContext' = mconcat
[ itemContext [ itemContext

View file

@ -147,14 +147,16 @@ import Hakyll.Web.Template.Internal
templateBodyCompiler :: Compiler (Item Template) templateBodyCompiler :: Compiler (Item Template)
templateBodyCompiler = cached "Hakyll.Web.Template.templateBodyCompiler" $ do templateBodyCompiler = cached "Hakyll.Web.Template.templateBodyCompiler" $ do
item <- getResourceBody item <- getResourceBody
return $ fmap readTemplate item file <- getResourceFilePath
return $ fmap (readTemplateFile file) item
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- | Read complete file contents as a template -- | Read complete file contents as a template
templateCompiler :: Compiler (Item Template) templateCompiler :: Compiler (Item Template)
templateCompiler = cached "Hakyll.Web.Template.templateCompiler" $ do templateCompiler = cached "Hakyll.Web.Template.templateCompiler" $ do
item <- getResourceString item <- getResourceString
return $ fmap readTemplate item file <- getResourceFilePath
return $ fmap (readTemplateFile file) item
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -259,5 +261,6 @@ applyAsTemplate :: Context String -- ^ Context
-> Item String -- ^ Item and template -> Item String -- ^ Item and template
-> Compiler (Item String) -- ^ Resulting item -> Compiler (Item String) -- ^ Resulting item
applyAsTemplate context item = applyAsTemplate context item =
let tpl = readTemplate $ itemBody item let tpl = readTemplateFile file (itemBody item)
file = toFilePath $ itemIdentifier item
in applyTemplate tpl context item in applyTemplate tpl context item

View file

@ -8,6 +8,7 @@ module Hakyll.Web.Template.Internal
, TemplateExpr (..) , TemplateExpr (..)
, TemplateElement (..) , TemplateElement (..)
, readTemplate , readTemplate
, readTemplateFile
) where ) where
@ -120,10 +121,16 @@ instance Binary TemplateExpr where
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
readTemplate :: String -> Template readTemplate :: String -> Template
readTemplate input = case P.parse topLevelTemplate "" input of readTemplate = readTemplateFile "{literal}"
--------------------------------------------------------------------------------
readTemplateFile :: FilePath -> String -> Template
readTemplateFile file input = case P.parse topLevelTemplate file input of
Left err -> error $ "Cannot parse template: " ++ show err Left err -> error $ "Cannot parse template: " ++ show err
Right t -> t Right t -> t
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
topLevelTemplate :: P.Parser Template topLevelTemplate :: P.Parser Template
topLevelTemplate = Template <$> topLevelTemplate = Template <$>