{-# LANGUAGE CPP #-}
module Ctype
( is_ident
, is_symbol
, is_any
, is_space
, is_lower
, is_upper
, is_digit
, is_alphanum
, is_decdigit, is_hexdigit, is_octdigit, is_bindigit
, hexDigit, octDecDigit
) where
#include "GhclibHsVersions.h"
import GhcPrelude
import Data.Int ( Int32 )
import Data.Bits ( Bits((.&.)) )
import Data.Char ( ord, chr )
import Panic
cIdent, cSymbol, cAny, cSpace, cLower, cUpper, cDigit :: Int
cIdent :: Int
cIdent = Int
1
cSymbol :: Int
cSymbol = Int
2
cAny :: Int
cAny = Int
4
cSpace :: Int
cSpace = Int
8
cLower :: Int
cLower = Int
16
cUpper :: Int
cUpper = Int
32
cDigit :: Int
cDigit = Int
64
{-# INLINE is_ctype #-}
is_ctype :: Int -> Char -> Bool
is_ctype :: Int -> Char -> Bool
is_ctype Int
mask Char
c = (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Char -> Int
charType Char
c) Int32 -> Int32 -> Int32
forall a. Bits a => a -> a -> a
.&. Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
mask) Int32 -> Int32 -> Bool
forall a. Eq a => a -> a -> Bool
/= (Int32
0::Int32)
is_ident, is_symbol, is_any, is_space, is_lower, is_upper, is_digit,
is_alphanum :: Char -> Bool
is_ident :: Char -> Bool
is_ident = Int -> Char -> Bool
is_ctype Int
cIdent
is_symbol :: Char -> Bool
is_symbol = Int -> Char -> Bool
is_ctype Int
cSymbol
is_any :: Char -> Bool
is_any = Int -> Char -> Bool
is_ctype Int
cAny
is_space :: Char -> Bool
is_space = Int -> Char -> Bool
is_ctype Int
cSpace
is_lower :: Char -> Bool
is_lower = Int -> Char -> Bool
is_ctype Int
cLower
is_upper :: Char -> Bool
is_upper = Int -> Char -> Bool
is_ctype Int
cUpper
is_digit :: Char -> Bool
is_digit = Int -> Char -> Bool
is_ctype Int
cDigit
is_alphanum :: Char -> Bool
is_alphanum = Int -> Char -> Bool
is_ctype (Int
cLowerInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
cUpperInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
cDigit)
hexDigit :: Char -> Int
hexDigit :: Char -> Int
hexDigit Char
c | Char -> Bool
is_decdigit Char
c = Char -> Int
ord Char
c Int -> Int -> Int
forall a. Num a => a -> a -> a
- Char -> Int
ord Char
'0'
| Bool
otherwise = Char -> Int
ord (Char -> Char
to_lower Char
c) Int -> Int -> Int
forall a. Num a => a -> a -> a
- Char -> Int
ord Char
'a' Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
10
octDecDigit :: Char -> Int
octDecDigit :: Char -> Int
octDecDigit Char
c = Char -> Int
ord Char
c Int -> Int -> Int
forall a. Num a => a -> a -> a
- Char -> Int
ord Char
'0'
is_decdigit :: Char -> Bool
is_decdigit :: Char -> Bool
is_decdigit Char
c
= Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
'0' Bool -> Bool -> Bool
&& Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
'9'
is_hexdigit :: Char -> Bool
is_hexdigit :: Char -> Bool
is_hexdigit Char
c
= Char -> Bool
is_decdigit Char
c
Bool -> Bool -> Bool
|| (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
'f')
Bool -> Bool -> Bool
|| (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
'F')
is_octdigit :: Char -> Bool
is_octdigit :: Char -> Bool
is_octdigit Char
c = Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
'0' Bool -> Bool -> Bool
&& Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<= Char
'7'
is_bindigit :: Char -> Bool
is_bindigit :: Char -> Bool
is_bindigit Char
c = Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'0' Bool -> Bool -> Bool
|| Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'1'
to_lower :: Char -> Char
to_lower :: Char -> Char
to_lower 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' = Int -> Char
chr (Char -> Int
ord Char
c Int -> Int -> Int
forall a. Num a => a -> a -> a
- (Char -> Int
ord Char
'A' Int -> Int -> Int
forall a. Num a => a -> a -> a
- Char -> Int
ord Char
'a'))
| Bool
otherwise = Char
c
charType :: Char -> Int
charType :: Char -> Int
charType Char
c = case Char
c of
Char
'\0' -> Int
0
Char
'\1' -> Int
0
Char
'\2' -> Int
0
Char
'\3' -> Int
0
Char
'\4' -> Int
0
Char
'\5' -> Int
0
Char
'\6' -> Int
0
Char
'\7' -> Int
0
Char
'\8' -> Int
0
Char
'\9' -> Int
cSpace
Char
'\10' -> Int
cSpace
Char
'\11' -> Int
cSpace
Char
'\12' -> Int
cSpace
Char
'\13' -> Int
cSpace
Char
'\14' -> Int
0
Char
'\15' -> Int
0
Char
'\16' -> Int
0
Char
'\17' -> Int
0
Char
'\18' -> Int
0
Char
'\19' -> Int
0
Char
'\20' -> Int
0
Char
'\21' -> Int
0
Char
'\22' -> Int
0
Char
'\23' -> Int
0
Char
'\24' -> Int
0
Char
'\25' -> Int
0
Char
'\26' -> Int
0
Char
'\27' -> Int
0
Char
'\28' -> Int
0
Char
'\29' -> Int
0
Char
'\30' -> Int
0
Char
'\31' -> Int
0
Char
'\32' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSpace
Char
'\33' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\34' -> Int
cAny
Char
'\35' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\36' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\37' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\38' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\39' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent
Char
'\40' -> Int
cAny
Char
'\41' -> Int
cAny
Char
'\42' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\43' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\44' -> Int
cAny
Char
'\45' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\46' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\47' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\48' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\49' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\50' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\51' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\52' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\53' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\54' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\55' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\56' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\57' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cDigit
Char
'\58' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\59' -> Int
cAny
Char
'\60' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\61' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\62' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\63' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\64' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\65' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\66' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\67' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\68' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\69' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\70' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\71' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\72' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\73' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\74' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\75' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\76' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\77' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\78' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\79' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\80' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\81' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\82' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\83' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\84' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\85' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\86' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\87' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\88' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\89' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\90' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cUpper
Char
'\91' -> Int
cAny
Char
'\92' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\93' -> Int
cAny
Char
'\94' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\95' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\96' -> Int
cAny
Char
'\97' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\98' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\99' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\100' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\101' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\102' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\103' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\104' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\105' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\106' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\107' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\108' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\109' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\110' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\111' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\112' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\113' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\114' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\115' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\116' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\117' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\118' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\119' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\120' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\121' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\122' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cIdent Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cLower
Char
'\123' -> Int
cAny
Char
'\124' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\125' -> Int
cAny
Char
'\126' -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol
Char
'\127' -> Int
0
Char
_ -> String -> Int
forall a. String -> a
panic (String
"charType: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Char -> String
forall a. Show a => a -> String
show Char
c)