-- Character classification
{-# LANGUAGE CPP #-}
module Ctype
        ( is_ident      -- Char# -> Bool
        , is_symbol     -- Char# -> Bool
        , is_any        -- Char# -> Bool
        , is_space      -- Char# -> Bool
        , is_lower      -- Char# -> Bool
        , is_upper      -- Char# -> Bool
        , is_digit      -- Char# -> Bool
        , is_alphanum   -- Char# -> Bool

        , 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

-- Bit masks

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

-- | The predicates below look costly, but aren't, GHC+GCC do a great job
-- at the big case below.

{-# 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)

-- Utils

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

-- | We really mean .|. instead of + below, but GHC currently doesn't do
--  any constant folding with bitops. *sigh*

charType :: Char -> Int
charType :: Char -> Int
charType Char
c = case Char
c of
   Char
'\0'   -> Int
0                         -- \000
   Char
'\1'   -> Int
0                         -- \001
   Char
'\2'   -> Int
0                         -- \002
   Char
'\3'   -> Int
0                         -- \003
   Char
'\4'   -> Int
0                         -- \004
   Char
'\5'   -> Int
0                         -- \005
   Char
'\6'   -> Int
0                         -- \006
   Char
'\7'   -> Int
0                         -- \007
   Char
'\8'   -> Int
0                         -- \010
   Char
'\9'   -> Int
cSpace                    -- \t  (not allowed in strings, so !cAny)
   Char
'\10'  -> Int
cSpace                    -- \n  (ditto)
   Char
'\11'  -> Int
cSpace                    -- \v  (ditto)
   Char
'\12'  -> Int
cSpace                    -- \f  (ditto)
   Char
'\13'  -> Int
cSpace                    --  ^M (ditto)
   Char
'\14'  -> Int
0                         -- \016
   Char
'\15'  -> Int
0                         -- \017
   Char
'\16'  -> Int
0                         -- \020
   Char
'\17'  -> Int
0                         -- \021
   Char
'\18'  -> Int
0                         -- \022
   Char
'\19'  -> Int
0                         -- \023
   Char
'\20'  -> Int
0                         -- \024
   Char
'\21'  -> Int
0                         -- \025
   Char
'\22'  -> Int
0                         -- \026
   Char
'\23'  -> Int
0                         -- \027
   Char
'\24'  -> Int
0                         -- \030
   Char
'\25'  -> Int
0                         -- \031
   Char
'\26'  -> Int
0                         -- \032
   Char
'\27'  -> Int
0                         -- \033
   Char
'\28'  -> Int
0                         -- \034
   Char
'\29'  -> Int
0                         -- \035
   Char
'\30'  -> Int
0                         -- \036
   Char
'\31'  -> Int
0                         -- \037
   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   -- 0
   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   -- 1
   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   -- 2
   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   -- 3
   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   -- 4
   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   -- 5
   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   -- 6
   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   -- 7
   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   -- 8
   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   -- 9
   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   -- A
   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   -- B
   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   -- C
   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   -- D
   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   -- E
   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   -- F
   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   -- G
   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   -- H
   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   -- I
   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   -- J
   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   -- K
   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   -- L
   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   -- M
   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   -- N
   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   -- O
   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   -- P
   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   -- Q
   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   -- R
   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   -- S
   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   -- T
   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   -- U
   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   -- V
   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   -- W
   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   -- X
   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   -- Y
   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   -- Z
   Char
'\91'  -> Int
cAny                      -- [
   Char
'\92'  -> Int
cAny Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
cSymbol            -- backslash
   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   -- a
   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   -- b
   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   -- c
   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   -- d
   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   -- e
   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   -- f
   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   -- g
   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   -- h
   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   -- i
   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   -- j
   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   -- k
   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   -- l
   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   -- m
   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   -- n
   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   -- o
   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   -- p
   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   -- q
   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   -- r
   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   -- s
   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   -- t
   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   -- u
   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   -- v
   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   -- w
   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   -- x
   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   -- y
   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   -- z
   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                         -- \177
   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)