diff --git a/src/Hakyll/Web/Template/Internal.hs b/src/Hakyll/Web/Template/Internal.hs index 89bda52..983bd16 100644 --- a/src/Hakyll/Web/Template/Internal.hs +++ b/src/Hakyll/Web/Template/Internal.hs @@ -141,7 +141,7 @@ template :: P.Parser Template template = mconcat <$> P.many (P.choice [ lift chunk , lift escaped , conditional - , lift for + , for , lift partial , lift expr ]) @@ -222,15 +222,27 @@ conditional = P.try $ do -------------------------------------------------------------------------------- -for :: P.Parser TemplateElement +for :: P.Parser Template for = P.try $ do - void $ P.string "$for(" + trimLFor <- trimOpen + void $ P.string "for(" e <- expr' - void $ P.string ")$" + void $ P.char ')' + trimRFor <- trimClose + body <- template sep <- P.optionMaybe $ P.try (P.string "$sep$") >> template - void $ P.string "$endfor$" - return $ For e body sep + + trimLEnd <- trimOpen + void $ P.string "endfor" + trimREnd <- trimClose + + pure $ Template $ mconcat [ [TrimL | trimLFor] + , [TrimR | trimRFor] + , [For e body sep] + , [TrimL | trimLEnd] + , [TrimR | trimREnd] + ] -------------------------------------------------------------------------------- diff --git a/tests/Hakyll/Web/Template/Tests.hs b/tests/Hakyll/Web/Template/Tests.hs index c1991a0..b6a3a1d 100644 --- a/tests/Hakyll/Web/Template/Tests.hs +++ b/tests/Hakyll/Web/Template/Tests.hs @@ -6,7 +6,6 @@ module Hakyll.Web.Template.Tests -------------------------------------------------------------------------------- -import Data.Monoid (mconcat) import Test.Framework (Test, testGroup) import Test.Framework.Providers.HUnit (testCase) import Test.HUnit (Assertion, (@=?), (@?=)) @@ -33,12 +32,12 @@ tests = testGroup "Hakyll.Core.Template.Tests" $ concat , fromAssertions "readTemplate" [ Template [Chunk "Hello ", Expr (Call "guest" [])] - @=? readTemplate "Hello $guest()$" + @=? readTemplate "Hello $guest()$" , Template [If (Call "a" [StringLiteral "bar"]) (Template [Chunk "foo"]) Nothing] - @=? readTemplate "$if(a(\"bar\"))$foo$endif$" + @=? readTemplate "$if(a(\"bar\"))$foo$endif$" -- 'If' trim check. , Template [ TrimL @@ -58,6 +57,17 @@ tests = testGroup "Hakyll.Core.Template.Tests" $ concat , TrimR ] @=? readTemplate "$-if(body)-$\n$body$\n$-else-$\n$body$\n$-endif-$" + -- 'For' trim check. + , Template + [ TrimL + , TrimR + , For (Ident (TemplateKey "authors")) + (Template [Chunk "\n body \n"]) + Nothing + , TrimL + , TrimR + ] + @=? readTemplate "$-for(authors)-$\n body \n$-endfor-$" ] ]