aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2022-08-14 10:40:22 -0700
committerJohn MacFarlane <[email protected]>2022-08-14 16:33:37 -0700
commit6625e9655ed2bb0c4bd4dd91b5959a103deab1cb (patch)
treee2d1d401da4b820caf21a198254cb3cc4dfae8bc /src
parent2f5c75132aa55265de6391761fba0d16a8025272 (diff)
Use base64 instead of base64-bytestring.
It is supposed to be faster and more standards-compliant.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Class/IO.hs4
-rw-r--r--src/Text/Pandoc/Readers/FB2.hs4
-rw-r--r--src/Text/Pandoc/Readers/HTML.hs5
-rw-r--r--src/Text/Pandoc/SelfContained.hs4
-rw-r--r--src/Text/Pandoc/Writers/FB2.hs5
5 files changed, 10 insertions, 12 deletions
diff --git a/src/Text/Pandoc/Class/IO.hs b/src/Text/Pandoc/Class/IO.hs
index 816d71048..8fa5b0fcf 100644
--- a/src/Text/Pandoc/Class/IO.hs
+++ b/src/Text/Pandoc/Class/IO.hs
@@ -36,7 +36,7 @@ module Text.Pandoc.Class.IO
import Control.Monad.Except (throwError)
import Control.Monad.IO.Class (MonadIO, liftIO)
-import Data.ByteString.Base64 (decodeLenient)
+import Data.ByteString.Base64.URL (decodeBase64Lenient)
import Data.ByteString.Lazy (toChunks)
import Data.Text (Text, pack, unpack)
import Data.Time (TimeZone, UTCTime)
@@ -125,7 +125,7 @@ openURL u
let mime = T.takeWhile (/=',') u''
let contents = UTF8.fromString $
unEscapeString $ T.unpack $ T.drop 1 $ T.dropWhile (/=',') u''
- return (decodeLenient contents, Just mime)
+ return (decodeBase64Lenient contents, Just mime)
| otherwise = do
let toReqHeader (n, v) = (CI.mk (UTF8.fromText n), UTF8.fromText v)
customHeaders <- map toReqHeader <$> getsCommonState stRequestHeaders
diff --git a/src/Text/Pandoc/Readers/FB2.hs b/src/Text/Pandoc/Readers/FB2.hs
index 84e5278db..eeb7c062d 100644
--- a/src/Text/Pandoc/Readers/FB2.hs
+++ b/src/Text/Pandoc/Readers/FB2.hs
@@ -25,7 +25,7 @@ TODO:
module Text.Pandoc.Readers.FB2 ( readFB2 ) where
import Control.Monad.Except (throwError)
import Control.Monad.State.Strict
-import Data.ByteString.Base64.Lazy
+import Data.ByteString.Lazy.Base64.URL
import Data.Functor
import Data.List (intersperse)
import qualified Data.Map as M
@@ -202,7 +202,7 @@ parseBinaryElement e =
report $ IgnoredElement "binary without content-type attribute"
(Just filename, contentType) ->
insertMedia (T.unpack filename) contentType
- (decodeLenient
+ (decodeBase64Lenient
(UTF8.fromTextLazy . TL.fromStrict . strContent $ e))
-- * Type parsers
diff --git a/src/Text/Pandoc/Readers/HTML.hs b/src/Text/Pandoc/Readers/HTML.hs
index 711457312..918951787 100644
--- a/src/Text/Pandoc/Readers/HTML.hs
+++ b/src/Text/Pandoc/Readers/HTML.hs
@@ -27,7 +27,7 @@ import Control.Applicative ((<|>))
import Control.Monad (guard, msum, mzero, unless, void)
import Control.Monad.Except (throwError, catchError)
import Control.Monad.Reader (ask, asks, lift, local, runReaderT)
-import Data.ByteString.Base64 (encode)
+import Data.Text.Encoding.Base64.URL (encodeBase64)
import Data.Char (isAlphaNum, isLetter)
import Data.Default (Default (..), def)
import Data.Foldable (for_)
@@ -785,8 +785,7 @@ pSvg = do
contents <- many (notFollowedBy (pCloses "svg") >> pAny)
closet <- TagClose "svg" <$ (pCloses "svg" <|> eof)
let rawText = T.strip $ renderTags' (opent : contents ++ [closet])
- let svgData = "data:image/svg+xml;base64," <>
- UTF8.toText (encode $ UTF8.fromText rawText)
+ let svgData = "data:image/svg+xml;base64," <> encodeBase64 rawText
return $ B.imageWith (ident,cls,[]) svgData mempty mempty
pCodeWithClass :: PandocMonad m => Text -> Text -> TagParser m Inlines
diff --git a/src/Text/Pandoc/SelfContained.hs b/src/Text/Pandoc/SelfContained.hs
index 28af691b2..da419dac8 100644
--- a/src/Text/Pandoc/SelfContained.hs
+++ b/src/Text/Pandoc/SelfContained.hs
@@ -19,7 +19,7 @@ import Codec.Compression.GZip as Gzip
import Control.Applicative ((<|>))
import Control.Monad.Trans (lift)
import Data.ByteString (ByteString)
-import Data.ByteString.Base64
+import Data.ByteString.Base64.URL (encodeBase64)
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy as L
import qualified Data.Text as T
@@ -45,7 +45,7 @@ makeDataURI :: (MimeType, ByteString) -> T.Text
makeDataURI (mime, raw) =
if textual
then "data:" <> mime' <> "," <> T.pack (escapeURIString isOk (toString raw))
- else "data:" <> mime' <> ";base64," <> toText (encode raw)
+ else "data:" <> mime' <> ";base64," <> encodeBase64 raw
where textual = "text/" `T.isPrefixOf` mime
mime' = if textual && T.any (== ';') mime
then mime <> ";charset=utf-8"
diff --git a/src/Text/Pandoc/Writers/FB2.hs b/src/Text/Pandoc/Writers/FB2.hs
index 81aa7eee8..de5e9444e 100644
--- a/src/Text/Pandoc/Writers/FB2.hs
+++ b/src/Text/Pandoc/Writers/FB2.hs
@@ -21,14 +21,13 @@ module Text.Pandoc.Writers.FB2 (writeFB2) where
import Control.Monad (zipWithM)
import Control.Monad.Except (catchError, throwError)
import Control.Monad.State.Strict (StateT, evalStateT, get, gets, lift, liftM, modify)
-import Data.ByteString.Base64 (encode)
+import Data.ByteString.Base64.URL (encodeBase64)
import Data.Char (isAscii, isControl, isSpace)
import Data.Either (lefts, rights)
import Data.List (intercalate)
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
-import qualified Data.Text.Encoding as TE
import Text.Pandoc.Network.HTTP (urlEncode)
import Text.Pandoc.XML.Light as X
@@ -237,7 +236,7 @@ fetchImage href link = do
report $ CouldNotDetermineMimeType link
return Nothing
Just mime -> return $ Just (mime,
- TE.decodeUtf8 $ encode bs))
+ encodeBase64 bs))
(\e ->
do report $ CouldNotFetchResource link (tshow e)
return Nothing)