parseTerminalGraphicsControls function
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;
}
}