{-# LANGUAGE NoImplicitPrelude
 , BangPatterns
 , TypeApplications
 , MultiWayIf
 #-}{-# OPTIONS_GHC -funbox-strict-fields #-}moduleSystem.OsString.Encoding.InternalwhereimportqualifiedSystem.OsString.Data.ByteString.Short asBS8importqualifiedSystem.OsString.Data.ByteString.Short.Word16 asBS16importSystem.OsString.Internal.Exception importGHC.BaseimportGHC.RealimportGHC.Num-- import GHC.IOimportGHC.IO.BufferimportGHC.IO.Encoding.FailureimportGHC.IO.Encoding.TypesimportData.BitsimportControl.Exception(SomeException,try,Exception(displayException),evaluate)importqualifiedGHC.ForeignasGHCimportData.Either(Either)importGHC.IO(unsafePerformIO)importControl.DeepSeq(force,NFData(rnf))importData.Bifunctor(first)importData.Data(Typeable)importGHC.Show(Show(show))importNumeric(showHex)importForeign.C(CStringLen)importData.Char(chr)importForeignimportGHC.IO.Encoding(getFileSystemEncoding,getLocaleEncoding)-- ------------------------------------------------------------------------------- UCS-2 LE--ucs2le ::TextEncodingucs2le :: TextEncoding
ucs2le =CodingFailureMode -> TextEncoding
mkUcs2le CodingFailureMode
ErrorOnCodingFailuremkUcs2le ::CodingFailureMode->TextEncodingmkUcs2le :: CodingFailureMode -> TextEncoding
mkUcs2le CodingFailureMode
cfm =TextEncoding{textEncodingName :: String
textEncodingName=String
"UCS-2LE",mkTextDecoder :: IO (TextDecoder ())
mkTextDecoder=CodingFailureMode -> IO (TextDecoder ())
ucs2le_DF CodingFailureMode
cfm ,mkTextEncoder :: IO (TextEncoder ())
mkTextEncoder=CodingFailureMode -> IO (TextEncoder ())
ucs2le_EF CodingFailureMode
cfm }ucs2le_DF ::CodingFailureMode->IO(TextDecoder())ucs2le_DF :: CodingFailureMode -> IO (TextDecoder ())
ucs2le_DF CodingFailureMode
cfm =TextDecoder () -> IO (TextDecoder ())
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(BufferCodec{encode :: CodeBuffer Word8 Char
encode=CodeBuffer Word8 Char
ucs2le_decode ,recover :: Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char)
recover=CodingFailureMode
-> Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char)
recoverDecodeCodingFailureMode
cfm ,close :: IO ()
close=() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(),getState :: IO ()
getState=() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(),setState :: () -> IO ()
setState=IO () -> () -> IO ()
forall a b. a -> b -> a
const(IO () -> () -> IO ()) -> IO () -> () -> IO ()
forall a b. (a -> b) -> a -> b
$() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return()})ucs2le_EF ::CodingFailureMode->IO(TextEncoder())ucs2le_EF :: CodingFailureMode -> IO (TextEncoder ())
ucs2le_EF CodingFailureMode
cfm =TextEncoder () -> IO (TextEncoder ())
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(BufferCodec{encode :: CodeBuffer Char Word8
encode=CodeBuffer Char Word8
ucs2le_encode ,recover :: Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recover=CodingFailureMode
-> Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recoverEncodeCodingFailureMode
cfm ,close :: IO ()
close=() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(),getState :: IO ()
getState=() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(),setState :: () -> IO ()
setState=IO () -> () -> IO ()
forall a b. a -> b -> a
const(IO () -> () -> IO ()) -> IO () -> () -> IO ()
forall a b. (a -> b) -> a -> b
$() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return()})ucs2le_decode ::DecodeBufferucs2le_decode :: CodeBuffer Word8 Char
ucs2le_decode input :: Buffer Word8
input @Buffer{bufRaw :: forall e. Buffer e -> RawBuffer e
bufRaw=RawBuffer Word8
iraw ,bufL :: forall e. Buffer e -> Int
bufL=Int
ir0 ,bufR :: forall e. Buffer e -> Int
bufR=Int
iw ,bufSize :: forall e. Buffer e -> Int
bufSize=Int
_}output :: Buffer Char
output @Buffer{bufRaw :: forall e. Buffer e -> RawBuffer e
bufRaw=RawBuffer Char
oraw ,bufL :: forall e. Buffer e -> Int
bufL=Int
_,bufR :: forall e. Buffer e -> Int
bufR=Int
ow0 ,bufSize :: forall e. Buffer e -> Int
bufSize=Int
os }=letloop :: Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop !Int
ir !Int
ow |Int
ow Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
os =CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done CodingProgress
OutputUnderflowInt
ir Int
ow |Int
ir Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
iw =CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done CodingProgress
InputUnderflowInt
ir Int
ow |Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
iw =CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done CodingProgress
InputUnderflowInt
ir Int
ow |Bool
otherwise=doWord8
c0 <-RawBuffer Word8 -> Int -> IO Word8
readWord8BufRawBuffer Word8
iraw Int
ir Word8
c1 <-RawBuffer Word8 -> Int -> IO Word8
readWord8BufRawBuffer Word8
iraw (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)letx1 :: Int
x1 =Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralWord8
c1 Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftL`Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
+Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralWord8
c0 Int
ow' <-RawBuffer Char -> Int -> Char -> IO Int
writeCharBufRawBuffer Char
oraw Int
ow (Int -> Char
unsafeChrInt
x1 )Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)Int
ow' -- lambda-lifted, to avoid thunks being built in the inner-loop:done :: a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done a
why !Int
ir !Int
ow =(a, Buffer Word8, Buffer Char) -> m (a, Buffer Word8, Buffer Char)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return(a
why ,ifInt
ir Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
iw thenBuffer Word8
input {bufL :: Int
bufL=Int
0,bufR :: Int
bufR=Int
0}elseBuffer Word8
input {bufL :: Int
bufL=Int
ir },Buffer Char
output {bufR :: Int
bufR=Int
ow })inInt -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop Int
ir0 Int
ow0 ucs2le_encode ::EncodeBufferucs2le_encode :: CodeBuffer Char Word8
ucs2le_encode input :: Buffer Char
input @Buffer{bufRaw :: forall e. Buffer e -> RawBuffer e
bufRaw=RawBuffer Char
iraw ,bufL :: forall e. Buffer e -> Int
bufL=Int
ir0 ,bufR :: forall e. Buffer e -> Int
bufR=Int
iw ,bufSize :: forall e. Buffer e -> Int
bufSize=Int
_}output :: Buffer Word8
output @Buffer{bufRaw :: forall e. Buffer e -> RawBuffer e
bufRaw=RawBuffer Word8
oraw ,bufL :: forall e. Buffer e -> Int
bufL=Int
_,bufR :: forall e. Buffer e -> Int
bufR=Int
ow0 ,bufSize :: forall e. Buffer e -> Int
bufSize=Int
os }=letdone :: a -> Int -> Int -> m (a, Buffer Char, Buffer Word8)
done a
why !Int
ir !Int
ow =(a, Buffer Char, Buffer Word8) -> m (a, Buffer Char, Buffer Word8)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return(a
why ,ifInt
ir Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
iw thenBuffer Char
input {bufL :: Int
bufL=Int
0,bufR :: Int
bufR=Int
0}elseBuffer Char
input {bufL :: Int
bufL=Int
ir },Buffer Word8
output {bufR :: Int
bufR=Int
ow })loop :: Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop !Int
ir !Int
ow |Int
ir Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
iw =CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Char, Buffer Word8)
done CodingProgress
InputUnderflowInt
ir Int
ow |Int
os Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ow Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<Int
2=CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Char, Buffer Word8)
done CodingProgress
OutputUnderflowInt
ir Int
ow |Bool
otherwise=do(Char
c ,Int
ir' )<-RawBuffer Char -> Int -> IO (Char, Int)
readCharBufRawBuffer Char
iraw Int
ir caseChar -> Int
ordChar
c ofInt
x |Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<Int
0x10000->doRawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8BufRawBuffer Word8
oraw Int
ow (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegralInt
x )RawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8BufRawBuffer Word8
oraw (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)(Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral(Int
x Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftR`Int
8))Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir' (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)|Bool
otherwise->CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Char, Buffer Word8)
done CodingProgress
InvalidSequenceInt
ir Int
ow inInt -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir0 Int
ow0 -- ------------------------------------------------------------------------------- UTF-16b---- | Mimics the base encoding for filesystem operations. This should be total on all inputs (word16 byte arrays).---- Note that this has a subtle difference to 'encodeWithBaseWindows'/'decodeWithBaseWindows': it doesn't care for-- the @0x0000@ end marker and will as such produce different results. Use @takeWhile (/= '\NUL')@ on the input-- to recover this behavior.utf16le_b ::TextEncodingutf16le_b :: TextEncoding
utf16le_b =CodingFailureMode -> TextEncoding
mkUTF16le_b CodingFailureMode
ErrorOnCodingFailuremkUTF16le_b ::CodingFailureMode->TextEncodingmkUTF16le_b :: CodingFailureMode -> TextEncoding
mkUTF16le_b CodingFailureMode
cfm =TextEncoding{textEncodingName :: String
textEncodingName=String
"UTF-16LE_b",mkTextDecoder :: IO (TextDecoder ())
mkTextDecoder=CodingFailureMode -> IO (TextDecoder ())
utf16le_b_DF CodingFailureMode
cfm ,mkTextEncoder :: IO (TextEncoder ())
mkTextEncoder=CodingFailureMode -> IO (TextEncoder ())
utf16le_b_EF CodingFailureMode
cfm }utf16le_b_DF ::CodingFailureMode->IO(TextDecoder())utf16le_b_DF :: CodingFailureMode -> IO (TextDecoder ())
utf16le_b_DF CodingFailureMode
cfm =TextDecoder () -> IO (TextDecoder ())
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(BufferCodec{encode :: CodeBuffer Word8 Char
encode=CodeBuffer Word8 Char
utf16le_b_decode ,recover :: Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char)
recover=CodingFailureMode
-> Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char)
recoverDecodeCodingFailureMode
cfm ,close :: IO ()
close=() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(),getState :: IO ()
getState=() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(),setState :: () -> IO ()
setState=IO () -> () -> IO ()
forall a b. a -> b -> a
const(IO () -> () -> IO ()) -> IO () -> () -> IO ()
forall a b. (a -> b) -> a -> b
$() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return()})utf16le_b_EF ::CodingFailureMode->IO(TextEncoder())utf16le_b_EF :: CodingFailureMode -> IO (TextEncoder ())
utf16le_b_EF CodingFailureMode
cfm =TextEncoder () -> IO (TextEncoder ())
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(BufferCodec{encode :: CodeBuffer Char Word8
encode=CodeBuffer Char Word8
utf16le_b_encode ,recover :: Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recover=CodingFailureMode
-> Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recoverEncodeCodingFailureMode
cfm ,close :: IO ()
close=() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(),getState :: IO ()
getState=() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(),setState :: () -> IO ()
setState=IO () -> () -> IO ()
forall a b. a -> b -> a
const(IO () -> () -> IO ()) -> IO () -> () -> IO ()
forall a b. (a -> b) -> a -> b
$() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return()})utf16le_b_decode ::DecodeBufferutf16le_b_decode :: CodeBuffer Word8 Char
utf16le_b_decode input :: Buffer Word8
input @Buffer{bufRaw :: forall e. Buffer e -> RawBuffer e
bufRaw=RawBuffer Word8
iraw ,bufL :: forall e. Buffer e -> Int
bufL=Int
ir0 ,bufR :: forall e. Buffer e -> Int
bufR=Int
iw ,bufSize :: forall e. Buffer e -> Int
bufSize=Int
_}output :: Buffer Char
output @Buffer{bufRaw :: forall e. Buffer e -> RawBuffer e
bufRaw=RawBuffer Char
oraw ,bufL :: forall e. Buffer e -> Int
bufL=Int
_,bufR :: forall e. Buffer e -> Int
bufR=Int
ow0 ,bufSize :: forall e. Buffer e -> Int
bufSize=Int
os }=letloop :: Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop !Int
ir !Int
ow |Int
ow Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
os =CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done CodingProgress
OutputUnderflowInt
ir Int
ow |Int
ir Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
iw =CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done CodingProgress
InputUnderflowInt
ir Int
ow |Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
iw =CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done CodingProgress
InputUnderflowInt
ir Int
ow |Bool
otherwise=doWord8
c0 <-RawBuffer Word8 -> Int -> IO Word8
readWord8BufRawBuffer Word8
iraw Int
ir Word8
c1 <-RawBuffer Word8 -> Int -> IO Word8
readWord8BufRawBuffer Word8
iraw (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)letx1 :: Int
x1 =Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralWord8
c1 Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftL`Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
+Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralWord8
c0 if|Int
iw Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ir Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
4->doWord8
c2 <-RawBuffer Word8 -> Int -> IO Word8
readWord8BufRawBuffer Word8
iraw (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)Word8
c3 <-RawBuffer Word8 -> Int -> IO Word8
readWord8BufRawBuffer Word8
iraw (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3)letx2 :: Int
x2 =Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralWord8
c3 Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftL`Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
+Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralWord8
c2 if|Int
0xd800Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
x1 Bool -> Bool -> Bool
&&Int
x1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
0xdbff,Int
0xdc00Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
x2 Bool -> Bool -> Bool
&&Int
x2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
0xdfff->doInt
ow' <-RawBuffer Char -> Int -> Char -> IO Int
writeCharBufRawBuffer Char
oraw Int
ow (Int -> Char
unsafeChr((Int
x1 Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
0xd800)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
0x400Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
x2 Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
0xdc00)Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
0x10000))Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4)Int
ow' |Bool
otherwise->doInt
ow' <-RawBuffer Char -> Int -> Char -> IO Int
writeCharBufRawBuffer Char
oraw Int
ow (Int -> Char
unsafeChrInt
x1 )Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)Int
ow' |Int
iw Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ir Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
2->doInt
ow' <-RawBuffer Char -> Int -> Char -> IO Int
writeCharBufRawBuffer Char
oraw Int
ow (Int -> Char
unsafeChrInt
x1 )Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)Int
ow' |Bool
otherwise->CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done CodingProgress
InputUnderflowInt
ir Int
ow -- lambda-lifted, to avoid thunks being built in the inner-loop:done :: a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done a
why !Int
ir !Int
ow =(a, Buffer Word8, Buffer Char) -> m (a, Buffer Word8, Buffer Char)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return(a
why ,ifInt
ir Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
iw thenBuffer Word8
input {bufL :: Int
bufL=Int
0,bufR :: Int
bufR=Int
0}elseBuffer Word8
input {bufL :: Int
bufL=Int
ir },Buffer Char
output {bufR :: Int
bufR=Int
ow })inInt -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop Int
ir0 Int
ow0 utf16le_b_encode ::EncodeBufferutf16le_b_encode :: CodeBuffer Char Word8
utf16le_b_encode input :: Buffer Char
input @Buffer{bufRaw :: forall e. Buffer e -> RawBuffer e
bufRaw=RawBuffer Char
iraw ,bufL :: forall e. Buffer e -> Int
bufL=Int
ir0 ,bufR :: forall e. Buffer e -> Int
bufR=Int
iw ,bufSize :: forall e. Buffer e -> Int
bufSize=Int
_}output :: Buffer Word8
output @Buffer{bufRaw :: forall e. Buffer e -> RawBuffer e
bufRaw=RawBuffer Word8
oraw ,bufL :: forall e. Buffer e -> Int
bufL=Int
_,bufR :: forall e. Buffer e -> Int
bufR=Int
ow0 ,bufSize :: forall e. Buffer e -> Int
bufSize=Int
os }=letdone :: a -> Int -> Int -> m (a, Buffer Char, Buffer Word8)
done a
why !Int
ir !Int
ow =(a, Buffer Char, Buffer Word8) -> m (a, Buffer Char, Buffer Word8)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return(a
why ,ifInt
ir Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
iw thenBuffer Char
input {bufL :: Int
bufL=Int
0,bufR :: Int
bufR=Int
0}elseBuffer Char
input {bufL :: Int
bufL=Int
ir },Buffer Word8
output {bufR :: Int
bufR=Int
ow })loop :: Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop !Int
ir !Int
ow |Int
ir Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
iw =CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Char, Buffer Word8)
done CodingProgress
InputUnderflowInt
ir Int
ow |Int
os Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ow Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<Int
2=CodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Char, Buffer Word8)
done CodingProgress
OutputUnderflowInt
ir Int
ow |Bool
otherwise=do(Char
c ,Int
ir' )<-RawBuffer Char -> Int -> IO (Char, Int)
readCharBufRawBuffer Char
iraw Int
ir caseChar -> Int
ordChar
c ofInt
x |Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<Int
0x10000->doRawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8BufRawBuffer Word8
oraw Int
ow (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegralInt
x )RawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8BufRawBuffer Word8
oraw (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)(Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral(Int
x Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftR`Int
8))Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir' (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)|Bool
otherwise->ifInt
os Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ow Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<Int
4thenCodingProgress
-> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
forall {m :: * -> *} {a}.
Monad m =>
a -> Int -> Int -> m (a, Buffer Char, Buffer Word8)
done CodingProgress
OutputUnderflowInt
ir Int
ow elsedoletx' :: Int
x' =Int
x Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
0x10000w1 :: Int
w1 =Int
x' Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
0x400Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
0xd800w2 :: Int
w2 =Int
x' Int -> Int -> Int
forall a. Integral a => a -> a -> a
`mod`Int
0x400Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
0xdc00RawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8BufRawBuffer Word8
oraw Int
ow (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegralInt
w1 )RawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8BufRawBuffer Word8
oraw (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)(Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral(Int
w1 Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftR`Int
8))RawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8BufRawBuffer Word8
oraw (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)(Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegralInt
w2 )RawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8BufRawBuffer Word8
oraw (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3)(Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral(Int
w2 Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftR`Int
8))Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir' (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4)inInt -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir0 Int
ow0 -- ------------------------------------------------------------------------------- Windows encoding (ripped off from base)--cWcharsToChars_UCS2 ::[Word16]->[Char]cWcharsToChars_UCS2 :: [Word16] -> String
cWcharsToChars_UCS2 =(Word16 -> Char) -> [Word16] -> String
forall a b. (a -> b) -> [a] -> [b]
map(Int -> Char
chr(Int -> Char) -> (Word16 -> Int) -> Word16 -> Char
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Word16 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral)-- On Windows, wchar_t is 16 bits wide and CWString uses the UTF-16 encoding.-- coding errors generate Chars in the surrogate rangecWcharsToChars ::[Word16]->[Char]cWcharsToChars :: [Word16] -> String
cWcharsToChars =(Int -> Char) -> [Int] -> String
forall a b. (a -> b) -> [a] -> [b]
mapInt -> Char
chr([Int] -> String) -> ([Word16] -> [Int]) -> [Word16] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[Int] -> [Int]
fromUTF16 ([Int] -> [Int]) -> ([Word16] -> [Int]) -> [Word16] -> [Int]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Word16 -> Int) -> [Word16] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
mapWord16 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralwherefromUTF16 ::[Int]->[Int]fromUTF16 :: [Int] -> [Int]
fromUTF16 (Int
c1 :Int
c2 :[Int]
wcs )|Int
0xd800Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
c1 Bool -> Bool -> Bool
&&Int
c1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
0xdbffBool -> Bool -> Bool
&&Int
0xdc00Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
c2 Bool -> Bool -> Bool
&&Int
c2 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
0xdfff=((Int
c1 Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
0xd800)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
0x400Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
c2 Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
0xdc00)Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
0x10000)Int -> [Int] -> [Int]
forall a. a -> [a] -> [a]
:[Int] -> [Int]
fromUTF16 [Int]
wcs fromUTF16 (Int
c :[Int]
wcs )=Int
c Int -> [Int] -> [Int]
forall a. a -> [a] -> [a]
:[Int] -> [Int]
fromUTF16 [Int]
wcs fromUTF16 []=[]charsToCWchars ::[Char]->[Word16]charsToCWchars :: String -> [Word16]
charsToCWchars =(Char -> [Word16] -> [Word16]) -> [Word16] -> String -> [Word16]
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr(Int -> [Word16] -> [Word16]
utf16Char (Int -> [Word16] -> [Word16])
-> (Char -> Int) -> Char -> [Word16] -> [Word16]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Char -> Int
ord)[]whereutf16Char ::Int->[Word16]->[Word16]utf16Char :: Int -> [Word16] -> [Word16]
utf16Char Int
c [Word16]
wcs |Int
c Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<Int
0x10000=Int -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegralInt
c Word16 -> [Word16] -> [Word16]
forall a. a -> [a] -> [a]
:[Word16]
wcs |Bool
otherwise=letc' :: Int
c' =Int
c Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
0x10000inInt -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral(Int
c' Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
0x400Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
0xd800)Word16 -> [Word16] -> [Word16]
forall a. a -> [a] -> [a]
:Int -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral(Int
c' Int -> Int -> Int
forall a. Integral a => a -> a -> a
`mod`Int
0x400Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
0xdc00)Word16 -> [Word16] -> [Word16]
forall a. a -> [a] -> [a]
:[Word16]
wcs -- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- FFI--withWindowsString ::String->(Int->PtrWord16->IOa )->IOa withWindowsString :: forall a. String -> (Int -> Ptr Word16 -> IO a) -> IO a
withWindowsString =[Word16] -> (Int -> Ptr Word16 -> IO a) -> IO a
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen([Word16] -> (Int -> Ptr Word16 -> IO a) -> IO a)
-> (String -> [Word16])
-> String
-> (Int -> Ptr Word16 -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.String -> [Word16]
charsToCWchars peekWindowsString ::(PtrWord16,Int)->IOStringpeekWindowsString :: (Ptr Word16, Int) -> IO String
peekWindowsString (Ptr Word16
cp ,Int
l )=do[Word16]
cs <-Int -> Ptr Word16 -> IO [Word16]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekArrayInt
l Ptr Word16
cp String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return([Word16] -> String
cWcharsToChars [Word16]
cs )withPosixString ::String->(CStringLen->IOa )->IOa withPosixString :: forall a. String -> (CStringLen -> IO a) -> IO a
withPosixString String
fp CStringLen -> IO a
f =IO TextEncoding
getFileSystemEncodingIO TextEncoding -> (TextEncoding -> IO a) -> IO a
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=\TextEncoding
enc ->TextEncoding -> String -> (CStringLen -> IO a) -> IO a
forall a. TextEncoding -> String -> (CStringLen -> IO a) -> IO a
GHC.withCStringLenTextEncoding
enc String
fp CStringLen -> IO a
f withPosixString' ::String->(CStringLen->IOa )->IOa withPosixString' :: forall a. String -> (CStringLen -> IO a) -> IO a
withPosixString' String
fp CStringLen -> IO a
f =IO TextEncoding
getLocaleEncodingIO TextEncoding -> (TextEncoding -> IO a) -> IO a
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=\TextEncoding
enc ->TextEncoding -> String -> (CStringLen -> IO a) -> IO a
forall a. TextEncoding -> String -> (CStringLen -> IO a) -> IO a
GHC.withCStringLenTextEncoding
enc String
fp CStringLen -> IO a
f peekPosixString ::CStringLen->IOStringpeekPosixString :: CStringLen -> IO String
peekPosixString CStringLen
fp =IO TextEncoding
getFileSystemEncodingIO TextEncoding -> (TextEncoding -> IO String) -> IO String
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=\TextEncoding
enc ->TextEncoding -> CStringLen -> IO String
GHC.peekCStringLenTextEncoding
enc CStringLen
fp peekPosixString' ::CStringLen->IOStringpeekPosixString' :: CStringLen -> IO String
peekPosixString' CStringLen
fp =IO TextEncoding
getLocaleEncodingIO TextEncoding -> (TextEncoding -> IO String) -> IO String
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=\TextEncoding
enc ->TextEncoding -> CStringLen -> IO String
GHC.peekCStringLenTextEncoding
enc CStringLen
fp -- | Decode with the given 'TextEncoding'.decodeWithTE ::TextEncoding->BS8.ShortByteString->EitherEncodingException StringdecodeWithTE :: TextEncoding -> ShortByteString -> Either EncodingException String
decodeWithTE TextEncoding
enc ShortByteString
ba =IO (Either EncodingException String)
-> Either EncodingException String
forall a. IO a -> a
unsafePerformIO(IO (Either EncodingException String)
 -> Either EncodingException String)
-> IO (Either EncodingException String)
-> Either EncodingException String
forall a b. (a -> b) -> a -> b
$doEither SomeException String
r <-forall e a. Exception e => IO a -> IO (Either e a)
trySafe @SomeException(IO String -> IO (Either SomeException String))
-> IO String -> IO (Either SomeException String)
forall a b. (a -> b) -> a -> b
$ShortByteString -> (CStringLen -> IO String) -> IO String
forall a. ShortByteString -> (CStringLen -> IO a) -> IO a
BS8.useAsCStringLenShortByteString
ba ((CStringLen -> IO String) -> IO String)
-> (CStringLen -> IO String) -> IO String
forall a b. (a -> b) -> a -> b
$\CStringLen
fp ->TextEncoding -> CStringLen -> IO String
GHC.peekCStringLenTextEncoding
enc CStringLen
fp Either EncodingException String
-> IO (Either EncodingException String)
forall a. a -> IO a
evaluate(Either EncodingException String
 -> IO (Either EncodingException String))
-> Either EncodingException String
-> IO (Either EncodingException String)
forall a b. (a -> b) -> a -> b
$Either EncodingException String -> Either EncodingException String
forall a. NFData a => a -> a
force(Either EncodingException String
 -> Either EncodingException String)
-> Either EncodingException String
-> Either EncodingException String
forall a b. (a -> b) -> a -> b
$(SomeException -> EncodingException)
-> Either SomeException String -> Either EncodingException String
forall a b c. (a -> b) -> Either a c -> Either b c
forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first((String -> Maybe Word8 -> EncodingException)
-> Maybe Word8 -> String -> EncodingException
forall a b c. (a -> b -> c) -> b -> a -> c
flipString -> Maybe Word8 -> EncodingException
EncodingError Maybe Word8
forall a. Maybe a
Nothing(String -> EncodingException)
-> (SomeException -> String) -> SomeException -> EncodingException
forall b c a. (b -> c) -> (a -> b) -> a -> c
.SomeException -> String
forall e. Exception e => e -> String
displayException)Either SomeException String
r -- | Encode with the given 'TextEncoding'.encodeWithTE ::TextEncoding->String->EitherEncodingException BS8.ShortByteStringencodeWithTE :: TextEncoding -> String -> Either EncodingException ShortByteString
encodeWithTE TextEncoding
enc String
str =IO (Either EncodingException ShortByteString)
-> Either EncodingException ShortByteString
forall a. IO a -> a
unsafePerformIO(IO (Either EncodingException ShortByteString)
 -> Either EncodingException ShortByteString)
-> IO (Either EncodingException ShortByteString)
-> Either EncodingException ShortByteString
forall a b. (a -> b) -> a -> b
$doEither SomeException ShortByteString
r <-forall e a. Exception e => IO a -> IO (Either e a)
trySafe @SomeException(IO ShortByteString -> IO (Either SomeException ShortByteString))
-> IO ShortByteString -> IO (Either SomeException ShortByteString)
forall a b. (a -> b) -> a -> b
$TextEncoding
-> String
-> (CStringLen -> IO ShortByteString)
-> IO ShortByteString
forall a. TextEncoding -> String -> (CStringLen -> IO a) -> IO a
GHC.withCStringLenTextEncoding
enc String
str ((CStringLen -> IO ShortByteString) -> IO ShortByteString)
-> (CStringLen -> IO ShortByteString) -> IO ShortByteString
forall a b. (a -> b) -> a -> b
$\CStringLen
cstr ->CStringLen -> IO ShortByteString
BS8.packCStringLenCStringLen
cstr Either EncodingException ShortByteString
-> IO (Either EncodingException ShortByteString)
forall a. a -> IO a
evaluate(Either EncodingException ShortByteString
 -> IO (Either EncodingException ShortByteString))
-> Either EncodingException ShortByteString
-> IO (Either EncodingException ShortByteString)
forall a b. (a -> b) -> a -> b
$Either EncodingException ShortByteString
-> Either EncodingException ShortByteString
forall a. NFData a => a -> a
force(Either EncodingException ShortByteString
 -> Either EncodingException ShortByteString)
-> Either EncodingException ShortByteString
-> Either EncodingException ShortByteString
forall a b. (a -> b) -> a -> b
$(SomeException -> EncodingException)
-> Either SomeException ShortByteString
-> Either EncodingException ShortByteString
forall a b c. (a -> b) -> Either a c -> Either b c
forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first((String -> Maybe Word8 -> EncodingException)
-> Maybe Word8 -> String -> EncodingException
forall a b c. (a -> b -> c) -> b -> a -> c
flipString -> Maybe Word8 -> EncodingException
EncodingError Maybe Word8
forall a. Maybe a
Nothing(String -> EncodingException)
-> (SomeException -> String) -> SomeException -> EncodingException
forall b c a. (b -> c) -> (a -> b) -> a -> c
.SomeException -> String
forall e. Exception e => e -> String
displayException)Either SomeException ShortByteString
r -- ------------------------------------------------------------------------------- Encoders / decoders---- | This mimics the filepath decoder base uses on unix (using PEP-383),-- with the small distinction that we're not truncating at NUL bytes (because we're not at-- the outer FFI layer).decodeWithBasePosix ::BS8.ShortByteString->IOStringdecodeWithBasePosix :: ShortByteString -> IO String
decodeWithBasePosix ShortByteString
ba =ShortByteString -> (CStringLen -> IO String) -> IO String
forall a. ShortByteString -> (CStringLen -> IO a) -> IO a
BS8.useAsCStringLenShortByteString
ba ((CStringLen -> IO String) -> IO String)
-> (CStringLen -> IO String) -> IO String
forall a b. (a -> b) -> a -> b
$\CStringLen
fp ->CStringLen -> IO String
peekPosixString CStringLen
fp -- | This mimics the string decoder base uses on unix,-- with the small distinction that we're not truncating at NUL bytes (because we're not at-- the outer FFI layer).decodeWithBasePosix' ::BS8.ShortByteString->IOStringdecodeWithBasePosix' :: ShortByteString -> IO String
decodeWithBasePosix' ShortByteString
ba =ShortByteString -> (CStringLen -> IO String) -> IO String
forall a. ShortByteString -> (CStringLen -> IO a) -> IO a
BS8.useAsCStringLenShortByteString
ba ((CStringLen -> IO String) -> IO String)
-> (CStringLen -> IO String) -> IO String
forall a b. (a -> b) -> a -> b
$\CStringLen
fp ->CStringLen -> IO String
peekPosixString' CStringLen
fp -- | This mimics the filepath encoder base uses on unix (using PEP-383),-- with the small distinction that we're not truncating at NUL bytes (because we're not at-- the outer FFI layer).encodeWithBasePosix ::String->IOBS8.ShortByteStringencodeWithBasePosix :: String -> IO ShortByteString
encodeWithBasePosix String
str =String -> (CStringLen -> IO ShortByteString) -> IO ShortByteString
forall a. String -> (CStringLen -> IO a) -> IO a
withPosixString String
str ((CStringLen -> IO ShortByteString) -> IO ShortByteString)
-> (CStringLen -> IO ShortByteString) -> IO ShortByteString
forall a b. (a -> b) -> a -> b
$\CStringLen
cstr ->CStringLen -> IO ShortByteString
BS8.packCStringLenCStringLen
cstr -- | This mimics the string encoder base uses on unix,-- with the small distinction that we're not truncating at NUL bytes (because we're not at-- the outer FFI layer).encodeWithBasePosix' ::String->IOBS8.ShortByteStringencodeWithBasePosix' :: String -> IO ShortByteString
encodeWithBasePosix' String
str =String -> (CStringLen -> IO ShortByteString) -> IO ShortByteString
forall a. String -> (CStringLen -> IO a) -> IO a
withPosixString' String
str ((CStringLen -> IO ShortByteString) -> IO ShortByteString)
-> (CStringLen -> IO ShortByteString) -> IO ShortByteString
forall a b. (a -> b) -> a -> b
$\CStringLen
cstr ->CStringLen -> IO ShortByteString
BS8.packCStringLenCStringLen
cstr -- | This mimics the filepath decoder base uses on windows,-- with the small distinction that we're not truncating at NUL bytes (because we're not at-- the outer FFI layer).decodeWithBaseWindows ::BS16.ShortByteString->IOStringdecodeWithBaseWindows :: ShortByteString -> IO String
decodeWithBaseWindows ShortByteString
ba =ShortByteString -> ((Ptr Word16, Int) -> IO String) -> IO String
forall a. ShortByteString -> ((Ptr Word16, Int) -> IO a) -> IO a
BS16.useAsCWStringLen ShortByteString
ba (((Ptr Word16, Int) -> IO String) -> IO String)
-> ((Ptr Word16, Int) -> IO String) -> IO String
forall a b. (a -> b) -> a -> b
$\(Ptr Word16, Int)
fp ->(Ptr Word16, Int) -> IO String
peekWindowsString (Ptr Word16, Int)
fp -- | This mimics the filepath dencoder base uses on windows,-- with the small distinction that we're not truncating at NUL bytes (because we're not at-- the outer FFI layer).encodeWithBaseWindows ::String->IOBS16.ShortByteStringencodeWithBaseWindows :: String -> IO ShortByteString
encodeWithBaseWindows String
str =String
-> (Int -> Ptr Word16 -> IO ShortByteString) -> IO ShortByteString
forall a. String -> (Int -> Ptr Word16 -> IO a) -> IO a
withWindowsString String
str ((Int -> Ptr Word16 -> IO ShortByteString) -> IO ShortByteString)
-> (Int -> Ptr Word16 -> IO ShortByteString) -> IO ShortByteString
forall a b. (a -> b) -> a -> b
$\Int
l Ptr Word16
cstr ->(Ptr Word16, Int) -> IO ShortByteString
BS16.packCWStringLen (Ptr Word16
cstr ,Int
l )-- ------------------------------------------------------------------------------- Types--dataEncodingException =EncodingError String(MaybeWord8)-- ^ Could not decode a byte sequence because it was invalid under-- the given encoding, or ran out of input in mid-decode.deriving(EncodingException -> EncodingException -> Bool
(EncodingException -> EncodingException -> Bool)
-> (EncodingException -> EncodingException -> Bool)
-> Eq EncodingException
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EncodingException -> EncodingException -> Bool
== :: EncodingException -> EncodingException -> Bool
$c/= :: EncodingException -> EncodingException -> Bool
/= :: EncodingException -> EncodingException -> Bool
Eq,Typeable)showEncodingException ::EncodingException ->StringshowEncodingException :: EncodingException -> String
showEncodingException (EncodingError String
desc (JustWord8
w ))=String
"Cannot decode byte '\\x"String -> String -> String
forall a. [a] -> [a] -> [a]
++Word8 -> String -> String
forall a. Integral a => a -> String -> String
showHexWord8
w (String
"': "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
desc )showEncodingException (EncodingError String
desc Maybe Word8
Nothing)=String
"Cannot decode input: "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
desc instanceShowEncodingException whereshow :: EncodingException -> String
show=EncodingException -> String
showEncodingException instanceExceptionEncodingException instanceNFDataEncodingException wherernf :: EncodingException -> ()
rnf(EncodingError String
desc Maybe Word8
w )=String -> ()
forall a. NFData a => a -> ()
rnfString
desc () -> () -> ()
forall a b. a -> b -> b
`seq`Maybe Word8 -> ()
forall a. NFData a => a -> ()
rnfMaybe Word8
w -- ------------------------------------------------------------------------------- Words--wNUL ::Word16wNUL :: Word16
wNUL =Word16
0x00

AltStyle によって変換されたページ (->オリジナル) /