文本对比工作区与边界
参照 Electron 的 next/src/features/diff/TextDiffTool.tsx、diffTools.ts 及其测试。原生版保留比较、清空、交换、复制差异、上一处/下一处、忽略空白、三种高亮模式、左右/统一视图和历史入口。工作区标题、工具栏、分栏标签、状态栏与输入超限等 textDiff.error.* 随 general.language 三语(见 parity)。左右编辑器可调整宽度并同步滚动;统一视图在下方显示只读三行上下文补丁。940px 窄窗口改用两行工具栏,保留相同操作。
输入变化后约 160 毫秒自动比较;“比较”按钮和 ⌘Return 另外写入本产品历史。历史保存左右原文和统一补丁,恢复时重新计算高亮。UTF-16 字符范围、行级新增/删除/修改、末尾空行、Unicode 换行、忽略空白的显示规则及统一补丁格式按 Electron 页面实现。忽略空白只隐藏对应高亮,不删改真实补丁。字面输入、左右选择/滚动位置、视图与高亮选项保存到原生版独立工作区;旧版本只有左右文本的草稿按默认选项读取。
为了避免最坏情况比较占用过多资源,总输入限 50 万 UTF-16 单元,左右行数乘积限 1000 万;一对需比较的行合计超过 4000 单元时改用行级高亮,统一补丁仍保留完整内容。原生高亮使用 NSTextView 临时文本背景,尚未包含 Monaco 的行侧边标记及完整编辑装饰。比较在后台执行,输入变化时不会用过期结果覆盖当前工作区。
check-core.sh 对照 Electron 测试样例检查字符范围、增删改计数、统一补丁、忽略空白、末尾空行、长行回退和旧草稿兼容。smoke.sh --window-capture --diff-only 操作实际比较/导航按钮与 NSTextView,检查高亮、统一只读视图、历史、保存/重启恢复及深浅色、窄窗口布局;940px 统一视图另外检查三个编辑区域均位于窗口内。安装包从仓库外的独立副本再次执行文本对比核心用例。