on c06d2e2 help sign in
text/Data/Text/Utf16.hs
24 lines 622 B history raw
1{-# LANGUAGE MagicHash #-}
3module Data.Text.Utf16 where
5import GHC.Exts
6import GHC.Word
8import Data.Word
10chr2 :: Word16 -> Word16 -> Char
11chr2 (W16# a#) (W16# b#) = C# (chr# (upper# +# lower# +# 0x10000#))
12 where
13 x# = word2Int# a#
14 y# = word2Int# b#
15 upper# = uncheckedIShiftL# (x# -# 0xD800#) 10#
16 lower# = y# -# 0xDC00#
17{-# INLINE chr2 #-}
19validate1 :: Word16 -> Bool
20validate1 x1 = (x1 >= 0 && x1 < 0xD800) || (x1 > 0xDFFF && x1 < 0x10000)
22validate2 :: Word16 -> Word16 -> Bool
23validate2 x1 x2 = (x1 >= 0xD800 && x1 <= 0xDBFF) &&
24 (x2 >= 0xDC00 && x2 <= 0xDFFF)