一个用于评估字体项目中字符集覆盖率的Python API。
项目描述
Google字体字符集定义
此存储库包含由Google字体提供给委托字体设计师的精选字符集。
[!注意]
如果您是用户并且只想获取现成的字符集,请直接从/data/results
文件夹中选取文件,例如带有空占位符字符的.glyphs
文件,或者当放置在源文件旁边时会在Glyphs.app侧边栏中出现的所谓自定义过滤器的.plist
文件。或者,您可以使用glyphsets
工具创建自己的自定义过滤器,请参阅本文件的底部关于字符集工具的部分。本README的其余部分是为正在编辑字符集和语言定义的人编写的。
最近(2023年末/2024年初),该仓库对字形集的构建方式进行了重大改进。当前的方法已成为一个更大工具网络的一部分,该网络还包括gflanguages、shaperglot以及fontbakery的 shape_languages
检查。
在理想情况下,字形集仅通过语言代码列表(如tu_Latn
)来定义。在构建过程中(运行sh build.sh
),将查询gflanguages
数据库以获取所有这些语言定义的字符,然后将其合并成一个单独的字形集。可选地,可以在gfglyphsets
中定义编码字符以及未编码的字形,这些文件可以是针对字形集或语言的特定文件,其内容也将添加到最终的字形集中。
在字体质量保证(QA)的后期(作为字体上线工作的部分,顺便提一下),Fontbakery的shape_languages
检查首先确定字体支持哪些字形集,然后使用每个字形集定义的语言调用shaperglot
,以检查每种语言的形状是否正确。这在字体QA方面是一个很大的进步,其中shaperglot
调用harfbuzz
形状引擎,以证明整个OpenType栈同时运行,包括标记附加和字符序列。shaperglot
包含自己的一套脚本或语言特定定义,例如检查土耳其语中小写时的ı
和i
是否形成不同的字母。
[!注意]
有关新的字形集定义状态的最新描述,请参阅GLYPHSETS.md。许多字形集尚未过渡到新方法,仍然以手动管理的字符和未编码字形的列表形式存在。
如何构建字形集
先决条件
为了使构建命令能够正确地使用语言定义来组装字形集,请确保您的开发环境拥有gflanguages的最新版本。如果不清楚,请使用pip install -U gflanguages
进行更新。
通常,您可能想要在调整字形集的其他部分的同时调整gflanguages
中的语言定义。在这种情况下,您可以将gflanguages
仓库克隆到您的计算机上,并在其根目录下使用pip install -e .
进行安装。这将使您的gflanguages
克隆对整个系统(或虚拟环境)可见,并且gflanguages
中的更改将自动反映在其他使用它的工具中,例如gfglyphsets
,无需每次代码或数据更改后重新安装。因此,运行sh build.sh
将自动使用您最新的语言定义,即使您还没有将语言定义更改的PR提交回仓库。
字形集在哪里定义?
在此仓库中,数据定义在两个不同的地方。一个地方是在glyphsets
Python包内部(/Lib/glyphsets/definitions
)。这些数据需要暴露给第三方工具,如fontbakery
。另一个地方在/data/definitions
中。这些数据仅用于字形集的编写,不需要作为Python包的一部分进行分发。
-
在Python包内部:字形集在Python包文件夹
/Lib/glyphsets/definitions
中的.yaml
文件中定义。 -
在Python包外部:在
/data/definitions
子文件夹中的额外文件,一旦发现它们存在于特定的文件名下,就会成为字形集的一部分。如果您需要的文件不存在,请在适当的位置创建它。
字符和字形在哪里定义?
为了确定具有 Unicode 编码的 字符 或 字形(未编码)的定义位置,请遵循以下逻辑
- 这是一个特定语言的 编码字符 吗?那么它将进入
gflanguages
数据库(这是一个独立的包),例如 这里。gflanguages
只包含编码字符,不包含未编码的字形。如果您也要更改这些定义,请为gflanguages
准备一个单独的 PR。 - 这是一个特定语言的 未编码字形 吗?那么它将进入
/data/definitions/per_language
- 这是一个更通用的 字形集特定字符或字形 吗?那么它将进入
/data/definitions/per_glyphset
如果您发现您需要针对每个 脚本 的额外单独定义,请联系 @yanone 实现它。
(重新)构建字形集
一旦设置并编辑了语言和字形集定义,请从命令行运行 sh build.sh
。此命令从 gflanguages
以及 /data/definitions
文件夹中的各种文件中提取字符和字形,并将它们组合成一个综合列表,每个字形集都有一个,然后渲染到 /data/results
文件夹中的各种不同数据格式。
此外,更新了 GLYPHSETS.md 文档,其中包含每个字形集的易读概述。
数据流可视化
以下是每个字形集的数据定义的视觉概述,以及创建的结果文件。
从上到下阅读。
DEFINITIONS:
┌──────────────────┐
│ Language codes │
│ "en_Latn" │
│ "de_Latn" │
│ ... │
└──────────────────┘
│
┌──────────────────┐ ┌──────────────────┐
│ gflanguages │ │ .stub.glyphs │
│ (Python package) │ │ (optional) │
└──────────────────┘ └──────────────────┘
│ │
╰──────────────────────┬──────────────────────╯
│
BUILD PROCESS: │
│
╔═══════════════════════════════╗
║ complete glyphset ║
╚═══════════════════════════════╝
│
RESULTS: │
│
╭──────────────────────┼──────────────────────┬──────────────────────╮
│ │ │ │
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ .txt │ │ .nam │ │ .glyphs │ │ .plist │
│ (nice & prod) │ │ │ │ │ │ │
└──────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘
字形集工具
[!注意]
在过渡到新数据库后,glyphsets
工具的现有命令已被禁用。这些是:update-srcs
、nam-file
、missing-in-font
。如果您需要使用这些命令,请报告。
自定义过滤器
您可以使用 glyphsets
工具创建自己的 Glyphs.app 自定义过滤器。
如果您还没有安装或更新工具,请使用 pip 进行安装或更新
pip install -U glyphsets
为 Glyphs.app 创建过滤器列表
glyphsets filter-list -o myfilter.plist GF_Latin_Core GF_Latin_Plus
将此 .plist
文件放在您的 Glyphs 文件旁边,并且(在重启后)您将在过滤器侧边栏中看到它。
比较字形集
您可以将两个或更多字形集的内容相互比较。每个连续的字形集都将与上一个进行比较。
此命令首先列出 GF_Latin_Kernel
的完整内容,然后列出与 GF_Latin_Kernel
相比 GF_Latin_Core
的额外(或缺失)字形。
glyphsets compare GF_Latin_Kernel GF_Latin_Core
输出
GF_Latin_Kernel:
===============
Total glyphs: 116
Letter (52 glyphs):
`A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z`
...
GF_Latin_Core:
=============
Total glyphs: 324
GF_Latin_Core has 208 **extra** glyphs compared to GF_Latin_Kernel:
Letter (168 glyphs):
`ª º À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ Ā ā Ă ă Ą ą Ć ć Ċ ċ Č č Ď ď Đ đ Ē ē Ė ė Ę ę Ě ě Ğ ğ Ġ ġ Ģ ģ Ħ ħ Ī ī Į į İ ı Ķ ķ Ĺ ĺ Ļ ļ Ľ ľ Ł ł Ń ń Ņ ņ Ň ň Ő ő Œ œ Ŕ ŕ Ř ř Ś ś Ş ş Š š Ť ť Ū ū Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž Ș ș Ț ț ȷ Ẁ ẁ Ẃ ẃ Ẅ ẅ ẞ Ỳ ỳ /idotaccent`
...
致谢
GF 希腊字形集由 Irene Vlachou @irenevl 和 Thomas Linard @thlinard 定义。由 Alexei Vanyashin @alexeiva 于 2017 年 1 月记录。
GF 字形集由 Alexei Vanyashin (@alexeiva) 和 Kalapi Gajjar (@kalapi) 于 2016 年 6 月 27 日至 2016 年 10 月 11 日定义,Dave Crossland、Denis Jacquerye、Frank Grießhammer、Georg Seifert、Gunnar Vilhjálmsson、Jacques Le Bailly、Michael Everson、Nhung Nguyen(越南列表)、Pablo Impallari(Impallari 编码)、Rainer Erich Scheichelbauer (@mekkablue)、Thomas Jockin、Thomas Phinney(Adobe Cyrillic 列表)和 Underware(Latin Plus 编码)提供输入。
项目详细信息
下载文件
下载适用于您平台的应用程序文件。如果您不确定选择哪个,请了解更多关于安装包的信息。