module Language.CSPM.UnicodeSymbols
where
import Language.CSPM.TokenClasses
import qualified Data.Array as Array
import qualified Data.Map as Map
unicodeSymbols :: [(Char, PrimToken, String)]
unicodeSymbols = [
('\172' ,T_not ,"not" )
, ('\8741' ,T_parallel ,"||" )
, ('\8743' ,T_and ,"and" )
, ('\8744' ,T_or ,"or" )
, ('\8800' ,T_neq ,"!=" )
, ('\8801' ,T_eq ,"==" )
, ('\8804' ,T_le ,"<=" )
, ('\8805' ,T_ge ,">=" )
, ('\8849' ,T_Refine ,"[=" )
, ('\8851' ,T_sqcap ,"|~|" )
, ('\8898' ,T_Inter ,"Inter" )
, ('\8899' ,T_Union ,"Union" )
, ('\9651' ,T_triangle ,"/\\" )
, ('\9655' ,T_rhd ,"[>" )
, ('\9656' ,T_exp ,"|>" )
, ('\9723' ,T_box ,"[]" )
, ('\10132' ,T_rightarrow ,"->" )
, ('\10214' ,T_openBrackBrack ,"[[" )
, ('\10215' ,T_closeBrackBrack ,"]]" )
, ('\10216' ,T_lt ,"<" )
, ('\10217' ,T_gt ,">" )
, ('\10231' ,T_leftrightarrow ,"<->" )
]
lookupDefaultSymbol :: PrimToken -> (Maybe (Char,String))
lookupDefaultSymbol = (Array.!) table
where
table :: Array.Array PrimToken (Maybe (Char,String))
table = (Array.//)
(Array.listArray (minBound,maxBound) $ repeat Nothing)
[(tok,Just (uni,ascii)) | (uni,tok,ascii) <- unicodeSymbols]
lookupToken :: Char -> Maybe PrimToken
lookupToken = flip (Map.lookup) symbolMap
where
symbolMap = Map.fromList [(uni,tok) | (uni,tok,_string) <- unicodeSymbols]