@@ -100,6 +100,7 @@ import Data.Default
100import System.IO.Error
100import System.IO.Error
101import qualified Data.Map as M
101import qualified Data.Map as M
102import Text.Pandoc.Error
102import Text.Pandoc.Error
104class (Functor m, Applicative m, Monad m, MonadError PandocError m)
105class (Functor m, Applicative m, Monad m, MonadError PandocError m)
105 => PandocMonad m where
106 => PandocMonad m where
@@ -167,6 +168,29 @@ warningWithPos pos msg = lift $ warning $ msg ++ " " ++ show pos
171+newtype DeferredMediaPath = DeferredMediaPath {unDefer :: String}
174+data DeferredMediaBag = DeferredMediaBag MediaBag [DeferredMediaPath]
177+instance Monoid DeferredMediaBag where
178+ mempty = DeferredMediaBag mempty mempty
179+ mappend (DeferredMediaBag mb lst) (DeferredMediaBag mb' lst') =
180+ DeferredMediaBag (mb <> mb') (lst <> lst')
182+getDeferredMedia :: PandocMonad m => DeferredMediaBag -> m MediaBag
183+getDeferredMedia (DeferredMediaBag mb defMedia) = do
184+ fetchedMedia <- mapM (\dfp -> fetchItem Nothing (unDefer dfp)) defMedia
186+ (\(dfp, (bs, mbMime)) mb' ->
187+ MB.insertMedia (unDefer dfp) mbMime (BL.fromStrict bs) mb')
189+ (zip defMedia fetchedMedia)
191+dropDeferredMedia :: DeferredMediaBag -> MediaBag
192+dropDeferredMedia (DeferredMediaBag mb _) = mb
170data CommonState = CommonState { stWarnings :: [String]
194data CommonState = CommonState { stWarnings :: [String]
171 , stMediaBag :: MediaBag
195 , stMediaBag :: MediaBag
172 , stInputFiles :: Maybe [FilePath]
196 , stInputFiles :: Maybe [FilePath]