连字生成系统负责创建OpenType特性代码,以实现Fira Code独特的编程连字。该系统将定义的连字序列列表转换为优化的OpenType替换规则,并嵌入字体中,从而使诸如 => 或 != 等字符组合能够显示为统一的字形。
有关字体整体结构的更多信息,请参阅 字体定义系统。有关生成字体文件如何构建的详细信息,请参阅 构建和打包系统。
连字生成系统结合了自动化规则生成和手动编写的特性代码,创建全面的OpenType替换规则,以处理各种编程连字,同时妥善处理边缘情况和特殊场景。
来源: clojure/fira_code/calt.clj308-335 features/calt/underscores.fea features/calt/equal_arrows.fea features/calt/center.fea features/calt/numbersigns.fea features/calt/hyphen_arrows.fea
连字生成过程遵循一个多阶段的流程,将抽象的连字定义转换为具体的OpenType规则
来源: clojure/fira_code/calt.clj308-335
该系统的核心是 replace-calt 函数,它
该系统应用优先级规则,以确保某些连字先于其他连字处理,从而防止替换顺序中出现意外冲突。
来源: clojure/fira_code/calt.clj36-55 clojure/fira_code/calt.clj295-305
优先级系统确保
<|>)以最高优先级(0)进行处理|>、<| 等)具有优先级 1<<、>>、||)具有优先级 2该系统为每个连字长度生成定制的OpenType替换规则,处理长度为2到5个字符的连字。
来源: clojure/fira_code/calt.clj224-292
对于每个连字长度,该系统
例如,一个3个字符的连字,如 <=>,会生成以下规则:
该系统包含多种机制来处理特殊情况和边缘情况
一些连字组合被排除在自动生成之外,因为它们需要特殊处理
["slash" "backslash"] ; /\
["backslash" "slash"] ; \/
来源: clojure/fira_code/calt.clj216-221
某些字符序列不应触发其后的连字
["parenleft" "question" "colon"] ; (?:
["parenleft" "question" "equal"] ; (?=
["parenleft" "question" "less" "equal"] ; (?<=
来源: clojure/fira_code/calt.clj11-20
复杂的忽略规则可防止在特定上下文中形成连字
["slash" "asterisk"]
["asterisk" "slash"]
["colon" "colon"]
来源: clojure/fira_code/calt.clj58-204
除了自动生成的规则外,该系统还包含一些手动编写的特性文件,用于处理特定类型的连字
| 特性文件 | 目的 |
|---|---|
| underscores.fea | 处理如下下划线序列: ___ |
| equal_arrows.fea | 处理基于等号的箭头,如 ==> |
| hyphen_arrows.fea | 处理基于连字符的箭头,如 --> |
| center.fea | 垂直对齐组合,如 :> |
| numbersigns.fea | 处理井号序列,如 ### |
来源: features/calt/underscores.fea features/calt/equal_arrows.fea features/calt/hyphen_arrows.fea features/calt/center.fea features/calt/numbersigns.fea
这些文件包含手动调整的替换规则,用以补充自动生成的规则,通常处理更复杂的替换模式或不符合通用模式的特殊情况。
连字生成系统通过 glyphs.clj 模块中的 update-code 函数与字体定义系统集成。
来源: clojure/fira_code/calt.clj clojure/fira_code/glyphs.clj155-158
update-code 函数
extras/showcases.txt 文件既是文档也是测试资源,列出了所有支持的连字组合。
此文件特别有价值,用于
连字生成系统针对以下方面进行了优化:
该系统跟踪并报告有关生成规则的指标
来源: clojure/fira_code/calt.clj327-333
连字生成系统是 Fira Code 的关键组成部分,它将简单的字符序列定义转换为复杂的 OpenType 替换规则。通过将自动规则生成与手工制作的特征文件相结合,它创建了一套全面的连字,从而提高了代码的可读性,同时又能妥善处理边缘情况和特殊场景。
该系统与字体定义系统的集成可确保生成的规则正确地整合到字体中,从而使用户能够在不同的平台和环境中获得 Fira Code 独特的编程连字。