{-# LANGUAGE Trustworthy #-}{-# LANGUAGE NoImplicitPrelude
 , BangPatterns
 , NondecreasingIndentation
 #-}{-# OPTIONS_GHC -funbox-strict-fields #-}------------------------------------------------------------------------------- |-- Module : GHC.IO.Encoding.Latin1-- Copyright : (c) The University of Glasgow, 2009-- License : see libraries/base/LICENSE-- -- Maintainer : libraries@haskell.org-- Stability : internal-- Portability : non-portable---- Single-byte encodings that map directly to Unicode code points.---- Portions Copyright : (c) Tom Harper 2008-2009,-- (c) Bryan O'Sullivan 2009,-- (c) Duncan Coutts 2009-------------------------------------------------------------------------------moduleGHC.IO.Encoding.Latin1(latin1 ,mkLatin1 ,latin1_checked ,mkLatin1_checked ,ascii ,mkAscii ,latin1_decode ,ascii_decode ,latin1_encode ,latin1_checked_encode ,ascii_encode ,)whereimportGHC.Base importGHC.Real importGHC.Num -- import GHC.IOimportGHC.IO.Buffer importGHC.IO.Encoding.Failure importGHC.IO.Encoding.Types -- ------------------------------------------------------------------------------- Latin1latin1 ::TextEncoding latin1 :: TextEncoding
latin1 =CodingFailureMode -> TextEncoding
mkLatin1 CodingFailureMode
ErrorOnCodingFailure -- | @since 4.4.0.0mkLatin1 ::CodingFailureMode ->TextEncoding mkLatin1 :: CodingFailureMode -> TextEncoding
mkLatin1 cfm :: CodingFailureMode
cfm =TextEncoding :: forall dstate estate.
String
-> IO (TextDecoder dstate)
-> IO (TextEncoder estate)
-> TextEncoding
TextEncoding {textEncodingName :: String
textEncodingName ="ISO-8859-1",mkTextDecoder :: IO (TextDecoder ())
mkTextDecoder =CodingFailureMode -> IO (TextDecoder ())
latin1_DF CodingFailureMode
cfm ,mkTextEncoder :: IO (TextEncoder ())
mkTextEncoder =CodingFailureMode -> IO (TextEncoder ())
latin1_EF CodingFailureMode
cfm }latin1_DF ::CodingFailureMode ->IO(TextDecoder ())latin1_DF :: CodingFailureMode -> IO (TextDecoder ())
latin1_DF cfm :: CodingFailureMode
cfm =TextDecoder () -> IO (TextDecoder ())
forall (m :: * -> *) a. Monad m => a -> m a
return (BufferCodec :: forall from to state.
CodeBuffer from to
-> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to))
-> IO ()
-> IO state
-> (state -> IO ())
-> BufferCodec from to state
BufferCodec {encode :: CodeBuffer Word8 Char
encode =CodeBuffer Word8 Char
latin1_decode ,recover :: Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char)
recover =CodingFailureMode
-> Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char)
recoverDecode CodingFailureMode
cfm ,close :: IO ()
close =() -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return (),getState :: IO ()
getState =() -> IO ()
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 (m :: * -> *) a. Monad m => a -> m a
return ()})latin1_EF ::CodingFailureMode ->IO(TextEncoder ())latin1_EF :: CodingFailureMode -> IO (TextEncoder ())
latin1_EF cfm :: CodingFailureMode
cfm =TextEncoder () -> IO (TextEncoder ())
forall (m :: * -> *) a. Monad m => a -> m a
return (BufferCodec :: forall from to state.
CodeBuffer from to
-> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to))
-> IO ()
-> IO state
-> (state -> IO ())
-> BufferCodec from to state
BufferCodec {encode :: CodeBuffer Char Word8
encode =CodeBuffer Char Word8
latin1_encode ,recover :: Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recover =CodingFailureMode
-> Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recoverEncode CodingFailureMode
cfm ,close :: IO ()
close =() -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return (),getState :: IO ()
getState =() -> IO ()
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 (m :: * -> *) a. Monad m => a -> m a
return ()})latin1_checked ::TextEncoding latin1_checked :: TextEncoding
latin1_checked =CodingFailureMode -> TextEncoding
mkLatin1_checked CodingFailureMode
ErrorOnCodingFailure -- | @since 4.4.0.0mkLatin1_checked ::CodingFailureMode ->TextEncoding mkLatin1_checked :: CodingFailureMode -> TextEncoding
mkLatin1_checked cfm :: CodingFailureMode
cfm =TextEncoding :: forall dstate estate.
String
-> IO (TextDecoder dstate)
-> IO (TextEncoder estate)
-> TextEncoding
TextEncoding {textEncodingName :: String
textEncodingName ="ISO-8859-1",mkTextDecoder :: IO (TextDecoder ())
mkTextDecoder =CodingFailureMode -> IO (TextDecoder ())
latin1_DF CodingFailureMode
cfm ,mkTextEncoder :: IO (TextEncoder ())
mkTextEncoder =CodingFailureMode -> IO (TextEncoder ())
latin1_checked_EF CodingFailureMode
cfm }latin1_checked_EF ::CodingFailureMode ->IO(TextEncoder ())latin1_checked_EF :: CodingFailureMode -> IO (TextEncoder ())
latin1_checked_EF cfm :: CodingFailureMode
cfm =TextEncoder () -> IO (TextEncoder ())
forall (m :: * -> *) a. Monad m => a -> m a
return (BufferCodec :: forall from to state.
CodeBuffer from to
-> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to))
-> IO ()
-> IO state
-> (state -> IO ())
-> BufferCodec from to state
BufferCodec {encode :: CodeBuffer Char Word8
encode =CodeBuffer Char Word8
latin1_checked_encode ,recover :: Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recover =CodingFailureMode
-> Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recoverEncode CodingFailureMode
cfm ,close :: IO ()
close =() -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return (),getState :: IO ()
getState =() -> IO ()
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 (m :: * -> *) a. Monad m => a -> m a
return ()})-- ------------------------------------------------------------------------------- ASCII-- | @since 4.9.0.0ascii ::TextEncoding ascii :: TextEncoding
ascii =CodingFailureMode -> TextEncoding
mkAscii CodingFailureMode
ErrorOnCodingFailure -- | @since 4.9.0.0mkAscii ::CodingFailureMode ->TextEncoding mkAscii :: CodingFailureMode -> TextEncoding
mkAscii cfm :: CodingFailureMode
cfm =TextEncoding :: forall dstate estate.
String
-> IO (TextDecoder dstate)
-> IO (TextEncoder estate)
-> TextEncoding
TextEncoding {textEncodingName :: String
textEncodingName ="ASCII",mkTextDecoder :: IO (TextDecoder ())
mkTextDecoder =CodingFailureMode -> IO (TextDecoder ())
ascii_DF CodingFailureMode
cfm ,mkTextEncoder :: IO (TextEncoder ())
mkTextEncoder =CodingFailureMode -> IO (TextEncoder ())
ascii_EF CodingFailureMode
cfm }ascii_DF ::CodingFailureMode ->IO(TextDecoder ())ascii_DF :: CodingFailureMode -> IO (TextDecoder ())
ascii_DF cfm :: CodingFailureMode
cfm =TextDecoder () -> IO (TextDecoder ())
forall (m :: * -> *) a. Monad m => a -> m a
return (BufferCodec :: forall from to state.
CodeBuffer from to
-> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to))
-> IO ()
-> IO state
-> (state -> IO ())
-> BufferCodec from to state
BufferCodec {encode :: CodeBuffer Word8 Char
encode =CodeBuffer Word8 Char
ascii_decode ,recover :: Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char)
recover =CodingFailureMode
-> Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char)
recoverDecode CodingFailureMode
cfm ,close :: IO ()
close =() -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return (),getState :: IO ()
getState =() -> IO ()
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 (m :: * -> *) a. Monad m => a -> m a
return ()})ascii_EF ::CodingFailureMode ->IO(TextEncoder ())ascii_EF :: CodingFailureMode -> IO (TextEncoder ())
ascii_EF cfm :: CodingFailureMode
cfm =TextEncoder () -> IO (TextEncoder ())
forall (m :: * -> *) a. Monad m => a -> m a
return (BufferCodec :: forall from to state.
CodeBuffer from to
-> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to))
-> IO ()
-> IO state
-> (state -> IO ())
-> BufferCodec from to state
BufferCodec {encode :: CodeBuffer Char Word8
encode =CodeBuffer Char Word8
ascii_encode ,recover :: Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recover =CodingFailureMode
-> Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8)
recoverEncode CodingFailureMode
cfm ,close :: IO ()
close =() -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return (),getState :: IO ()
getState =() -> IO ()
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 (m :: * -> *) a. Monad m => a -> m a
return ()})-- ------------------------------------------------------------------------------- The actual decoders and encoders-- TODO: Eliminate code duplication between the checked and unchecked-- versions of the decoder or encoder (but don't change the Core!)latin1_decode ::DecodeBuffer latin1_decode :: CodeBuffer Word8 Char
latin1_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
OutputUnderflow Int
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
InputUnderflow Int
ir Int
ow |Bool
otherwise =doWord8
c0 <-RawBuffer Word8 -> Int -> IO Word8
readWord8Buf RawBuffer Word8
iraw Int
ir Int
ow' <-RawBuffer Char -> Int -> Char -> IO Int
writeCharBuf RawBuffer Char
oraw Int
ow (Int -> Char
unsafeChr (Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
c0 ))Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)Int
ow' -- lambda-lifted, to avoid thunks being built in the inner-loop:done :: a -> Int -> Int -> m (a, Buffer Word8, Buffer Char)
done why :: a
why !Int
ir !Int
ow =(a, Buffer Word8, Buffer Char) -> m (a, Buffer Word8, Buffer Char)
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 =0,bufR :: Int
bufR =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 ascii_decode ::DecodeBuffer ascii_decode :: CodeBuffer Word8 Char
ascii_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
OutputUnderflow Int
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
InputUnderflow Int
ir Int
ow |Bool
otherwise =doWord8
c0 <-RawBuffer Word8 -> Int -> IO Word8
readWord8Buf RawBuffer Word8
iraw Int
ir ifWord8
c0 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
>0x7fthenIO (CodingProgress, Buffer Word8, Buffer Char)
invalid elsedoInt
ow' <-RawBuffer Char -> Int -> Char -> IO Int
writeCharBuf RawBuffer Char
oraw Int
ow (Int -> Char
unsafeChr (Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
c0 ))Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char)
loop (Int
ir Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)Int
ow' whereinvalid :: IO (CodingProgress, Buffer Word8, Buffer Char)
invalid =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
InvalidSequence Int
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 why :: a
why !Int
ir !Int
ow =(a, Buffer Word8, Buffer Char) -> m (a, Buffer Word8, Buffer Char)
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 =0,bufR :: Int
bufR =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 latin1_encode ::EncodeBuffer latin1_encode :: CodeBuffer Char Word8
latin1_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 why :: a
why !Int
ir !Int
ow =(a, Buffer Char, Buffer Word8) -> m (a, Buffer Char, Buffer Word8)
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 =0,bufR :: Int
bufR =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
ow Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
os =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
OutputUnderflow 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
InputUnderflow Int
ir Int
ow |Bool
otherwise =do(c :: Char
c ,ir' :: Int
ir' )<-RawBuffer Char -> Int -> IO (Char, Int)
readCharBuf RawBuffer Char
iraw Int
ir RawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8Buf RawBuffer Word8
oraw Int
ow (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Char -> Int
ord Char
c ))Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir' (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)inInt -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir0 Int
ow0 latin1_checked_encode ::EncodeBuffer latin1_checked_encode :: CodeBuffer Char Word8
latin1_checked_encode input :: Buffer Char
input output :: Buffer Word8
output =Int -> CodeBuffer Char Word8
single_byte_checked_encode 0xffBuffer Char
input Buffer Word8
output ascii_encode ::EncodeBuffer ascii_encode :: CodeBuffer Char Word8
ascii_encode input :: Buffer Char
input output :: Buffer Word8
output =Int -> CodeBuffer Char Word8
single_byte_checked_encode 0x7fBuffer Char
input Buffer Word8
output single_byte_checked_encode ::Int->EncodeBuffer single_byte_checked_encode :: Int -> CodeBuffer Char Word8
single_byte_checked_encode max_legal_char :: Int
max_legal_char 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 why :: a
why !Int
ir !Int
ow =(a, Buffer Char, Buffer Word8) -> m (a, Buffer Char, Buffer Word8)
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 =0,bufR :: Int
bufR =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
ow Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=Int
os =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
OutputUnderflow 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
InputUnderflow Int
ir Int
ow |Bool
otherwise =do(c :: Char
c ,ir' :: Int
ir' )<-RawBuffer Char -> Int -> IO (Char, Int)
readCharBuf RawBuffer Char
iraw Int
ir ifChar -> Int
ord Char
c Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>Int
max_legal_char thenIO (CodingProgress, Buffer Char, Buffer Word8)
invalid elsedoRawBuffer Word8 -> Int -> Word8 -> IO ()
writeWord8Buf RawBuffer Word8
oraw Int
ow (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Char -> Int
ord Char
c ))Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir' (Int
ow Int -> Int -> Int
forall a. Num a => a -> a -> a
+ 1)whereinvalid :: IO (CodingProgress, Buffer Char, Buffer Word8)
invalid =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
InvalidSequence Int
ir Int
ow inInt -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8)
loop Int
ir0 Int
ow0 {-# INLINEsingle_byte_checked_encode #-}

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