21个版本 (破坏性)
0.15.0 | 2024年6月6日 |
---|---|
0.14.1 | 2023年8月15日 |
0.14.0 | 2023年3月2日 |
0.13.0 | 2022年11月15日 |
0.1.0 | 2019年11月19日 |
#232 in 解析器实现
2,881 每月下载量
用于 7 个crate(4 直接)
1.5MB
38K SLoC

所有类型
所有类型是完全用Rust编写的OpenType、WOFF和WOFF2的字体解析器、形状引擎和子集工具。它从Prince工具中提取而来,该工具用于将HTML和CSS文档排版并布局为PDF。
所有类型的形状引擎是与OpenType形状规范一起开发的,该规范旨在指定OpenType字体的形状行为。
特性
- 解析 TrueType/OpenType (
glyf
,CFF
,CFF2
)、WOFF和WOFF2文件。 - 形状 阿拉伯语、西里尔语、希腊语、希伯来语、印度语系(孟加拉语、达罗毗荼语、古吉拉特语、古尔穆基语、卡纳达语、马拉雅拉姆语、奥里亚语、僧伽罗语、泰米尔语、泰卢固语)、高棉语、老挝语、拉丁语、叙利亚语、泰语和其他语系。
- 子集 从TrueType、OpenType、WOFF和WOFF2文件中提取到OpenType。
- 实例 将变量字体转换为非变量字体。
什么是字体形状?
字体形状是将文本形式为Unicode码点和字体,并根据文本布局字体中的字形的过程。这包括尊重字体中指定的字距调整、连字和替换。对于某些语言来说,这相对简单。对于其他语言,如印度语系,则相当复杂。形状后,其他库如Pathfinder或FreeType负责渲染字形。要了解更多关于文本渲染的信息,Andrea Cognolato有关于Linux上现代字体渲染的良好概述。在其他平台上,概念相似。
示例
请参考Allsorts Tools仓库,其中包含一组用于练习Allsorts字体解析、形状和子集的工具。
未实现的功能/已知问题
我们目前不支持
- 蒙古文和藏文的形状。
- 苹果的morx表。
- Unicode标准化。
已知限制
开发状态
Allsorts仍在积极开发中,但于2019年随Prince 13的发布达到了第一个里程碑。在Prince中,它负责所有字体加载和形状。
目前,字体解析代码是手写的。计划最终通过我们的声明性数据定义语言项目用机器生成的代码来替换。
平台支持
Allsorts CI在Linux、macOS和Windows上运行测试。通过Prince,它还构建了FreeBSD版本。
构建和测试
最低支持的Rust版本 1.66.0
要构建该库,请确保您已安装Rust 1.66.0或更高版本。
使用cargo build
构建,并使用cargo test
运行测试。
Cargo功能
功能 | 描述 | 默认启用 | 额外依赖项 |
---|---|---|---|
outline |
启用访问字形轮廓的代码 | ✅ | |
flate2_zlib |
使用zlib后端对flate2进行操作 | ✅ | zlib |
flate2_rust |
使用Rust后端对flate2进行操作 | ❌ | miniz_oxide |
prince |
启用Prince特定测试和代码 | ❌ | |
specimen |
启用生成HTML字体样本的模块 | ❌ | upon ,unicode-blocks |
注意:在我们的测试中,zlib
flate2
后端速度更快,但您可能更喜欢在编译到WASM或类似平台时使用纯Rust解决方案的Rust后端。
贡献
欢迎贡献,请参阅贡献文档以获取更多详细信息。
行为准则
我们致力于维护Rust社区的标准
我们致力于为所有人提供一个友好、安全且欢迎的环境,无论性别、性取向、残疾、种族、宗教或类似个人特征。
我们遵循Rust行为准则。
致谢
- OpenType形状文档是形状引擎实现所依据的规范。
- HarfBuzz是广泛使用的开源字体形状引擎,被用作测试输出的参考。
- 使用Adobe Annotated OpenType Specification测试套件作为Allsorts测试套件的一部分。
- ttf-parser用于CFF CharString解析代码。
许可证
Allsorts在Apache许可证(版本2.0)的条款下分发。
有关详细信息,请参阅LICENSE。
依赖项
~9MB
~232K SLoC