git.iko.soy/typeable/pandoc
on master help sign in
Removed writerMediaBag from WriterOpts.

...since this is now handled through PandocMonad. Added an explicit MediaBag parameter to makePDF and makeSelfContained.

commita3c3694024c1cb58748a31983bccdc4a58af567e authorJohn MacFarlane <jgm@berkeley.edu> dateSun 15 Jan 2017, 21:30 (10 years ago) parent0bcc81c
3 files changed+27−23
pandoc.hs+4−6 src/Text/Pandoc/PDF.hs+20−14 src/Text/Pandoc/SelfContained.hs+3−3
pandoc.hs+4−6
@@ -335,7 +335,6 @@ convertWithOpts opts args = do
335335 writerEpubChapterLevel = epubChapterLevel,
336336 writerTOCDepth = epubTOCDepth,
337337 writerReferenceDoc = referenceDoc,
338− writerMediaBag = mempty,
339338 writerVerbose = verbose,
340339 writerLaTeXArgs = latexEngineArgs
341340 }
@@ -394,10 +393,9 @@ convertWithOpts opts args = do
394393 applyTransforms transforms >=>
395394 applyFilters datadir filters' [format]) doc
396395
397− let writerOptions' = writerOptions{ writerMediaBag = media }
398396 case writer of
399397 -- StringWriter f -> f writerOptions doc' >>= writerFn outputFile
400− ByteStringWriter f -> f writerOptions' doc' >>= writeFnBinary outputFile
398+ ByteStringWriter f -> f writerOptions doc' >>= writeFnBinary outputFile
401399 StringWriter f
402400 | pdfOutput -> do
403401 -- make sure writer is latex or beamer or context or html5
@@ -415,7 +413,7 @@ convertWithOpts opts args = do
415413 err 41 $ pdfprog ++ " not found. " ++
416414 pdfprog ++ " is needed for pdf output."
417415
418− res <- makePDF pdfprog f writerOptions' doc'
416+ res <- makePDF pdfprog f writerOptions media doc'
419417 case res of
420418 Right pdf -> writeFnBinary outputFile pdf
421419 Left err' -> liftIO $ do
@@ -426,12 +424,12 @@ convertWithOpts opts args = do
426424 let htmlFormat = format `elem`
427425 ["html","html5","s5","slidy","slideous","dzslides","revealjs"]
428426 selfcontain = if selfContained && htmlFormat
429− then makeSelfContained writerOptions'
427+ then makeSelfContained writerOptions media
430428 else return
431429 handleEntities = if htmlFormat && ascii
432430 then toEntities
433431 else id
434− output <- f writerOptions' doc'
432+ output <- f writerOptions doc'
435433 selfcontain (output ++ ['\n' | not standalone']) >>=
436434 writerFn outputFile . handleEntities
437435
src/Text/Pandoc/PDF.hs+20−14
@@ -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
src/Text/Pandoc/SelfContained.hs+3−3
@@ -174,8 +174,8 @@ getDataURI media sourceURL mimetype src = do
174174
175175-- | Convert HTML into self-contained HTML, incorporating images,
176176-- scripts, and CSS using data: URIs.
177−makeSelfContained :: MonadIO m => WriterOptions -> String -> m String
178−makeSelfContained opts inp = liftIO $ do
177+makeSelfContained :: MonadIO m => WriterOptions -> MediaBag -> String -> m String
178+makeSelfContained opts mediabag inp = liftIO $ do
179179 let tags = parseTags inp
180− out' <- mapM (convertTag (writerMediaBag opts) (writerSourceURL opts)) tags
180+ out' <- mapM (convertTag mediabag (writerSourceURL opts)) tags
181181 return $ renderTags' out'