1{-# LANGUAGE MagicHash #-}
2module Data.Text.Utf8 where
11between :: Word8 -> Word8 -> Word8 -> Bool
12between x y z = x >= y && x <= z
15ord2 :: Char -> (Word8,Word8)
19 x1 = fromIntegral $ (shiftR n 6) + (0xC0 :: Int) :: Word8
20 x2 = fromIntegral $ (n .&. 0x3F) + (0x80 :: Int) :: Word8
22ord3 :: Char -> (Word8,Word8,Word8)
26 x1 = fromIntegral $ (shiftR n 12) + (0xE0::Int) :: Word8
27 x2 = fromIntegral $ ((shiftR n 6) .&. (0x3F::Int)) + (0x80::Int) :: Word8
28 x3 = fromIntegral $ (n .&. (0x3F::Int)) + (0x80::Int) :: Word8
30ord4 :: Char -> (Word8,Word8,Word8,Word8)
34 x1 = fromIntegral $ (shiftR n 18) + (0xF0::Int) :: Word8
35 x2 = fromIntegral $ ((shiftR n 12) .&. (0x3F::Int)) + (0x80::Int) :: Word8
36 x3 = fromIntegral $ ((shiftR n 6) .&. (0x3F::Int)) + (0x80::Int) :: Word8
37 x4 = fromIntegral $ (n .&. (0x3F::Int)) + (0x80::Int) :: Word8
39chr2 :: Word8 -> Word8 -> Char
40chr2 (W8# x1#) (W8# x2#) = C# (chr# (z1# +# z2#))
44 z1# = uncheckedIShiftL# (y1# -# 0xC0#) 6#
48chr3 :: Word8 -> Word8 -> Word8 -> Char
49chr3 (W8# x1#) (W8# x2#) (W8# x3#) = C# (chr# (z1# +# z2# +# z3#))
54 z1# = uncheckedIShiftL# (y1# -# 0xE0#) 12#
55 z2# = uncheckedIShiftL# (y2# -# 0x80#) 6#
59chr4 :: Word8 -> Word8 -> Word8 -> Word8 -> Char
60chr4 (W8# x1#) (W8# x2#) (W8# x3#) (W8# x4#) =
61 C# (chr# (z1# +# z2# +# z3# +# z4#))
67 z1# = uncheckedIShiftL# (y1# -# 0xF0#) 18#
68 z2# = uncheckedIShiftL# (y2# -# 0x80#) 12#
69 z3# = uncheckedIShiftL# (y3# -# 0x80#) 6#
73validate1 :: Word8 -> Bool
74validate1 x1 = between x1 0x00 0x7F
75{-# INLINE validate1 #-}
77validate2 :: Word8 -> Word8 -> Bool
78validate2 x1 x2 = between x1 0xC2 0xDF && between x2 0x80 0xBF
79{-# INLINE validate2 #-}
81validate3 :: Word8 -> Word8 -> Word8 -> Bool
82validate3 x1 x2 x3 = validate3_1 x1 x2 x3 ||
83 validate3_2 x1 x2 x3 ||
84 validate3_3 x1 x2 x3 ||
86{-# INLINE validate3 #-}
88validate4 :: Word8 -> Word8 -> Word8 -> Word8 -> Bool
89validate4 x1 x2 x3 x4 = validate4_1 x1 x2 x3 x4 ||
90 validate4_2 x1 x2 x3 x4 ||
91 validate4_3 x1 x2 x3 x4
92{-# INLINE validate4 #-}
96validate3_1 x1 x2 x3 = (x1 == 0xE0) &&
97 between x2 0xA0 0xBF &&
99{-# INLINE validate3_1 #-}
101validate3_2 x1 x2 x3 = between x1 0xE1 0xEC &&
102 between x2 0x80 0xBF &&
104{-# INLINE validate3_2 #-}
106validate3_3 x1 x2 x3 = x1 == 0xED &&
107 between x2 0x80 0x9F &&
109{-# INLINE validate3_3 #-}
111validate3_4 x1 x2 x3 = between x1 0xEE 0xEF &&
112 between x2 0x80 0xBF &&
114{-# INLINE validate3_4 #-}
117validate4_1 x1 x2 x3 x4 = x1 == 0xF0 &&
118 between x2 0x90 0xBF &&
119 between x3 0x80 0xBF &&
121{-# INLINE validate4_1 #-}
123validate4_2 x1 x2 x3 x4 = between x1 0xF1 0xF3 &&
124 between x2 0x80 0xBF &&
125 between x3 0x80 0xBF &&
127{-# INLINE validate4_2 #-}
129validate4_3 x1 x2 x3 x4 = x1 == 0xF4 &&
130 between x2 0x80 0x8F &&
131 between x3 0x80 0xBF &&
133{-# INLINE validate4_3 #-}
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list