返回首页
24小时热榜
嗨,HN,我是一名电影导演,我更喜欢用纯文本来写故事,而不是使用笨重的剧本软件。像Fountain这样的标准标记对我来说不太适用,因为我使用混合语言写作,所以我用Markdown和我自己发明的自定义语法,尽量让它类似于标准剧本结构。
这个工作流程很好,直到我需要生成一个行业标准的剧本PDF。我厌倦了手动将文本复制粘贴回笨重的软件中以便导出,因此我决定编写一个脚本来自动化这个过程。就在这时,我遇到了瓶颈。
我尝试使用React-pdf和其他高级库,但在两个方面都遇到了问题:真正的多语言文本排版和复杂的上下文分页。特别是剧本的严格要求是在页面底部自动插入(MORE),在下一页顶部插入(CONT'D),当角色的对话跨越页面时。
当布局引擎是一个黑箱时,你无法优雅地做到这一点。因此,我绕过了这些库,从头开始构建自己的排版引擎。
VMPrint是一个确定性的、零浏览器布局虚拟机,完全用TypeScript编写。它完全放弃了DOM。它加载OpenType字体,进行准确的文本分段(Intl.Segmenter),计算文本换行的区间算术空间边界,并输出一个绝对坐标的平面数组。
一些统计数据:
- 对Node.js API或DOM零依赖(可在Cloudflare Workers、Lambda、浏览器中运行)。
- 核心包大小为88 KiB。
- 性能:在Snapdragon Elite ARM芯片上,该引擎的“神奇装置”(8页混合CJK、阿拉伯文RTL、首字母大写和跨页表格)完成布局和渲染大约在28毫秒内。
该代码库还包括draft2final,这是我构建的CLI工具,用于使用这个引擎将Markdown转换为出版级PDF(包括剧本格式)。
这是我第一次开源发布。手稿仍在等待中,但引擎已经发布。我很想听听大家的想法,回答关于数学或架构的任何问题,看看是否有人觉得这个工具有用!
---
关于AI使用的说明:为了完全透明地说明这个项目的构建过程,我完全手动设计了核心概念(一个灵感来自游戏引擎的全平面、可变形的基于盒子的系统,应用于页面布局)、区间算术数学、字素分段和布局逻辑。我确实在功能层面上使用了AI作为编码助手,但整体软件架构、组件结构和API都是我精心设计的。
简单介绍一下我的背景:我自1992年以来一直是一名专业系统工程师。我曾在多家财富500强公司担任高级系统架构师,目前在一家主要电信基础设施提供商担任首席科学家。我还为低功耗手机(在智能手机时代之前)创造了世界上最早的实时视频编码技术之一。我对深度技术并不陌生,而一个确定性的布局虚拟机正是那种严格、数学密集的系统,根本无法通过几行AI提示有效构建。
如果你有一个按钮,按下后会立即开始为期20年的人工智能寒冬,你会按下它吗?