toAnsiString method
Serializes this Buffer grid into an ANSI escape sequence string.
Implementation
String toAnsiString() {
final sb = StringBuffer();
final chars = characters;
final attrs = attributes;
final w = width;
final h = height;
int lastFg = -1;
int lastBg = -1;
for (int y = 0; y < h; y++) {
final rowOffset = y * w;
for (int x = 0; x < w; x++) {
final idx = rowOffset + x;
final char = chars[idx];
final attrIdx = idx * 3;
final fg = attrs[attrIdx];
final bg = attrs[attrIdx + 1];
if (fg != lastFg) {
final fgR = (fg >> 16) & 0xFF;
final fgG = (fg >> 8) & 0xFF;
final fgB = fg & 0xFF;
sb.write('\x1B[38;2;');
sb.write(fgR);
sb.write(';');
sb.write(fgG);
sb.write(';');
sb.write(fgB);
sb.write('m');
lastFg = fg;
}
if (bg != lastBg) {
final bgR = (bg >> 16) & 0xFF;
final bgG = (bg >> 8) & 0xFF;
final bgB = bg & 0xFF;
sb.write('\x1B[48;2;');
sb.write(bgR);
sb.write(';');
sb.write(bgG);
sb.write(';');
sb.write(bgB);
sb.write('m');
lastBg = bg;
}
sb.write(char);
}
sb.write('\x1B[0m\n');
lastFg = -1;
lastBg = -1;
}
return sb.toString();
}