diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Class/PandocMonad.hs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Class/PandocMonad.hs b/src/Text/Pandoc/Class/PandocMonad.hs index fdec5616d..51d017c06 100644 --- a/src/Text/Pandoc/Class/PandocMonad.hs +++ b/src/Text/Pandoc/Class/PandocMonad.hs @@ -40,6 +40,7 @@ module Text.Pandoc.Class.PandocMonad , setUserDataDir , getUserDataDir , fetchItem + , extractURIData , getInputFiles , setInputFiles , getOutputFile @@ -78,6 +79,8 @@ import Text.Pandoc.MediaBag (MediaBag, lookupMedia, MediaItem(..)) import Text.Pandoc.Shared (safeRead, makeCanonical, tshow) import Text.Pandoc.URI (uriPathToPath) import Text.Pandoc.Walk (walkM) +import qualified Text.Pandoc.UTF8 as UTF8 +import Data.ByteString.Base64 (decodeLenient) import Text.Parsec (ParsecT, getPosition, sourceLine, sourceName) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL @@ -372,6 +375,16 @@ downloadOrRead s = do convertSlash '\\' = '/' convertSlash x = x +-- Extract data from a data URI's path component. +extractURIData :: String -> (B.ByteString, Maybe MimeType) +extractURIData upath = + case break (== ';') (filter (/= ' ') mimespec) of + (mime', ";base64") -> (decodeLenient contents, Just (T.pack mime')) + (mime', _) -> (contents, Just (T.pack mime')) + where + (mimespec, rest) = break (== ',') $ unEscapeString upath + contents = UTF8.fromString $ drop 1 rest + -- | Checks if the file path is relative to a parent directory. isRelativeToParentDir :: FilePath -> Bool isRelativeToParentDir fname = |
