createSpans method
dynamic
createSpans(
- 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;
}