fix(tui): handle CRLF and CR line endings (#6764)
This commit is contained in:
@@ -719,7 +719,7 @@ export function wrapTextWithAnsi(text: string, width: number): string[] {
|
|||||||
|
|
||||||
// Handle newlines by processing each line separately
|
// Handle newlines by processing each line separately
|
||||||
// Track ANSI state across lines so styles carry over after literal newlines
|
// Track ANSI state across lines so styles carry over after literal newlines
|
||||||
const inputLines = text.split("\n");
|
const inputLines = text.split(/\r\n|\r|\n/);
|
||||||
const result: string[] = [];
|
const result: string[] = [];
|
||||||
const tracker = new AnsiCodeTracker();
|
const tracker = new AnsiCodeTracker();
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,26 @@ describe("wrapTextWithAnsi", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("basic wrapping", () => {
|
describe("basic wrapping", () => {
|
||||||
|
it("should handle LF, CRLF, and CR line endings", () => {
|
||||||
|
assert.deepStrictEqual(wrapTextWithAnsi("first\nsecond\r\nthird\rfourth", 80), [
|
||||||
|
"first",
|
||||||
|
"second",
|
||||||
|
"third",
|
||||||
|
"fourth",
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should preserve ANSI state across CRLF and CR line endings", () => {
|
||||||
|
const red = "\x1b[31m";
|
||||||
|
const reset = "\x1b[0m";
|
||||||
|
|
||||||
|
assert.deepStrictEqual(wrapTextWithAnsi(`${red}first\r\nsecond\rthird${reset}`, 80), [
|
||||||
|
`${red}first`,
|
||||||
|
`${red}second`,
|
||||||
|
`${red}third${reset}`,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
it("should wrap plain text correctly", () => {
|
it("should wrap plain text correctly", () => {
|
||||||
const text = "hello world this is a test";
|
const text = "hello world this is a test";
|
||||||
const wrapped = wrapTextWithAnsi(text, 10);
|
const wrapped = wrapTextWithAnsi(text, 10);
|
||||||
|
|||||||
Reference in New Issue
Block a user