parseTerminalGraphicsControls function

Iterable<TerminalGraphicsControl> parseTerminalGraphicsControls(
  1. String value
)

Parses terminal graphics controls in value.

Implementation

Iterable<TerminalGraphicsControl> parseTerminalGraphicsControls(
  String value,
) sync* {
  var i = 0;
  while (i < value.length) {
    final codeUnit = value.codeUnitAt(i);
    final isEscKittyApc =
        codeUnit == 0x1B &&
        i + 2 < value.length &&
        value.codeUnitAt(i + 1) == 0x5F &&
        value.codeUnitAt(i + 2) == 0x47;
    final isC1KittyApc =
        codeUnit == 0x9F &&
        i + 1 < value.length &&
        value.codeUnitAt(i + 1) == 0x47;

    if (!isEscKittyApc && !isC1KittyApc) {
      i++;
      continue;
    }

    final bodyStart = i + (isEscKittyApc ? 3 : 2);
    final bodyEnd = isEscKittyApc
        ? _findEscStringTerminator(value, bodyStart)
        : _findC1StringTerminator(value, bodyStart);
    if (bodyEnd == -1) break;

    final sequenceEnd = isEscKittyApc ? bodyEnd + 2 : bodyEnd + 1;
    final parsed = _parseKittyGraphicsControl(
      value.substring(bodyStart, bodyEnd),
      start: i,
      end: sequenceEnd,
      sequence: value.substring(i, sequenceEnd),
    );
    yield parsed;
    i = sequenceEnd;
  }
}