aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/UTF8.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/UTF8.hs')
-rw-r--r--src/Text/Pandoc/UTF8.hs30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/Text/Pandoc/UTF8.hs b/src/Text/Pandoc/UTF8.hs
index 5be7d3c8e..1f2b4b695 100644
--- a/src/Text/Pandoc/UTF8.hs
+++ b/src/Text/Pandoc/UTF8.hs
@@ -35,6 +35,10 @@ module Text.Pandoc.UTF8 ( readFile
, hPutStr
, hPutStrLn
, hGetContents
+ , toString
+ , fromString
+ , toStringLazy
+ , fromStringLazy
, encodePath
, decodeArg
)
@@ -50,6 +54,13 @@ import System.IO hiding (readFile, writeFile, getContents,
putStr, putStrLn, hPutStr, hPutStrLn, hGetContents)
import Prelude hiding (readFile, writeFile, getContents, putStr, putStrLn )
import qualified System.IO as IO
+import qualified Data.ByteString.Char8 as B
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.Text.Encoding as T
+import qualified Data.Text as T
+import qualified Data.Text.Lazy as TL
+import qualified Data.Text.Lazy.Encoding as TL
+import Data.Text.Encoding.Error
readFile :: FilePath -> IO String
readFile f = do
@@ -75,15 +86,28 @@ hPutStrLn :: Handle -> String -> IO ()
hPutStrLn h s = hSetEncoding h utf8 >> IO.hPutStrLn h s
hGetContents :: Handle -> IO String
-hGetContents h = hSetEncoding h utf8_bom >> hSetNewlineMode h universalNewlineMode
+hGetContents h = hSetEncoding h utf8_bom
+ >> hSetNewlineMode h universalNewlineMode
>> IO.hGetContents h
+toString :: B.ByteString -> String
+toString = T.unpack . T.decodeUtf8With lenientDecode
+
+fromString :: String -> B.ByteString
+fromString = T.encodeUtf8 . T.pack
+
+toStringLazy :: BL.ByteString -> String
+toStringLazy = TL.unpack . TL.decodeUtf8With lenientDecode
+
+fromStringLazy :: String -> BL.ByteString
+fromStringLazy = TL.encodeUtf8 . TL.pack
+
encodePath :: FilePath -> FilePath
decodeArg :: String -> String
#if MIN_VERSION_base(4,4,0)
encodePath = id
decodeArg = id
#else
-encodePath = encodeString
-decodeArg = decodeString
+encodePath = B.unpack . fromString
+decodeArg = toString . B.pack
#endif