diff options
author | John MacFarlane <jgm@berkeley.edu> | 2019-12-17 11:59:29 -0800 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2019-12-17 11:59:52 -0800 |
commit | d0918627cafff1ce96c51df9963e3a25ce149cce (patch) | |
tree | 844221f3fe361c640388ee8f1976f889031f698c | |
parent | 80728c8b3122db1d7caedcce66310fb1924f5a91 (diff) | |
download | pandoc-d0918627cafff1ce96c51df9963e3a25ce149cce.tar.gz |
Improved --toc generation.
-rw-r--r-- | src/Text/Pandoc/Writers/CommonMark.hs | 8 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/Markdown.hs | 3 | ||||
-rw-r--r-- | src/Text/Pandoc/Writers/RTF.hs | 3 | ||||
-rw-r--r-- | test/command/toc.md | 56 |
4 files changed, 61 insertions, 9 deletions
diff --git a/src/Text/Pandoc/Writers/CommonMark.hs b/src/Text/Pandoc/Writers/CommonMark.hs index e2d2b8e4d..e189336b2 100644 --- a/src/Text/Pandoc/Writers/CommonMark.hs +++ b/src/Text/Pandoc/Writers/CommonMark.hs @@ -28,7 +28,7 @@ import Network.HTTP (urlEncode) import Text.Pandoc.Class (PandocMonad) import Text.Pandoc.Definition import Text.Pandoc.Options -import Text.Pandoc.Shared (capitalize, isHeaderBlock, isTightList, +import Text.Pandoc.Shared (capitalize, isTightList, linesToPara, onlySimpleTableCells, taskListItemToAscii, tshow) import Text.Pandoc.Templates (renderTemplate) import Text.Pandoc.Walk (walk, walkM) @@ -40,12 +40,10 @@ import Text.DocLayout (literal, render) -- | Convert Pandoc to CommonMark. writeCommonMark :: PandocMonad m => WriterOptions -> Pandoc -> m Text writeCommonMark opts (Pandoc meta blocks) = do - let headerBlocks = filter isHeaderBlock blocks toc <- if writerTableOfContents opts - then blocksToCommonMark opts - [ toTableOfContents opts headerBlocks ] + then blocksToCommonMark opts [ toTableOfContents opts blocks ] else return mempty - + let (blocks', notes) = runState (walkM processNotes blocks) [] notes' = if null notes then [] diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs index 2b6084255..e6d7579d3 100644 --- a/src/Text/Pandoc/Writers/Markdown.hs +++ b/src/Text/Pandoc/Writers/Markdown.hs @@ -208,9 +208,8 @@ pandocToMarkdown opts (Pandoc meta blocks) = do mmdTitleBlock metadata | otherwise -> empty Nothing -> empty - let headerBlocks = filter isHeaderBlock blocks toc <- if writerTableOfContents opts - then blockToMarkdown opts ( toTableOfContents opts headerBlocks ) + then blockToMarkdown opts ( toTableOfContents opts blocks ) else return mempty -- Strip off final 'references' header if markdown citations enabled let blocks' = if isEnabled Ext_citations opts diff --git a/src/Text/Pandoc/Writers/RTF.hs b/src/Text/Pandoc/Writers/RTF.hs index 08f0df0f8..6a40f75e2 100644 --- a/src/Text/Pandoc/Writers/RTF.hs +++ b/src/Text/Pandoc/Writers/RTF.hs @@ -103,8 +103,7 @@ writeRTF options doc = do (fmap literal . inlinesToRTF) meta' body <- blocksToRTF 0 AlignDefault blocks - toc <- blocksToRTF 0 AlignDefault - [toTableOfContents options $ filter isHeaderBlock blocks] + toc <- blocksToRTF 0 AlignDefault [toTableOfContents options blocks] let context = defField "body" body $ defField "spacer" spacer $(if writerTableOfContents options diff --git a/test/command/toc.md b/test/command/toc.md new file mode 100644 index 000000000..9185257de --- /dev/null +++ b/test/command/toc.md @@ -0,0 +1,56 @@ +``` +% pandoc -s --toc -t markdown +# A +## b +# B +## b + +::: interior +# C +## cc +# D +::: + +::: blue +# E +## e +::: +^D +- [A](#a) + - [b](#b) +- [B](#b-1) + - [b](#b-2) +- [E](#e) + - [e](#e-1) + +A += + +b +- + +B += + +b +- + +::: {.interior} +C += + +cc +-- + +D += +::: + +::: {.blue} +E += + +e +- +::: +``` |