更新换行算法和APP-PUSH
This commit is contained in:
38
client/src/features/textWrap/core/tokenizeEN.ts
Normal file
38
client/src/features/textWrap/core/tokenizeEN.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import type { Token } from './types';
|
||||
|
||||
/**
|
||||
* EN tokenize(极简派)
|
||||
*
|
||||
* 口径:
|
||||
* - tokens 只包含 WORD,不生成 SPACE token
|
||||
* - 标点视为“词内字符”,不额外拆分(例如 "tired."、"Wait..."、"hello—world" 都是一个 token)
|
||||
* - 断点只允许发生在“词与词之间”(由上层生成 breakpoint 时遵守)
|
||||
*
|
||||
* start/end 索引以 normalizedText 为基准(建议先调用 normalizeWhitespace)。
|
||||
*/
|
||||
export function tokenizeEN(normalizedText: string): Token[] {
|
||||
const s = String(normalizedText ?? '');
|
||||
if (!s) return [];
|
||||
|
||||
const tokens: Token[] = [];
|
||||
|
||||
// 由于 NORMALIZE 模式下空白都折叠为单空格,这里按空格扫描即可。
|
||||
// 为了稳健性,也允许出现意外多空格(会跳过空段)。
|
||||
let i = 0;
|
||||
const n = s.length;
|
||||
|
||||
while (i < n) {
|
||||
// 跳过空格(或其他空白字符)
|
||||
while (i < n && /\s/.test(s[i]!)) i++;
|
||||
if (i >= n) break;
|
||||
|
||||
const start = i;
|
||||
while (i < n && !/\s/.test(s[i]!)) i++;
|
||||
const end = i;
|
||||
|
||||
tokens.push({ text: s.slice(start, end), start, end });
|
||||
}
|
||||
|
||||
return tokens;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user