module Data.Unicode.Properties.Decompose
( decomposeChar
, decomposeCharHangul
, DecomposeMode(..)
, DecomposeResult(..)
, isHangul
, jamoLFirst
, isDecomposable
)
where
import Data.BitArray (BitArray, lookupBit)
import Data.Char (ord)
import qualified Data.Unicode.Properties.Decomposable as D
import qualified Data.Unicode.Properties.DecomposableK as K
import Data.Unicode.Properties.DecomposeHangul ( decomposeCharHangul
, jamoLFirst
, isHangul)
import qualified Data.Unicode.Properties.Decompositions as D
import qualified Data.Unicode.Properties.DecompositionsK as K
data DecomposeMode = DecomposeNFD | DecomposeNFKD
{-# INLINE decomposeChar #-}
decomposeChar :: DecomposeMode -> Char -> [Char]
decomposeChar :: DecomposeMode -> Char -> [Char]
decomposeChar DecomposeMode
DecomposeNFD = Char -> [Char]
D.decomposeChar
decomposeChar DecomposeMode
DecomposeNFKD = Char -> [Char]
K.decomposeChar
{-# INLINE decomposeMin #-}
decomposeMin :: DecomposeMode -> Int
decomposeMin :: DecomposeMode -> Int
decomposeMin DecomposeMode
DecomposeNFD = Int
D.decomposeMin
decomposeMin DecomposeMode
DecomposeNFKD = Int
K.decomposeMin
{-# INLINE decomposeMax #-}
decomposeMax :: DecomposeMode -> Int
decomposeMax :: DecomposeMode -> Int
decomposeMax DecomposeMode
DecomposeNFD = Int
D.decomposeMax
decomposeMax DecomposeMode
DecomposeNFKD = Int
K.decomposeMax
{-# INLINE decomposeBitmap #-}
decomposeBitmap :: DecomposeMode -> BitArray
decomposeBitmap :: DecomposeMode -> BitArray
decomposeBitmap DecomposeMode
DecomposeNFD = BitArray
D.decomposeBitmap
decomposeBitmap DecomposeMode
DecomposeNFKD = BitArray
K.decomposeBitmap
data DecomposeResult = FalseA | FalseB | FalseC | TrueA
{-# INLINE isDecomposable #-}
isDecomposable :: DecomposeMode -> Char -> DecomposeResult
isDecomposable :: DecomposeMode -> Char -> DecomposeResult
isDecomposable DecomposeMode
mode Char
c | (Char -> Int
ord Char
c) Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< DecomposeMode -> Int
decomposeMin DecomposeMode
mode = DecomposeResult
FalseA
isDecomposable DecomposeMode
mode Char
c | (Char -> Int
ord Char
c) Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= DecomposeMode -> Int
decomposeMax DecomposeMode
mode =
case BitArray -> Int -> Bool
lookupBit (DecomposeMode -> BitArray
decomposeBitmap DecomposeMode
mode) (Char -> Int
ord Char
c) of
Bool
True -> DecomposeResult
TrueA
Bool
False -> DecomposeResult
FalseB
isDecomposable DecomposeMode
_ Char
_ = DecomposeResult
FalseC