Parley 提供了一个用于实现富文本布局的 API。
Parley 文本栈
Parley 有四个关键依赖项:Fontique、HarfRust、Skrifa 和 ICU4X。这些 crate 涵盖了文本渲染过程的不同部分。
Fontique
Fontique 提供字体枚举和回退功能。
字体枚举 是指列出(枚举)系统上安装的所有字体。 它还指收集关于这些字体的元数据:它们是否为衬线体、无衬线体、等宽字体,它们的字重,它们覆盖的码点等。 该库负责将字体加载到内存中;它将使用内存映射 IO 懒加载部分数据到内存中,并在系统上的进程之间共享它们。
字体回退 是将文本片段匹配到字体的过程。 这是必要的,因为字体通常不覆盖整个 Unicode 范围:你有用于拉丁文本、中文文本、阿拉伯文本等的不同字体,通常还有一个单独的字体用于表情符号。 但是,如果你例如在拉丁文本中嵌入了阿拉伯文本或表情符号,你通常不会为阿拉伯文本或表情符号指定字体,而是为你选择一个。 字体回退是做出该选择的过程。
HarfRust
HarfRust 是 HarfBuzz 文本整形引擎的 Rust 移植版。文本整形 是指将 Unicode 码点片段映射到字体中的特定字形。 这包括应用连字、解析表情符号修饰符,但也包括某些脚本的更复杂的转换。
Skrifa
Skrifa 读取 TrueType 和 OpenType 字体。
它构建在 read-fonts 底层解析库之上,同时也是 oxidize 项目的一部分。
Skrifa 在 read-fonts 之上提供更高一级的度量信息。 特别是,它将字体文件中的原始字形表示转换为适合光栅化的、经过缩放和提示的矢量路径。
ICU4X
ICU4X 支持文本分析和国际化。对于 Parley,这包括区域设置和语言识别、 双向文本评估、文本分段、表情符号识别、NFC/NFD 规范化以及其他 Unicode 字符信息。
Parley
Parley 本身执行文本布局,并包含用于文本选择和编辑的工具。
文本布局 意味着计算字符串中每个字形的 x/y 坐标。 除了其他库所做的事情之外,这还涉及确定字形大小、换行和双向解析等任务。
最低支持 Rust 版本 (MSRV)
此版本的 Parley 已验证可在 Rust 1.88 及更高版本上编译。
Parley 的未来版本可能会提高 Rust 版本要求。 这不会被视为破坏性更改,因此甚至可能在小补丁版本中发生。
如果编译失败,请单击此处。
随着时间推移,Parley 的某些依赖项可能已发布了具有更高 Rust 要求的版本。 如果您因依赖项遇到编译问题,且不想升级您的 Rust 工具链,则可以降级该依赖项。
# Use the problematic dependency's name and version
cargo update -p package_name --precise 0.1.1
社区
Parley 的讨论在 Linebender Zulip 中进行,具体是 #parley 频道。 所有公开内容无需登录即可阅读。
欢迎通过 pull request 提交贡献。Rust code of conduct 适用。
除非您明确另有说明,否则您有意提交以纳入本作品的任何贡献,如 Apache 2.0 许可证所定义,将按照 License 部分所述进行许可,不附加任何额外条款或条件。
许可证
在以下任一许可证下授权:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。
用于测试和基准测试的某些文件采用不同的许可证。详见 ./parley_dev/README.md。