Fixed markdown writer to use templates.

git-svn-id: https://pandoc.googlecode.com/svn/trunk@1696 788f1e2b-df1e-0410-8736-df70ead52e1b
This commit is contained in:
fiddlosopher 2009-12-31 01:12:03 +00:00
parent 858f728d43
commit 359f110974
2 changed files with 44 additions and 25 deletions

View file

@ -31,6 +31,7 @@ Markdown: <http://daringfireball.net/projects/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

View file

@ -1 +1,16 @@
TODO
$if(titleblock)$
$titleblock$
$endif$
$if(header-includes)$
$header-includes$
$endif$
$if(before)$
$before$
$endif$
$if(toc)$
$toc$
$endif$
$body$
$if(after)$
$after$
$endif$