From 68b09a6d81b24b928b1629ecb3061a51a5ce2352 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Thu, 10 Oct 2019 08:59:37 -0700 Subject: Make some writers sensitive to 'unlisted' class on headings. If this is present on a heading with the 'unnumbered' class, the heading won't appear in the TOC. This class has no effect if 'unnumbered' is not also specified. This affects HTML-based writers (including slide shows and epub), LateX (including beamer), RTF, and PowerPoint. Other writers do not yet support `unlisted`. Closes #1762. --- src/Text/Pandoc/Writers/LaTeX.hs | 10 ++++++---- src/Text/Pandoc/Writers/Shared.hs | 7 ++++--- 2 files changed, 10 insertions(+), 7 deletions(-) (limited to 'src/Text/Pandoc/Writers') diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs index 81a3082cb..e73819df0 100644 --- a/src/Text/Pandoc/Writers/LaTeX.hs +++ b/src/Text/Pandoc/Writers/LaTeX.hs @@ -748,7 +748,7 @@ blockToLaTeX HorizontalRule = "\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}" blockToLaTeX (Header level (id',classes,_) lst) = do modify $ \s -> s{stInHeading = True} - hdr <- sectionHeader ("unnumbered" `elem` classes) id' level lst + hdr <- sectionHeader classes id' level lst modify $ \s -> s{stInHeading = False} return hdr blockToLaTeX (Table caption aligns widths heads rows) = do @@ -949,12 +949,14 @@ defListItemToLaTeX (term, defs) = do -- | Craft the section header, inserting the secton reference, if supplied. sectionHeader :: PandocMonad m - => Bool -- True for unnumbered + => [String] -- classes -> [Char] -> Int -> [Inline] -> LW m (Doc Text) -sectionHeader unnumbered ident level lst = do +sectionHeader classes ident level lst = do + let unnumbered = "unnumbered" `elem` classes + let unlisted = "unlisted" `elem` classes txt <- inlineListToLaTeX lst plain <- stringToLaTeX TextString $ concatMap stringify lst let removeInvalidInline (Note _) = [] @@ -1013,7 +1015,7 @@ sectionHeader unnumbered ident level lst = do return $ if level' > 5 then txt else prefix $$ stuffing' - $$ if unnumbered + $$ if unnumbered && not unlisted then "\\addcontentsline{toc}" <> braces (text sectionType) <> braces txtNoNotes diff --git a/src/Text/Pandoc/Writers/Shared.hs b/src/Text/Pandoc/Writers/Shared.hs index c294eeebb..f7af26a99 100644 --- a/src/Text/Pandoc/Writers/Shared.hs +++ b/src/Text/Pandoc/Writers/Shared.hs @@ -40,7 +40,7 @@ where import Prelude import Safe (lastMay) import qualified Data.ByteString.Lazy as BL -import Data.Maybe (fromMaybe) +import Data.Maybe (fromMaybe, isNothing) import Control.Monad (zipWithM) import Data.Aeson (ToJSON (..), encode) import Data.Char (chr, ord, isSpace) @@ -394,8 +394,9 @@ toTableOfContents opts bs = -- | Converts an Element to a list item for a table of contents, sectionToListItem :: WriterOptions -> Block -> [Block] sectionToListItem opts (Div (ident,_,_) - (Header lev (_,_,kvs) ils : subsecs)) = - Plain headerLink : [BulletList listContents | not (null listContents) + (Header lev (_,classes,kvs) ils : subsecs)) + | not (isNothing (lookup "number" kvs) && "unlisted" `elem` classes) + = Plain headerLink : [BulletList listContents | not (null listContents) , lev < writerTOCDepth opts] where num = fromMaybe "" $ lookup "number" kvs -- cgit v1.2.3