2.3 KiB
2.3 KiB
integration(技术计划)
1. 计划目标
实现对外统一入口 wrapText()(纯函数风格),把已完成的子模块串成可复用算法模块,供 Home(APP)与 Widget(WIDGET)调用:
- 参数口径统一:
lang/context/availableWidth/maxLines/overflowMode/lineMode/configVersion/debug - 输出统一:
lines[]/wrappedText/meta,且 meta 可用于治理与 UI 兜底 - 当
meta.fallback_type=SYSTEM_DEFAULT时,UI 可选择交给系统排版(算法层仅标记,不擅自改变 UI 行为)
2. 入口签名(与大 spec 对齐)
实现并导出:
wrapText({
text,
lang,
availableWidth,
maxLines,
context,
fontSpec?,
overflowMode?,
lineMode?,
constraints?,
configVersion?,
debug?
}) => { lines, wrappedText, meta }
3. 组装流程(按执行顺序)
- normalizeWhitespace(core-contract)
- tokenize
- EN:tokenizeEN
- TC:segmentGraphemes → Token[]
- breakpoint-candidates
- generateBreakpoints(传入 constraints.forbiddenBreakRanges)
- search
- APP:searchBestLayoutApp(DP+TopK,测量优先)
- WIDGET:searchBestLayoutWidget(Beam,默认 APPROX;可选 MEASURE)
- overflow-fallback
- 当搜索失败或未覆盖到 N:按 overflowMode 执行(ELLIPSIS/CLIP/SYSTEM_DEFAULT)
- meta 汇总
- breaks(若可得)
- scoreTopTerms(debug=true 时)
- fallback_type/overflow_type/reason
- configVersion
4. 默认值与映射(固定,确定性)
overflowMode:- APP 默认
CLIP - WIDGET 默认
ELLIPSIS
- APP 默认
lineMode:默认AUTOconfigVersion:默认'v1'(若调用方未传)- WIDGET widthMode:默认
APPROX
5. 代码落位(客户端)
client/src/features/textWrap/wrapText.ts(入口实现)types.ts(对外输入/输出类型)index.ts(统一导出)
6. 测试与回归
- 将
golden-tests的测试入口从测试 harness 切换为正式wrapText()(期望不变) - 增加 1 个 integration 单测:验证
SYSTEM_DEFAULTmeta 语义不变
7. 完成定义(DoD)
wrapText()可在 APP/WIDGET 两种 context 下运行- 输出 meta 字段可用于 UI 治理与回溯(含 configVersion)
- 全量
npm test与tsc --noEmit通过 - overview 更新记录变更文件