一个高级、安全、零分配的 TrueType 字体解析器。
此箱子处于维护模式。仅修复 bug,不添加新功能。
我们欢迎错误报告和修复,并会及时进行审查。正确性、崩溃和错误信息都将得到处理。 安全问题已纳入范围。新的表格支持、新的 API 接口以及性能优化工作都已完成。 不会,并且功能请求将被关闭。
对于新项目,我们建议使用 fontations (
read-fonts和skrifa), 这是由 Google Fonts 积极开发的, 具有更广泛的表格 支持,也是 Rust 字体生态系统正在走向的方向。 一个高级、安全、零分配的字体解析器 TrueType, OpenType,以及 AAT。 可用作 Rust 或 C 库。
一个高级的 API,用于访问最常见的属性,隐藏所有解析和数据解析逻辑。
一个低级的,但安全的 API,用于访问 TrueType 表数据。
高度可配置。您可以禁用大多数功能,从而减小二进制大小。您还可以单独解析 TrueType 表,而无需加载整个字体/面孔。
没有堆栈分配。
没有不安全代码。
没有依赖项。
与 no_std/WASM 兼容。
基本的 C API。
速度快。
无状态。所有解析方法都是不可变的。
代码简单且易于维护(没有魔术数字)。
库不允许出现恐慌。任何恐慌都被视为严重错误,应进行报告。 - 库禁止不安全的代码。 - 不允许堆分配,因此由于内存不足而崩溃是不可能的。 - 所有递归方法都有深度限制,且那些输入形式为图形(复合字形、COLRv1 绘图图形、CFF 子程序)还对每次调用的 总 工作进行了限制。仅有深度限制是不够的:对于 fan-out b 和深度 d,一个小字体可以强制进行 b^d 次访问,而不必超过深度。 - 堆栈使用受限,但不严格:对复合变量字形进行展开时,最多可以嵌套 32 个帧,每个帧都保存一个变化元组缓冲区,大约为 80 KiB。
暂无开放 Issues,或尚未同步最近议题。