更新换行算法和APP-PUSH
This commit is contained in:
37
client/src/features/textWrap/core/joinTokens.ts
Normal file
37
client/src/features/textWrap/core/joinTokens.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import type { Token } from './types';
|
||||
|
||||
/**
|
||||
* 从 token 区间 `[start..end)` 重组回文本(跨端口径)。
|
||||
*
|
||||
* - 默认:用单空格 join(适用于 whitespacePolicy=NORMALIZE)
|
||||
* - 若传入 rawSeparators:按原始分隔符拼接(适用于 whitespacePolicy=PRESERVE)
|
||||
*
|
||||
* 说明:
|
||||
* - `start/end` 为半开区间
|
||||
* - 空区间返回空字符串;上层需要用硬约束避免空行
|
||||
*/
|
||||
export function joinTokens(tokens: Token[], start: number, end: number, rawSeparators?: string[]): string {
|
||||
const s = Math.max(0, start | 0);
|
||||
const e = Math.max(0, end | 0);
|
||||
if (!Array.isArray(tokens) || tokens.length === 0) return '';
|
||||
if (s >= e) return '';
|
||||
|
||||
const slice = tokens.slice(s, e).map((t) => t.text);
|
||||
if (!rawSeparators) {
|
||||
return slice.join(' ');
|
||||
}
|
||||
|
||||
// rawSeparators[i] 表示 tokens[i] 与 tokens[i+1] 之间的分隔符
|
||||
// 这里只实现最小可用:若 separators 缺失则回退到单空格。
|
||||
let out = '';
|
||||
for (let idx = s; idx < e; idx++) {
|
||||
const t = tokens[idx];
|
||||
if (!t) continue;
|
||||
out += t.text;
|
||||
if (idx < e - 1) {
|
||||
out += rawSeparators[idx] ?? ' ';
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user