git.iko.soy/typeable/pandoc
on master help sign in
Revert "Shared.hierarchicalize: Don't number subsections of unnumbered sections."

This reverts commit 2a46042661a088096ac54097db5cd3674438bb63.

commit5debb492ef64767677d893e2cf77a100d57796e0 authorJohn MacFarlane <jgm@berkeley.edu> dateMon 21 Jul 2014, 20:47 (12 years ago) parent2a46042
1 file changed+18−25
src/Text/Pandoc/Shared.hs+18−25
src/Text/Pandoc/Shared.hs+18−25
@@ -105,7 +105,7 @@ import System.FilePath ( (</>), takeExtension, dropExtension )
105105import Data.Generics (Typeable, Data)
106106import qualified Control.Monad.State as S
107107import qualified Control.Exception as E
108−import Control.Monad (msum)
108+import Control.Monad (msum, unless)
109109import Text.Pandoc.Pretty (charWidth)
110110import System.Locale (defaultTimeLocale)
111111import Data.Time
@@ -615,32 +615,25 @@ inlineListToIdentifier =
615615
616616-- | Convert list of Pandoc blocks into (hierarchical) list of Elements
617617hierarchicalize :: [Block] -> [Element]
618−hierarchicalize blocks = S.evalState (hierarchicalizeWithIds True blocks) []
619−
620−hierarchicalizeWithIds :: Bool -> [Block] -> S.State [Int] [Element]
621−hierarchicalizeWithIds _ [] = return []
622−hierarchicalizeWithIds number ((Header level attr@(_,classes,_) title'):xs) = do
623− let number' = number && "unnumbered" `notElem` classes
624− newnum <- if number'
625− then do
626− lastnum <- S.get
627− let lastnum' = take level lastnum
628− let n = case length lastnum' of
629− x | x >= level -> init lastnum' ++
630− [last lastnum' + 1]
631− | otherwise -> lastnum ++
632− replicate (level -
633− length lastnum - 1) 0 ++ [1]
634− S.put n
635− return n
636− else return []
618+hierarchicalize blocks = S.evalState (hierarchicalizeWithIds blocks) []
619+
620+hierarchicalizeWithIds :: [Block] -> S.State [Int] [Element]
621+hierarchicalizeWithIds [] = return []
622+hierarchicalizeWithIds ((Header level attr@(_,classes,_) title'):xs) = do
623+ lastnum <- S.get
624+ let lastnum' = take level lastnum
625+ let newnum = case length lastnum' of
626+ x | "unnumbered" `elem` classes -> []
627+ | x >= level -> init lastnum' ++ [last lastnum' + 1]
628+ | otherwise -> lastnum ++
629+ replicate (level - length lastnum - 1) 0 ++ [1]
630+ unless (null newnum) $ S.put newnum
637631 let (sectionContents, rest) = break (headerLtEq level) xs
638− -- ensure that subsections of an unnumbered section aren't numbered
639− sectionContents' <- hierarchicalizeWithIds number' sectionContents
640− rest' <- hierarchicalizeWithIds number rest
632+ sectionContents' <- hierarchicalizeWithIds sectionContents
633+ rest' <- hierarchicalizeWithIds rest
641634 return $ Sec level newnum attr title' sectionContents' : rest'
642−hierarchicalizeWithIds number (x:rest) = do
643− rest' <- hierarchicalizeWithIds number rest
635+hierarchicalizeWithIds (x:rest) = do
636+ rest' <- hierarchicalizeWithIds rest
644637 return $ (Blk x) : rest'
645638
646639headerLtEq :: Int -> Block -> Bool