diff options
author | Jesse Rosenthal <jrosenthal@jhu.edu> | 2018-01-11 16:55:13 -0500 |
---|---|---|
committer | Jesse Rosenthal <jrosenthal@jhu.edu> | 2018-01-12 06:56:09 -0500 |
commit | 206545c6756f7d4dec4c4761d8e256c2c0dfa33a (patch) | |
tree | 8f162bdaf103dc7af6fa139c16412278745c0171 | |
parent | 9f888659f77866cd0e5efe454a1c66ac8ec580cf (diff) | |
download | pandoc-206545c6756f7d4dec4c4761d8e256c2c0dfa33a.tar.gz |
Powerpoint writer: move curSlideId to environment.
It really isn't a moving state, and that can be misleading.
-rw-r--r-- | src/Text/Pandoc/Writers/Powerpoint.hs | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/Text/Pandoc/Writers/Powerpoint.hs b/src/Text/Pandoc/Writers/Powerpoint.hs index 1de4dcb18..0ff80bdc9 100644 --- a/src/Text/Pandoc/Writers/Powerpoint.hs +++ b/src/Text/Pandoc/Writers/Powerpoint.hs @@ -108,6 +108,11 @@ data WriterEnv = WriterEnv { envMetadata :: Meta , envSlideHasHeader :: Bool , envInList :: Bool , envInNoteSlide :: Bool + , envCurSlideId :: Int + -- the difference between the number at + -- the end of the slide file name and + -- the rId number + , envSlideIdOffset :: Int } deriving (Show) @@ -124,6 +129,8 @@ instance Default WriterEnv where , envSlideHasHeader = False , envInList = False , envInNoteSlide = False + , envCurSlideId = 1 + , envSlideIdOffset = 1 } data MediaInfo = MediaInfo { mInfoFilePath :: FilePath @@ -134,12 +141,7 @@ data MediaInfo = MediaInfo { mInfoFilePath :: FilePath , mInfoCaption :: Bool } deriving (Show, Eq) -data WriterState = WriterState { stCurSlideId :: Int - -- the difference between the number at - -- the end of the slide file name and - -- the rId number - , stSlideIdOffset :: Int - , stLinkIds :: M.Map Int (M.Map Int (URL, String)) +data WriterState = WriterState { stLinkIds :: M.Map Int (M.Map Int (URL, String)) -- (FP, Local ID, Global ID, Maybe Mime) , stMediaIds :: M.Map Int [MediaInfo] , stMediaGlobalIds :: M.Map FilePath Int @@ -147,9 +149,7 @@ data WriterState = WriterState { stCurSlideId :: Int } deriving (Show, Eq) instance Default WriterState where - def = WriterState { stCurSlideId = 0 - , stSlideIdOffset = 1 - , stLinkIds = mempty + def = WriterState { stLinkIds = mempty , stMediaIds = mempty , stMediaGlobalIds = mempty , stNoteIds = mempty @@ -841,7 +841,7 @@ replaceNamedChildren ns prefix name newKids element = registerLink :: PandocMonad m => (URL, String) -> P m Int registerLink link = do - curSlideId <- gets stCurSlideId + curSlideId <- asks envCurSlideId linkReg <- gets stLinkIds mediaReg <- gets stMediaIds let maxLinkId = case M.lookup curSlideId linkReg of @@ -862,7 +862,7 @@ registerLink link = do registerMedia :: PandocMonad m => FilePath -> [ParaElem] -> P m MediaInfo registerMedia fp caption = do - curSlideId <- gets stCurSlideId + curSlideId <- asks envCurSlideId linkReg <- gets stLinkIds mediaReg <- gets stMediaIds globalIds <- gets stMediaGlobalIds @@ -1468,7 +1468,7 @@ slideToFilePath _ idNum = "slide" ++ (show $ idNum) ++ ".xml" slideToSlideId :: Monad m => Slide -> Int -> P m String slideToSlideId _ idNum = do - n <- gets stSlideIdOffset + n <- asks envSlideIdOffset return $ "rId" ++ (show $ idNum + n) @@ -1492,7 +1492,7 @@ elementToRel element slideToPresRel :: Monad m => Slide -> Int -> P m Relationship slideToPresRel slide idNum = do - n <- gets stSlideIdOffset + n <- asks envSlideIdOffset let rId = idNum + n fp = "slides/" ++ slideToFilePath slide idNum return $ Relationship { relId = rId @@ -1559,9 +1559,9 @@ elemToEntry fp element = do slideToEntry :: PandocMonad m => Slide -> Int -> P m Entry slideToEntry slide idNum = do - modify $ \st -> st{stCurSlideId = idNum} - element <- slideToElement slide - elemToEntry ("ppt/slides/" ++ slideToFilePath slide idNum) element + local (\env -> env{envCurSlideId = idNum}) $ do + element <- slideToElement slide + elemToEntry ("ppt/slides/" ++ slideToFilePath slide idNum) element slideToSlideRelEntry :: PandocMonad m => Slide -> Int -> P m Entry slideToSlideRelEntry slide idNum = do |