toString method
- @override
override
String representation of parsable (marks actual position)
Implementation
@override
String toString({int from = 0, int to = 0, bool err = false}) {
if(parsable.length > stdout.terminalColumns) {
int start = parsable.length > stdout.terminalColumns ? (position - (stdout.terminalColumns / 2) + 3).round() : 0;
int end = parsable.length > stdout.terminalColumns ? (position + (stdout.terminalColumns / 2) - 4).round() : parsable.length - 1;
if(start < 0) { end += start * -1;start = 0; }
if(end >= parsable.length) { start -= end - parsable.length + 1;end = parsable.length - 1; }
String startletters = "(+$start)", startletters_;
String endletters = "(+${parsable.length - end + 7})", endletters_;
end -= endletters.length + startletters.length;
do {
endletters_ = endletters;
startletters = "(+$end)";
if(endletters.length - endletters_.length > 0) { end -= endletters.length - endletters_.length; }
} while (endletters_.length != endletters.length);
do {
startletters_ = startletters;
startletters = "(+$start)";
if(startletters.length - startletters_.length > 0) { end -= startletters.length - startletters_.length; }
} while (startletters_.length != startletters.length);
if(start < 0) { end += start * -1;start = 0; }
int pos = this.position - start + startletters.length + 3;
String code = "$startletters..." + parsable.substring(start,end) + "...$endletters\n";
String beforeSelect = code.substring(0,pos - from);
Colorize selected = new Colorize(code.substring(pos - from, pos + to + 1));
String afterSelect = code.substring(pos + to + 1);
Colorize bottom = new Colorize(_repeatString(" ",pos - from) + _repeatString("^",1 + from + to) + "\n");
if(err) {
bottom.red();
selected.bgRed();
}
return "position ${position + 1}/${parsable.length} (\"${actual()}\")\n\nHere:\n" + beforeSelect + selected.toString() + afterSelect + bottom.toString();
}
String beforeSelect = parsable.substring(0,position - from);
Colorize selected = new Colorize(parsable.substring(position - from, position + to + 1));
String afterSelect = parsable.substring(position + to + 1);
Colorize bottom = new Colorize(_repeatString(" ",position - from) + _repeatString("^",1 + from + to) + "\n");
if(err) {
bottom.red();
selected.bgRed();
}
return "position ${position + 1}/${parsable.length} (\"${actual()}\")\n\nHere:\n" + beforeSelect + selected.toString() + afterSelect + "\n" + bottom.toString();
}