module Unicode.Char.General.Names
(
name
, nameOrAlias
, correctedName
, NameAliases.NameAliasType(..)
, nameAliases
, nameAliasesByType
, nameAliasesWithTypes
) where
import Control.Applicative ((<|>))
import Data.Maybe (listToMaybe)
import Foreign.C.String (CString, peekCAString)
import System.IO.Unsafe (unsafePerformIO)
import qualified Unicode.Internal.Char.UnicodeData.DerivedName as DerivedName
import qualified Unicode.Internal.Char.UnicodeData.NameAliases as NameAliases
{-# INLINE name #-}
name :: Char -> Maybe String
name :: Char -> Maybe String
name = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CString -> String
unpack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Maybe CString
DerivedName.name
{-# INLINE correctedName #-}
correctedName :: Char -> Maybe String
correctedName :: Char -> Maybe String
correctedName Char
c =
forall a. [a] -> Maybe a
listToMaybe (NameAliasType -> Char -> [String]
nameAliasesByType NameAliasType
NameAliases.Correction Char
c) forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Maybe String
name Char
c
nameOrAlias :: Char -> Maybe String
nameOrAlias :: Char -> Maybe String
nameOrAlias Char
c = Char -> Maybe String
name Char
c forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> case Char -> [(NameAliasType, [CString])]
NameAliases.nameAliasesWithTypes Char
c of
(NameAliasType
_, CString
n:[CString]
_):[(NameAliasType, [CString])]
_ -> forall a. a -> Maybe a
Just (CString -> String
unpack CString
n)
[(NameAliasType, [CString])]
_ -> forall a. Maybe a
Nothing
{-# INLINE nameAliases #-}
nameAliases :: Char -> [String]
nameAliases :: Char -> [String]
nameAliases = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CString -> String
unpack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> [CString]
NameAliases.nameAliases
{-# INLINE nameAliasesByType #-}
nameAliasesByType :: NameAliases.NameAliasType -> Char -> [String]
nameAliasesByType :: NameAliasType -> Char -> [String]
nameAliasesByType NameAliasType
t = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CString -> String
unpack forall b c a. (b -> c) -> (a -> b) -> a -> c
. NameAliasType -> Char -> [CString]
NameAliases.nameAliasesByType NameAliasType
t
{-# INLINE nameAliasesWithTypes #-}
nameAliasesWithTypes :: Char -> [(NameAliases.NameAliasType, [String])]
nameAliasesWithTypes :: Char -> [(NameAliasType, [String])]
nameAliasesWithTypes
= forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CString -> String
unpack))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> [(NameAliasType, [CString])]
NameAliases.nameAliasesWithTypes
{-# INLINE unpack #-}
unpack :: CString -> String
unpack :: CString -> String
unpack = forall a. IO a -> a
unsafePerformIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. CString -> IO String
peekCAString