更新换行算法和APP-PUSH

This commit is contained in:
吕新雨
2026-02-10 11:39:33 +08:00
parent f03d36b5e9
commit ee2d9f44ea
105 changed files with 9967 additions and 233 deletions

View File

@@ -0,0 +1,52 @@
# overflow-fallback子模块规范
## 子模块名称
overflow-fallback溢出与兜底
## 目标描述
统一定义“无解/溢出”时的行为与返回语义,确保:
- APP 与 WIDGET 在无法覆盖全文时表现一致且可解释
- ELLIPSIS 的字符、清理规则与再次测量约束统一
- SYSTEM_DEFAULT 的返回语义明确(算法层不擅自改变 UI 行为)
## 输入/输出定义
### 输入
- `tokens: Token[]`
- `partialBest?: Layout`(搜索器找到的最佳 partial 或 best effort
- `overflowMode: 'ELLIPSIS' | 'CLIP' | 'SYSTEM_DEFAULT'`
- `availableWidth: number`
- `maxLines: number`
- `lang: 'TC' | 'EN'`
- `context: 'APP' | 'WIDGET'`
- `ellipsisToken: string`(推荐 `"…"`,必须配置化)
- `measureWidth?: fn`(用于“加省略号后再测量”)
### 输出
- `result: { lines: string[]; wrappedText: string; meta: { fallback_type: 'NONE' | 'RELAX_RULES' | 'SYSTEM_DEFAULT'; overflow_type: 'NONE' | 'ELLIPSIS' | 'CLIP'; reason: string } }`
## 验收标准(可验证)
- **overflow 判定一致**
- 搜索无法在 `<=maxLines` 覆盖到结束边界 N即为 overflow
- **ELLIPSIS 规则一致**
- 仅处理最后一行
- 加省略号后必须再次检查不超宽(必要时回退移除 token 再加省略号)
- EN 回退单位为整词TC 回退单位为 grapheme
- 清理规则:不输出 `" …"`;不输出 `",…"/"。…"`(按配置决定是否移除末尾标点再加省略号,但必须固定)
- **SYSTEM_DEFAULT 语义一致**
- 仍返回 `lines/wrappedText`
- 仅在 meta 标记 `fallback_type=SYSTEM_DEFAULT`
- UI 可依据 meta 决定是否完全交给系统排版
- **确定性**:同输入同输出(含 meta
## 依赖与关联
- **依赖**`core-contract`(重组)、`width-measurement`(测量/降级)、`scoring-tiebreak`(避免截断短语的策略可复用评分)
- **被依赖**`search-engine-app``search-engine-widget``integration``golden-tests`