@@ -48,6 +48,7 @@ import Data.List (isInfixOf)
4848import Data.Maybe (fromMaybe)
4949import qualified Text.Pandoc.UTF8 as UTF8
5050import Text.Pandoc.Definition
51+import Text.Pandoc.MediaBag
5152import Text.Pandoc.Walk (walkM)
5253import Text.Pandoc.Shared (warn, withTempDir, inDirectory, stringify)
5354import Text.Pandoc.Writers.Shared (getField, metaToJSON)
@@ -72,9 +73,10 @@ makePDF :: MonadIO m
7273 -- xelatex, context, wkhtmltopdf)
7374 -> (WriterOptions -> Pandoc -> PandocIO String) -- ^ writer
7475 -> WriterOptions -- ^ options
76+ -> MediaBag -- ^ media
7577 -> Pandoc -- ^ document
7678 -> m (Either ByteString ByteString)
77−makePDF "wkhtmltopdf" writer opts doc@(Pandoc meta _) = liftIO $ do
79+makePDF "wkhtmltopdf" writer opts _mediabag doc@(Pandoc meta _) = liftIO $ do
7880 let mathArgs = case writerHTMLMathMethod opts of
7981 -- with MathJax, wait til all math is rendered:
8082 MathJax _ -> ["--run-script", "MathJax.Hub.Register.StartupHook('End Typeset', function() { window.status = 'mathjax_loaded' });",
@@ -97,33 +99,37 @@ makePDF "wkhtmltopdf" writer opts doc@(Pandoc meta _) = liftIO $ do
9799 ]
98100 source <- runIOorExplode $ writer opts doc
99101 html2pdf (writerVerbose opts) args source
100−makePDF program writer opts doc = liftIO $ withTempDir "tex2pdf." $ \tmpdir -> do
101− doc' <- handleImages opts tmpdir doc
102− source <- runIOorExplode $ writer opts doc'
103− let args = writerLaTeXArgs opts
104− case takeBaseName program of
105− "context" -> context2pdf (writerVerbose opts) tmpdir source
106− prog | prog `elem` ["pdflatex", "lualatex", "xelatex"]
107− -> tex2pdf' (writerVerbose opts) args tmpdir program source
108− _ -> return $ Left $ UTF8.fromStringLazy $ "Unknown program " ++ program
102+makePDF program writer opts mediabag doc =
103+ liftIO $ withTempDir "tex2pdf." $ \tmpdir -> do
104+ doc' <- handleImages opts mediabag tmpdir doc
105+ source <- runIOorExplode $ writer opts doc'
106+ let args = writerLaTeXArgs opts
107+ case takeBaseName program of
108+ "context" -> context2pdf (writerVerbose opts) tmpdir source
109+ prog | prog `elem` ["pdflatex", "lualatex", "xelatex"]
110+ -> tex2pdf' (writerVerbose opts) args tmpdir program source
111+ _ -> return $ Left $ UTF8.fromStringLazy $ "Unknown program " ++ program
109112
110113handleImages :: WriterOptions
114+ -> MediaBag
111115 -> FilePath -- ^ temp dir to store images
112116 -> Pandoc -- ^ document
113117 -> IO Pandoc
114−handleImages opts tmpdir = walkM (convertImages tmpdir) <=< walkM (handleImage' opts tmpdir)
118+handleImages opts mediabag tmpdir =
119+ walkM (convertImages tmpdir) <=< walkM (handleImage' opts mediabag tmpdir)
115120
116121handleImage' :: WriterOptions
122+ -> MediaBag
117123 -> FilePath
118124 -> Inline
119125 -> IO Inline
120−handleImage' opts tmpdir (Image attr ils (src,tit)) = do
126+handleImage' opts mediabag tmpdir (Image attr ils (src,tit)) = do
121127 exists <- doesFileExist src
122128 if exists
123129 then return $ Image attr ils (src,tit)
124130 else do
125131 res <- runIO $ do
126− setMediaBag $ writerMediaBag opts
132+ setMediaBag mediabag
127133 fetchItem (writerSourceURL opts) src
128134 case res of
129135 Right (contents, Just mime) -> do
@@ -137,7 +143,7 @@ handleImage' opts tmpdir (Image attr ils (src,tit)) = do
137143 warn $ "Could not find image `" ++ src ++ "', skipping..."
138144 -- return alt text
139145 return $ Emph ils
140−handleImage' _ _ x = return x
146+handleImage' _ _ _ x = return x
141147
142148convertImages :: FilePath -> Inline -> IO Inline
143149convertImages tmpdir (Image attr ils (src, tit)) = do