{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE CPP, NoImplicitPrelude, StandaloneDeriving #-}
{-# 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 ( Show
, Eq
, Ord
, Enum
, Bounded
, Ix
)
generalCategory :: Char -> GeneralCategory
generalCategory :: Char -> GeneralCategory
generalCategory Char
c = Int -> GeneralCategory
forall a. Enum a => Int -> a
Instance of class: Enum of the constraint type Enum GeneralCategory
toEnum (Int -> GeneralCategory) -> Int -> GeneralCategory
forall a b. (a -> b) -> a -> b
$ Int -> Int
forall a b. (Integral a, Num b) => a -> b
External instance of the constraint type Num Int
External instance of the constraint type Integral Int
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
External instance of the constraint type Num Int
External instance of the constraint type Integral Int
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
External instance of the constraint type Ord Char
< Char
'\x80'
isLatin1 :: Char -> Bool
isLatin1 :: Char -> Bool
isLatin1 Char
c = Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Char
<= Char
'\xff'
isAsciiLower :: Char -> Bool
isAsciiLower :: Char -> Bool
isAsciiLower Char
c = Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Char
>= Char
'a' Bool -> Bool -> Bool
&& Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Char
<= Char
'z'
isAsciiUpper :: Char -> Bool
isAsciiUpper :: Char -> Bool
isAsciiUpper Char
c = Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Char
>= Char
'A' Bool -> Bool -> Bool
&& Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Char
<= 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
External instance of the constraint type Ord Word
<= Word
0x377 = Word
uc Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
External instance of the constraint type Eq Word
== Word
32 Bool -> Bool -> Bool
|| Word
uc Word -> Word -> Word
forall a. Num a => a -> a -> a
External instance of the constraint type Num Word
- Word
0x9 Word -> Word -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Word
<= Word
4 Bool -> Bool -> Bool
|| Word
uc Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
External instance of the constraint type Eq Word
== Word
0xa0
| Bool
otherwise = Int -> Int
iswspace (Char -> Int
ord Char
c) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
External instance of the constraint type Eq Int
/= Int
0
where
uc :: Word
uc = Int -> Word
forall a b. (Integral a, Num b) => a -> b
External instance of the constraint type Num Word
External instance of the constraint type Integral Int
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
External instance of the constraint type Num Word
External instance of the constraint type Integral Int
fromIntegral (Char -> Int
ord Char
c Int -> Int -> Int
forall a. Num a => a -> a -> a
External instance of the constraint type Num Int
- Char -> Int
ord Char
'0') :: Word) Word -> Word -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Word
<= Word
9
isOctDigit :: Char -> Bool
isOctDigit :: Char -> Bool
isOctDigit Char
c = (Int -> Word
forall a b. (Integral a, Num b) => a -> b
External instance of the constraint type Num Word
External instance of the constraint type Integral Int
fromIntegral (Char -> Int
ord Char
c Int -> Int -> Int
forall a. Num a => a -> a -> a
External instance of the constraint type Num Int
- Char -> Int
ord Char
'0') :: Word) Word -> Word -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Word
<= 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
External instance of the constraint type Num Word
External instance of the constraint type Integral Int
fromIntegral (Char -> Int
ord Char
c Int -> Int -> Int
forall a. Num a => a -> a -> a
External instance of the constraint type Num Int
- Char -> Int
ord Char
'A')::Word) Word -> Word -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Word
<= Word
5 Bool -> Bool -> Bool
||
(Int -> Word
forall a b. (Integral a, Num b) => a -> b
External instance of the constraint type Num Word
External instance of the constraint type Integral Int
fromIntegral (Char -> Int
ord Char
c Int -> Int -> Int
forall a. Num a => a -> a -> a
External instance of the constraint type Num Int
- Char -> Int
ord Char
'a')::Word) Word -> Word -> Bool
forall a. Ord a => a -> a -> Bool
External instance of the constraint type Ord Word
<= 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
External instance of the constraint type Eq Int
/= 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
External instance of the constraint type Eq Int
/= 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
External instance of the constraint type Eq Int
/= 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
External instance of the constraint type Eq Int
/= 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
External instance of the constraint type Eq Int
/= 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
External instance of the constraint type Eq Int
/= 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