@@ -135,15 +135,17 @@ getWarnings :: PandocMonad m => m [String]
135getWarnings = getsCommonState stWarnings
135getWarnings = getsCommonState stWarnings
137setMediaBag :: PandocMonad m => MediaBag -> m ()
137setMediaBag :: PandocMonad m => MediaBag -> m ()
138−setMediaBag mb = modifyCommonState $ \st -> st{stMediaBag = mb}
138+setMediaBag mb = modifyCommonState $
139+ \st -> st{stDeferredMediaBag = DeferredMediaBag mb mempty}
140getMediaBag :: PandocMonad m => m MediaBag
141getMediaBag :: PandocMonad m => m MediaBag
141−getMediaBag = getsCommonState stMediaBag
142+getMediaBag = fetchDeferredMedia >> (dropDeferredMedia <$> getsCommonState stDeferredMediaBag)
143insertMedia :: PandocMonad m => FilePath -> Maybe MimeType -> BL.ByteString -> m ()
144insertMedia :: PandocMonad m => FilePath -> Maybe MimeType -> BL.ByteString -> m ()
144−insertMedia fp mime bs =
145+insertMedia fp mime bs = do
146+ (DeferredMediaBag mb dm) <- getsCommonState stDeferredMediaBag
147+ let mb' = MB.insertMedia fp mime bs mb
145− modifyCommonState $ \st ->
148+ modifyCommonState $ \st -> st{stDeferredMediaBag =DeferredMediaBag mb' dm }
146− st{stMediaBag = MB.insertMedia fp mime bs (stMediaBag st) }
148getInputFiles :: PandocMonad m => m (Maybe [FilePath])
150getInputFiles :: PandocMonad m => m (Maybe [FilePath])
149getInputFiles = getsCommonState stInputFiles
151getInputFiles = getsCommonState stInputFiles
@@ -179,8 +181,9 @@ instance Monoid DeferredMediaBag where
179 mappend (DeferredMediaBag mb lst) (DeferredMediaBag mb' lst') =
181 mappend (DeferredMediaBag mb lst) (DeferredMediaBag mb' lst') =
180 DeferredMediaBag (mb <> mb') (lst <> lst')
182 DeferredMediaBag (mb <> mb') (lst <> lst')
182−getDeferredMedia :: PandocMonad m => DeferredMediaBag -> m MediaBag
184+fetchDeferredMedia' :: PandocMonad m => m MediaBag
185+fetchDeferredMedia' = do
183−getDeferredMedia (DeferredMediaBag mb defMedia) = do
186+ (DeferredMediaBag mb defMedia) <- getsCommonState stDeferredMediaBag
184 fetchedMedia <- mapM (\dfp -> fetchItem Nothing (unDefer dfp)) defMedia
187 fetchedMedia <- mapM (\dfp -> fetchItem Nothing (unDefer dfp)) defMedia
185 return $ foldr
188 return $ foldr
186 (\(dfp, (bs, mbMime)) mb' ->
189 (\(dfp, (bs, mbMime)) mb' ->
@@ -188,18 +191,22 @@ getDeferredMedia (DeferredMediaBag mb defMedia) = do
189 (zip defMedia fetchedMedia)
192 (zip defMedia fetchedMedia)
194+fetchDeferredMedia :: PandocMonad m => m ()
195+fetchDeferredMedia = fetchDeferredMedia' >>= setMediaBag
191dropDeferredMedia :: DeferredMediaBag -> MediaBag
197dropDeferredMedia :: DeferredMediaBag -> MediaBag
192dropDeferredMedia (DeferredMediaBag mb _) = mb
198dropDeferredMedia (DeferredMediaBag mb _) = mb
194data CommonState = CommonState { stWarnings :: [String]
201data CommonState = CommonState { stWarnings :: [String]
195− , stMediaBag :: MediaBag
202+ , stDeferredMediaBag :: DeferredMediaBag
196 , stInputFiles :: Maybe [FilePath]
203 , stInputFiles :: Maybe [FilePath]
197 , stOutputFile :: Maybe FilePath
204 , stOutputFile :: Maybe FilePath
200instance Default CommonState where
207instance Default CommonState where
201 def = CommonState { stWarnings = []
208 def = CommonState { stWarnings = []
202− , stMediaBag = mempty
209+ , stDeferredMediaBag = mempty
203 , stInputFiles = Nothing
210 , stInputFiles = Nothing
204 , stOutputFile = Nothing
211 , stOutputFile = Nothing
@@ -284,7 +291,7 @@ fetchItem :: PandocMonad m
284 -> String
291 -> String
285 -> m (B.ByteString, Maybe MimeType)
292 -> m (B.ByteString, Maybe MimeType)
286fetchItem sourceURL s = do
293fetchItem sourceURL s = do
287− mediabag <- getMediaBag
294+ mediabag <- dropDeferredMedia <$> getsCommonState stDeferredMediaBag
288 case lookupMedia s mediabag of
295 case lookupMedia s mediabag of
289 Just (mime, bs) -> return $ (BL.toStrict bs, Just mime)
296 Just (mime, bs) -> return $ (BL.toStrict bs, Just mime)
290 Nothing ->
297 Nothing ->