1个不稳定版本
0.5.2 | 2021年3月6日 |
---|
#1378 在 文本处理
1MB
22K SLoC
Allsorts
Allsorts是一个完全用Rust编写的字体解析器、形变引擎和子集器,用于OpenType、WOFF和WOFF2。它是从Prince工具中提取出来的,该工具可以将HTML和CSS文档排版成PDF。
Allsorts形变引擎是与OpenType形变规范一起开发的,该规范旨在指定OpenType字体形变行为。
特性
- 解析 TrueType(
ttf
)、OpenType(otf
)、WOFF和WOFF2文件。 - 形变 阿拉伯语、西里尔语、希腊语、希伯来语、印度语系(孟加拉语、德文那加利语、古吉拉特语、古尔木基语、卡纳达语、马拉雅拉姆语、奥里亚语、泰米尔语、泰卢固语)、拉丁语、叙利亚语和其他语系。
- 子集 从TrueType、OpenType、WOFF和WOFF2文件中提取到OpenType。
什么是字体形变?
字体形变是从Unicode码点形式的文本和字体中提取字形的过程,并根据文本将字体中的字形布局。这涉及到遵守字体指定的字距调整、连字和替换。对于某些语言来说,这相对简单。对于其他语言,如印度语系,这相当复杂。形变后,其他库如Pathfinder或FreeType负责渲染字形。要了解更多关于文本渲染的信息,Andrea Cognolato有一个很好的关于Linux上现代字体渲染的概述。其他平台的概念类似。
示例
请参考Allsorts工具仓库,该仓库包含三个测试Allsorts字体解析、形变和子集的工具。
未实现的功能/已知问题
我们目前不支持
- 形变高棉语、蒙古语、僧伽罗语和藏语。
- 苹果的morx表。
- Unicode标准化。
已知限制
开发状态
所有字体仍在积极开发中,但已达到第一个里程碑,即在Prince 13中包含。在Prince中,它负责所有字体加载和字体形状。
目前字体解析代码是手写的。计划最终通过我们的 声明性数据定义语言项目 用机器生成的代码替换。
平台支持
所有字体的CI在Linux、macOS和Windows上运行测试。通过Prince,它还支持FreeBSD。
构建和测试
最低支持的Rust版本 1.38.0
要构建包,请确保已安装 Rust 1.38.0 或更高版本。
使用 cargo build
构建,并使用 cargo test
运行测试。
贡献
欢迎贡献,请参阅 贡献文档 了解更多详情。
行为准则
我们旨在遵守Rust社区标准
我们致力于为所有人提供一个友好、安全、包容的环境,无论其性别、性取向、残疾、种族、宗教或类似个人特征。
我们遵循 Rust行为准则。
致谢
- OpenType形状文档 构成了形状引擎实现的规范。
- Harfbuzz 是广泛使用的开源字体形状引擎,被用作测试输出的参考。
- Adobe Annotated OpenType Specification 测试套件被用作Allsorts测试套件的一部分。
许可
所有字体根据Apache许可证(版本2.0)分发。
有关详情,请参阅 LICENSE。
依赖
~8.5MB
~231K SLoC