git.iko.soy/typeable/pandoc
on master help sign in
Reverted deferred media bag code.
0a4ba91John MacFarlane
src/Text/Pandoc/Class.hs+6−51
@@ -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
109−import Data.Monoid
110−import Data.Maybe (catMaybes)
111import Text.Printf (printf)
108import Text.Printf (printf)
112
109
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 }
164
161
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}
168
164
169getMediaBag :: PandocMonad m => m MediaBag
165getMediaBag :: PandocMonad m => m MediaBag
170−getMediaBag = do
166+getMediaBag = getsCommonState stMediaBag
171− fetchDeferredMedia
172− DeferredMediaBag mb' _ <- getsCommonState stDeferredMediaBag
173− return mb'
174−
175−fetchDeferredMedia :: PandocMonad m => m ()
176−fetchDeferredMedia = do
177− (DeferredMediaBag mb defMedia) <- getsCommonState stDeferredMediaBag
178− fetchedMedia <- catMaybes <$> mapM fetchMediaItem defMedia
179− setMediaBag $ foldr
180− (\(fp, bs, mbMime) mb' -> MB.insertMedia fp mbMime (BL.fromStrict bs) mb')
181− mb fetchedMedia
182
167
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' }
188−
189−insertDeferredMedia :: PandocMonad m => FilePath -> m ()
190−insertDeferredMedia fp = do
191− (DeferredMediaBag mb dm) <- getsCommonState stDeferredMediaBag
192− modifyCommonState $
193− \st -> st{stDeferredMediaBag = DeferredMediaBag mb ((DeferredMediaPath fp) : dm)}
194
173
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
218
197
219--
198--
220
199
221−newtype DeferredMediaPath = DeferredMediaPath {unDefer :: String}
222− deriving (Show, Eq)
223−
224−data DeferredMediaBag = DeferredMediaBag MediaBag [DeferredMediaPath]
225− deriving (Show)
226−
227−instance Monoid DeferredMediaBag where
228− mempty = DeferredMediaBag mempty mempty
229− mappend (DeferredMediaBag mb lst) (DeferredMediaBag mb' lst') =
230− DeferredMediaBag (mb <> mb') (lst <> lst')
231−
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))
238−fetchMediaItem dfp =
239− (do (bs, mbmime) <- downloadOrRead Nothing (unDefer dfp)
240− return $ Just $ (unDefer dfp, bs, mbmime))
241− `catchError`
242− (const $ do warning ("Couldn't access media at " ++ unDefer dfp)
243− return Nothing)
244−
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)]
251
206
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