本文档介绍了负责将 Fira Code 字体从源代码文件构建和打包成各种分发就绪字体格式的系统。构建系统将字体定义文件转换为多种可用格式,包括 OTF、TTF、可变字体和针对 Web 优化的格式。
有关字体定义系统本身的更多信息,请参阅 字体定义系统。有关作为贡献者构建 Fira Code 的详细信息,请参阅 构建过程。
Fira Code 的构建和打包系统通过一系列精心编排的构建脚本,将源字体定义 (FiraCode.glyphs) 转换为多种字体格式。整个过程可以在 Docker 容器内运行,以确保不同系统之间构建环境的一致性。
来源:script/build.sh96-101 Makefile3-7
Fira Code 使用 Docker 提供一致的构建环境,其中预装了所有必需的依赖项。这种方法确保任何人都可以构建字体,而无需在本地计算机上配置特定的工具和版本。
Docker 环境包含
| 依赖项 | 目的 |
|---|---|
| Python 3 | 运行字体工具的基础环境 |
| fontmake | .glyphs 文件到 OTF/TTF 格式的转换 |
| ttfautohint | 为 TTF 字体添加字距信息 |
| woff2_compress | 创建压缩的 WOFF2 Web 字体文件 |
| sfnt2woff-zopfli | 创建压缩的 WOFF Web 字体文件 |
| gftools | 字体后处理的实用工具 |
build.sh 脚本负责协调主要的构建过程,它会准备好带有任何请求功能的字体定义文件,然后调用每个字体格式的单独构建脚本。
来源:script/build.sh1-104 Makefile3-4
构建脚本接受多个参数来定制构建
| 参数 | 描述 |
|---|---|
| -f, --features | 要烘焙到字体中的功能的逗号分隔列表 |
| -w, --weights | 要构建的字重的逗号分隔列表 |
| -n, --family-name | 字体的自定义字体族名称 |
| -g, --generate-glyphs-only | 仅生成自定义字形文件,不进行构建 |
TTF(TrueType Font)生成过程将 Glyphs 文件转换为 TTF 格式,并应用字距以在屏幕上获得更好的渲染效果。
该脚本单独处理每个请求的字重(默认为 Light, Regular, Retina, Medium, SemiBold, Bold)
fontmake 为每个字重生成 TTF 文件ttfautohint 以改进屏幕渲染OTF(OpenType Font)生成过程类似,但会生成不包含字距信息的 OpenType 格式文件。
与 TTF 过程类似,OTF 生成
fontmake 为每个字重生成 OTF 文件可变字体通过字体插值在单个文件中提供多种字重。这有助于减小文件大小并提高 Web 设计的灵活性。
来源:script/build_variable.sh1-41
可变字体生成过程
fontmake 生成可变字体gftools 应用元数据和字距调整来源:script/build_variable.sh19-39
WOFF2(Web Open Font Format 2)比 WOFF 提供更好的压缩效果,从而减小 Web 使用的文件大小。
WOFF2 生成过程
woff2_compress 创建压缩的 WOFF2 文件WOFF(Web Open Font Format)是一种较旧但仍被广泛支持的 Web 字体格式。
WOFF 生成过程
sfnt2woff-zopfli 创建压缩的 WOFF 文件在所有字体格式生成完毕后,打包过程会准备它们以供分发。
来源:Makefile6-7 script/everything9
打包过程由 package.sh 管理,并且可以通过 Makefile 使用 make package 调用。此步骤收集所有生成的字体文件,并将它们整理成最终的分发格式。
构建和打包系统连接了字体定义系统与分发系统,将设计转换为可用的字体文件。
来源:Makefile1-8 script/build.sh1-104 script/everything1-10
对于想要构建 Fira Code 的用户,主要有两种方法
使用 Docker(推荐):
make build
make package
使用本地工具(需要依赖项):
./script/build.sh [options]
./script/package.sh
名为 everything 的脚本也提供了一种方便的方式来连续运行多个构建步骤,这对于开发和测试特别有用。