git.iko.soy/typeable/pandoc
on master help sign in
hierarchicalize: Do not number section with class "unnumbered".
cdee226John MacFarlane
src/Text/Pandoc/Shared.hs+8−6
@@ -92,7 +92,7 @@ import Text.Pandoc.MIME (getMimeType)
92import System.FilePath ( (</>), takeExtension, dropExtension )
92import System.FilePath ( (</>), takeExtension, dropExtension )
93import Data.Generics (Typeable, Data)
93import Data.Generics (Typeable, Data)
94import qualified Control.Monad.State as S
94import qualified Control.Monad.State as S
95−import Control.Monad (msum)
95+import Control.Monad (msum, unless)
96import Text.Pandoc.Pretty (charWidth)
96import Text.Pandoc.Pretty (charWidth)
97import System.Locale (defaultTimeLocale)
97import System.Locale (defaultTimeLocale)
98import Data.Time
98import Data.Time
@@ -435,13 +435,15 @@ hierarchicalize blocks = S.evalState (hierarchicalizeWithIds blocks) []
435
435
436hierarchicalizeWithIds :: [Block] -> S.State [Int] [Element]
436hierarchicalizeWithIds :: [Block] -> S.State [Int] [Element]
437hierarchicalizeWithIds [] = return []
437hierarchicalizeWithIds [] = return []
438−hierarchicalizeWithIds ((Header level attr title'):xs) = do
438+hierarchicalizeWithIds ((Header level attr@(_,classes,_) title'):xs) = do
439 lastnum <- S.get
439 lastnum <- S.get
440 let lastnum' = take level lastnum
440 let lastnum' = take level lastnum
441− let newnum = if length lastnum' >= level
441+ let newnum = case length lastnum' of
442+ x | "unnumbered" `elem` classes -> []
442− then init lastnum' ++ [last lastnum' + 1]
443+ | x >= level -> init lastnum' ++ [last lastnum' + 1]
444+ | otherwise -> lastnum ++
443− else lastnum ++ replicate (level - length lastnum - 1) 0 ++ [1]
445+ replicate (level - length lastnum - 1) 0 ++ [1]
444− S.put newnum
446+ unless (null newnum) $ S.put newnum
445 let (sectionContents, rest) = break (headerLtEq level) xs
447 let (sectionContents, rest) = break (headerLtEq level) xs
446 sectionContents' <- hierarchicalizeWithIds sectionContents
448 sectionContents' <- hierarchicalizeWithIds sectionContents
447 rest' <- hierarchicalizeWithIds rest
449 rest' <- hierarchicalizeWithIds rest
src/Text/Pandoc/Writers/HTML.hs+6−6
@@ -252,9 +252,9 @@ showSecNum = concat . intersperse "." . map show
252elementToListItem :: WriterOptions -> Element -> State WriterState (Maybe Html)
252elementToListItem :: WriterOptions -> Element -> State WriterState (Maybe Html)
253elementToListItem opts (Sec lev num (id',classes,keyvals) headerText subsecs)
253elementToListItem opts (Sec lev num (id',classes,keyvals) headerText subsecs)
254 | lev <= writerTOCDepth opts = do
254 | lev <= writerTOCDepth opts = do
255− let sectnum = if writerNumberSections opts
255+ let sectnum = if writerNumberSections opts && not (null num)
256− then (H.span ! A.class_ "toc-section-number" $ toHtml $ showSecNum num) >>
256+ then (H.span ! A.class_ "toc-section-number"
257− preEscapedString " "
257+ $ toHtml $ showSecNum num) >> preEscapedString " "
258 else mempty
258 else mempty
259 txt <- liftM (sectnum >>) $ inlineListToHtml opts headerText
259 txt <- liftM (sectnum >>) $ inlineListToHtml opts headerText
260 subHeads <- mapM (elementToListItem opts) subsecs >>= return . catMaybes
260 subHeads <- mapM (elementToListItem opts) subsecs >>= return . catMaybes
@@ -453,9 +453,9 @@ blockToHtml opts (BlockQuote blocks) =
453blockToHtml opts (Header level (ident,_,_) lst) = do
453blockToHtml opts (Header level (ident,_,_) lst) = do
454 contents <- inlineListToHtml opts lst
454 contents <- inlineListToHtml opts lst
455 secnum <- liftM stSecNum get
455 secnum <- liftM stSecNum get
456− let contents' = if writerNumberSections opts
456+ let contents' = if writerNumberSections opts && not (null secnum)
457− then (H.span ! A.class_ "header-section-number" $ toHtml $ showSecNum secnum) >>
457+ then (H.span ! A.class_ "header-section-number" $ toHtml
458− strToHtml " " >> contents
458+ $ showSecNum secnum) >> strToHtml " " >> contents
459 else contents
459 else contents
460 let contents'' = if writerTableOfContents opts && not (null ident)
460 let contents'' = if writerTableOfContents opts && not (null ident)
461 then H.a ! A.href (toValue $
461 then H.a ! A.href (toValue $