@@ -49,7 +49,6 @@ module Text.Pandoc.Class ( PandocMonad(..)
49 , getMediaBag
49 , getMediaBag
50 , setMediaBag
50 , setMediaBag
51 , insertMedia
51 , insertMedia
52− , insertDeferredMedia
53 , fetchItem
52 , fetchItem
54 , getInputFiles
53 , getInputFiles
55 , getOutputFile
54 , getOutputFile
@@ -106,8 +105,6 @@ import System.IO.Error
106import System.IO (stderr)
105import System.IO (stderr)
107import qualified Data.Map as M
106import qualified Data.Map as M
108import Text.Pandoc.Error
107import Text.Pandoc.Error
110−import Data.Maybe (catMaybes)
111import Text.Printf (printf)
108import Text.Printf (printf)
113class (Functor m, Applicative m, Monad m, MonadError PandocError m)
110class (Functor m, Applicative m, Monad m, MonadError PandocError m)
@@ -163,34 +160,16 @@ report level msg = do
163 modifyCommonState $ \st -> st{ stLog = (level, msg) : stLog st }
160 modifyCommonState $ \st -> st{ stLog = (level, msg) : stLog st }
165setMediaBag :: PandocMonad m => MediaBag -> m ()
162setMediaBag :: PandocMonad m => MediaBag -> m ()
166−setMediaBag mb = modifyCommonState $
163+setMediaBag mb = modifyCommonState $ \st -> st{stMediaBag = mb}
167− \st -> st{stDeferredMediaBag = DeferredMediaBag mb mempty}
169getMediaBag :: PandocMonad m => m MediaBag
165getMediaBag :: PandocMonad m => m MediaBag
170−getMediaBag = do
166+getMediaBag = getsCommonState stMediaBag
172− DeferredMediaBag mb' _ <- getsCommonState stDeferredMediaBag
175−fetchDeferredMedia :: PandocMonad m => m ()
176−fetchDeferredMedia = do
177− (DeferredMediaBag mb defMedia) <- getsCommonState stDeferredMediaBag
178− fetchedMedia <- catMaybes <$> mapM fetchMediaItem defMedia
180− (\(fp, bs, mbMime) mb' -> MB.insertMedia fp mbMime (BL.fromStrict bs) mb')
183insertMedia :: PandocMonad m => FilePath -> Maybe MimeType -> BL.ByteString -> m ()
168insertMedia :: PandocMonad m => FilePath -> Maybe MimeType -> BL.ByteString -> m ()
184insertMedia fp mime bs = do
169insertMedia fp mime bs = do
185− (DeferredMediaBag mb dm) <- getsCommonState stDeferredMediaBag
170+ mb <- getsCommonState stMediaBag
186 let mb' = MB.insertMedia fp mime bs mb
171 let mb' = MB.insertMedia fp mime bs mb
187− modifyCommonState $ \st -> st{stDeferredMediaBag =DeferredMediaBag mb' dm }
172+ modifyCommonState $ \st -> st{stMediaBag = mb' }
189−insertDeferredMedia :: PandocMonad m => FilePath -> m ()
190−insertDeferredMedia fp = do
191− (DeferredMediaBag mb dm) <- getsCommonState stDeferredMediaBag
193− \st -> st{stDeferredMediaBag = DeferredMediaBag mb ((DeferredMediaPath fp) : dm)}
195getInputFiles :: PandocMonad m => m (Maybe [FilePath])
174getInputFiles :: PandocMonad m => m (Maybe [FilePath])
196getInputFiles = getsCommonState stInputFiles
175getInputFiles = getsCommonState stInputFiles
@@ -218,32 +197,8 @@ readFileFromDirs (d:ds) f = catchError
221−newtype DeferredMediaPath = DeferredMediaPath {unDefer :: String}
224−data DeferredMediaBag = DeferredMediaBag MediaBag [DeferredMediaPath]
227−instance Monoid DeferredMediaBag where
228− mempty = DeferredMediaBag mempty mempty
229− mappend (DeferredMediaBag mb lst) (DeferredMediaBag mb' lst') =
230− DeferredMediaBag (mb <> mb') (lst <> lst')
232−-- the internal function for downloading individual items. We want to
233−-- catch errors and return a Nothing with a warning, so we can
234−-- continue without erroring out.
235−fetchMediaItem :: PandocMonad m
236− => DeferredMediaPath
237− -> m (Maybe (FilePath, B.ByteString, Maybe MimeType))
239− (do (bs, mbmime) <- downloadOrRead Nothing (unDefer dfp)
240− return $ Just $ (unDefer dfp, bs, mbmime))
242− (const $ do warning ("Couldn't access media at " ++ unDefer dfp)
245data CommonState = CommonState { stLog :: [(Verbosity, String)]
200data CommonState = CommonState { stLog :: [(Verbosity, String)]
246− , stDeferredMediaBag :: DeferredMediaBag
201+ , stMediaBag :: MediaBag
247 , stInputFiles :: Maybe [FilePath]
202 , stInputFiles :: Maybe [FilePath]
248 , stOutputFile :: Maybe FilePath
203 , stOutputFile :: Maybe FilePath
249 , stVerbosity :: Verbosity
204 , stVerbosity :: Verbosity
@@ -251,7 +206,7 @@ data CommonState = CommonState { stLog :: [(Verbosity, String)]
252instance Default CommonState where
207instance Default CommonState where
253 def = CommonState { stLog = []
208 def = CommonState { stLog = []
254− , stDeferredMediaBag = mempty
209+ , stMediaBag = mempty
255 , stInputFiles = Nothing
210 , stInputFiles = Nothing
256 , stOutputFile = Nothing
211 , stOutputFile = Nothing
257 , stVerbosity = WARNING
212 , stVerbosity = WARNING