Revert "Shared.hierarchicalize: Don't number subsections of unnumbered sections."

This reverts commit 2a46042661.
This commit is contained in:
John MacFarlane 2014-07-21 20:47:18 -07:00
parent 2a46042661
commit 5debb492ef

View file

@ -105,7 +105,7 @@ import System.FilePath ( (</>), takeExtension, dropExtension )
import Data.Generics (Typeable, Data) import Data.Generics (Typeable, Data)
import qualified Control.Monad.State as S import qualified Control.Monad.State as S
import qualified Control.Exception as E import qualified Control.Exception as E
import Control.Monad (msum) import Control.Monad (msum, unless)
import Text.Pandoc.Pretty (charWidth) import Text.Pandoc.Pretty (charWidth)
import System.Locale (defaultTimeLocale) import System.Locale (defaultTimeLocale)
import Data.Time import Data.Time
@ -615,32 +615,25 @@ inlineListToIdentifier =
-- | Convert list of Pandoc blocks into (hierarchical) list of Elements -- | Convert list of Pandoc blocks into (hierarchical) list of Elements
hierarchicalize :: [Block] -> [Element] hierarchicalize :: [Block] -> [Element]
hierarchicalize blocks = S.evalState (hierarchicalizeWithIds True blocks) [] hierarchicalize blocks = S.evalState (hierarchicalizeWithIds blocks) []
hierarchicalizeWithIds :: Bool -> [Block] -> S.State [Int] [Element] hierarchicalizeWithIds :: [Block] -> S.State [Int] [Element]
hierarchicalizeWithIds _ [] = return [] hierarchicalizeWithIds [] = return []
hierarchicalizeWithIds number ((Header level attr@(_,classes,_) title'):xs) = do hierarchicalizeWithIds ((Header level attr@(_,classes,_) title'):xs) = do
let number' = number && "unnumbered" `notElem` classes lastnum <- S.get
newnum <- if number' let lastnum' = take level lastnum
then do let newnum = case length lastnum' of
lastnum <- S.get x | "unnumbered" `elem` classes -> []
let lastnum' = take level lastnum | x >= level -> init lastnum' ++ [last lastnum' + 1]
let n = case length lastnum' of | otherwise -> lastnum ++
x | x >= level -> init lastnum' ++ replicate (level - length lastnum - 1) 0 ++ [1]
[last lastnum' + 1] unless (null newnum) $ S.put newnum
| otherwise -> lastnum ++
replicate (level -
length lastnum - 1) 0 ++ [1]
S.put n
return n
else return []
let (sectionContents, rest) = break (headerLtEq level) xs let (sectionContents, rest) = break (headerLtEq level) xs
-- ensure that subsections of an unnumbered section aren't numbered sectionContents' <- hierarchicalizeWithIds sectionContents
sectionContents' <- hierarchicalizeWithIds number' sectionContents rest' <- hierarchicalizeWithIds rest
rest' <- hierarchicalizeWithIds number rest
return $ Sec level newnum attr title' sectionContents' : rest' return $ Sec level newnum attr title' sectionContents' : rest'
hierarchicalizeWithIds number (x:rest) = do hierarchicalizeWithIds (x:rest) = do
rest' <- hierarchicalizeWithIds number rest rest' <- hierarchicalizeWithIds rest
return $ (Blk x) : rest' return $ (Blk x) : rest'
headerLtEq :: Int -> Block -> Bool headerLtEq :: Int -> Block -> Bool