module Data.CharSet.Posix.Ascii
( posixAscii
, lookupPosixAsciiCharSet
, alnum, alpha, ascii, blank, cntrl, digit, graph, print, word, punct, space, upper, lower, xdigit
) where
import Prelude hiding (print)
import Data.Char
import Data.CharSet
import Data.Map (Map)
import qualified Data.Map as Map
alnum, alpha, ascii, blank, cntrl, digit, graph, print, word, punct, space, upper, lower, xdigit :: CharSet
alnum = alpha `union` digit
alpha = lower `union` upper
ascii = range '\x00' '\x7f'
blank = fromList " \t"
cntrl = insert '\x7f' $ range '\x00' '\x1f'
digit = range '0' '9'
lower = range 'a' 'z'
upper = range 'A' 'Z'
graph = range '\x21' '\x7e'
print = insert '\x20' graph
word = insert '_' alnum
punct = fromList "-!\"#$%&'()*+,./:;<=>?@[\\]^_`{|}~"
space = fromList " \t\r\n\v\f"
xdigit = digit `union` range 'a' 'f' `union` range 'A' 'F'
posixAscii :: Map String CharSet
posixAscii = Map.fromList
[ ("alnum", alnum)
, ("alpha", alpha)
, ("ascii", ascii)
, ("blank", blank)
, ("cntrl", cntrl)
, ("digit", digit)
, ("graph", graph)
, ("print", print)
, ("word", word)
, ("punct", punct)
, ("space", space)
, ("upper", upper)
, ("lower", lower)
, ("xdigit", xdigit)
]
lookupPosixAsciiCharSet :: String -> Maybe CharSet
lookupPosixAsciiCharSet s = Map.lookup (Prelude.map toLower s) posixAscii