git.iko.soy/typeable/pandoc
on master help sign in
HTML writer: Strip links from headers when creating TOC.

Otherwise the TOC entries will not link to the sections. Closes #4340.

commit0d83ce3bc4c68efa9d19f065a056d27d9b8ec56d authorJohn MacFarlane <jgm@berkeley.edu> dateMon 7 May 2018, 17:44 (8 years ago) parent5879923
1 file changed+12−4
src/Text/Pandoc/Writers/HTML.hs+12−4
src/Text/Pandoc/Writers/HTML.hs+12−4
@@ -354,7 +354,8 @@ defList :: PandocMonad m
354354defList opts items = toList H.dl opts (items ++ [nl opts])
355355
356356-- | Construct table of contents from list of elements.
357−tableOfContents :: PandocMonad m => WriterOptions -> [Element] -> StateT WriterState m (Maybe Html)
357+tableOfContents :: PandocMonad m => WriterOptions -> [Element]
358+ -> StateT WriterState m (Maybe Html)
358359tableOfContents _ [] = return Nothing
359360tableOfContents opts sects = do
360361 contents <- mapM (elementToListItem opts) sects
@@ -369,7 +370,8 @@ showSecNum = intercalate "." . map show
369370
370371-- | Converts an Element to a list item for a table of contents,
371372-- retrieving the appropriate identifier from state.
372−elementToListItem :: PandocMonad m => WriterOptions -> Element -> StateT WriterState m (Maybe Html)
373+elementToListItem :: PandocMonad m => WriterOptions -> Element
374+ -> StateT WriterState m (Maybe Html)
373375-- Don't include the empty headers created in slide shows
374376-- shows when an hrule is used to separate slides without a new title:
375377elementToListItem _ (Sec _ _ _ [Str "\0"] _) = return Nothing
@@ -381,7 +383,8 @@ elementToListItem opts (Sec lev num (id',classes,_) headerText subsecs)
381383 then (H.span ! A.class_ "toc-section-number"
382384 $ toHtml $ showSecNum num') >> preEscapedString " "
383385 else mempty
384− txt <- liftM (sectnum >>) $ inlineListToHtml opts $ walk deNote headerText
386+ txt <- liftM (sectnum >>) $
387+ inlineListToHtml opts $ walk (deLink . deNote) headerText
385388 subHeads <- mapM (elementToListItem opts) subsecs >>= return . catMaybes
386389 subList <- if null subHeads
387390 then return mempty
@@ -397,8 +400,13 @@ elementToListItem opts (Sec lev num (id',classes,_) headerText subsecs)
397400 $ toHtml txt) >> subList
398401elementToListItem _ _ = return Nothing
399402
403+deLink :: Inline -> Inline
404+deLink (Link _ ils _) = Span nullAttr ils
405+deLink x = x
406+
400407-- | Convert an Element to Html.
401−elementToHtml :: PandocMonad m => Int -> WriterOptions -> Element -> StateT WriterState m Html
408+elementToHtml :: PandocMonad m => Int -> WriterOptions -> Element
409+ -> StateT WriterState m Html
402410elementToHtml _slideLevel opts (Blk block) = blockToHtml opts block
403411elementToHtml slideLevel opts (Sec level num (id',classes,keyvals) title' elements) = do
404412 slideVariant <- gets stSlideVariant