Escaped carries allong it's escaped value
This commit is contained in:
parent
2d1225104c
commit
220e4b484c
2 changed files with 11 additions and 7 deletions
|
@ -21,14 +21,18 @@ readTemplate = Template . readTemplate'
|
||||||
readTemplate' [] = []
|
readTemplate' [] = []
|
||||||
readTemplate' string
|
readTemplate' string
|
||||||
| "$$" `isPrefixOf` string =
|
| "$$" `isPrefixOf` string =
|
||||||
EscapeCharacter : (readTemplate' $ drop 2 string)
|
let (key, rest) = readIdentifier $ drop 2 string
|
||||||
|
in Escaped key : readTemplate' rest
|
||||||
| "$" `isPrefixOf` string =
|
| "$" `isPrefixOf` string =
|
||||||
let (key, rest) = span isAlphaNum $ drop 1 string
|
let (key, rest) = readIdentifier $ drop 1 string
|
||||||
in Identifier key : readTemplate' rest
|
in Identifier key : readTemplate' rest
|
||||||
| otherwise =
|
| otherwise =
|
||||||
let (chunk, rest) = break (== '$') string
|
let (chunk, rest) = break (== '$') string
|
||||||
in Chunk chunk : readTemplate' rest
|
in Chunk chunk : readTemplate' rest
|
||||||
|
|
||||||
|
-- Parse an identifier into (identifier, rest)
|
||||||
|
readIdentifier = span isAlphaNum
|
||||||
|
|
||||||
-- | Substitutes @$identifiers@ in the given @Template@ by values from the given
|
-- | Substitutes @$identifiers@ in the given @Template@ by values from the given
|
||||||
-- "Page". When a key is not found, it is left as it is. You can specify
|
-- "Page". When a key is not found, it is left as it is. You can specify
|
||||||
-- the characters used to replace escaped dollars (@$$@) here.
|
-- the characters used to replace escaped dollars (@$$@) here.
|
||||||
|
@ -40,7 +44,7 @@ applyTemplate template page =
|
||||||
substitute (Chunk chunk) = chunk
|
substitute (Chunk chunk) = chunk
|
||||||
substitute (Identifier key) =
|
substitute (Identifier key) =
|
||||||
fromMaybe ('$' : key) $ M.lookup key $ toMap page
|
fromMaybe ('$' : key) $ M.lookup key $ toMap page
|
||||||
substitute (EscapeCharacter) = "$"
|
substitute (Escaped key) = '$' : key
|
||||||
|
|
||||||
-- | Apply a page as it's own template. This is often very useful to fill in
|
-- | Apply a page as it's own template. This is often very useful to fill in
|
||||||
-- certain keys like @$root@ and @$url@.
|
-- certain keys like @$root@ and @$url@.
|
||||||
|
|
|
@ -29,16 +29,16 @@ instance Writable Template where
|
||||||
data TemplateElement
|
data TemplateElement
|
||||||
= Chunk String
|
= Chunk String
|
||||||
| Identifier String
|
| Identifier String
|
||||||
| EscapeCharacter
|
| Escaped String
|
||||||
deriving (Show, Eq, Typeable)
|
deriving (Show, Eq, Typeable)
|
||||||
|
|
||||||
instance Binary TemplateElement where
|
instance Binary TemplateElement where
|
||||||
put (Chunk string) = putWord8 0 >> put string
|
put (Chunk string) = putWord8 0 >> put string
|
||||||
put (Identifier key) = putWord8 1 >> put key
|
put (Identifier key) = putWord8 1 >> put key
|
||||||
put (EscapeCharacter) = putWord8 2
|
put (Escaped key) = putWord8 2 >> put key
|
||||||
|
|
||||||
get = getWord8 >>= \tag -> case tag of
|
get = getWord8 >>= \tag -> case tag of
|
||||||
0 -> Chunk <$> get
|
0 -> Chunk <$> get
|
||||||
1 -> Identifier <$> get
|
1 -> Identifier <$> get
|
||||||
2 -> return EscapeCharacter
|
2 -> Escaped <$> get
|
||||||
_ -> error "Error reading cached template"
|
_ -> error "Error reading cached template"
|
||||||
|
|
Loading…
Reference in a new issue