本文档提供了 Fira Code 字体系统架构的技术概述,描述了核心组件以及它们如何协同工作以生成具有连字特性的编程字体。它涵盖了字体定义系统、连字生成系统和构建过程。有关特定字体特性和连字的更多信息,请参阅字体特性和连字和编程符号。
Fira Code 架构由三个主要系统组成,它们协同工作以创建最终的字体文件
字体定义系统包含位于 FiraCode.glyphs 中的主要字体数据。连字生成系统处理并生成用于连字的 OpenType 特性代码。构建系统将字体定义编译成各种字体格式以供分发。
来源:FiraCode.glyphs1-7 clojure/fira_code/calt.clj1-10 Makefile1-7
Fira Code 的核心是字体定义文件 FiraCode.glyphs,其中包含所有字形轮廓、元数据和 OpenType 特性。该文件是 Glyphs 格式,一种专业字体编辑器格式。
FiraCode.glyphs 文件定义了:
字符类别部分尤为重要,因为它定义了“大写字母”、“小写字母”、“数字”等分组,这些分组在 OpenType 特性定义中用于确定哪些字符组合应形成连字。
来源:FiraCode.glyphs1-200 CHANGELOG.md20-30
连字生成系统是 Fira Code 最具特色的组成部分之一。它使用 Clojure 代码以编程方式生成 OpenType 特性代码,从而实现字体的编程连字功能。
连字生成过程
replace-calt 函数处理这些定义该系统还处理特殊情况,例如
来源:clojure/fira_code/calt.clj1-335 features/calt/underscores.fea1-17 features/calt/hyphen_arrows.fea1-52 features/calt/numbersigns.fea1-10
构建系统将字体定义编译成各种字体格式以供分发。
构建过程使用 Docker 来确保构建环境的一致性。Dockerfile Dockerfile1-9 设置了所需的依赖项,包括 Python、字体工具和转换实用程序。
主要步骤包括:
build.sh 脚本协调字体生成过程Makefile 提供了简化的命令来触发这些过程
make build # Builds all font files
make package # Creates distribution packages
来源:Makefile1-7 Dockerfile1-9 script/everything1-10
Fira Code 功能的核心是其连字处理系统。本节将解释连字是如何定义的以及如何将其转换为 OpenType 特性代码。
连字处理的关键组成部分
liga->rule 函数 clojure/fira_code/calt.clj224-292 将连字定义转换为 OpenType 替换规则calt (Contextual Alternates) OpenType 特性中该系统还通过专门的特性文件支持多字符序列
来源: clojure/fira_code/calt.clj308-335 clojure/fira_code/calt.clj224-292 clojure/fira_code/calt.clj36-55
Fira Code 代码库组织在几个关键目录和文件中
| 目录/文件 | 目的 |
|---|---|
FiraCode.glyphs | 主字体定义文件 |
clojure/ | 用于生成连字功能的 Clojure 代码 |
features/ | OpenType 功能定义 |
script/ | 构建和打包脚本 |
Dockerfile | 构建环境的容器定义 |
Makefile | 用于构建和打包的简化命令 |
这些目录中的关键文件
来源: FiraCode.glyphs1-7 clojure/fira_code/calt.clj1-10 features/calt/underscores.fea1-17 Makefile1-7 Dockerfile1-9 script/everything1-10
Fira Code 架构的整体数据流遵循此模式
FiraCode.glyphs 中的字体定义提供了字符轮廓和基本元数据这种模块化方法允许对字体的不同方面进行专门处理,特别是 Fira Code 独有的复杂连字系统。
来源: Makefile1-7 clojure/fira_code/calt.clj308-335 features/calt/hyphen_arrows.fea1-52
Fira Code 的技术架构围绕三个主要系统设计
关键创新在于连字生成系统,它使用 Clojure 代码以编程方式生成 OpenType 功能代码,以处理复杂的连字规则。这种方法允许大量的编程连字,同时保持灵活性和可管理性。
构建系统使用 Docker 来确保一致性,模块化方法允许不同方面的字体独立开发。最终结果是字体提供跨多种平台和文本编辑器的广泛连字支持。
有关架构特定方面的更多详细信息,请参阅字体定义系统、连字生成系统和构建和打包系统。
来源: FiraCode.glyphs1-7 clojure/fira_code/calt.clj1-335 Makefile1-7 Dockerfile1-9