@@ -38,7 +38,7 @@ import Text.Pandoc.Highlighting ( highlightHtml, defaultHighlightingCss )
3838import Text.Pandoc.XML (stripTags)
3939import Numeric ( showHex )
4040import Data.Char ( ord, toLower )
41−import Data.List ( isPrefixOf )
41+import Data.List ( isPrefixOf, intersperse )
4242import Data.Maybe ( catMaybes )
4343import qualified Data.Set as S
4444import Control.Monad.State
@@ -156,12 +156,19 @@ tableOfContents opts sects = do
156156 contents <- mapM (elementToListItem opts') sects
157157 return $ thediv ! [prefixedId opts' "TOC"] $ unordList $ catMaybes contents
158158
159+-- | Convert section number to inline
160+showSecNum :: [Int] -> Inline
161+showSecNum = Str . concat . intersperse "." . map show
162+
159163-- | Converts an Element to a list item for a table of contents,
160164-- retrieving the appropriate identifier from state.
161165elementToListItem :: WriterOptions -> Element -> State WriterState (Maybe Html)
162166elementToListItem _ (Blk _) = return Nothing
163−elementToListItem opts (Sec _ id' headerText subsecs) = do
164− txt <- inlineListToHtml opts headerText
167+elementToListItem opts (Sec _ num id' headerText subsecs) = do
168+ let headerText' = if writerNumberSections opts
169+ then showSecNum num : Space : headerText
170+ else headerText
171+ txt <- inlineListToHtml opts headerText'
165172 subHeads <- mapM (elementToListItem opts) subsecs >>= return . catMaybes
166173 let subList = if null subHeads
167174 then noHtml
@@ -171,9 +178,12 @@ elementToListItem opts (Sec _ id' headerText subsecs) = do
171178-- | Convert an Element to Html.
172179elementToHtml :: WriterOptions -> Element -> State WriterState Html
173180elementToHtml opts (Blk block) = blockToHtml opts block
174−elementToHtml opts (Sec level id' title' elements) = do
181+elementToHtml opts (Sec level num id' title' elements) = do
175182 innerContents <- mapM (elementToHtml opts) elements
176− header' <- blockToHtml opts (Header level title')
183+ let title'' = if writerNumberSections opts
184+ then showSecNum num : Space : title'
185+ else title'
186+ header' <- blockToHtml opts (Header level title'')
177187 return $ if writerS5 opts || (writerStrictMarkdown opts && not (writerTableOfContents opts))
178188 -- S5 gets confused by the extra divs around sections
179189 then toHtmlFromList (header' : innerContents)