【译文】我的一个练手项目:Linux TTY 上的中文表音字体

我把它作为一个练习来开发,以便更好地了解 Linux TTY 的文本渲染,或者说是一个挑战,以探索 “过时 “技术的极限。

这是什么玩意?

Linux TTY 上的字体可以通过 setfont 实用程序(通常在 kbd 软件包中)进行更改。它最多只能支持 512 个字形,但每个字形可以映射到多个 Unicode 代码点。因此,为了支持中文,我需要在这个狭小的空间里挤出成千上万个汉字。幸运的是,现代汉语普通话只有大约 400 个不同的音节(忽略声调)。我们为每个音节挑选了一个最常用的字符,用来表示所有这几百个发音相似的字符。加上 96 个可见的 ASCII 字符和一些符号,它们完全可以容纳在 512 个字形的空间里!

但为什么要弄这个玩意?

老实说,盯着那些 “错误 “的字符猜测句子的意思并不是一件令人愉快的事情。因此,我不指望有人把它作为日常驱动程序。现在是 2024 年,你应该使用自己喜欢的 Wayland 或 X 桌面,而不是 TTY。所有主流图形用户界面工具包对中文(以及所有语言)的支持都比这个黑客软件要好得多。

我把它作为一个练习来开发,以便更好地了解 Linux TTY 的文本渲染,或者说是一个挑战,以探索 “过时 “技术的极限。

一个可能的用例是在实时环境(如 ArchISO)中执行一些维护任务。你无法访问图形桌面或打补丁的内核,只能使用 TTY,但需要检查中文文件名。你需要比  “Tofu “更好的东西,但又不想安装和配置 TTY 替代品。现在,你只需安装一个小字体,就能获得这些文件名的一些 “提示”,这可能会有所帮助。

另一个有趣的想法是,它暗示了如果第二次简化汉字方案成功,中文会是什么样子。如果第二次简化汉字方案成功,中文会是什么样子?(注:本项目使用的汉字与第二版《简繁体》并不完全相同。在该方案中,尽管许多汉字都有不同的含义和来源,但它们只是根据相似的音或形被合并了。它被认为是向汉语罗马化迈出的一步。

幸运的是,它失败了。这就是为什么我们今天仍然可以使用优雅的汉子汉语。

它是怎么做出来的?

准备字体的汉字部分。

  • PSF 字体最多只能包含 512 个字形,但每个字形都可以映射到多个 Unicode 编码点。在西方字体中,这一功能允许 A(拉丁文 A)和 Α(希腊文 Alpha)共用一个字形,以节省空间。
  • 在这个项目中,为了节省空间,我将所有具有相同拼音(忽略声调)的汉字映射为一个 “代表”。例如,”妈麻马骂吗”(拼音:mā má mǎ mà ma)全部映射为 “马”。汉字-拼音映射是通过脚本从 fcitx/libime 的拼音数据中提取的。
  • 每个字形的位图来自一个旧的公共免费字体 gb24st.bdf。它是许可授权的中文位图字体之一,但只涵盖 GB2312 字符。
  • 因此,有些拼音音节没有包含在这个项目中,如 rua(挼)、fiao(覅),因为在 gb24st.bdf 中没有任何汉字的位图使用这些拼音。但不管怎么说,它们很少被使用,腾出这些空间来包含一些符号可能是件好事。
  • 代表汉字基本上是挑选的该读音的最常见的汉字。不过有少数几个是我手工挑选的,目的是避免混淆或使用一个能组成许多形声字的声旁
  • 具体的拼音和汉字列表可以在 pinyin_hanzi 文件中找到。
  • 脚本readbdf.py随后就读取这个列表,并将代表汉字的位图从gb24st.bdf中提取出来。输出格式为 PSF Tools 中使用的 “txt” 格式。

准备 ASCII 部分和一些其他符号。

  • 它们来自 Libertinus Mono 字体。该字体为矢量字体,我使用 FontForge 将其转换到了 bdf 格式的位图字体。
  • 然后通过bdf2psf把它转换到 psf 格式,再用 PSF Tools 中的 psf2txt 转换到 txt 格式

手动将它们两个合并,然后通过 txt2psf 转换为 psf 格式。

  • Linux TTY 假定第 32 个字形是 U+20(空格字符),否则该字形将用于清除背景。因此,我将 U+20 重新定位到第 32 位。

Installation / 安装

Arch Linux (AUR)

从 AUR 安装: syllazh

Manually for other Linux distros / 其他 Linux 发行版,手动安装

从 “Releases” 中下载并解压,并将 syllazh.psfu.gz 文件复制到 /usr/share/kbd/consolefonts/ 目录中。

使用

在TTY里运行 setfont syllazh。请尽情享用!

本文文字及图片出自 https://github.com/oldherl/syllazh

余下全文(1/3)
分享这篇文章:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注