module Data.Char(module Data.Char,module Char{-,module U-}) where import Char hiding (isLower,isAlpha,isUpper) import qualified Char --import Data.Char.Unicode as U isLetter = isAlpha isSymbol c = c `elem` "$+<=>^`|~\162\163\164\165\166\168\169\172\174\175\176\177\180\184\215\247\8743\8713\8745\8744\8712\8838\8746\8249\8250\8704" isPunctuation c = c `elem` "!\"#%&'()*,-./:;?@[\\]_{}\161\167\171\182\183\187\191" isAsciiLower c = isAscii c && Char.isLower c isAsciiUpper c = isAscii c && Char.isUpper c isAlpha c = isUpper c || isLower c isLower c = Char.isLower c || isGreekLower c isUpper c = Char.isUpper c || isGreekUpper c isGreekLower c = '\945'<=c && c<= '\969' isGreekUpper c = '\x391' <=c && c<= '\x3a9' && c/='\x3a2' {- isSymbol c = generalCategory c `elem` [MathSymbol,CurrencySymbol,ModifierSymbol,OtherSymbol] isUpper c = Char.isUpper c || generalCategory c `elem` [UppercaseLetter,TitlecaseLetter] isAlpha c = isUpper c || isLower c || generalCategory c `elem` [ModifierLetter,OtherLetter] -} data GeneralCategory = UppercaseLetter | LowercaseLetter | TitlecaseLetter | ModifierLetter | OtherLetter | NonSpacingMark | SpacingCombiningMark | EnclosingMark | DecimalNumber | LetterNumber | OtherNumber | ConnectorPunctuation | DashPunctuation | OpenPunctuation | ClosePunctuation | InitialQuote | FinalQuote | OtherPunctuation | MathSymbol | CurrencySymbol | ModifierSymbol | OtherSymbol | Space | LineSeparator | ParagraphSeparator | Control | Format | Surrogate | PrivateUse | NotAssigned deriving (Eq,Ord,Enum,Bounded,Show,Read) -- a quick hack generalCategory c | isUpper c = UppercaseLetter | isLower c = LowercaseLetter | isSpace c = Space | isDigit c = DecimalNumber | isControl c = Control | otherwise = NotAssigned -- !!!