@@ -135,15 +135,17 @@ getWarnings :: PandocMonad m => m [String]
135135getWarnings = getsCommonState stWarnings
136136
137137setMediaBag :: PandocMonad m => MediaBag -> m ()
138−setMediaBag mb = modifyCommonState $ \st -> st{stMediaBag = mb}
138+setMediaBag mb = modifyCommonState $
139+ \st -> st{stDeferredMediaBag = DeferredMediaBag mb mempty}
139140
140141getMediaBag :: PandocMonad m => m MediaBag
141−getMediaBag = getsCommonState stMediaBag
142+getMediaBag = fetchDeferredMedia >> (dropDeferredMedia <$> getsCommonState stDeferredMediaBag)
142143
143144insertMedia :: PandocMonad m => FilePath -> Maybe MimeType -> BL.ByteString -> m ()
144−insertMedia fp mime bs =
145− modifyCommonState $ \st ->
146− st{stMediaBag = MB.insertMedia fp mime bs (stMediaBag st) }
145+insertMedia fp mime bs = do
146+ (DeferredMediaBag mb dm) <- getsCommonState stDeferredMediaBag
147+ let mb' = MB.insertMedia fp mime bs mb
148+ modifyCommonState $ \st -> st{stDeferredMediaBag =DeferredMediaBag mb' dm }
147149
148150getInputFiles :: PandocMonad m => m (Maybe [FilePath])
149151getInputFiles = getsCommonState stInputFiles
@@ -179,8 +181,9 @@ instance Monoid DeferredMediaBag where
179181 mappend (DeferredMediaBag mb lst) (DeferredMediaBag mb' lst') =
180182 DeferredMediaBag (mb <> mb') (lst <> lst')
181183
182−getDeferredMedia :: PandocMonad m => DeferredMediaBag -> m MediaBag
183−getDeferredMedia (DeferredMediaBag mb defMedia) = do
184+fetchDeferredMedia' :: PandocMonad m => m MediaBag
185+fetchDeferredMedia' = do
186+ (DeferredMediaBag mb defMedia) <- getsCommonState stDeferredMediaBag
184187 fetchedMedia <- mapM (\dfp -> fetchItem Nothing (unDefer dfp)) defMedia
185188 return $ foldr
186189 (\(dfp, (bs, mbMime)) mb' ->
@@ -188,18 +191,22 @@ getDeferredMedia (DeferredMediaBag mb defMedia) = do
188191 mb
189192 (zip defMedia fetchedMedia)
190193
194+fetchDeferredMedia :: PandocMonad m => m ()
195+fetchDeferredMedia = fetchDeferredMedia' >>= setMediaBag
196+
191197dropDeferredMedia :: DeferredMediaBag -> MediaBag
192198dropDeferredMedia (DeferredMediaBag mb _) = mb
193199
200+
194201data CommonState = CommonState { stWarnings :: [String]
195− , stMediaBag :: MediaBag
202+ , stDeferredMediaBag :: DeferredMediaBag
196203 , stInputFiles :: Maybe [FilePath]
197204 , stOutputFile :: Maybe FilePath
198205 }
199206
200207instance Default CommonState where
201208 def = CommonState { stWarnings = []
202− , stMediaBag = mempty
209+ , stDeferredMediaBag = mempty
203210 , stInputFiles = Nothing
204211 , stOutputFile = Nothing
205212 }
@@ -284,7 +291,7 @@ fetchItem :: PandocMonad m
284291 -> String
285292 -> m (B.ByteString, Maybe MimeType)
286293fetchItem sourceURL s = do
287− mediabag <- getMediaBag
294+ mediabag <- dropDeferredMedia <$> getsCommonState stDeferredMediaBag
288295 case lookupMedia s mediabag of
289296 Just (mime, bs) -> return $ (BL.toStrict bs, Just mime)
290297 Nothing ->