getTextStyle method

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

Implementation

TextStyle getTextStyle(String token , spans , lastToken){
  var keywords = [
    'class', 'deinit', 'enum', 'extension', 'Func', 'import', 'init', 'internal', 'let',
    'operator', 'private', 'protocol', 'public', 'static', 'struct', 'subscript', 'typealias', 'var',
    'break', 'case', 'continue', 'default', 'do', 'else', 'fallthrough', 'for', 'if', 'in', 'return',
    'switch', 'where', 'while', 'as', 'dynamicType', 'false', 'is', 'nil', 'self', 'Self', 'super',
    'true', '_COLUMN_', 'fILE_', 'fUNCTION_', '_LINE_', 'associativity', 'convenience', 'dynamic',
    'didSet', 'final', 'get', 'infix', 'inout', 'lazy', 'left', 'mutating', 'none', 'nonmutating',
    'optional', 'override', 'postfix', 'precedence', 'prefix', 'Protocol', 'required', 'right', 'set',
    'Type', 'unowned', 'weak', 'willSet'
  ];
  var specialIdentifiers = [
    'true', 'false', 'null', 'undefined' ,
  ];
  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)*?"""')).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;
  }
}