@@ -68,7 +68,7 @@ module Text.Pandoc.Templates ( renderTemplate
68 , TemplateTarget
68 , TemplateTarget
69 , getDefaultTemplate ) where
69 , getDefaultTemplate ) where
71−import Text.Pandoc.Parsing
71+import Text.Parsec
72import Control.Monad (liftM, when, forM, mzero)
72import Control.Monad (liftM, when, forM, mzero)
73import System.FilePath
73import System.FilePath
74import Data.List (intercalate, intersperse)
74import Data.List (intercalate, intersperse)
@@ -98,7 +98,7 @@ getDefaultTemplate user writer = do
99data TemplateState = TemplateState Int [(String,String)]
99data TemplateState = TemplateState Int [(String,String)]
101−adjustPosition :: String -> Parser [Char] TemplateState String
101+adjustPosition :: String -> Parsec [Char] TemplateState String
102adjustPosition str = do
102adjustPosition str = do
103 let lastline = takeWhile (/= '\n') $ reverse str
103 let lastline = takeWhile (/= '\n') $ reverse str
104 updateState $ \(TemplateState pos x) ->
104 updateState $ \(TemplateState pos x) ->
@@ -132,21 +132,21 @@ renderTemplate vals templ =
132reservedWords :: [String]
132reservedWords :: [String]
133reservedWords = ["else","endif","for","endfor","sep"]
133reservedWords = ["else","endif","for","endfor","sep"]
135−parseTemplate :: Parser [Char] TemplateState [String]
135+parseTemplate :: Parsec [Char] TemplateState [String]
136parseTemplate =
136parseTemplate =
137 many $ (plaintext <|> escapedDollar <|> conditional <|> for <|> variable)
137 many $ (plaintext <|> escapedDollar <|> conditional <|> for <|> variable)
138 >>= adjustPosition
138 >>= adjustPosition
140−plaintext :: Parser [Char] TemplateState String
140+plaintext :: Parsec [Char] TemplateState String
141plaintext = many1 $ noneOf "$"
141plaintext = many1 $ noneOf "$"
143−escapedDollar :: Parser [Char] TemplateState String
143+escapedDollar :: Parsec [Char] TemplateState String
144escapedDollar = try $ string "$$" >> return "$"
144escapedDollar = try $ string "$$" >> return "$"
146−skipEndline :: Parser [Char] st ()
146+skipEndline :: Parsec [Char] st ()
147skipEndline = try $ skipMany (oneOf " \t") >> newline >> return ()
147skipEndline = try $ skipMany (oneOf " \t") >> newline >> return ()
149−conditional :: Parser [Char] TemplateState String
149+conditional :: Parsec [Char] TemplateState String
150conditional = try $ do
150conditional = try $ do
151 TemplateState pos vars <- getState
151 TemplateState pos vars <- getState
152 string "$if("
152 string "$if("
@@ -170,7 +170,7 @@ conditional = try $ do
170 then ifContents
170 then ifContents
171 else elseContents
171 else elseContents
173−for :: Parser [Char] TemplateState String
173+for :: Parsec [Char] TemplateState String
174for = try $ do
174for = try $ do
175 TemplateState pos vars <- getState
175 TemplateState pos vars <- getState
176 string "$for("
176 string "$for("
@@ -193,7 +193,7 @@ for = try $ do
193 setState $ TemplateState pos vars
193 setState $ TemplateState pos vars
194 return $ concat $ intersperse sep contents
194 return $ concat $ intersperse sep contents
196−ident :: Parser [Char] TemplateState String
196+ident :: Parsec [Char] TemplateState String
197ident = do
197ident = do
198 first <- letter
198 first <- letter
199 rest <- many (alphaNum <|> oneOf "_-")
199 rest <- many (alphaNum <|> oneOf "_-")
@@ -202,7 +202,7 @@ ident = do
202 then mzero
202 then mzero
203 else return id'
203 else return id'
205−variable :: Parser [Char] TemplateState String
205+variable :: Parsec [Char] TemplateState String
206variable = try $ do
206variable = try $ do
208 id' <- ident
208 id' <- ident