parse static method
Parses rendered content into an ANSI-aware frame model.
Implementation
static TerminalRenderFrame parse(String content) {
if (content.isEmpty) {
return const TerminalRenderFrame(<TerminalRenderLine>[
TerminalRenderLine(raw: '', statePrefix: ''),
]);
}
final lines = <TerminalRenderLine>[];
final lineBuffer = StringBuffer();
final styleState = uv_styled.StyleState(const UvStyle());
final linkState = uv_styled.LinkState(const Link());
UvStyle lineStartStyle = styleState.style;
Link lineStartLink = linkState.link;
void flushLine() {
lines.add(
TerminalRenderLine(
raw: lineBuffer.toString(),
statePrefix: _lineStatePrefix(lineStartStyle, lineStartLink),
),
);
lineBuffer.clear();
lineStartStyle = styleState.style;
lineStartLink = linkState.link;
}
var i = 0;
while (i < content.length) {
final code = content.codeUnitAt(i);
if (code == 0x0A) {
flushLine();
i++;
continue;
}
if (code == 0x1B) {
final next = Ansi.consumeEscapeSequence(content, i);
final sequence = content.substring(i, next);
lineBuffer.write(sequence);
_applyAnsiState(sequence, styleState, linkState);
i = next;
continue;
}
lineBuffer.writeCharCode(code);
i++;
}
flushLine();
return TerminalRenderFrame(List<TerminalRenderLine>.unmodifiable(lines));
}