getTextStyle method
Implementation
TextStyle getTextStyle(String token , spans , lastToken){
var keywords = [
"if", "while", "else" , "do" , "auto", "char",
"return", "break", "continue", "extern", "void", "register", "short",
"double", "sizeof", "const", "signed", "float", "long", "struct", "typedef",
"union" , "catch", "int", "goto",
"for", "switch", "case" , "default", "unsigned",
"static", "volatile", "enum",
];
var specialIdentifiers = [
'main' , 'true' , 'false' , 'NULL' , 'include' , 'define' , 'ifdef' , 'undef' , 'ifndef' ,
'if' , 'else' , 'elif' , 'endif' , 'error' , 'pragma'
];
var operators = ['+','-','*','/','%', '!','?' , ':' ,'^','&','|','=','<','>','>>','<<','++','--','!=','<=','>=','+=','-=','*=','==','/=','%=','|=','&=','^=','>>=','<<=','&&','||'];
var re = new RegExp(r'\w+');
if(re.stringMatch(token) == token){
if (keywords.contains(token)) {
return theme.keyword;
} else if (specialIdentifiers.contains(token)){
if(lastToken.contains('#')){
spans.removeAt(spans.length-1);
spans.add(TextSpan(text: lastToken, style: theme.specialIdentifier));
}
return theme.specialIdentifier;
}
else if((new RegExp(r'\d+')).stringMatch(token) == token)
return theme.numberConstant;
return theme.identifier;
}else{
if((new RegExp(r'(//.*)|(/\*(.|\n)*?\*/)')).stringMatch(token) == token)
return theme.comment;
else if((new RegExp(r'"(\\\n|\\"|[^"\n])*"' + '|' + r"'(\\\n|\\'|[^'\n])*'")).stringMatch(token) == token)
return theme.stringConstant;
else if(operators.contains(token.trim()))
return theme.operator;
var lt = token.trimLeft();
if(lt.length>0)
if(lt[0]=="(" && (new RegExp(r'\w+')).stringMatch(lastToken) == lastToken && !(specialIdentifiers.contains(lastToken) || keywords.contains(lastToken))){//it is a function
spans.removeAt(spans.length-1);
spans.add(TextSpan(text: lastToken, style: theme.functionIdentifier));
}
return theme.specialCharacter;
}
}