From 0e8b19e709c61b0eda8ba2191d99991ad3f50458 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 24 Feb 2017 11:27:52 +0100 Subject: Refactored getData from getDataURI in SelfContained. --- src/Text/Pandoc/SelfContained.hs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Text/Pandoc/SelfContained.hs b/src/Text/Pandoc/SelfContained.hs index 4ab13d760..6038baa2f 100644 --- a/src/Text/Pandoc/SelfContained.hs +++ b/src/Text/Pandoc/SelfContained.hs @@ -57,8 +57,8 @@ import Text.Pandoc.Logging isOk :: Char -> Bool isOk c = isAscii c && isAlphaNum c -makeDataURI :: String -> ByteString -> String -makeDataURI mime raw = +makeDataURI :: (MimeType, ByteString) -> String +makeDataURI (mime, raw) = if textual then "data:" ++ mime' ++ "," ++ escapeURIString isOk (toString raw) else "data:" ++ mime' ++ ";base64," ++ toString (encode raw) @@ -142,10 +142,18 @@ pCSSUrl sourceURL d = P.try $ do enc <- lift $ getDataURI sourceURL "" url' return (B.pack $ "url(" ++ enc ++ ")") - getDataURI :: PandocMonad m => Maybe String -> MimeType -> String -> m String -getDataURI _ _ src@('d':'a':'t':'a':':':_) = return src -- already data: uri getDataURI sourceURL mimetype src = do + res <- getData sourceURL mimetype src + case res of + Left uri -> return uri + Right x -> return $ makeDataURI x + +getData :: PandocMonad m + => Maybe String -> MimeType -> String + -> m (Either String (MimeType, ByteString)) +getData _ _ src@('d':'a':'t':'a':':':_) = return $ Left src-- already data: uri +getData sourceURL mimetype src = do let ext = map toLower $ takeExtension src (raw, respMime) <- fetchItem sourceURL src let raw' = if ext == ".gz" @@ -167,7 +175,9 @@ getDataURI sourceURL mimetype src = do result <- if mime == "text/css" then cssURLs cssSourceURL (takeDirectory src) raw' else return raw' - return $ makeDataURI mime result + return $ Right (mime, result) + + -- | Convert HTML into self-contained HTML, incorporating images, -- scripts, and CSS using data: URIs. -- cgit v1.2.3