菜单

连字与编程符号

相关源文件

目的与范围

本文档详细介绍了 Fira Code 中的连字系统和编程符号,解释了多字符组合如何转换为统一的符号以提高代码的可读性。它涵盖了实现、可用的连字类型以及替换系统的工作原理。

有关字符变体和样式选项的信息,请参阅字符变体和样式集。有关 OpenType 实现的技术细节,请参阅OpenType 功能

什么是编程连字?

编程连字是特殊的字体替换,它将常见的字符序列渲染为单一的视觉实体,而不会改变底层文本。这解决了编程中的可读性问题,其中像 -><=:= 这样的字符序列代表单个逻辑标记,但传统上需要解析多个字符。

来源:README.md7-15

连字系统架构

Fira Code 的连字系统基于 OpenType 上下文替代 (calt) 功能。该系统会分析字符序列,并在检测到特定模式时将其替换为适当的连字字形。

来源:FiraCode.glyphs1-20 CHANGELOG.md294-296

可用的连字类别

箭头连字

Fira Code 提供丰富的箭头连字,可以自定义和扩展到各种长度。

来源:README.md36-37 extras/showcases.txt4-7 extras/arrows.png

比较和逻辑运算符

来源:extras/showcases.txt10-25 README.md45-48

任意长度连字

Fira Code 的一项关键创新是其任意长度连字系统,该系统在 4.0 版本中引入。它不为每个可能的箭头长度定义单独的连字,而是使用由起始、中间和结束组件组成的组合方法。

该系统支持

  • 基于连字符的箭头:-->, ---> 等。
  • 基于等号的箭头:==>, ===> 等。
  • 下划线:___, ____ 等。
  • 数字符号序列:##, ### 等。

来源:CHANGELOG.md95-100 features/calt/equal_arrows.fea8-44

编程符号和 Unicode 支持

Fira Code 包含一套全面的编程和数学符号,超出连字范围。

类别示例描述
数学, , , 数学运算和符号
集合论, , , , , 集合成员和运算
逻辑, , , , , 逻辑运算符和证明符号
框线绘制, , , , , 用于表格和 UI 的线条绘制
块状元素, , , , 用于视觉元素的实心块
技术, , , , 技术和键盘符号
进度条自定义字形 (U+EE00-U+EE0B)专用进度指示器

来源:README.md64-67 extras/math.png extras/showcases.txt52-63 CHANGELOG.md21-29 script/progress.clj1-35

样式变体

Fira Code 通过 OpenType 功能提供广泛的自定义选项

样式集 (ss01-ss10)

功能描述示例
ss01小写字母 'r' 的替代形状r → 替代形状
ss02小于/大于符号的变体<=, >=,
ss03替代的 and 符号& → 替代设计
ss04替代的美元符号$ → 替代设计
ss08为相等运算符添加间隙=== =
ss09恢复复合赋值>>=, <<= 等。
ss10传统连字fl, fi, ft 等。

字符变体 (cv01-cv32)

Fira Code 为单个字符提供替代方案

功能描述示例
cv01替代的 'a'a → 替代形状
cv02替代的 'g'g → 替代形状
cv03-cv06'i' 的变体i → 替代形状
cv07-cv10'l' 的变体l → 替代形状
cv11-cv13替代的 '0' 变体0 → 替代形状
cv15-cv16替代的星号* → 居中或六边形
cv30长竖线`

来源: README.md43-49 CHANGELOG.md44-67 extras/showcases.txt102-135 features/ss09.fea features/ss10.fea

特殊功能

进度条字形

Fira Code 是第一个专为渲染进度条设计的编程字体。

进度条系统使用私有使用区 (U+EE00-U+EE0B) 中的专用 Unicode 码点。

来源: README.md55-63 script/progress.clj1-35 CHANGELOG.md27

与编辑器和终端的兼容性

字形的支持在编辑器和终端应用程序之间有所不同。Fira Code 在其 README 文件中维护了兼容性表格。

类型支持的示例不支持的示例
编辑器VS Code、JetBrains IDE、Sublime Text、AtomIDLE、Delphi IDE、Emacs(未配置时)
终端iTerm2、Windows Terminal、Konsole、KittyGNOME Terminal、PuTTY、xterm

要启用字形,大多数编辑器都需要特定的字体设置。有些可能还需要额外的配置才能正确支持编程字形。

来源: README.md74-146 README.md148-171

字形实现细节

Fira Code 中的字形实现基于 OpenType 上下文替代功能。该系统旨在

  1. 检测特定的字符序列
  2. 应用替换规则
  3. 将序列替换为单个字形

实际的替换规则在功能文件中定义,语法如下:

sub less' greater by less_greater.liga;
sub equal' greater by equal_greater.liga;

这会告诉字体渲染引擎将 <> 序列替换为特定的字形。

来源: features/calt/equal_arrows.fea1-73 CHANGELOG.md294-296 README.md13-15

字形演进

Fira Code 的字形系统在整个生命周期中都得到了显著的演进。

  • v1.x:最初的字形,基本支持
  • v2.x-3.x:添加了更多字形和符号
  • v4.0:重大重新设计,支持任意长度的箭头
  • v5.x-6.x:进一步优化和 Unicode 扩展

在 4.0 版本中,该字体将 44 个独立的箭头字形替换为四个通用的组合替换,将性能提升了 100-150%,并实现了无限的箭头组合。

来源: CHANGELOG.md93-104 CHANGELOG.md200-311

结论

Fira Code 的字形系统将常见的编程序列转化为统一的视觉元素,在不改变底层文本的情况下提高了代码的可读性。通过利用 OpenType 功能和深思熟虑的设计方法,它为各种语言和编辑器的程序员提供了增强的观看体验。

通过样式集和字符变体提供的广泛的自定义选项允许开发人员根据自己的偏好调整视觉外观,而全面的符号集则支持各种编程范例和符号。

来源: README.md7-15 README.md36-63