processByte method

void processByte(
  1. List<int> codeUnits, {
  2. 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();
  }
}