Magic Move for Code Snippets from first principles
22 days ago
- 作者切换到了Linux(CachyOS),并怀念Keynote的Magic Move功能,该功能可让代码片段在演示中产生动画效果。
- Keynote的Magic Move对代码无效,因为它将文本视为字形,导致标点符号和标识符的变形混乱。
- Myers差异算法虽数学上最优,但会产生视觉上突兀的动画;而Paul Heckel于1978年提出的差异算法更佳,因为它能寻找唯一锚点。
- 代码片段通过TextMate语法进行标记化处理,提取出包含内容、作用域和深度的令牌,避免使用复杂的抽象语法树解析。
- Heckel算法从锚点出发进行正向和反向遍历以配对匹配的令牌,然后标记删除和插入操作。
- 连续的已删除令牌会被批量处理以实现平滑淡出,插入的令牌淡入,匹配的令牌则动画移动到新位置。
- 该实现已在GitHub上开源,并已贡献至Bento演示工具包(v1.0.19)。