From 28321a18bfcf87e5a874ad86c0c7ec82ed3848e4 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Wed, 30 Jul 2014 13:47:07 -0700 Subject: Shared: Added fetchItem', which searches a media bag too. --- src/Text/Pandoc/Shared.hs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/Text/Pandoc/Shared.hs') diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index d296888d6..53f20f232 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -79,6 +79,7 @@ module Text.Pandoc.Shared ( readDataFile, readDataFileUTF8, fetchItem, + fetchItem', openURL, -- * Error handling err, @@ -791,6 +792,19 @@ fetchItem sourceURL s cont <- BS.readFile $ unEscapeString s return (cont, mime) +-- | Like 'fetchItem', but also looks for items in a 'MediaBag'. +fetchItem' :: Maybe MediaBag -> Maybe String -> String + -> IO (Either E.SomeException (BS.ByteString, Maybe String)) +fetchItem' Nothing sourceURL s = fetchItem sourceURL s +fetchItem' (Just media) sourceURL s = do + case M.lookup s media of + Nothing -> fetchItem sourceURL s + Just bs -> do + let mime = case takeExtension s of + ".gz" -> getMimeType $ dropExtension s + x -> getMimeType x + return $ Right (BS.concat $ toChunks bs, mime) + -- | Read from a URL and return raw data and maybe mime type. openURL :: String -> IO (Either E.SomeException (BS.ByteString, Maybe String)) openURL u -- cgit v1.2.3