From 359f1109745afbfb1a38754576ba875a406de122 Mon Sep 17 00:00:00 2001 From: fiddlosopher Date: Thu, 31 Dec 2009 01:12:03 +0000 Subject: Fixed markdown writer to use templates. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1696 788f1e2b-df1e-0410-8736-df70ead52e1b --- src/Text/Pandoc/Writers/Markdown.hs | 52 ++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 24 deletions(-) (limited to 'src/Text') diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs index e95b139a6..305b71310 100644 --- a/src/Text/Pandoc/Writers/Markdown.hs +++ b/src/Text/Pandoc/Writers/Markdown.hs @@ -31,6 +31,7 @@ Markdown: -} module Text.Pandoc.Writers.Markdown ( writeMarkdown) where import Text.Pandoc.Definition +import Text.Pandoc.Templates import Text.Pandoc.Shared import Text.Pandoc.Blocks import Text.ParserCombinators.Parsec ( parse, GenParser ) @@ -45,33 +46,36 @@ type WriterState = (Notes, Refs) -- | Convert Pandoc to Markdown. writeMarkdown :: WriterOptions -> Pandoc -> String writeMarkdown opts document = - render $ evalState (pandocToMarkdown opts document) ([],[]) + evalState (pandocToMarkdown opts document) ([],[]) -- | Return markdown representation of document. -pandocToMarkdown :: WriterOptions -> Pandoc -> State WriterState Doc +pandocToMarkdown :: WriterOptions -> Pandoc -> State WriterState String pandocToMarkdown opts (Pandoc meta blocks) = do - return empty -- TODO --- let before = writerIncludeBefore opts --- let after = writerIncludeAfter opts --- let header = writerHeader opts --- let before' = if null before then empty else text before --- let after' = if null after then empty else text after --- let header' = if null header then empty else text header --- metaBlock <- metaToMarkdown opts meta --- let head' = if writerStandalone opts --- then metaBlock $+$ header' --- else empty --- let headerBlocks = filter isHeaderBlock blocks --- let toc = if writerTableOfContents opts --- then tableOfContents opts headerBlocks --- else empty --- body <- blockListToMarkdown opts blocks --- (notes, _) <- get --- notes' <- notesToMarkdown opts (reverse notes) --- (_, refs) <- get -- note that the notes may contain refs --- refs' <- keyTableToMarkdown opts (reverse refs) --- return $ head' $+$ before' $+$ toc $+$ body $+$ text "" $+$ --- notes' $+$ text "" $+$ refs' $+$ after' + metaBlock <- metaToMarkdown opts meta + let head' = if writerStandalone opts + then metaBlock + else empty + let headerBlocks = filter isHeaderBlock blocks + let toc = if writerTableOfContents opts + then tableOfContents opts headerBlocks + else empty + body <- blockListToMarkdown opts blocks + (notes, _) <- get + notes' <- notesToMarkdown opts (reverse notes) + (_, refs) <- get -- note that the notes may contain refs + refs' <- keyTableToMarkdown opts (reverse refs) + let context = writerVariables opts ++ + [ ("toc", render toc) + , ("body", render $ body $+$ text "" $+$ notes' $+$ + text "" $+$ refs') + , ("titleblock", render head') + ] + let templ = if writerStandalone opts + then writerTemplate opts + else "$if(toc)$$toc$\n$endif$" ++ + "$if(before)$$before$\n$endif$" ++ + "$body$$if(after)$$after$\n$endif$" + return $ renderTemplate context templ -- | Return markdown representation of reference key table. keyTableToMarkdown :: WriterOptions -> KeyTable -> State WriterState Doc -- cgit v1.2.3