module TextBuilderDev.Utf8View where
import TextBuilderDev.Prelude
type Utf8View =
forall x.
(Word8 -> x) ->
(Word8 -> Word8 -> x) ->
(Word8 -> Word8 -> Word8 -> x) ->
(Word8 -> Word8 -> Word8 -> Word8 -> x) ->
x
{-# INLINE unicodeCodePoint #-}
unicodeCodePoint :: Int -> Utf8View
unicodeCodePoint :: Int -> Utf8View
unicodeCodePoint Int
x Word8 -> x
case1 Word8 -> Word8 -> x
case2 Word8 -> Word8 -> Word8 -> x
case3 Word8 -> Word8 -> Word8 -> Word8 -> x
case4
| Int
x forall a. Ord a => a -> a -> Bool
< Int
0x80 = Word8 -> x
case1 (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
x)
| Int
x forall a. Ord a => a -> a -> Bool
< Int
0x800 =
Word8 -> Word8 -> x
case2
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ Int
x forall a. Bits a => a -> Int -> a
`shiftR` Int
6 forall a. Bits a => a -> a -> a
.|. Int
0xC0)
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int
x forall a. Bits a => a -> a -> a
.&. Int
0x3F) forall a. Bits a => a -> a -> a
.|. Int
0x80)
| Int
x forall a. Ord a => a -> a -> Bool
< Int
0x10000 =
Word8 -> Word8 -> Word8 -> x
case3
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ Int
x forall a. Bits a => a -> Int -> a
`shiftR` Int
12 forall a. Bits a => a -> a -> a
.|. Int
0xE0)
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int
x forall a. Bits a => a -> Int -> a
`shiftR` Int
6) forall a. Bits a => a -> a -> a
.&. Int
0x3F forall a. Bits a => a -> a -> a
.|. Int
0x80)
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int
x forall a. Bits a => a -> a -> a
.&. Int
0x3F) forall a. Bits a => a -> a -> a
.|. Int
0x80)
| Bool
otherwise =
Word8 -> Word8 -> Word8 -> Word8 -> x
case4
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ Int
x forall a. Bits a => a -> Int -> a
`shiftR` Int
18 forall a. Bits a => a -> a -> a
.|. Int
0xF0)
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int
x forall a. Bits a => a -> Int -> a
`shiftR` Int
12) forall a. Bits a => a -> a -> a
.&. Int
0x3F forall a. Bits a => a -> a -> a
.|. Int
0x80)
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int
x forall a. Bits a => a -> Int -> a
`shiftR` Int
6) forall a. Bits a => a -> a -> a
.&. Int
0x3F forall a. Bits a => a -> a -> a
.|. Int
0x80)
(forall a b. (Integral a, Num b) => a -> b
fromIntegral forall a b. (a -> b) -> a -> b
$ (Int
x forall a. Bits a => a -> a -> a
.&. Int
0x3F) forall a. Bits a => a -> a -> a
.|. Int
0x80)