----------------------------------------------------------------------------- -- | -- Module : Data.CharSet.Posix.Unicode -- Copyright : (c) Edward Kmett 2010 -- License : BSD3 -- Maintainer : ekmett@gmail.com -- Stability : experimental -- Portability : portable -- ------------------------------------------------------------------------------- module Data.CharSet.Posix.Unicode ( posixUnicode , lookupPosixUnicodeCharSet -- * POSIX ASCII \"classes\" , 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 qualified Data.CharSet.Unicode.Category as Category import qualified Data.CharSet.Unicode.Block as Block 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 ascii = Block.basicLatin alpha = Category.letterAnd blank = insert '\t' Category.space cntrl = Category.control digit = Category.decimalNumber lower = Category.lowercaseLetter upper = Category.uppercaseLetter graph = complement (Category.separator `union` Category.other) print = complement (Category.other) word = Category.letter `union` Category.number `union` Category.connectorPunctuation punct = Category.punctuation `union` Category.symbol space = fromList " \t\r\n\v\f" `union` Category.separator xdigit = digit `union` range 'a' 'f' `union` range 'A' 'F' -- :digit:, etc. posixUnicode :: HashMap String CharSet posixUnicode = 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) ] lookupPosixUnicodeCharSet :: String -> Maybe CharSet lookupPosixUnicodeCharSet s = HashMap.lookup (Prelude.map toLower s) posixUnicode