--- /dev/null
+Character classification
+
+\begin{code}
+module Ctypes
+ ( 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
+ ) where
+\end{code}
+
+\begin{code}
+import Bits ( Bits((.&.)) )
+import Int ( Int32 )
+import PrelBase ( Char#, Char(..) )
+\end{code}
+
+Bit masks
+
+\begin{code}
+cIdent, cSymbol, cAny, cSpace, cLower, cUpper, cDigit :: Int
+cIdent = 1
+cSymbol = 2
+cAny = 4
+cSpace = 8
+cLower = 16
+cUpper = 32
+cDigit = 64
+\end{code}
+
+The predicates below look costly, but aren't, GHC+GCC do a great job
+at the big case below.
+
+\begin{code}
+is_ctype :: Int -> Char# -> Bool
+is_ctype mask c = (fromIntegral (charType (C# c)) .&. fromIntegral mask) /= (0::Int32)
+
+is_ident, is_symbol, is_any, is_space, is_lower, is_upper, is_digit :: Char# -> Bool
+is_ident = is_ctype cIdent
+is_symbol = is_ctype cSymbol
+is_any = is_ctype cAny
+is_space = is_ctype cSpace
+is_lower = is_ctype cLower
+is_upper = is_ctype cUpper
+is_digit = is_ctype cDigit
+\end{code}
+
+We really mean .|. instead of + below, but GHC currently doesn't do
+any constant folding with bitops. *sigh*
+
+\begin{code}
+charType :: Char -> Int
+charType c = case c of
+ '\0' -> 0 -- \000
+ '\1' -> 0 -- \001
+ '\2' -> 0 -- \002
+ '\3' -> 0 -- \003
+ '\4' -> 0 -- \004
+ '\5' -> 0 -- \005
+ '\6' -> 0 -- \006
+ '\7' -> 0 -- \007
+ '\8' -> 0 -- \010
+ '\9' -> cAny + cSpace -- \t
+ '\10' -> cAny + cSpace -- \n
+ '\11' -> cAny + cSpace -- \v
+ '\12' -> cAny + cSpace -- \f
+ '\13' -> cAny + cSpace -- ^M
+ '\14' -> 0 -- \016
+ '\15' -> 0 -- \017
+ '\16' -> 0 -- \020
+ '\17' -> 0 -- \021
+ '\18' -> 0 -- \022
+ '\19' -> 0 -- \023
+ '\20' -> 0 -- \024
+ '\21' -> 0 -- \025
+ '\22' -> 0 -- \026
+ '\23' -> 0 -- \027
+ '\24' -> 0 -- \030
+ '\25' -> 0 -- \031
+ '\26' -> 0 -- \032
+ '\27' -> 0 -- \033
+ '\28' -> 0 -- \034
+ '\29' -> 0 -- \035
+ '\30' -> 0 -- \036
+ '\31' -> 0 -- \037
+ '\32' -> cAny + cSpace --
+ '\33' -> cAny + cSymbol -- !
+ '\34' -> cAny -- "
+ '\35' -> cAny + cSymbol -- #
+ '\36' -> cAny + cSymbol -- $
+ '\37' -> cAny + cSymbol -- %
+ '\38' -> cAny + cSymbol -- &
+ '\39' -> cAny + cIdent -- '
+ '\40' -> cAny -- (
+ '\41' -> cAny -- )
+ '\42' -> cAny + cSymbol -- *
+ '\43' -> cAny + cSymbol -- +
+ '\44' -> cAny -- ,
+ '\45' -> cAny + cSymbol -- -
+ '\46' -> cAny + cSymbol -- .
+ '\47' -> cAny + cSymbol -- /
+ '\48' -> cAny + cIdent + cDigit -- 0
+ '\49' -> cAny + cIdent + cDigit -- 1
+ '\50' -> cAny + cIdent + cDigit -- 2
+ '\51' -> cAny + cIdent + cDigit -- 3
+ '\52' -> cAny + cIdent + cDigit -- 4
+ '\53' -> cAny + cIdent + cDigit -- 5
+ '\54' -> cAny + cIdent + cDigit -- 6
+ '\55' -> cAny + cIdent + cDigit -- 7
+ '\56' -> cAny + cIdent + cDigit -- 8
+ '\57' -> cAny + cIdent + cDigit -- 9
+ '\58' -> cAny + cSymbol -- :
+ '\59' -> cAny -- ;
+ '\60' -> cAny + cSymbol -- <
+ '\61' -> cAny + cSymbol -- =
+ '\62' -> cAny + cSymbol -- >
+ '\63' -> cAny + cSymbol -- ?
+ '\64' -> cAny + cSymbol -- @
+ '\65' -> cAny + cIdent + cUpper -- A
+ '\66' -> cAny + cIdent + cUpper -- B
+ '\67' -> cAny + cIdent + cUpper -- C
+ '\68' -> cAny + cIdent + cUpper -- D
+ '\69' -> cAny + cIdent + cUpper -- E
+ '\70' -> cAny + cIdent + cUpper -- F
+ '\71' -> cAny + cIdent + cUpper -- G
+ '\72' -> cAny + cIdent + cUpper -- H
+ '\73' -> cAny + cIdent + cUpper -- I
+ '\74' -> cAny + cIdent + cUpper -- J
+ '\75' -> cAny + cIdent + cUpper -- K
+ '\76' -> cAny + cIdent + cUpper -- L
+ '\77' -> cAny + cIdent + cUpper -- M
+ '\78' -> cAny + cIdent + cUpper -- N
+ '\79' -> cAny + cIdent + cUpper -- O
+ '\80' -> cAny + cIdent + cUpper -- P
+ '\81' -> cAny + cIdent + cUpper -- Q
+ '\82' -> cAny + cIdent + cUpper -- R
+ '\83' -> cAny + cIdent + cUpper -- S
+ '\84' -> cAny + cIdent + cUpper -- T
+ '\85' -> cAny + cIdent + cUpper -- U
+ '\86' -> cAny + cIdent + cUpper -- V
+ '\87' -> cAny + cIdent + cUpper -- W
+ '\88' -> cAny + cIdent + cUpper -- X
+ '\89' -> cAny + cIdent + cUpper -- Y
+ '\90' -> cAny + cIdent + cUpper -- Z
+ '\91' -> cAny -- [
+ '\92' -> cAny + cSymbol -- \
+ '\93' -> cAny -- ]
+ '\94' -> cAny + cSymbol -- ^
+ '\95' -> cAny + cIdent + cLower -- _
+ '\96' -> cAny -- `
+ '\97' -> cAny + cIdent + cLower -- a
+ '\98' -> cAny + cIdent + cLower -- b
+ '\99' -> cAny + cIdent + cLower -- c
+ '\100' -> cAny + cIdent + cLower -- d
+ '\101' -> cAny + cIdent + cLower -- e
+ '\102' -> cAny + cIdent + cLower -- f
+ '\103' -> cAny + cIdent + cLower -- g
+ '\104' -> cAny + cIdent + cLower -- h
+ '\105' -> cAny + cIdent + cLower -- i
+ '\106' -> cAny + cIdent + cLower -- j
+ '\107' -> cAny + cIdent + cLower -- k
+ '\108' -> cAny + cIdent + cLower -- l
+ '\109' -> cAny + cIdent + cLower -- m
+ '\110' -> cAny + cIdent + cLower -- n
+ '\111' -> cAny + cIdent + cLower -- o
+ '\112' -> cAny + cIdent + cLower -- p
+ '\113' -> cAny + cIdent + cLower -- q
+ '\114' -> cAny + cIdent + cLower -- r
+ '\115' -> cAny + cIdent + cLower -- s
+ '\116' -> cAny + cIdent + cLower -- t
+ '\117' -> cAny + cIdent + cLower -- u
+ '\118' -> cAny + cIdent + cLower -- v
+ '\119' -> cAny + cIdent + cLower -- w
+ '\120' -> cAny + cIdent + cLower -- x
+ '\121' -> cAny + cIdent + cLower -- y
+ '\122' -> cAny + cIdent + cLower -- z
+ '\123' -> cAny -- {
+ '\124' -> cAny + cSymbol -- |
+ '\125' -> cAny -- }
+ '\126' -> cAny + cSymbol -- ~
+ '\127' -> 0 -- \177
+ '\128' -> 0 -- \200
+ '\129' -> 0 -- \201
+ '\130' -> 0 -- \202
+ '\131' -> 0 -- \203
+ '\132' -> 0 -- \204
+ '\133' -> 0 -- \205
+ '\134' -> 0 -- \206
+ '\135' -> 0 -- \207
+ '\136' -> 0 -- \210
+ '\137' -> 0 -- \211
+ '\138' -> 0 -- \212
+ '\139' -> 0 -- \213
+ '\140' -> 0 -- \214
+ '\141' -> 0 -- \215
+ '\142' -> 0 -- \216
+ '\143' -> 0 -- \217
+ '\144' -> 0 -- \220
+ '\145' -> 0 -- \221
+ '\146' -> 0 -- \222
+ '\147' -> 0 -- \223
+ '\148' -> 0 -- \224
+ '\149' -> 0 -- \225
+ '\150' -> 0 -- \226
+ '\151' -> 0 -- \227
+ '\152' -> 0 -- \230
+ '\153' -> 0 -- \231
+ '\154' -> 0 -- \232
+ '\155' -> 0 -- \233
+ '\156' -> 0 -- \234
+ '\157' -> 0 -- \235
+ '\158' -> 0 -- \236
+ '\159' -> 0 -- \237
+ '\160' -> cSpace --
+ '\161' -> cAny + cSymbol -- ¡
+ '\162' -> cAny + cSymbol -- ¢
+ '\163' -> cAny + cSymbol -- £
+ '\164' -> cAny + cSymbol -- ¤
+ '\165' -> cAny + cSymbol -- ¥
+ '\166' -> cAny + cSymbol -- ¦
+ '\167' -> cAny + cSymbol -- §
+ '\168' -> cAny + cSymbol -- ¨
+ '\169' -> cAny + cSymbol -- ©
+ '\170' -> cAny + cSymbol -- ª
+ '\171' -> cAny + cSymbol -- «
+ '\172' -> cAny + cSymbol -- ¬
+ '\173' -> cAny + cSymbol --
+ '\174' -> cAny + cSymbol -- ®
+ '\175' -> cAny + cSymbol -- ¯
+ '\176' -> cAny + cSymbol -- °
+ '\177' -> cAny + cSymbol -- ±
+ '\178' -> cAny + cSymbol -- ²
+ '\179' -> cAny + cSymbol -- ³
+ '\180' -> cAny + cSymbol -- ´
+ '\181' -> cAny + cSymbol -- µ
+ '\182' -> cAny + cSymbol -- ¶
+ '\183' -> cAny + cSymbol -- ·
+ '\184' -> cAny + cSymbol -- ¸
+ '\185' -> cAny + cSymbol -- ¹
+ '\186' -> cAny + cSymbol -- º
+ '\187' -> cAny + cSymbol -- »
+ '\188' -> cAny + cSymbol -- ¼
+ '\189' -> cAny + cSymbol -- ½
+ '\190' -> cAny + cSymbol -- ¾
+ '\191' -> cAny + cSymbol -- ¿
+ '\192' -> cAny + cIdent + cUpper -- À
+ '\193' -> cAny + cIdent + cUpper -- Á
+ '\194' -> cAny + cIdent + cUpper -- Â
+ '\195' -> cAny + cIdent + cUpper -- Ã
+ '\196' -> cAny + cIdent + cUpper -- Ä
+ '\197' -> cAny + cIdent + cUpper -- Å
+ '\198' -> cAny + cIdent + cUpper -- Æ
+ '\199' -> cAny + cIdent + cUpper -- Ç
+ '\200' -> cAny + cIdent + cUpper -- È
+ '\201' -> cAny + cIdent + cUpper -- É
+ '\202' -> cAny + cIdent + cUpper -- Ê
+ '\203' -> cAny + cIdent + cUpper -- Ë
+ '\204' -> cAny + cIdent + cUpper -- Ì
+ '\205' -> cAny + cIdent + cUpper -- Í
+ '\206' -> cAny + cIdent + cUpper -- Î
+ '\207' -> cAny + cIdent + cUpper -- Ï
+ '\208' -> cAny + cIdent + cUpper -- Ð
+ '\209' -> cAny + cIdent + cUpper -- Ñ
+ '\210' -> cAny + cIdent + cUpper -- Ò
+ '\211' -> cAny + cIdent + cUpper -- Ó
+ '\212' -> cAny + cIdent + cUpper -- Ô
+ '\213' -> cAny + cIdent + cUpper -- Õ
+ '\214' -> cAny + cIdent + cUpper -- Ö
+ '\215' -> cAny + cSymbol + cLower -- ×
+ '\216' -> cAny + cIdent + cUpper -- Ø
+ '\217' -> cAny + cIdent + cUpper -- Ù
+ '\218' -> cAny + cIdent + cUpper -- Ú
+ '\219' -> cAny + cIdent + cUpper -- Û
+ '\220' -> cAny + cIdent + cUpper -- Ü
+ '\221' -> cAny + cIdent + cUpper -- Ý
+ '\222' -> cAny + cIdent + cUpper -- Þ
+ '\223' -> cAny + cIdent -- ß
+ '\224' -> cAny + cIdent + cLower -- à
+ '\225' -> cAny + cIdent + cLower -- á
+ '\226' -> cAny + cIdent + cLower -- â
+ '\227' -> cAny + cIdent + cLower -- ã
+ '\228' -> cAny + cIdent + cLower -- ä
+ '\229' -> cAny + cIdent + cLower -- å
+ '\230' -> cAny + cIdent + cLower -- æ
+ '\231' -> cAny + cIdent + cLower -- ç
+ '\232' -> cAny + cIdent + cLower -- è
+ '\233' -> cAny + cIdent + cLower -- é
+ '\234' -> cAny + cIdent + cLower -- ê
+ '\235' -> cAny + cIdent + cLower -- ë
+ '\236' -> cAny + cIdent + cLower -- ì
+ '\237' -> cAny + cIdent + cLower -- í
+ '\238' -> cAny + cIdent + cLower -- î
+ '\239' -> cAny + cIdent + cLower -- ï
+ '\240' -> cAny + cIdent + cLower -- ð
+ '\241' -> cAny + cIdent + cLower -- ñ
+ '\242' -> cAny + cIdent + cLower -- ò
+ '\243' -> cAny + cIdent + cLower -- ó
+ '\244' -> cAny + cIdent + cLower -- ô
+ '\245' -> cAny + cIdent + cLower -- õ
+ '\246' -> cAny + cIdent + cLower -- ö
+ '\247' -> cAny + cSymbol -- ÷
+ '\248' -> cAny + cIdent -- ø
+ '\249' -> cAny + cIdent + cLower -- ù
+ '\250' -> cAny + cIdent + cLower -- ú
+ '\251' -> cAny + cIdent + cLower -- û
+ '\252' -> cAny + cIdent + cLower -- ü
+ '\253' -> cAny + cIdent + cLower -- ý
+ '\254' -> cAny + cIdent + cLower -- þ
+ '\255' -> cAny + cIdent + cLower -- ÿ
+\end{code}
+++ /dev/null
-/*-----------------------------------------------------------------------------
- ctype.c for Haskell
-
- (c) Simon Marlow 1993
------------------------------------------------------------------------------*/
-
-#include "ctypes.h"
-
-const unsigned char char_types[] =
- {
- 0, /* \000 */
- 0, /* \001 */
- 0, /* \002 */
- 0, /* \003 */
- 0, /* \004 */
- 0, /* \005 */
- 0, /* \006 */
- 0, /* \007 */
- 0, /* \010 */
- C_Any | C_Space, /* \t */
- C_Any | C_Space, /* \n */
- C_Any | C_Space, /* \v */
- C_Any | C_Space, /* \f */
- C_Any | C_Space, /* ^M */
- 0, /* \016 */
- 0, /* \017 */
- 0, /* \020 */
- 0, /* \021 */
- 0, /* \022 */
- 0, /* \023 */
- 0, /* \024 */
- 0, /* \025 */
- 0, /* \026 */
- 0, /* \027 */
- 0, /* \030 */
- 0, /* \031 */
- 0, /* \032 */
- 0, /* \033 */
- 0, /* \034 */
- 0, /* \035 */
- 0, /* \036 */
- 0, /* \037 */
- C_Any | C_Space, /* */
- C_Any | C_Symbol, /* ! */
- C_Any, /* " */
- C_Any | C_Symbol, /* # */
- C_Any | C_Symbol, /* $ */
- C_Any | C_Symbol, /* % */
- C_Any | C_Symbol, /* & */
- C_Any | C_Ident, /* ' */
- C_Any, /* ( */
- C_Any, /* ) */
- C_Any | C_Symbol, /* * */
- C_Any | C_Symbol, /* + */
- C_Any, /* , */
- C_Any | C_Symbol, /* - */
- C_Any | C_Symbol, /* . */
- C_Any | C_Symbol, /* / */
- C_Any | C_Ident | C_Digit, /* 0 */
- C_Any | C_Ident | C_Digit, /* 1 */
- C_Any | C_Ident | C_Digit, /* 2 */
- C_Any | C_Ident | C_Digit, /* 3 */
- C_Any | C_Ident | C_Digit, /* 4 */
- C_Any | C_Ident | C_Digit, /* 5 */
- C_Any | C_Ident | C_Digit, /* 6 */
- C_Any | C_Ident | C_Digit, /* 7 */
- C_Any | C_Ident | C_Digit, /* 8 */
- C_Any | C_Ident | C_Digit, /* 9 */
- C_Any | C_Symbol, /* : */
- C_Any, /* ; */
- C_Any | C_Symbol, /* < */
- C_Any | C_Symbol, /* = */
- C_Any | C_Symbol, /* > */
- C_Any | C_Symbol, /* ? */
- C_Any | C_Symbol, /* @ */
- C_Any | C_Ident | C_Upper, /* A */
- C_Any | C_Ident | C_Upper, /* B */
- C_Any | C_Ident | C_Upper, /* C */
- C_Any | C_Ident | C_Upper, /* D */
- C_Any | C_Ident | C_Upper, /* E */
- C_Any | C_Ident | C_Upper, /* F */
- C_Any | C_Ident | C_Upper, /* G */
- C_Any | C_Ident | C_Upper, /* H */
- C_Any | C_Ident | C_Upper, /* I */
- C_Any | C_Ident | C_Upper, /* J */
- C_Any | C_Ident | C_Upper, /* K */
- C_Any | C_Ident | C_Upper, /* L */
- C_Any | C_Ident | C_Upper, /* M */
- C_Any | C_Ident | C_Upper, /* N */
- C_Any | C_Ident | C_Upper, /* O */
- C_Any | C_Ident | C_Upper, /* P */
- C_Any | C_Ident | C_Upper, /* Q */
- C_Any | C_Ident | C_Upper, /* R */
- C_Any | C_Ident | C_Upper, /* S */
- C_Any | C_Ident | C_Upper, /* T */
- C_Any | C_Ident | C_Upper, /* U */
- C_Any | C_Ident | C_Upper, /* V */
- C_Any | C_Ident | C_Upper, /* W */
- C_Any | C_Ident | C_Upper, /* X */
- C_Any | C_Ident | C_Upper, /* Y */
- C_Any | C_Ident | C_Upper, /* Z */
- C_Any, /* [ */
- C_Any | C_Symbol, /* \ */
- C_Any, /* ] */
- C_Any | C_Symbol, /* ^ */
- C_Any | C_Ident | C_Lower, /* _ */
- C_Any, /* ` */
- C_Any | C_Ident | C_Lower, /* a */
- C_Any | C_Ident | C_Lower, /* b */
- C_Any | C_Ident | C_Lower, /* c */
- C_Any | C_Ident | C_Lower, /* d */
- C_Any | C_Ident | C_Lower, /* e */
- C_Any | C_Ident | C_Lower, /* f */
- C_Any | C_Ident | C_Lower, /* g */
- C_Any | C_Ident | C_Lower, /* h */
- C_Any | C_Ident | C_Lower, /* i */
- C_Any | C_Ident | C_Lower, /* j */
- C_Any | C_Ident | C_Lower, /* k */
- C_Any | C_Ident | C_Lower, /* l */
- C_Any | C_Ident | C_Lower, /* m */
- C_Any | C_Ident | C_Lower, /* n */
- C_Any | C_Ident | C_Lower, /* o */
- C_Any | C_Ident | C_Lower, /* p */
- C_Any | C_Ident | C_Lower, /* q */
- C_Any | C_Ident | C_Lower, /* r */
- C_Any | C_Ident | C_Lower, /* s */
- C_Any | C_Ident | C_Lower, /* t */
- C_Any | C_Ident | C_Lower, /* u */
- C_Any | C_Ident | C_Lower, /* v */
- C_Any | C_Ident | C_Lower, /* w */
- C_Any | C_Ident | C_Lower, /* x */
- C_Any | C_Ident | C_Lower, /* y */
- C_Any | C_Ident | C_Lower, /* z */
- C_Any, /* { */
- C_Any | C_Symbol, /* | */
- C_Any, /* } */
- C_Any | C_Symbol, /* ~ */
- 0, /* \177 */
- 0, /* \200 */
- 0, /* \201 */
- 0, /* \202 */
- 0, /* \203 */
- 0, /* \204 */
- 0, /* \205 */
- 0, /* \206 */
- 0, /* \207 */
- 0, /* \210 */
- 0, /* \211 */
- 0, /* \212 */
- 0, /* \213 */
- 0, /* \214 */
- 0, /* \215 */
- 0, /* \216 */
- 0, /* \217 */
- 0, /* \220 */
- 0, /* \221 */
- 0, /* \222 */
- 0, /* \223 */
- 0, /* \224 */
- 0, /* \225 */
- 0, /* \226 */
- 0, /* \227 */
- 0, /* \230 */
- 0, /* \231 */
- 0, /* \232 */
- 0, /* \233 */
- 0, /* \234 */
- 0, /* \235 */
- 0, /* \236 */
- 0, /* \237 */
- C_Space, /* */
- C_Any | C_Symbol, /* ¡ */
- C_Any | C_Symbol, /* ¢ */
- C_Any | C_Symbol, /* £ */
- C_Any | C_Symbol, /* ¤ */
- C_Any | C_Symbol, /* ¥ */
- C_Any | C_Symbol, /* ¦ */
- C_Any | C_Symbol, /* § */
- C_Any | C_Symbol, /* ¨ */
- C_Any | C_Symbol, /* © */
- C_Any | C_Symbol, /* ª */
- C_Any | C_Symbol, /* « */
- C_Any | C_Symbol, /* ¬ */
- C_Any | C_Symbol, /* */
- C_Any | C_Symbol, /* ® */
- C_Any | C_Symbol, /* ¯ */
- C_Any | C_Symbol, /* ° */
- C_Any | C_Symbol, /* ± */
- C_Any | C_Symbol, /* ² */
- C_Any | C_Symbol, /* ³ */
- C_Any | C_Symbol, /* ´ */
- C_Any | C_Symbol, /* µ */
- C_Any | C_Symbol, /* ¶ */
- C_Any | C_Symbol, /* · */
- C_Any | C_Symbol, /* ¸ */
- C_Any | C_Symbol, /* ¹ */
- C_Any | C_Symbol, /* º */
- C_Any | C_Symbol, /* » */
- C_Any | C_Symbol, /* ¼ */
- C_Any | C_Symbol, /* ½ */
- C_Any | C_Symbol, /* ¾ */
- C_Any | C_Symbol, /* ¿ */
- C_Any | C_Ident | C_Upper, /* À */
- C_Any | C_Ident | C_Upper, /* Á */
- C_Any | C_Ident | C_Upper, /* Â */
- C_Any | C_Ident | C_Upper, /* Ã */
- C_Any | C_Ident | C_Upper, /* Ä */
- C_Any | C_Ident | C_Upper, /* Å */
- C_Any | C_Ident | C_Upper, /* Æ */
- C_Any | C_Ident | C_Upper, /* Ç */
- C_Any | C_Ident | C_Upper, /* È */
- C_Any | C_Ident | C_Upper, /* É */
- C_Any | C_Ident | C_Upper, /* Ê */
- C_Any | C_Ident | C_Upper, /* Ë */
- C_Any | C_Ident | C_Upper, /* Ì */
- C_Any | C_Ident | C_Upper, /* Í */
- C_Any | C_Ident | C_Upper, /* Î */
- C_Any | C_Ident | C_Upper, /* Ï */
- C_Any | C_Ident | C_Upper, /* Ð */
- C_Any | C_Ident | C_Upper, /* Ñ */
- C_Any | C_Ident | C_Upper, /* Ò */
- C_Any | C_Ident | C_Upper, /* Ó */
- C_Any | C_Ident | C_Upper, /* Ô */
- C_Any | C_Ident | C_Upper, /* Õ */
- C_Any | C_Ident | C_Upper, /* Ö */
- C_Any | C_Symbol | C_Lower, /* × */
- C_Any | C_Ident | C_Upper, /* Ø */
- C_Any | C_Ident | C_Upper, /* Ù */
- C_Any | C_Ident | C_Upper, /* Ú */
- C_Any | C_Ident | C_Upper, /* Û */
- C_Any | C_Ident | C_Upper, /* Ü */
- C_Any | C_Ident | C_Upper, /* Ý */
- C_Any | C_Ident | C_Upper, /* Þ */
- C_Any | C_Ident, /* ß */
- C_Any | C_Ident | C_Lower, /* à */
- C_Any | C_Ident | C_Lower, /* á */
- C_Any | C_Ident | C_Lower, /* â */
- C_Any | C_Ident | C_Lower, /* ã */
- C_Any | C_Ident | C_Lower, /* ä */
- C_Any | C_Ident | C_Lower, /* å */
- C_Any | C_Ident | C_Lower, /* æ */
- C_Any | C_Ident | C_Lower, /* ç */
- C_Any | C_Ident | C_Lower, /* è */
- C_Any | C_Ident | C_Lower, /* é */
- C_Any | C_Ident | C_Lower, /* ê */
- C_Any | C_Ident | C_Lower, /* ë */
- C_Any | C_Ident | C_Lower, /* ì */
- C_Any | C_Ident | C_Lower, /* í */
- C_Any | C_Ident | C_Lower, /* î */
- C_Any | C_Ident | C_Lower, /* ï */
- C_Any | C_Ident | C_Lower, /* ð */
- C_Any | C_Ident | C_Lower, /* ñ */
- C_Any | C_Ident | C_Lower, /* ò */
- C_Any | C_Ident | C_Lower, /* ó */
- C_Any | C_Ident | C_Lower, /* ô */
- C_Any | C_Ident | C_Lower, /* õ */
- C_Any | C_Ident | C_Lower, /* ö */
- C_Any | C_Symbol, /* ÷ */
- C_Any | C_Ident, /* ø */
- C_Any | C_Ident | C_Lower, /* ù */
- C_Any | C_Ident | C_Lower, /* ú */
- C_Any | C_Ident | C_Lower, /* û */
- C_Any | C_Ident | C_Lower, /* ü */
- C_Any | C_Ident | C_Lower, /* ý */
- C_Any | C_Ident | C_Lower, /* þ */
- C_Any | C_Ident | C_Lower, /* ÿ */
- };