processByte method
void
processByte(
- List<int> codeUnits, {
- bool verbose = !kReleaseMode,
})
Implementation
void processByte(List<int> codeUnits, {bool verbose = !kReleaseMode}) {
final String data = utf8.decode(codeUnits);
// print('-' * 10);
// data.split(RegExp('\x0d')).forEach((element) {
// if (element.isNotEmpty) {
// print('>>>$element');
// }
// print('->${utf8.encode(element)}<-');
// });
// print('-' * 10);
for (int i = 0; i < data.length; i++) {
// final List<int> codeUnits = data[i].codeUnits;
// dart 的 codeUnits 是 utf32
final List<int> utf8CodeUnits = utf8.encode(data[i]);
// log('codeUnits->$codeUnits');
// log('utf8CodeUnits->$utf8CodeUnits');
if (utf8CodeUnits.length == 1) {
// 说明单字节
if (oscStart) {
final bool osc = Osc.handle(this, utf8CodeUnits);
if (osc) {
execAutoScroll();
continue;
}
}
if (csiStart) {
Csi.handle(this, utf8CodeUnits);
// execAutoScroll();
continue;
}
if (escapeStart) {
Esc.handle(this, utf8CodeUnits);
execAutoScroll();
continue;
}
final bool c0 = C0.handle(this, utf8CodeUnits);
if (c0) {
execAutoScroll();
continue;
}
} else {
// 双字节 0x84 在 utf8中一个字节是保存不下来的,按照utf8的编码规则,8位的第一位为1那么一定是两个字节
// ,其中第一位需要拿来当符号位,但是dart是utf32,可以通过一个字节来解析
final bool c1 = C1.handle(this, utf8CodeUnits);
if (c1) {
execAutoScroll();
continue;
}
}
writeChar(data[i]);
execAutoScroll();
}
}