(original) (raw)

{-# LANGUAGE CPP #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE Trustworthy #-}

{-# OPTIONS_HADDOCK not-home #-}

module GHC.Unicode ( unicodeVersion, GeneralCategory (..), generalCategory, isAscii, isLatin1, isControl, isAsciiUpper, isAsciiLower, isPrint, isSpace, isUpper, isLower, isAlpha, isDigit, isOctDigit, isHexDigit, isAlphaNum, isPunctuation, isSymbol, toUpper, toLower, toTitle, wgencat ) where

import GHC.Base import GHC.Char (chr) import GHC.Real import GHC.Enum ( Enum (..), Bounded (..) ) import GHC.Ix ( Ix (..) ) import GHC.Num import {-# SOURCE #-} Data.Version

import GHC.Show ( Show )

#include "HsBaseConfig.h" #include "UnicodeVersion.h"

unicodeVersion :: Version unicodeVersion :: Version unicodeVersion = [Int] -> Version makeVersion UNICODE_VERSION_NUMS

data GeneralCategory = UppercaseLetter
| LowercaseLetter
| TitlecaseLetter
| ModifierLetter
| OtherLetter
| NonSpacingMark
| SpacingCombiningMark
| EnclosingMark
| DecimalNumber
| LetterNumber
| OtherNumber
| ConnectorPunctuation
| DashPunctuation
| OpenPunctuation
| ClosePunctuation
| InitialQuote
| FinalQuote
| OtherPunctuation
| MathSymbol
| CurrencySymbol
| ModifierSymbol
| OtherSymbol
| Space
| LineSeparator
| ParagraphSeparator
| Control
| Format
| Surrogate
| PrivateUse
| NotAssigned
deriving ( Int -> GeneralCategory -> ShowS [GeneralCategory] -> ShowS GeneralCategory -> String (Int -> GeneralCategory -> ShowS) -> (GeneralCategory -> String) -> ([GeneralCategory] -> ShowS) -> Show GeneralCategory forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [GeneralCategory] -> ShowS $cshowList :: [GeneralCategory] -> ShowS show :: GeneralCategory -> String $cshow :: GeneralCategory -> String showsPrec :: Int -> GeneralCategory -> ShowS $cshowsPrec :: Int -> GeneralCategory -> ShowS Show
, GeneralCategory -> GeneralCategory -> Bool (GeneralCategory -> GeneralCategory -> Bool) -> (GeneralCategory -> GeneralCategory -> Bool) -> Eq GeneralCategory forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: GeneralCategory -> GeneralCategory -> Bool $c/= :: GeneralCategory -> GeneralCategory -> Bool == :: GeneralCategory -> GeneralCategory -> Bool $c== :: GeneralCategory -> GeneralCategory -> Bool Eq
, Eq GeneralCategory Eq GeneralCategory -> (GeneralCategory -> GeneralCategory -> Ordering) -> (GeneralCategory -> GeneralCategory -> Bool) -> (GeneralCategory -> GeneralCategory -> Bool) -> (GeneralCategory -> GeneralCategory -> Bool) -> (GeneralCategory -> GeneralCategory -> Bool) -> (GeneralCategory -> GeneralCategory -> GeneralCategory) -> (GeneralCategory -> GeneralCategory -> GeneralCategory) -> Ord GeneralCategory GeneralCategory -> GeneralCategory -> Bool GeneralCategory -> GeneralCategory -> Ordering GeneralCategory -> GeneralCategory -> GeneralCategory forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: GeneralCategory -> GeneralCategory -> GeneralCategory $cmin :: GeneralCategory -> GeneralCategory -> GeneralCategory max :: GeneralCategory -> GeneralCategory -> GeneralCategory $cmax :: GeneralCategory -> GeneralCategory -> GeneralCategory

= :: GeneralCategory -> GeneralCategory -> Bool $c>= :: GeneralCategory -> GeneralCategory -> Bool :: GeneralCategory -> GeneralCategory -> Bool $c> :: GeneralCategory -> GeneralCategory -> Bool <= :: GeneralCategory -> GeneralCategory -> Bool $c<= :: GeneralCategory -> GeneralCategory -> Bool < :: GeneralCategory -> GeneralCategory -> Bool $c< :: GeneralCategory -> GeneralCategory -> Bool compare :: GeneralCategory -> GeneralCategory -> Ordering $ccompare :: GeneralCategory -> GeneralCategory -> Ordering Ord
, Int -> GeneralCategory GeneralCategory -> Int GeneralCategory -> [GeneralCategory] GeneralCategory -> GeneralCategory GeneralCategory -> GeneralCategory -> [GeneralCategory] GeneralCategory -> GeneralCategory -> GeneralCategory -> [GeneralCategory] (GeneralCategory -> GeneralCategory) -> (GeneralCategory -> GeneralCategory) -> (Int -> GeneralCategory) -> (GeneralCategory -> Int) -> (GeneralCategory -> [GeneralCategory]) -> (GeneralCategory -> GeneralCategory -> [GeneralCategory]) -> (GeneralCategory -> GeneralCategory -> [GeneralCategory]) -> (GeneralCategory -> GeneralCategory -> GeneralCategory -> [GeneralCategory]) -> Enum GeneralCategory 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 :: GeneralCategory -> GeneralCategory -> GeneralCategory -> [GeneralCategory] $cenumFromThenTo :: GeneralCategory -> GeneralCategory -> GeneralCategory -> [GeneralCategory] enumFromTo :: GeneralCategory -> GeneralCategory -> [GeneralCategory] $cenumFromTo :: GeneralCategory -> GeneralCategory -> [GeneralCategory] enumFromThen :: GeneralCategory -> GeneralCategory -> [GeneralCategory] $cenumFromThen :: GeneralCategory -> GeneralCategory -> [GeneralCategory] enumFrom :: GeneralCategory -> [GeneralCategory] $cenumFrom :: GeneralCategory -> [GeneralCategory] fromEnum :: GeneralCategory -> Int $cfromEnum :: GeneralCategory -> Int toEnum :: Int -> GeneralCategory $ctoEnum :: Int -> GeneralCategory pred :: GeneralCategory -> GeneralCategory $cpred :: GeneralCategory -> GeneralCategory succ :: GeneralCategory -> GeneralCategory $csucc :: GeneralCategory -> GeneralCategory Enum
, GeneralCategory GeneralCategory -> GeneralCategory -> Bounded GeneralCategory forall a. a -> a -> Bounded a maxBound :: GeneralCategory $cmaxBound :: GeneralCategory minBound :: GeneralCategory $cminBound :: GeneralCategory Bounded
, Ord GeneralCategory Ord GeneralCategory -> ((GeneralCategory, GeneralCategory) -> [GeneralCategory]) -> ((GeneralCategory, GeneralCategory) -> GeneralCategory -> Int) -> ((GeneralCategory, GeneralCategory) -> GeneralCategory -> Int) -> ((GeneralCategory, GeneralCategory) -> GeneralCategory -> Bool) -> ((GeneralCategory, GeneralCategory) -> Int) -> ((GeneralCategory, GeneralCategory) -> Int) -> Ix GeneralCategory (GeneralCategory, GeneralCategory) -> Int (GeneralCategory, GeneralCategory) -> [GeneralCategory] (GeneralCategory, GeneralCategory) -> GeneralCategory -> Bool (GeneralCategory, GeneralCategory) -> GeneralCategory -> Int forall a. Ord a -> ((a, a) -> [a]) -> ((a, a) -> a -> Int) -> ((a, a) -> a -> Int) -> ((a, a) -> a -> Bool) -> ((a, a) -> Int) -> ((a, a) -> Int) -> Ix a unsafeRangeSize :: (GeneralCategory, GeneralCategory) -> Int $cunsafeRangeSize :: (GeneralCategory, GeneralCategory) -> Int rangeSize :: (GeneralCategory, GeneralCategory) -> Int $crangeSize :: (GeneralCategory, GeneralCategory) -> Int inRange :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Bool $cinRange :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Bool unsafeIndex :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Int $cunsafeIndex :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Int index :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Int $cindex :: (GeneralCategory, GeneralCategory) -> GeneralCategory -> Int range :: (GeneralCategory, GeneralCategory) -> [GeneralCategory] $crange :: (GeneralCategory, GeneralCategory) -> [GeneralCategory] Ix
)

generalCategory :: Char -> GeneralCategory generalCategory :: Char -> GeneralCategory generalCategory Char c = Int -> GeneralCategory forall a. Enum a => Int -> a toEnum (Int -> GeneralCategory) -> Int -> GeneralCategory forall a b. (a -> b) -> a -> b $ Int -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral (Int -> Int) -> Int -> Int forall a b. (a -> b) -> a -> b $ Int -> Int wgencat (Int -> Int) -> Int -> Int forall a b. (a -> b) -> a -> b $ Int -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral (Int -> Int) -> Int -> Int forall a b. (a -> b) -> a -> b $ Char -> Int ord Char c

isAscii :: Char -> Bool isAscii :: Char -> Bool isAscii Char c = Char c Char -> Char -> Bool forall a. Ord a => a -> a -> Bool < Char '\x80'

isLatin1 :: Char -> Bool isLatin1 :: Char -> Bool isLatin1 Char c = Char c Char -> Char -> Bool forall a. Ord a => a -> a -> Bool <= Char '\xff'

isAsciiLower :: Char -> Bool isAsciiLower :: Char -> Bool isAsciiLower Char c = Char c Char -> Char -> Bool forall a. Ord a => a -> a -> Bool >= Char 'a' Bool -> Bool -> Bool && Char c Char -> Char -> Bool forall a. Ord a => a -> a -> Bool <= Char 'z'

isAsciiUpper :: Char -> Bool isAsciiUpper :: Char -> Bool isAsciiUpper Char c = Char c Char -> Char -> Bool forall a. Ord a => a -> a -> Bool >= Char 'A' Bool -> Bool -> Bool && Char c Char -> Char -> Bool forall a. Ord a => a -> a -> Bool <= Char 'Z'

isControl :: Char -> Bool

isPrint :: Char -> Bool

isSpace :: Char -> Bool

isSpace :: Char -> Bool isSpace Char c | Word uc Word -> Word -> Bool forall a. Ord a => a -> a -> Bool <= Word 0x377 = Word uc Word -> Word -> Bool forall a. Eq a => a -> a -> Bool == Word 32 Bool -> Bool -> Bool || Word uc Word -> Word -> Word forall a. Num a => a -> a -> a - Word 0x9 Word -> Word -> Bool forall a. Ord a => a -> a -> Bool <= Word 4 Bool -> Bool -> Bool || Word uc Word -> Word -> Bool forall a. Eq a => a -> a -> Bool == Word 0xa0 | Bool otherwise = Int -> Int iswspace (Char -> Int ord Char c) Int -> Int -> Bool forall a. Eq a => a -> a -> Bool /= Int 0 where uc :: Word uc = Int -> Word forall a b. (Integral a, Num b) => a -> b fromIntegral (Char -> Int ord Char c) :: Word

isUpper :: Char -> Bool

isLower :: Char -> Bool

isAlpha :: Char -> Bool

isAlphaNum :: Char -> Bool

isDigit :: Char -> Bool isDigit :: Char -> Bool isDigit Char c = (Int -> Word forall a b. (Integral a, Num b) => a -> b fromIntegral (Char -> Int ord Char c Int -> Int -> Int forall a. Num a => a -> a -> a - Char -> Int ord Char '0') :: Word) Word -> Word -> Bool forall a. Ord a => a -> a -> Bool <= Word 9

isOctDigit :: Char -> Bool isOctDigit :: Char -> Bool isOctDigit Char c = (Int -> Word forall a b. (Integral a, Num b) => a -> b fromIntegral (Char -> Int ord Char c Int -> Int -> Int forall a. Num a => a -> a -> a - Char -> Int ord Char '0') :: Word) Word -> Word -> Bool forall a. Ord a => a -> a -> Bool <= Word 7

isHexDigit :: Char -> Bool isHexDigit :: Char -> Bool isHexDigit Char c = Char -> Bool isDigit Char c Bool -> Bool -> Bool || (Int -> Word forall a b. (Integral a, Num b) => a -> b fromIntegral (Char -> Int ord Char c Int -> Int -> Int forall a. Num a => a -> a -> a - Char -> Int ord Char 'A')::Word) Word -> Word -> Bool forall a. Ord a => a -> a -> Bool <= Word 5 Bool -> Bool -> Bool || (Int -> Word forall a b. (Integral a, Num b) => a -> b fromIntegral (Char -> Int ord Char c Int -> Int -> Int forall a. Num a => a -> a -> a - Char -> Int ord Char 'a')::Word) Word -> Word -> Bool forall a. Ord a => a -> a -> Bool <= Word 5

isPunctuation :: Char -> Bool isPunctuation :: Char -> Bool isPunctuation Char c = case Char -> GeneralCategory generalCategory Char c of GeneralCategory ConnectorPunctuation -> Bool True GeneralCategory DashPunctuation -> Bool True GeneralCategory OpenPunctuation -> Bool True GeneralCategory ClosePunctuation -> Bool True GeneralCategory InitialQuote -> Bool True GeneralCategory FinalQuote -> Bool True GeneralCategory OtherPunctuation -> Bool True GeneralCategory _ -> Bool False

isSymbol :: Char -> Bool isSymbol :: Char -> Bool isSymbol Char c = case Char -> GeneralCategory generalCategory Char c of GeneralCategory MathSymbol -> Bool True GeneralCategory CurrencySymbol -> Bool True GeneralCategory ModifierSymbol -> Bool True GeneralCategory OtherSymbol -> Bool True GeneralCategory _ -> Bool False

toUpper :: Char -> Char

toLower :: Char -> Char

toTitle :: Char -> Char

isAlpha :: Char -> Bool isAlpha Char c = Int -> Int iswalpha (Char -> Int ord Char c) Int -> Int -> Bool forall a. Eq a => a -> a -> Bool /= Int 0 isAlphaNum :: Char -> Bool isAlphaNum Char c = Int -> Int iswalnum (Char -> Int ord Char c) Int -> Int -> Bool forall a. Eq a => a -> a -> Bool /= Int 0 isControl :: Char -> Bool isControl Char c = Int -> Int iswcntrl (Char -> Int ord Char c) Int -> Int -> Bool forall a. Eq a => a -> a -> Bool /= Int 0 isPrint :: Char -> Bool isPrint Char c = Int -> Int iswprint (Char -> Int ord Char c) Int -> Int -> Bool forall a. Eq a => a -> a -> Bool /= Int 0 isUpper :: Char -> Bool isUpper Char c = Int -> Int iswupper (Char -> Int ord Char c) Int -> Int -> Bool forall a. Eq a => a -> a -> Bool /= Int 0 isLower :: Char -> Bool isLower Char c = Int -> Int iswlower (Char -> Int ord Char c) Int -> Int -> Bool forall a. Eq a => a -> a -> Bool /= Int 0

toLower :: Char -> Char toLower Char c = Int -> Char chr (Int -> Int towlower (Char -> Int ord Char c)) toUpper :: Char -> Char toUpper Char c = Int -> Char chr (Int -> Int towupper (Char -> Int ord Char c)) toTitle :: Char -> Char toTitle Char c = Int -> Char chr (Int -> Int towtitle (Char -> Int ord Char c))

foreign import ccall unsafe "u_iswalpha" iswalpha :: Int -> Int

foreign import ccall unsafe "u_iswalnum" iswalnum :: Int -> Int

foreign import ccall unsafe "u_iswcntrl" iswcntrl :: Int -> Int

foreign import ccall unsafe "u_iswspace" iswspace :: Int -> Int

foreign import ccall unsafe "u_iswprint" iswprint :: Int -> Int

foreign import ccall unsafe "u_iswlower" iswlower :: Int -> Int

foreign import ccall unsafe "u_iswupper" iswupper :: Int -> Int

foreign import ccall unsafe "u_towlower" towlower :: Int -> Int

foreign import ccall unsafe "u_towupper" towupper :: Int -> Int

foreign import ccall unsafe "u_towtitle" towtitle :: Int -> Int

foreign import ccall unsafe "u_gencat" wgencat :: Int -> Int