getTextStyle method

TextStyle getTextStyle(
  1. String token,
  2. dynamic spans,
  3. dynamic lastToken
)

Implementation

TextStyle getTextStyle(String token , spans, lastToken){
  var keywords = [
    "if", "while",  "else" , "do" , "try", "finally",
    "return", "break", "continue", "new", "void", "throw", "throws",
    "double", "var", "const", "abstract", "float", "long", "final", "exports",
    "public" , "private", "protected",  "catch", "int", "goto",
    "for", "switch", "case" , "default", "package", "native", "module",
    "interface", "transient", "instanceof", "short", "requires", "implements",
    "true", "false", "null", "strictfp", "synchronized", "static",
    "this", "class", "super",
    "volatile", "enum", "import", "extends",
    "boolean" , "byte" , "assert" ,
  ];
  var specialIdentifiers = ["main","override",'String',
  'System','Object'
  ];
  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])*"' + '|' + 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;
  }
}