@@ -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) []
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