{-# LINE 1 "Data/Text/ICU/Normalize2.hsc" #-}
{-# LANGUAGE EmptyDataDecls, CPP, DeriveDataTypeable, ForeignFunctionInterface #-}
module Data.Text.ICU.Normalize2
(
NormalizationMode(..), normalizer, nfcNormalizer, nfdNormalizer, nfkcNormalizer, nfkdNormalizer, nfkcCasefoldNormalizer,
nfc, nfd, nfkc, nfkd, nfkcCasefold, normalize, normalizeWith,
quickCheck, isNormalized, isNormalizedWith,
compareUnicode, compareUnicode', CompareOption(..),
) where
{-# LINE 33 "Data/Text/ICU/Normalize2.hsc" #-}
import Data.Text (Text)
import Data.Text.ICU.Error.Internal (UErrorCode, handleError, handleOverflowError)
import Data.Text.ICU.Internal (UBool, UChar, asBool, asOrdering, fromUCharPtr, useAsUCharPtr)
import Data.Text.ICU.Normalize.Internal (UNormalizationCheckResult, toNCR)
import Data.Typeable (Typeable)
import Data.Int (Int32)
import Data.Word (Word32)
import Foreign.C.Types (CInt(..))
import Foreign.Ptr (Ptr)
import System.IO.Unsafe (unsafePerformIO)
import Prelude hiding (compare)
import Data.List (foldl')
import Data.Bits ((.|.))
newtype Normalizer = Normalizer (Ptr UNormalizer2)
data UNormalizer2
data NormalizationMode
= NFD
| NFKD
| NFC
| NFKC
| NFKCCasefold
deriving (NormalizationMode -> NormalizationMode -> Bool
(NormalizationMode -> NormalizationMode -> Bool)
-> (NormalizationMode -> NormalizationMode -> Bool)
-> Eq NormalizationMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NormalizationMode -> NormalizationMode -> Bool
$c/= :: NormalizationMode -> NormalizationMode -> Bool
== :: NormalizationMode -> NormalizationMode -> Bool
$c== :: NormalizationMode -> NormalizationMode -> Bool
Eq, Int -> NormalizationMode -> ShowS
[NormalizationMode] -> ShowS
NormalizationMode -> String
(Int -> NormalizationMode -> ShowS)
-> (NormalizationMode -> String)
-> ([NormalizationMode] -> ShowS)
-> Show NormalizationMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NormalizationMode] -> ShowS
$cshowList :: [NormalizationMode] -> ShowS
show :: NormalizationMode -> String
$cshow :: NormalizationMode -> String
showsPrec :: Int -> NormalizationMode -> ShowS
$cshowsPrec :: Int -> NormalizationMode -> ShowS
Show, Int -> NormalizationMode
NormalizationMode -> Int
NormalizationMode -> [NormalizationMode]
NormalizationMode -> NormalizationMode
NormalizationMode -> NormalizationMode -> [NormalizationMode]
NormalizationMode
-> NormalizationMode -> NormalizationMode -> [NormalizationMode]
(NormalizationMode -> NormalizationMode)
-> (NormalizationMode -> NormalizationMode)
-> (Int -> NormalizationMode)
-> (NormalizationMode -> Int)
-> (NormalizationMode -> [NormalizationMode])
-> (NormalizationMode -> NormalizationMode -> [NormalizationMode])
-> (NormalizationMode -> NormalizationMode -> [NormalizationMode])
-> (NormalizationMode
-> NormalizationMode -> NormalizationMode -> [NormalizationMode])
-> Enum NormalizationMode
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: NormalizationMode
-> NormalizationMode -> NormalizationMode -> [NormalizationMode]
$cenumFromThenTo :: NormalizationMode
-> NormalizationMode -> NormalizationMode -> [NormalizationMode]
enumFromTo :: NormalizationMode -> NormalizationMode -> [NormalizationMode]
$cenumFromTo :: NormalizationMode -> NormalizationMode -> [NormalizationMode]
enumFromThen :: NormalizationMode -> NormalizationMode -> [NormalizationMode]
$cenumFromThen :: NormalizationMode -> NormalizationMode -> [NormalizationMode]
enumFrom :: NormalizationMode -> [NormalizationMode]
$cenumFrom :: NormalizationMode -> [NormalizationMode]
fromEnum :: NormalizationMode -> Int
$cfromEnum :: NormalizationMode -> Int
toEnum :: Int -> NormalizationMode
$ctoEnum :: Int -> NormalizationMode
pred :: NormalizationMode -> NormalizationMode
$cpred :: NormalizationMode -> NormalizationMode
succ :: NormalizationMode -> NormalizationMode
$csucc :: NormalizationMode -> NormalizationMode
Enum, Typeable)
createNormalizerWith :: (Ptr UErrorCode -> IO (Ptr UNormalizer2)) -> IO Normalizer
createNormalizerWith :: (Ptr UErrorCode -> IO (Ptr UNormalizer2)) -> IO Normalizer
createNormalizerWith Ptr UErrorCode -> IO (Ptr UNormalizer2)
f = Ptr UNormalizer2 -> Normalizer
Normalizer (Ptr UNormalizer2 -> Normalizer)
-> IO (Ptr UNormalizer2) -> IO Normalizer
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Ptr UErrorCode -> IO (Ptr UNormalizer2)) -> IO (Ptr UNormalizer2)
forall a. (Ptr UErrorCode -> IO a) -> IO a
handleError Ptr UErrorCode -> IO (Ptr UNormalizer2)
f
normalizer :: NormalizationMode -> IO Normalizer
normalizer :: NormalizationMode -> IO Normalizer
normalizer NormalizationMode
NFD = IO Normalizer
nfdNormalizer
normalizer NormalizationMode
NFKD = IO Normalizer
nfkdNormalizer
normalizer NormalizationMode
NFC = IO Normalizer
nfcNormalizer
normalizer NormalizationMode
NFKC = IO Normalizer
nfkcNormalizer
normalizer NormalizationMode
NFKCCasefold = IO Normalizer
nfkcCasefoldNormalizer
nfcNormalizer :: IO Normalizer
nfcNormalizer :: IO Normalizer
nfcNormalizer = (Ptr UErrorCode -> IO (Ptr UNormalizer2)) -> IO Normalizer
createNormalizerWith Ptr UErrorCode -> IO (Ptr UNormalizer2)
unorm2_getNFCInstance
nfdNormalizer :: IO Normalizer
nfdNormalizer :: IO Normalizer
nfdNormalizer = (Ptr UErrorCode -> IO (Ptr UNormalizer2)) -> IO Normalizer
createNormalizerWith Ptr UErrorCode -> IO (Ptr UNormalizer2)
unorm2_getNFDInstance
nfkcNormalizer :: IO Normalizer
nfkcNormalizer :: IO Normalizer
nfkcNormalizer = (Ptr UErrorCode -> IO (Ptr UNormalizer2)) -> IO Normalizer
createNormalizerWith Ptr UErrorCode -> IO (Ptr UNormalizer2)
unorm2_getNFKCInstance
nfkdNormalizer :: IO Normalizer
nfkdNormalizer :: IO Normalizer
nfkdNormalizer = (Ptr UErrorCode -> IO (Ptr UNormalizer2)) -> IO Normalizer
createNormalizerWith Ptr UErrorCode -> IO (Ptr UNormalizer2)
unorm2_getNFKDInstance
nfkcCasefoldNormalizer :: IO Normalizer
nfkcCasefoldNormalizer :: IO Normalizer
nfkcCasefoldNormalizer = (Ptr UErrorCode -> IO (Ptr UNormalizer2)) -> IO Normalizer
createNormalizerWith Ptr UErrorCode -> IO (Ptr UNormalizer2)
unorm2_getNFKCCasefoldInstance
normalizeWith :: Normalizer -> Text -> Text
normalizeWith :: Normalizer -> Text -> Text
normalizeWith (Normalizer Ptr UNormalizer2
nfPtr) Text
t = IO Text -> Text
forall a. IO a -> a
unsafePerformIO (IO Text -> Text) -> IO Text -> Text
forall a b. (a -> b) -> a -> b
$
Text -> (Ptr UChar -> I16 -> IO Text) -> IO Text
forall a. Text -> (Ptr UChar -> I16 -> IO a) -> IO a
useAsUCharPtr Text
t ((Ptr UChar -> I16 -> IO Text) -> IO Text)
-> (Ptr UChar -> I16 -> IO Text) -> IO Text
forall a b. (a -> b) -> a -> b
$ \Ptr UChar
sptr I16
slen ->
let slen' :: Int32
slen' = I16 -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral I16
slen
in Int
-> (Ptr UChar -> Int32 -> Ptr UErrorCode -> IO Int32)
-> (Ptr UChar -> Int -> IO Text)
-> IO Text
forall a b.
Storable a =>
Int
-> (Ptr a -> Int32 -> Ptr UErrorCode -> IO Int32)
-> (Ptr a -> Int -> IO b)
-> IO b
handleOverflowError (I16 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral I16
slen)
(\Ptr UChar
dptr Int32
dlen -> Ptr UNormalizer2
-> Ptr UChar
-> Int32
-> Ptr UChar
-> Int32
-> Ptr UErrorCode
-> IO Int32
unorm2_normalize Ptr UNormalizer2
nfPtr Ptr UChar
sptr Int32
slen' Ptr UChar
dptr (Int32 -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int32
dlen))
(\Ptr UChar
dptr Int
dlen -> Ptr UChar -> I16 -> IO Text
fromUCharPtr Ptr UChar
dptr (Int -> I16
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
dlen))
normalize :: NormalizationMode -> Text -> Text
normalize :: NormalizationMode -> Text -> Text
normalize NormalizationMode
NFC = Text -> Text
nfc
normalize NormalizationMode
NFD = Text -> Text
nfd
normalize NormalizationMode
NFKC = Text -> Text
nfkc
normalize NormalizationMode
NFKD = Text -> Text
nfkd
normalize NormalizationMode
NFKCCasefold = Text -> Text
nfkcCasefold
nfc :: Text -> Text
nfc :: Text -> Text
nfc Text
t = IO Text -> Text
forall a. IO a -> a
unsafePerformIO (IO Text -> Text) -> IO Text -> Text
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfcNormalizer
Text -> IO Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> IO Text) -> Text -> IO Text
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Text
normalizeWith Normalizer
nf Text
t
nfkc :: Text -> Text
nfkc :: Text -> Text
nfkc Text
t = IO Text -> Text
forall a. IO a -> a
unsafePerformIO (IO Text -> Text) -> IO Text -> Text
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkcNormalizer
Text -> IO Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> IO Text) -> Text -> IO Text
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Text
normalizeWith Normalizer
nf Text
t
nfd :: Text -> Text
nfd :: Text -> Text
nfd Text
t = IO Text -> Text
forall a. IO a -> a
unsafePerformIO (IO Text -> Text) -> IO Text -> Text
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfdNormalizer
Text -> IO Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> IO Text) -> Text -> IO Text
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Text
normalizeWith Normalizer
nf Text
t
nfkd :: Text -> Text
nfkd :: Text -> Text
nfkd Text
t = IO Text -> Text
forall a. IO a -> a
unsafePerformIO (IO Text -> Text) -> IO Text -> Text
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkdNormalizer
Text -> IO Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> IO Text) -> Text -> IO Text
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Text
normalizeWith Normalizer
nf Text
t
nfkcCasefold :: Text -> Text
nfkcCasefold :: Text -> Text
nfkcCasefold Text
t = IO Text -> Text
forall a. IO a -> a
unsafePerformIO (IO Text -> Text) -> IO Text -> Text
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkcCasefoldNormalizer
Text -> IO Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> IO Text) -> Text -> IO Text
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Text
normalizeWith Normalizer
nf Text
t
quickCheckWith :: Normalizer -> Text -> Maybe Bool
quickCheckWith :: Normalizer -> Text -> Maybe Bool
quickCheckWith (Normalizer Ptr UNormalizer2
nfPtr) Text
t = IO (Maybe Bool) -> Maybe Bool
forall a. IO a -> a
unsafePerformIO (IO (Maybe Bool) -> Maybe Bool) -> IO (Maybe Bool) -> Maybe Bool
forall a b. (a -> b) -> a -> b
$
Text -> (Ptr UChar -> I16 -> IO (Maybe Bool)) -> IO (Maybe Bool)
forall a. Text -> (Ptr UChar -> I16 -> IO a) -> IO a
useAsUCharPtr Text
t ((Ptr UChar -> I16 -> IO (Maybe Bool)) -> IO (Maybe Bool))
-> (Ptr UChar -> I16 -> IO (Maybe Bool)) -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ \Ptr UChar
sptr I16
slen ->
(UErrorCode -> Maybe Bool) -> IO UErrorCode -> IO (Maybe Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap UErrorCode -> Maybe Bool
toNCR (IO UErrorCode -> IO (Maybe Bool))
-> ((Ptr UErrorCode -> IO UErrorCode) -> IO UErrorCode)
-> (Ptr UErrorCode -> IO UErrorCode)
-> IO (Maybe Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Ptr UErrorCode -> IO UErrorCode) -> IO UErrorCode
forall a. (Ptr UErrorCode -> IO a) -> IO a
handleError ((Ptr UErrorCode -> IO UErrorCode) -> IO (Maybe Bool))
-> (Ptr UErrorCode -> IO UErrorCode) -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ Ptr UNormalizer2
-> Ptr UChar -> Int32 -> Ptr UErrorCode -> IO UErrorCode
unorm2_quickCheck Ptr UNormalizer2
nfPtr Ptr UChar
sptr (I16 -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral I16
slen)
quickCheck :: NormalizationMode -> Text -> Maybe Bool
quickCheck :: NormalizationMode -> Text -> Maybe Bool
quickCheck NormalizationMode
NFD Text
t = IO (Maybe Bool) -> Maybe Bool
forall a. IO a -> a
unsafePerformIO (IO (Maybe Bool) -> Maybe Bool) -> IO (Maybe Bool) -> Maybe Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfdNormalizer
Maybe Bool -> IO (Maybe Bool)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Bool -> IO (Maybe Bool)) -> Maybe Bool -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Maybe Bool
quickCheckWith Normalizer
nf Text
t
quickCheck NormalizationMode
NFC Text
t = IO (Maybe Bool) -> Maybe Bool
forall a. IO a -> a
unsafePerformIO (IO (Maybe Bool) -> Maybe Bool) -> IO (Maybe Bool) -> Maybe Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfcNormalizer
Maybe Bool -> IO (Maybe Bool)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Bool -> IO (Maybe Bool)) -> Maybe Bool -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Maybe Bool
quickCheckWith Normalizer
nf Text
t
quickCheck NormalizationMode
NFKD Text
t = IO (Maybe Bool) -> Maybe Bool
forall a. IO a -> a
unsafePerformIO (IO (Maybe Bool) -> Maybe Bool) -> IO (Maybe Bool) -> Maybe Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkdNormalizer
Maybe Bool -> IO (Maybe Bool)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Bool -> IO (Maybe Bool)) -> Maybe Bool -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Maybe Bool
quickCheckWith Normalizer
nf Text
t
quickCheck NormalizationMode
NFKC Text
t = IO (Maybe Bool) -> Maybe Bool
forall a. IO a -> a
unsafePerformIO (IO (Maybe Bool) -> Maybe Bool) -> IO (Maybe Bool) -> Maybe Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkcNormalizer
Maybe Bool -> IO (Maybe Bool)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Bool -> IO (Maybe Bool)) -> Maybe Bool -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Maybe Bool
quickCheckWith Normalizer
nf Text
t
quickCheck NormalizationMode
NFKCCasefold Text
t = IO (Maybe Bool) -> Maybe Bool
forall a. IO a -> a
unsafePerformIO (IO (Maybe Bool) -> Maybe Bool) -> IO (Maybe Bool) -> Maybe Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkcCasefoldNormalizer
Maybe Bool -> IO (Maybe Bool)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Bool -> IO (Maybe Bool)) -> Maybe Bool -> IO (Maybe Bool)
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Maybe Bool
quickCheckWith Normalizer
nf Text
t
isNormalizedWith :: Normalizer -> Text -> Bool
isNormalizedWith :: Normalizer -> Text -> Bool
isNormalizedWith (Normalizer Ptr UNormalizer2
nfPtr) Text
t = IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$
Text -> (Ptr UChar -> I16 -> IO Bool) -> IO Bool
forall a. Text -> (Ptr UChar -> I16 -> IO a) -> IO a
useAsUCharPtr Text
t ((Ptr UChar -> I16 -> IO Bool) -> IO Bool)
-> (Ptr UChar -> I16 -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$ \Ptr UChar
sptr I16
slen ->
(UBool -> Bool) -> IO UBool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap UBool -> Bool
forall a. Integral a => a -> Bool
asBool (IO UBool -> IO Bool)
-> ((Ptr UErrorCode -> IO UBool) -> IO UBool)
-> (Ptr UErrorCode -> IO UBool)
-> IO Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Ptr UErrorCode -> IO UBool) -> IO UBool
forall a. (Ptr UErrorCode -> IO a) -> IO a
handleError ((Ptr UErrorCode -> IO UBool) -> IO Bool)
-> (Ptr UErrorCode -> IO UBool) -> IO Bool
forall a b. (a -> b) -> a -> b
$ Ptr UNormalizer2
-> Ptr UChar -> Int32 -> Ptr UErrorCode -> IO UBool
unorm2_isNormalized Ptr UNormalizer2
nfPtr Ptr UChar
sptr (I16 -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral I16
slen)
isNormalized :: NormalizationMode -> Text -> Bool
isNormalized :: NormalizationMode -> Text -> Bool
isNormalized NormalizationMode
NFD Text
t = IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfdNormalizer
Bool -> IO Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> IO Bool) -> Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Bool
isNormalizedWith Normalizer
nf Text
t
isNormalized NormalizationMode
NFC Text
t = IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfcNormalizer
Bool -> IO Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> IO Bool) -> Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Bool
isNormalizedWith Normalizer
nf Text
t
isNormalized NormalizationMode
NFKD Text
t = IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkdNormalizer
Bool -> IO Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> IO Bool) -> Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Bool
isNormalizedWith Normalizer
nf Text
t
isNormalized NormalizationMode
NFKC Text
t = IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkcNormalizer
Bool -> IO Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> IO Bool) -> Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Bool
isNormalizedWith Normalizer
nf Text
t
isNormalized NormalizationMode
NFKCCasefold Text
t = IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$ do
Normalizer
nf <- IO Normalizer
nfkcCasefoldNormalizer
Bool -> IO Bool
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> IO Bool) -> Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ Normalizer -> Text -> Bool
isNormalizedWith Normalizer
nf Text
t
type UCompareOption = Word32
data CompareOption = InputIsFCD
| CompareIgnoreCase
| FoldCaseExcludeSpecialI
deriving (CompareOption -> CompareOption -> Bool
(CompareOption -> CompareOption -> Bool)
-> (CompareOption -> CompareOption -> Bool) -> Eq CompareOption
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CompareOption -> CompareOption -> Bool
$c/= :: CompareOption -> CompareOption -> Bool
== :: CompareOption -> CompareOption -> Bool
$c== :: CompareOption -> CompareOption -> Bool
Eq, Int -> CompareOption -> ShowS
[CompareOption] -> ShowS
CompareOption -> String
(Int -> CompareOption -> ShowS)
-> (CompareOption -> String)
-> ([CompareOption] -> ShowS)
-> Show CompareOption
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CompareOption] -> ShowS
$cshowList :: [CompareOption] -> ShowS
show :: CompareOption -> String
$cshow :: CompareOption -> String
showsPrec :: Int -> CompareOption -> ShowS
$cshowsPrec :: Int -> CompareOption -> ShowS
Show, Int -> CompareOption
CompareOption -> Int
CompareOption -> [CompareOption]
CompareOption -> CompareOption
CompareOption -> CompareOption -> [CompareOption]
CompareOption -> CompareOption -> CompareOption -> [CompareOption]
(CompareOption -> CompareOption)
-> (CompareOption -> CompareOption)
-> (Int -> CompareOption)
-> (CompareOption -> Int)
-> (CompareOption -> [CompareOption])
-> (CompareOption -> CompareOption -> [CompareOption])
-> (CompareOption -> CompareOption -> [CompareOption])
-> (CompareOption
-> CompareOption -> CompareOption -> [CompareOption])
-> Enum CompareOption
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: CompareOption -> CompareOption -> CompareOption -> [CompareOption]
$cenumFromThenTo :: CompareOption -> CompareOption -> CompareOption -> [CompareOption]
enumFromTo :: CompareOption -> CompareOption -> [CompareOption]
$cenumFromTo :: CompareOption -> CompareOption -> [CompareOption]
enumFromThen :: CompareOption -> CompareOption -> [CompareOption]
$cenumFromThen :: CompareOption -> CompareOption -> [CompareOption]
enumFrom :: CompareOption -> [CompareOption]
$cenumFrom :: CompareOption -> [CompareOption]
fromEnum :: CompareOption -> Int
$cfromEnum :: CompareOption -> Int
toEnum :: Int -> CompareOption
$ctoEnum :: Int -> CompareOption
pred :: CompareOption -> CompareOption
$cpred :: CompareOption -> CompareOption
succ :: CompareOption -> CompareOption
$csucc :: CompareOption -> CompareOption
Enum, Typeable)
fromCompareOption :: CompareOption -> UCompareOption
fromCompareOption :: CompareOption -> UCompareOption
fromCompareOption CompareOption
InputIsFCD = UCompareOption
131072
{-# LINE 365 "Data/Text/ICU/Normalize2.hsc" #-}
fromCompareOption CompareIgnoreCase = 65536
{-# LINE 366 "Data/Text/ICU/Normalize2.hsc" #-}
fromCompareOption FoldCaseExcludeSpecialI = 1
{-# LINE 367 "Data/Text/ICU/Normalize2.hsc" #-}
reduceCompareOptions :: [CompareOption] -> UCompareOption
reduceCompareOptions :: [CompareOption] -> UCompareOption
reduceCompareOptions = (UCompareOption -> CompareOption -> UCompareOption)
-> UCompareOption -> [CompareOption] -> UCompareOption
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' UCompareOption -> CompareOption -> UCompareOption
orO (UCompareOption
32768)
{-# LINE 370 "Data/Text/ICU/Normalize2.hsc" #-}
where UCompareOption
a orO :: UCompareOption -> CompareOption -> UCompareOption
`orO` CompareOption
b = UCompareOption
a UCompareOption -> UCompareOption -> UCompareOption
forall a. Bits a => a -> a -> a
.|. CompareOption -> UCompareOption
fromCompareOption CompareOption
b
compareUnicode :: [CompareOption] -> Text -> Text -> Ordering
compareUnicode :: [CompareOption] -> Text -> Text -> Ordering
compareUnicode [CompareOption]
opts Text
a Text
b = IO Ordering -> Ordering
forall a. IO a -> a
unsafePerformIO (IO Ordering -> Ordering) -> IO Ordering -> Ordering
forall a b. (a -> b) -> a -> b
$ do
Text -> (Ptr UChar -> I16 -> IO Ordering) -> IO Ordering
forall a. Text -> (Ptr UChar -> I16 -> IO a) -> IO a
useAsUCharPtr Text
a ((Ptr UChar -> I16 -> IO Ordering) -> IO Ordering)
-> (Ptr UChar -> I16 -> IO Ordering) -> IO Ordering
forall a b. (a -> b) -> a -> b
$ \Ptr UChar
aptr I16
alen ->
Text -> (Ptr UChar -> I16 -> IO Ordering) -> IO Ordering
forall a. Text -> (Ptr UChar -> I16 -> IO a) -> IO a
useAsUCharPtr Text
b ((Ptr UChar -> I16 -> IO Ordering) -> IO Ordering)
-> (Ptr UChar -> I16 -> IO Ordering) -> IO Ordering
forall a b. (a -> b) -> a -> b
$ \Ptr UChar
bptr I16
blen ->
(Int32 -> Ordering) -> IO Int32 -> IO Ordering
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Int32 -> Ordering
forall a. Integral a => a -> Ordering
asOrdering (IO Int32 -> IO Ordering)
-> ((Ptr UErrorCode -> IO Int32) -> IO Int32)
-> (Ptr UErrorCode -> IO Int32)
-> IO Ordering
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Ptr UErrorCode -> IO Int32) -> IO Int32
forall a. (Ptr UErrorCode -> IO a) -> IO a
handleError ((Ptr UErrorCode -> IO Int32) -> IO Ordering)
-> (Ptr UErrorCode -> IO Int32) -> IO Ordering
forall a b. (a -> b) -> a -> b
$
Ptr UChar
-> Int32
-> Ptr UChar
-> Int32
-> UCompareOption
-> Ptr UErrorCode
-> IO Int32
unorm_compare Ptr UChar
aptr (I16 -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral I16
alen) Ptr UChar
bptr (I16 -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral I16
blen)
([CompareOption] -> UCompareOption
reduceCompareOptions [CompareOption]
opts)
compareUnicode' :: Text -> Text -> Ordering
compareUnicode' :: Text -> Text -> Ordering
compareUnicode' = [CompareOption] -> Text -> Text -> Ordering
compareUnicode []
foreign import ccall unsafe "hs_text_icu.h __hs_unorm2_getNFCInstance" unorm2_getNFCInstance
:: Ptr UErrorCode
-> IO (Ptr UNormalizer2)
foreign import ccall unsafe "hs_text_icu.h __hs_unorm2_getNFDInstance" unorm2_getNFDInstance
:: Ptr UErrorCode
-> IO (Ptr UNormalizer2)
foreign import ccall unsafe "hs_text_icu.h __hs_unorm2_getNFKCInstance" unorm2_getNFKCInstance
:: Ptr UErrorCode
-> IO (Ptr UNormalizer2)
foreign import ccall unsafe "hs_text_icu.h __hs_unorm2_getNFKDInstance" unorm2_getNFKDInstance
:: Ptr UErrorCode
-> IO (Ptr UNormalizer2)
foreign import ccall unsafe "hs_text_icu.h __hs_unorm2_getNFKCCasefoldInstance" unorm2_getNFKCCasefoldInstance
:: Ptr UErrorCode
-> IO (Ptr UNormalizer2)
foreign import ccall unsafe "hs_text_icu.h __hs_unorm_compare" unorm_compare
:: Ptr UChar -> Int32
-> Ptr UChar -> Int32
-> Word32
-> Ptr UErrorCode
-> IO Int32
foreign import ccall unsafe "hs_text_icu.h __hs_unorm2_quickCheck" unorm2_quickCheck
:: Ptr UNormalizer2
-> Ptr UChar -> Int32
-> Ptr UErrorCode
-> IO UNormalizationCheckResult
foreign import ccall unsafe "hs_text_icu.h __hs_unorm2_isNormalized" unorm2_isNormalized
:: Ptr UNormalizer2
-> Ptr UChar -> Int32
-> Ptr UErrorCode
-> IO UBool
foreign import ccall unsafe "hs_text_icu.h __hs_unorm2_normalize" unorm2_normalize
:: Ptr UNormalizer2
-> Ptr UChar -> Int32
-> Ptr UChar -> Int32
-> Ptr UErrorCode
-> IO Int32