Powerpoint writer: Use more specific slide id names.
This commit is contained in:
parent
0d53efeddb
commit
42e690d1b2
1 changed files with 33 additions and 3 deletions
|
@ -69,6 +69,7 @@ import Text.Pandoc.Walk
|
||||||
import qualified Text.Pandoc.Shared as Shared -- so we don't overlap "Element"
|
import qualified Text.Pandoc.Shared as Shared -- so we don't overlap "Element"
|
||||||
import Text.Pandoc.Writers.Shared (metaValueToInlines)
|
import Text.Pandoc.Writers.Shared (metaValueToInlines)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
|
import qualified Data.Set as S
|
||||||
import Data.Maybe (maybeToList)
|
import Data.Maybe (maybeToList)
|
||||||
|
|
||||||
data WriterEnv = WriterEnv { envMetadata :: Meta
|
data WriterEnv = WriterEnv { envMetadata :: Meta
|
||||||
|
@ -92,22 +93,46 @@ instance Default WriterEnv where
|
||||||
, envSlideHasHeader = False
|
, envSlideHasHeader = False
|
||||||
, envInList = False
|
, envInList = False
|
||||||
, envInNoteSlide = False
|
, envInNoteSlide = False
|
||||||
, envCurSlideId = SlideId "1"
|
, envCurSlideId = SlideId "Default"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
data WriterState = WriterState { stNoteIds :: M.Map Int [Block]
|
data WriterState = WriterState { stNoteIds :: M.Map Int [Block]
|
||||||
-- associate anchors with slide id
|
-- associate anchors with slide id
|
||||||
, stAnchorMap :: M.Map String SlideId
|
, stAnchorMap :: M.Map String SlideId
|
||||||
|
, stSlideIdSet :: S.Set SlideId
|
||||||
, stLog :: [LogMessage]
|
, stLog :: [LogMessage]
|
||||||
|
|
||||||
} deriving (Show, Eq)
|
} deriving (Show, Eq)
|
||||||
|
|
||||||
instance Default WriterState where
|
instance Default WriterState where
|
||||||
def = WriterState { stNoteIds = mempty
|
def = WriterState { stNoteIds = mempty
|
||||||
, stAnchorMap = mempty
|
, stAnchorMap = mempty
|
||||||
|
-- we reserve this s
|
||||||
|
, stSlideIdSet = reservedSlideIds
|
||||||
, stLog = []
|
, stLog = []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reservedSlideIds :: S.Set SlideId
|
||||||
|
reservedSlideIds = S.fromList [SlideId "EndNotes"]
|
||||||
|
|
||||||
|
uniqueSlideId' :: Integer -> S.Set SlideId -> String -> SlideId
|
||||||
|
uniqueSlideId' n idSet s =
|
||||||
|
let s' = if n == 0 then s else (s ++ "-" ++ show n)
|
||||||
|
in if SlideId s' `S.member` idSet
|
||||||
|
then uniqueSlideId' (n+1) idSet s
|
||||||
|
else SlideId s'
|
||||||
|
|
||||||
|
uniqueSlideId :: S.Set SlideId -> String -> SlideId
|
||||||
|
uniqueSlideId = uniqueSlideId' 0
|
||||||
|
|
||||||
|
runUniqueSlideId :: String -> Pres SlideId
|
||||||
|
runUniqueSlideId s = do
|
||||||
|
idSet <- gets stSlideIdSet
|
||||||
|
let sldId = uniqueSlideId idSet s
|
||||||
|
modify $ \st -> st{stSlideIdSet = S.insert sldId idSet}
|
||||||
|
return sldId
|
||||||
|
|
||||||
addLogMessage :: LogMessage -> Pres ()
|
addLogMessage :: LogMessage -> Pres ()
|
||||||
addLogMessage msg = modify $ \st -> st{stLog = msg : (stLog st)}
|
addLogMessage msg = modify $ \st -> st{stLog = msg : (stLog st)}
|
||||||
|
|
||||||
|
@ -778,9 +803,14 @@ blocksToPresentation blks = do
|
||||||
let tocSlidesLength = if writerTableOfContents opts then 1 else 0
|
let tocSlidesLength = if writerTableOfContents opts then 1 else 0
|
||||||
let bodyStartNum = tocStartNum + tocSlidesLength
|
let bodyStartNum = tocStartNum + tocSlidesLength
|
||||||
blksLst <- splitBlocks blks
|
blksLst <- splitBlocks blks
|
||||||
|
|
||||||
|
bodySlideIds <- mapM
|
||||||
|
(\n -> runUniqueSlideId $ "BodySlide" ++ show n)
|
||||||
|
([1..] :: [Integer])
|
||||||
bodyslides <- mapM
|
bodyslides <- mapM
|
||||||
(\(bs, n) -> local (\st -> st{envCurSlideId = SlideId $ show n}) (blocksToSlide bs))
|
(\(bs, ident) ->
|
||||||
(zip blksLst [bodyStartNum..])
|
local (\st -> st{envCurSlideId = ident}) (blocksToSlide bs))
|
||||||
|
(zip blksLst bodySlideIds)
|
||||||
let endNoteStartNum = bodyStartNum + length bodyslides
|
let endNoteStartNum = bodyStartNum + length bodyslides
|
||||||
endNotesSlideBlocks <- makeEndNotesSlideBlocks
|
endNotesSlideBlocks <- makeEndNotesSlideBlocks
|
||||||
-- now we come back and make the real toc...
|
-- now we come back and make the real toc...
|
||||||
|
|
Loading…
Reference in a new issue