Source

text / Data / Text / Encoding / Utf16.hs

Full commit
Sivaram Gowkanap… c23c23b 
Bryan O'Sullivan 1eaf080 


Bryan O'Sullivan 9071533 


Bryan O'Sullivan 1eaf080 

Bryan O'Sullivan 7dfeb13 
Bryan O'Sullivan 1eaf080 

















Bryan O'Sullivan 88405de 



Bryan O'Sullivan 1eaf080 


Bryan O'Sullivan 30e01c2 
Bryan O'Sullivan 1eaf080 




{-# LANGUAGE MagicHash, BangPatterns #-}

-- |
-- Module      : Data.Text.Encoding.Utf16
-- Copyright   : (c) 2008, 2009 Tom Harper,
--               (c) 2009 Bryan O'Sullivan,
--               (c) 2009 Duncan Coutts
--
-- License     : BSD-style
-- Maintainer  : bos@serpentine.com, rtomharper@googlemail.com,
--               duncan@haskell.org
-- Stability   : experimental
-- Portability : GHC
--
-- Basic UTF-16 validation and character manipulation.
module Data.Text.Encoding.Utf16
    (
      chr2
    , validate1
    , validate2
    ) where

import GHC.Exts
import GHC.Word (Word16(..))

chr2 :: Word16 -> Word16 -> Char
chr2 (W16# a#) (W16# b#) = C# (chr# (upper# +# lower# +# 0x10000#))
    where
      !x# = word2Int# a#
      !y# = word2Int# b#
      !upper# = uncheckedIShiftL# (x# -# 0xD800#) 10#
      !lower# = y# -# 0xDC00#
{-# INLINE chr2 #-}

validate1    :: Word16 -> Bool
validate1 x1 = x1 < 0xD800 || x1 > 0xDFFF
{-# INLINE validate1 #-}

validate2       ::  Word16 -> Word16 -> Bool
validate2 x1 x2 = x1 >= 0xD800 && x1 <= 0xDBFF &&
                  x2 >= 0xDC00 && x2 <= 0xDFFF
{-# INLINE validate2 #-}