@@ -86,7 +86,7 @@ import System.Exit (exitWith, ExitCode(..))
86import Data.Char ( toLower, isLower, isUpper, isAlpha,
86import Data.Char ( toLower, isLower, isUpper, isAlpha,
87 isLetter, isDigit, isSpace )
87 isLetter, isDigit, isSpace )
88import Data.List ( find, isPrefixOf, intercalate )
88import Data.List ( find, isPrefixOf, intercalate )
89−import Network.URI ( escapeURIString, isAbsoluteURI, parseURI )
89+import Network.URI ( escapeURIString, isAbsoluteURI, parseURI, unEscapeString )
90import System.Directory
90import System.Directory
91import Text.Pandoc.MIME (getMimeType)
91import Text.Pandoc.MIME (getMimeType)
92import System.FilePath ( (</>), takeExtension, dropExtension )
92import System.FilePath ( (</>), takeExtension, dropExtension )
@@ -100,6 +100,7 @@ import System.IO (stderr)
100import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
100import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
101 renderOptions)
101 renderOptions)
102import qualified Data.ByteString as B
102import qualified Data.ByteString as B
103+import qualified Data.ByteString.Char8 as B8
103import Network.HTTP (findHeader, rspBody,
104import Network.HTTP (findHeader, rspBody,
104 RequestMethod(..), HeaderName(..), mkRequest)
105 RequestMethod(..), HeaderName(..), mkRequest)
105import Network.Browser (browse, setAllowRedirects, setOutHandler, request)
106import Network.Browser (browse, setAllowRedirects, setOutHandler, request)
@@ -567,7 +568,12 @@ fetchItem sourceDir s =
568-- | Read from a URL and return raw data and maybe mime type.
569-- | Read from a URL and return raw data and maybe mime type.
569openURL :: String -> IO (B.ByteString, Maybe String)
570openURL :: String -> IO (B.ByteString, Maybe String)
572+ | "data:" `isPrefixOf` u =
573+ let mime = takeWhile (/=',') $ drop 5 u
574+ contents = B8.pack $ unEscapeString $ drop 1 $ dropWhile (/=',') u
575+ in return (contents, Just mime)
570−openURL u = getBodyAndMimeType `fmap` browse
576+ | otherwise = getBodyAndMimeType `fmap` browse
571 (do S.liftIO $ UTF8.hPutStrLn stderr $ "Fetching " ++ u ++ "..."
577 (do S.liftIO $ UTF8.hPutStrLn stderr $ "Fetching " ++ u ++ "..."
572 setOutHandler $ const (return ())
578 setOutHandler $ const (return ())
573 setAllowRedirects True
579 setAllowRedirects True