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.HashMap.Lazy (HashMap)
import qualified Data.HashMap.Lazy as HashMap
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 :: HashMap String CharSet
posixAscii = HashMap.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 = HashMap.lookup (Prelude.map toLower s) posixAscii