@@ -57,8 +57,8 @@ import Text.Pandoc.Logging
5757isOk :: Char -> Bool
5858isOk c = isAscii c && isAlphaNum c
5959
60−makeDataURI :: String -> ByteString -> String
61−makeDataURI mime raw =
60+makeDataURI :: (MimeType, ByteString) -> String
61+makeDataURI (mime, raw) =
6262 if textual
6363 then "data:" ++ mime' ++ "," ++ escapeURIString isOk (toString raw)
6464 else "data:" ++ mime' ++ ";base64," ++ toString (encode raw)
@@ -142,10 +142,18 @@ pCSSUrl sourceURL d = P.try $ do
142142 enc <- lift $ getDataURI sourceURL "" url'
143143 return (B.pack $ "url(" ++ enc ++ ")")
144144
145−
146145getDataURI :: PandocMonad m => Maybe String -> MimeType -> String -> m String
147−getDataURI _ _ src@('d':'a':'t':'a':':':_) = return src -- already data: uri
148146getDataURI sourceURL mimetype src = do
147+ res <- getData sourceURL mimetype src
148+ case res of
149+ Left uri -> return uri
150+ Right x -> return $ makeDataURI x
151+
152+getData :: PandocMonad m
153+ => Maybe String -> MimeType -> String
154+ -> m (Either String (MimeType, ByteString))
155+getData _ _ src@('d':'a':'t':'a':':':_) = return $ Left src-- already data: uri
156+getData sourceURL mimetype src = do
149157 let ext = map toLower $ takeExtension src
150158 (raw, respMime) <- fetchItem sourceURL src
151159 let raw' = if ext == ".gz"
@@ -167,7 +175,9 @@ getDataURI sourceURL mimetype src = do
167175 result <- if mime == "text/css"
168176 then cssURLs cssSourceURL (takeDirectory src) raw'
169177 else return raw'
170− return $ makeDataURI mime result
178+ return $ Right (mime, result)
179+
180+
171181
172182-- | Convert HTML into self-contained HTML, incorporating images,
173183-- scripts, and CSS using data: URIs.