git.iko.soy/typeable/pandoc
on master help sign in
Powerpoint writer: move curSlideId to environment.
206545cJesse Rosenthal
src/Text/Pandoc/Writers/Powerpoint.hs+16−16
@@ -108,6 +108,11 @@ data WriterEnv = WriterEnv { envMetadata :: Meta
108 , envSlideHasHeader :: Bool
108 , envSlideHasHeader :: Bool
109 , envInList :: Bool
109 , envInList :: Bool
110 , envInNoteSlide :: Bool
110 , envInNoteSlide :: Bool
111+ , envCurSlideId :: Int
112+ -- the difference between the number at
113+ -- the end of the slide file name and
114+ -- the rId number
115+ , envSlideIdOffset :: Int
111 }
116 }
112 deriving (Show)
117 deriving (Show)
113
118
@@ -124,6 +129,8 @@ instance Default WriterEnv where
124 , envSlideHasHeader = False
129 , envSlideHasHeader = False
125 , envInList = False
130 , envInList = False
126 , envInNoteSlide = False
131 , envInNoteSlide = False
132+ , envCurSlideId = 1
133+ , envSlideIdOffset = 1
127 }
134 }
128
135
129data MediaInfo = MediaInfo { mInfoFilePath :: FilePath
136data MediaInfo = MediaInfo { mInfoFilePath :: FilePath
@@ -134,12 +141,7 @@ data MediaInfo = MediaInfo { mInfoFilePath :: FilePath
134 , mInfoCaption :: Bool
141 , mInfoCaption :: Bool
135 } deriving (Show, Eq)
142 } deriving (Show, Eq)
136
143
137−data WriterState = WriterState { stCurSlideId :: Int
138− -- the difference between the number at
139− -- the end of the slide file name and
140− -- the rId number
141− , stSlideIdOffset :: Int
142− , stLinkIds :: M.Map Int (M.Map Int (URL, String))
144+data WriterState = WriterState { stLinkIds :: M.Map Int (M.Map Int (URL, String))
143 -- (FP, Local ID, Global ID, Maybe Mime)
145 -- (FP, Local ID, Global ID, Maybe Mime)
144 , stMediaIds :: M.Map Int [MediaInfo]
146 , stMediaIds :: M.Map Int [MediaInfo]
145 , stMediaGlobalIds :: M.Map FilePath Int
147 , stMediaGlobalIds :: M.Map FilePath Int
@@ -147,9 +149,7 @@ data WriterState = WriterState { stCurSlideId :: Int
147 } deriving (Show, Eq)
149 } deriving (Show, Eq)
148
150
149instance Default WriterState where
151instance Default WriterState where
150− def = WriterState { stCurSlideId = 0
151− , stSlideIdOffset = 1
152− , stLinkIds = mempty
152+ def = WriterState { stLinkIds = mempty
153 , stMediaIds = mempty
153 , stMediaIds = mempty
154 , stMediaGlobalIds = mempty
154 , stMediaGlobalIds = mempty
155 , stNoteIds = mempty
155 , stNoteIds = mempty
@@ -841,7 +841,7 @@ replaceNamedChildren ns prefix name newKids element =
841
841
842registerLink :: PandocMonad m => (URL, String) -> P m Int
842registerLink :: PandocMonad m => (URL, String) -> P m Int
843registerLink link = do
843registerLink link = do
844− curSlideId <- gets stCurSlideId
844+ curSlideId <- asks envCurSlideId
845 linkReg <- gets stLinkIds
845 linkReg <- gets stLinkIds
846 mediaReg <- gets stMediaIds
846 mediaReg <- gets stMediaIds
847 let maxLinkId = case M.lookup curSlideId linkReg of
847 let maxLinkId = case M.lookup curSlideId linkReg of
@@ -862,7 +862,7 @@ registerLink link = do
862
862
863registerMedia :: PandocMonad m => FilePath -> [ParaElem] -> P m MediaInfo
863registerMedia :: PandocMonad m => FilePath -> [ParaElem] -> P m MediaInfo
864registerMedia fp caption = do
864registerMedia fp caption = do
865− curSlideId <- gets stCurSlideId
865+ curSlideId <- asks envCurSlideId
866 linkReg <- gets stLinkIds
866 linkReg <- gets stLinkIds
867 mediaReg <- gets stMediaIds
867 mediaReg <- gets stMediaIds
868 globalIds <- gets stMediaGlobalIds
868 globalIds <- gets stMediaGlobalIds
@@ -1468,7 +1468,7 @@ slideToFilePath _ idNum = "slide" ++ (show $ idNum) ++ ".xml"
1468
1468
1469slideToSlideId :: Monad m => Slide -> Int -> P m String
1469slideToSlideId :: Monad m => Slide -> Int -> P m String
1470slideToSlideId _ idNum = do
1470slideToSlideId _ idNum = do
1471− n <- gets stSlideIdOffset
1471+ n <- asks envSlideIdOffset
1472 return $ "rId" ++ (show $ idNum + n)
1472 return $ "rId" ++ (show $ idNum + n)
1473
1473
1474
1474
@@ -1492,7 +1492,7 @@ elementToRel element
1492
1492
1493slideToPresRel :: Monad m => Slide -> Int -> P m Relationship
1493slideToPresRel :: Monad m => Slide -> Int -> P m Relationship
1494slideToPresRel slide idNum = do
1494slideToPresRel slide idNum = do
1495− n <- gets stSlideIdOffset
1495+ n <- asks envSlideIdOffset
1496 let rId = idNum + n
1496 let rId = idNum + n
1497 fp = "slides/" ++ slideToFilePath slide idNum
1497 fp = "slides/" ++ slideToFilePath slide idNum
1498 return $ Relationship { relId = rId
1498 return $ Relationship { relId = rId
@@ -1559,9 +1559,9 @@ elemToEntry fp element = do
1559
1559
1560slideToEntry :: PandocMonad m => Slide -> Int -> P m Entry
1560slideToEntry :: PandocMonad m => Slide -> Int -> P m Entry
1561slideToEntry slide idNum = do
1561slideToEntry slide idNum = do
1562− modify $ \st -> st{stCurSlideId = idNum}
1562+ local (\env -> env{envCurSlideId = idNum}) $ do
1563− element <- slideToElement slide
1563+ element <- slideToElement slide
1564− elemToEntry ("ppt/slides/" ++ slideToFilePath slide idNum) element
1564+ elemToEntry ("ppt/slides/" ++ slideToFilePath slide idNum) element
1565
1565
1566slideToSlideRelEntry :: PandocMonad m => Slide -> Int -> P m Entry
1566slideToSlideRelEntry :: PandocMonad m => Slide -> Int -> P m Entry
1567slideToSlideRelEntry slide idNum = do
1567slideToSlideRelEntry slide idNum = do