summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Hakyll/Web/Template/Internal.hs24
-rw-r--r--tests/Hakyll/Web/Template/Tests.hs16
2 files changed, 31 insertions, 9 deletions
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-$"
]
]