Z-Data-0.1.4.1: Z/Data/Text/UTF8Rewind.hsc
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE PatternSynonyms #-}
{-|
Module : Z.Data.Text.UTF8Rewind
Description : Errno provided by libuv
Copyright : (c) Winterland, 2017-2018
License : BSD
Maintainer : drkoster@qq.com
Stability : experimental
Portability : non-portable
INTERNAL MODULE, provides utf8rewind constants
-}
module Z.Data.Text.UTF8Rewind where
import Data.Bits
import Foreign.C.Types
import GHC.Generics
#include "utf8rewind.h"
-- | Locale for case mapping.
newtype Locale = Locale CSize deriving (Show, Eq, Ord, Generic)
pattern LocaleDefault :: Locale
pattern LocaleDefault = Locale (#const UTF8_LOCALE_DEFAULT)
pattern LocaleLithuanian :: Locale
pattern LocaleLithuanian = Locale (#const UTF8_LOCALE_LITHUANIAN)
pattern LocaleTurkishAndAzeriLatin :: Locale
pattern LocaleTurkishAndAzeriLatin = Locale (#const UTF8_LOCALE_TURKISH_AND_AZERI_LATIN)
-- | Get environment locale
foreign import ccall unsafe "utf8envlocale" envLocale :: IO Locale
{-|
These are the Unicode Normalization Forms:
@
Form | Description
---------------------------- | ---------------------------------------------
Normalization Form D (NFD) | Canonical decomposition
Normalization Form C (NFC) | Canonical decomposition, followed by canonical composition
Normalization Form KD (NFKD) | Compatibility decomposition
Normalization Form KC (NFKC) | Compatibility decomposition, followed by canonical composition
@
-}
data NormalizeMode = NFC | NFKC | NFD | NFKD deriving (Show, Eq, Ord, Generic)
normalizeModeToFlag :: NormalizeMode -> CSize
normalizeModeToFlag NFC = #{const UTF8_NORMALIZE_COMPOSE}
normalizeModeToFlag NFKC = #{const UTF8_NORMALIZE_COMPOSE} + #{const UTF8_NORMALIZE_COMPATIBILITY}
normalizeModeToFlag NFD = #{const UTF8_NORMALIZE_DECOMPOSE}
normalizeModeToFlag NFKD = #{const UTF8_NORMALIZE_DECOMPOSE} + #{const UTF8_NORMALIZE_COMPATIBILITY}
data NormalizationResult = NormalizedYes | NormalizedMaybe | NormalizedNo deriving (Show, Eq, Ord, Generic)
toNormalizationResult :: Int -> NormalizationResult
toNormalizationResult #{const UTF8_NORMALIZATION_RESULT_YES} = NormalizedYes
toNormalizationResult #{const UTF8_NORMALIZATION_RESULT_MAYBE} = NormalizedMaybe
toNormalizationResult #{const UTF8_NORMALIZATION_RESULT_NO} = NormalizedNo
-- | Unicode categories.
--
-- See 'Z.Data.Text.Base.isCategory', you can combine categories with bitwise or.
newtype Category = Category CSize deriving (Show, Eq, Ord, Bits, FiniteBits, Generic)
pattern CategoryLetterUppercase :: Category
pattern CategoryLetterLowercase :: Category
pattern CategoryLetterTitlecase :: Category
pattern CategoryLetterOther :: Category
pattern CategoryLetter :: Category
pattern CategoryCaseMapped :: Category
pattern CategoryLetterUppercase = Category (#const UTF8_CATEGORY_LETTER_UPPERCASE)
pattern CategoryLetterLowercase = Category (#const UTF8_CATEGORY_LETTER_LOWERCASE)
pattern CategoryLetterTitlecase = Category (#const UTF8_CATEGORY_LETTER_TITLECASE)
pattern CategoryLetterOther = Category (#const UTF8_CATEGORY_LETTER_OTHER)
pattern CategoryLetter = Category (#const UTF8_CATEGORY_LETTER)
pattern CategoryCaseMapped = Category (#const UTF8_CATEGORY_CASE_MAPPED)
pattern CategoryMarkNonSpacing :: Category
pattern CategoryMarkSpacing :: Category
pattern CategoryMarkEnclosing :: Category
pattern CategoryMark :: Category
pattern CategoryMarkNonSpacing = Category (#const UTF8_CATEGORY_MARK_NON_SPACING)
pattern CategoryMarkSpacing = Category (#const UTF8_CATEGORY_MARK_SPACING)
pattern CategoryMarkEnclosing = Category (#const UTF8_CATEGORY_MARK_ENCLOSING)
pattern CategoryMark = Category (#const UTF8_CATEGORY_MARK)
pattern CategoryNumberDecimal :: Category
pattern CategoryNumberLetter :: Category
pattern CategoryNumberOther :: Category
pattern CategoryNumber :: Category
pattern CategoryNumberDecimal = Category (#const UTF8_CATEGORY_NUMBER_DECIMAL)
pattern CategoryNumberLetter = Category (#const UTF8_CATEGORY_NUMBER_LETTER)
pattern CategoryNumberOther = Category (#const UTF8_CATEGORY_NUMBER_OTHER)
pattern CategoryNumber = Category (#const UTF8_CATEGORY_NUMBER)
pattern CategoryPunctuationConnector :: Category
pattern CategoryPunctuationDash :: Category
pattern CategoryPunctuationOpen :: Category
pattern CategoryPunctuationClose :: Category
pattern CategoryPunctuationInitial :: Category
pattern CategoryPunctuationFinal :: Category
pattern CategoryPunctuationOther :: Category
pattern CategoryPunctuation :: Category
pattern CategoryPunctuationConnector = Category (#const UTF8_CATEGORY_PUNCTUATION_CONNECTOR)
pattern CategoryPunctuationDash = Category (#const UTF8_CATEGORY_PUNCTUATION_DASH)
pattern CategoryPunctuationOpen = Category (#const UTF8_CATEGORY_PUNCTUATION_OPEN)
pattern CategoryPunctuationClose = Category (#const UTF8_CATEGORY_PUNCTUATION_CLOSE)
pattern CategoryPunctuationInitial = Category (#const UTF8_CATEGORY_PUNCTUATION_INITIAL)
pattern CategoryPunctuationFinal = Category (#const UTF8_CATEGORY_PUNCTUATION_FINAL)
pattern CategoryPunctuationOther = Category (#const UTF8_CATEGORY_PUNCTUATION_OTHER)
pattern CategoryPunctuation = Category (#const UTF8_CATEGORY_PUNCTUATION)
pattern CategorySymbolMath :: Category
pattern CategorySymbolCurrency :: Category
pattern CategorySymbolModifier :: Category
pattern CategorySymbolOther :: Category
pattern CategorySymbol :: Category
pattern CategorySymbolMath = Category (#const UTF8_CATEGORY_SYMBOL_MATH)
pattern CategorySymbolCurrency = Category (#const UTF8_CATEGORY_SYMBOL_CURRENCY)
pattern CategorySymbolModifier = Category (#const UTF8_CATEGORY_SYMBOL_MODIFIER)
pattern CategorySymbolOther = Category (#const UTF8_CATEGORY_SYMBOL_OTHER)
pattern CategorySymbol = Category (#const UTF8_CATEGORY_SYMBOL)
pattern CategorySeparatorSpace :: Category
pattern CategorySeparatorLine :: Category
pattern CategorySeparatorParagraph :: Category
pattern CategorySeparator :: Category
pattern CategoryControl :: Category
pattern CategoryFormat :: Category
pattern CategorySurrogate :: Category
pattern CategoryPrivateUse :: Category
pattern CategoryUnassigned :: Category
pattern CategoryCompatibility :: Category
pattern CategoryIgnoreGraphemeCluster :: Category
pattern CategoryIscntrl :: Category
pattern CategorySeparatorSpace = Category (#const UTF8_CATEGORY_SEPARATOR_SPACE)
pattern CategorySeparatorLine = Category (#const UTF8_CATEGORY_SEPARATOR_LINE)
pattern CategorySeparatorParagraph = Category (#const UTF8_CATEGORY_SEPARATOR_PARAGRAPH)
pattern CategorySeparator = Category (#const UTF8_CATEGORY_SEPARATOR)
pattern CategoryControl = Category (#const UTF8_CATEGORY_CONTROL)
pattern CategoryFormat = Category (#const UTF8_CATEGORY_FORMAT)
pattern CategorySurrogate = Category (#const UTF8_CATEGORY_SURROGATE)
pattern CategoryPrivateUse = Category (#const UTF8_CATEGORY_PRIVATE_USE)
pattern CategoryUnassigned = Category (#const UTF8_CATEGORY_UNASSIGNED)
pattern CategoryCompatibility = Category (#const UTF8_CATEGORY_COMPATIBILITY)
pattern CategoryIgnoreGraphemeCluster = Category (#const UTF8_CATEGORY_IGNORE_GRAPHEME_CLUSTER)
pattern CategoryIscntrl = Category (#const UTF8_CATEGORY_ISCNTRL)
pattern CategoryIsprint :: Category
pattern CategoryIsspace :: Category
pattern CategoryIsblank :: Category
pattern CategoryIsgraph :: Category
pattern CategoryIspunct :: Category
pattern CategoryIsalnum :: Category
pattern CategoryIsalpha :: Category
pattern CategoryIsupper :: Category
pattern CategoryIslower :: Category
pattern CategoryIsdigit :: Category
pattern CategoryIsxdigit :: Category
pattern CategoryIsprint = Category (#const UTF8_CATEGORY_ISPRINT)
pattern CategoryIsspace = Category (#const UTF8_CATEGORY_ISSPACE)
pattern CategoryIsblank = Category (#const UTF8_CATEGORY_ISBLANK)
pattern CategoryIsgraph = Category (#const UTF8_CATEGORY_ISGRAPH)
pattern CategoryIspunct = Category (#const UTF8_CATEGORY_ISPUNCT)
pattern CategoryIsalnum = Category (#const UTF8_CATEGORY_ISALNUM)
pattern CategoryIsalpha = Category (#const UTF8_CATEGORY_ISALPHA)
pattern CategoryIsupper = Category (#const UTF8_CATEGORY_ISUPPER)
pattern CategoryIslower = Category (#const UTF8_CATEGORY_ISLOWER)
pattern CategoryIsdigit = Category (#const UTF8_CATEGORY_ISDIGIT)
pattern CategoryIsxdigit = Category (#const UTF8_CATEGORY_ISXDIGIT)