@@ -21,14 +21,18 @@ readTemplate = Template . readTemplate'
2121 readTemplate' [] = []
2222 readTemplate' string
2323 | "$$" `isPrefixOf` string =
24− EscapeCharacter : (readTemplate' $ drop 2 string)
24+ let (key, rest) = readIdentifier $ drop 2 string
25+ in Escaped key : readTemplate' rest
2526 | "$" `isPrefixOf` string =
26− let (key, rest) = span isAlphaNum $ drop 1 string
27+ let (key, rest) = readIdentifier $ drop 1 string
2728 in Identifier key : readTemplate' rest
2829 | otherwise =
2930 let (chunk, rest) = break (== '$') string
3031 in Chunk chunk : readTemplate' rest
3132
33+ -- Parse an identifier into (identifier, rest)
34+ readIdentifier = span isAlphaNum
35+
3236-- | Substitutes @$identifiers@ in the given @Template@ by values from the given
3337-- "Page". When a key is not found, it is left as it is. You can specify
3438-- the characters used to replace escaped dollars (@$$@) here.
@@ -40,7 +44,7 @@ applyTemplate template page =
4044 substitute (Chunk chunk) = chunk
4145 substitute (Identifier key) =
4246 fromMaybe ('$' : key) $ M.lookup key $ toMap page
43− substitute (EscapeCharacter) = "$"
47+ substitute (Escaped key) = '$' : key
4448
4549-- | Apply a page as it's own template. This is often very useful to fill in
4650-- certain keys like @$root@ and @$url@.