@@ -92,7 +92,7 @@ import Text.Pandoc.MIME (getMimeType)
9292import System.FilePath ( (</>), takeExtension, dropExtension )
9393import Data.Generics (Typeable, Data)
9494import qualified Control.Monad.State as S
95−import Control.Monad (msum)
95+import Control.Monad (msum, unless)
9696import Text.Pandoc.Pretty (charWidth)
9797import System.Locale (defaultTimeLocale)
9898import Data.Time
@@ -435,13 +435,15 @@ hierarchicalize blocks = S.evalState (hierarchicalizeWithIds blocks) []
435435
436436hierarchicalizeWithIds :: [Block] -> S.State [Int] [Element]
437437hierarchicalizeWithIds [] = return []
438−hierarchicalizeWithIds ((Header level attr title'):xs) = do
438+hierarchicalizeWithIds ((Header level attr@(_,classes,_) title'):xs) = do
439439 lastnum <- S.get
440440 let lastnum' = take level lastnum
441− let newnum = if length lastnum' >= level
442− then init lastnum' ++ [last lastnum' + 1]
443− else lastnum ++ replicate (level - length lastnum - 1) 0 ++ [1]
444− S.put newnum
441+ let newnum = case length lastnum' of
442+ x | "unnumbered" `elem` classes -> []
443+ | x >= level -> init lastnum' ++ [last lastnum' + 1]
444+ | otherwise -> lastnum ++
445+ replicate (level - length lastnum - 1) 0 ++ [1]
446+ unless (null newnum) $ S.put newnum
445447 let (sectionContents, rest) = break (headerLtEq level) xs
446448 sectionContents' <- hierarchicalizeWithIds sectionContents
447449 rest' <- hierarchicalizeWithIds rest