createSpans method

dynamic createSpans(
  1. String text
)

Implementation

createSpans(String text){
  var spans = <TextSpan>[];
  var re1 = r'"(\\\n|\\"|[^"\n])*"';
  var re2 = r"'(\\\n|(\\')|[^'\n])*'";
  var re3 = r'"""(.|\n)*?"""';
  var re4 = r"'''(.|\n)*?'''";
  var rs = re1+'|'+re2;
  var rc = re3 + '|' + re4;
  var lst = [];
  var r = new RegExp(rc + '|' + rs + '|' + r'#.*');
  r.allMatches(text).forEach((i) {
    text = text.replaceFirst(i.group(0)!, '\x00');
    lst.add(i.group(0));
  });
  var  re = new RegExp(r'(\x00)|([^\x00!%\+\=\-\*/\&\^\|~\w])+|((\w)+)|[\s!%\+\=\-\*/\&\^\|~]+');
  int j=0;
  String lastToken = '';
  re.allMatches(text).forEach((i) {
    if(i.group(0)!.contains('\x00')){
      var x = i.group(0)!.replaceFirst('\x00', lst[j]);
      var lt = lastToken.trimRight();
      lt = lt==''?' ':lt;
      if(!lt[lt.length-1].contains(new RegExp(r'\+|=|\*|\(')) && (new RegExp(r'"""(.|\n)*"""'+'|'+r"'''(.|\n)*'''").hasMatch(lst[j]))){
        //it is a multiline comment
        spans.add(TextSpan(text: x,style: theme.multilineComment));
      }else
        spans.add(TextSpan(text: x,style: getTextStyle(lst[j] , spans , lastToken)));
      j++;
    }else {
      spans.add(TextSpan(text: i.group(0), style: getTextStyle(i.group(0)! , spans , lastToken)));
    }
    lastToken = i.group(0)!;
   // print(i.group(0));
  });
  return  spans;
}