refactor: deduplicate safeSliceEnd into shared export from text-measure
This commit is contained in:
@@ -37,13 +37,14 @@ export type WrapMode = NonNullable<TextProps["wrap"]>;
|
||||
* `slice-ansi` can overshoot when a wide character straddles the boundary, so
|
||||
* we reduce the slice position until the result fits.
|
||||
*/
|
||||
function safeSliceEnd(text: string, maxCols: number): string {
|
||||
export function safeSliceEnd(text: string, maxCols: number): string {
|
||||
if (maxCols <= 0) return "";
|
||||
let sliced = sliceAnsi(text, 0, maxCols);
|
||||
let end = maxCols;
|
||||
let sliced = sliceAnsi(text, 0, end);
|
||||
let w = stringWidth(sliced);
|
||||
while (w > maxCols && maxCols > 0) {
|
||||
maxCols--;
|
||||
sliced = sliceAnsi(text, 0, maxCols);
|
||||
while (w > maxCols && end > 0) {
|
||||
end--;
|
||||
sliced = sliceAnsi(text, 0, end);
|
||||
w = stringWidth(sliced);
|
||||
}
|
||||
return sliced;
|
||||
|
||||
@@ -19,7 +19,7 @@ import type {
|
||||
BoxProps,
|
||||
} from "../host/nodes.ts";
|
||||
import { createRoot as createIsoRoot } from "../host/nodes.ts";
|
||||
import { wrapText } from "../host/text-measure.ts";
|
||||
import { wrapText, safeSliceEnd } from "../host/text-measure.ts";
|
||||
import {
|
||||
attachYoga,
|
||||
detachYoga,
|
||||
@@ -29,19 +29,6 @@ import {
|
||||
|
||||
export type Transformer = (line: string, lineIndex: number) => string;
|
||||
|
||||
function safeSliceEnd(text: string, maxCols: number): string {
|
||||
if (maxCols <= 0) return "";
|
||||
let end = maxCols;
|
||||
let sliced = sliceAnsi(text, 0, end);
|
||||
let w = stringWidth(sliced);
|
||||
while (w > maxCols && end > 0) {
|
||||
end--;
|
||||
sliced = sliceAnsi(text, 0, end);
|
||||
w = stringWidth(sliced);
|
||||
}
|
||||
return sliced;
|
||||
}
|
||||
|
||||
interface ClipRect {
|
||||
x1: number | undefined;
|
||||
x2: number | undefined;
|
||||
|
||||
Reference in New Issue
Block a user