getTextStyle method

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

Implementation

TextStyle getTextStyle(String token , spans , lastToken ){
  var keywords =  [
    'if', 'else', 'repeat', 'while', 'function', 'for', 'next', 'break', 'TRUE', 'FALSE', 'NULL',
    'Inf', 'NaN', 'NA', 'NA_integer_', 'NA_real_', 'NA_complex_', 'NA_character_'
  ];
  var specialIdentifiers = [
    'abs' , 'sin' , 'cos' , 'tan', 'sqrt', 'ceiling' , 'floor', 'trunc', 'round', 'log', 'log10', 'exp',
    'substr', 'grep', 'sub', 'paste', 'strsplit' , 'tolower'  , 'toupper', 'dnorm', 'pnorm', 'scale',
    'qnorm', 'rnorm', 'dbinom' , 'pbinom' , 'qbinom', 'abinom', 'dpois', 'ppois' , 'rpois', 'dunif' ,
    'punif', 'qunif', 'runif', 'mean' , 'sd' , 'median', 'quantile', 'range', 'sum', 'diff', 'min', 'max',
  ];
  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'#.*')).stringMatch(token) == token)
      return theme.comment;
    else if((new RegExp(r'"(\\"|[^"]|\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;
  }
}