@@ -34,14 +34,13 @@ module Text.Pandoc.PDF ( makePDF ) where
35import qualified Codec.Picture as JP
35import qualified Codec.Picture as JP
36import qualified Control.Exception as E
36import qualified Control.Exception as E
37−import Control.Monad (unless, when, (<=<))
37+import Control.Monad (unless, when)
38import Control.Monad.Trans (MonadIO (..))
38import Control.Monad.Trans (MonadIO (..))
39import qualified Data.ByteString as BS
39import qualified Data.ByteString as BS
40import Data.ByteString.Lazy (ByteString)
40import Data.ByteString.Lazy (ByteString)
41import qualified Data.ByteString.Lazy as B
41import qualified Data.ByteString.Lazy as B
42import qualified Data.ByteString.Lazy as BL
42import qualified Data.ByteString.Lazy as BL
43import qualified Data.ByteString.Lazy.Char8 as BC
43import qualified Data.ByteString.Lazy.Char8 as BC
44−import Data.Digest.Pure.SHA (sha1, showDigest)
45import Data.List (isInfixOf)
44import Data.List (isInfixOf)
46import Data.Maybe (fromMaybe)
45import Data.Maybe (fromMaybe)
47import Data.Monoid ((<>))
46import Data.Monoid ((<>))
@@ -53,7 +52,7 @@ import System.IO (stdout)
53import System.IO.Temp (withTempDirectory, withTempFile)
52import System.IO.Temp (withTempDirectory, withTempFile)
54import Text.Pandoc.Definition
53import Text.Pandoc.Definition
55import Text.Pandoc.MediaBag
54import Text.Pandoc.MediaBag
56−import Text.Pandoc.MIME (extensionFromMimeType, getMimeType)
55+import Text.Pandoc.MIME (getMimeType)
57import Text.Pandoc.Options (HTMLMathMethod (..), WriterOptions (..))
56import Text.Pandoc.Options (HTMLMathMethod (..), WriterOptions (..))
58import Text.Pandoc.Process (pipeProcess)
57import Text.Pandoc.Process (pipeProcess)
59import Text.Pandoc.Shared (inDirectory, stringify, withTempDir)
58import Text.Pandoc.Shared (inDirectory, stringify, withTempDir)
@@ -63,8 +62,8 @@ import Text.Pandoc.Writers.Shared (getField, metaToJSON)
63#ifdef _WINDOWS
62#ifdef _WINDOWS
64import Data.List (intercalate)
63import Data.List (intercalate)
66−import Text.Pandoc.Class (PandocIO, fetchItem, report, runIO, runIOorExplode,
65+import Text.Pandoc.Class (PandocIO, report, runIO, runIOorExplode,
67− setMediaBag, setVerbosity)
66+ setMediaBag, setVerbosity, fillMedia, extractMedia)
68import Text.Pandoc.Logging
67import Text.Pandoc.Logging
70#ifdef _WINDOWS
69#ifdef _WINDOWS
@@ -135,40 +134,13 @@ handleImages :: Verbosity
135 -> FilePath -- ^ temp dir to store images
134 -> FilePath -- ^ temp dir to store images
136 -> Pandoc -- ^ document
135 -> Pandoc -- ^ document
137 -> IO Pandoc
136 -> IO Pandoc
138−handleImages verbosity opts mediabag tmpdir =
137+handleImages verbosity opts mediabag tmpdir doc = do
139− walkM (convertImages verbosity tmpdir) <=<
138+ doc' <- runIOorExplode $ do
140− walkM (handleImage' verbosity opts mediabag tmpdir)
142−handleImage' :: Verbosity
148−handleImage' verbosity opts mediabag tmpdir (Image attr ils (src,tit)) = do
149− exists <- doesFileExist src
151− then return $ Image attr ils (src,tit)
154− setVerbosity verbosity
139+ setVerbosity verbosity
155− setMediaBag mediabag
140+ setMediaBag mediabag
156− fetchItem (writerSourceURL opts) src
141+ fillMedia (writerSourceURL opts) doc >>=
157− case res of
142+ extractMedia tmpdir
158− Right (contents, Just mime) -> do
143+ walkM (convertImages verbosity tmpdir) doc'
159− let ext = fromMaybe (takeExtension src) $
160− extensionFromMimeType mime
161− let basename = showDigest $ sha1 $ BL.fromChunks [contents]
162− let fname = tmpdir </> basename <.> ext
163− BS.writeFile fname contents
164− return $ Image attr ils (fname,tit)
167− setVerbosity verbosity
168− report $ CouldNotFetchResource src "skipping..."
171−handleImage' _ _ _ _ x = return x
173convertImages :: Verbosity -> FilePath -> Inline -> IO Inline
145convertImages :: Verbosity -> FilePath -> Inline -> IO Inline
174convertImages verbosity tmpdir (Image attr ils (src, tit)) = do
146convertImages verbosity tmpdir (Image attr ils (src, tit)) = do