----------------------------------------------------------------------------- -- | -- Module : Text.Trifecta.CharSet.Posix.Unicode -- Copyright : (c) Edward Kmett 2010 -- License : BSD3 -- Maintainer : ekmett@gmail.com -- Stability : experimental -- Portability : portable -- ------------------------------------------------------------------------------- module Text.Trifecta.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 Text.Trifecta.CharSet import qualified Text.Trifecta.CharSet.Unicode.Category as Category import qualified Text.Trifecta.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