Implementation
TextStyle getTextStyle(String token , spans , lastToken){
var keywords = [
"if", "while", "else" , "do" , "try", "finally",
"return", "break", "continue", "new", "void", "throw", "yield",
"var", "const", "export", "typeof",
"public" , "private", "protected", "catch", "in", "of",
"for", "switch", "case" , "default", "package", "NaN", "module",
"interface", "undefined", "instanceof", "async", "await", "implements",
"true", "false", "null", "delete", "function", "static",
"this", "class", "super",
"enum", "import", "extends",
"let" , "debugger" , "with" , "true", "false", "null"
];
var specialIdentifiers = ["override",'String',
'Object' , 'console' ,
];
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))
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])*")|('(\\\n|\\'|[^'\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;
}
}