跳转到主要内容

一个用于评估字体项目中字符集覆盖率的Python API。

项目描述

Google字体字符集定义

此存储库包含由Google字体提供给委托字体设计师的精选字符集。

[!注意]
如果您是用户并且只想获取现成的字符集,请直接从/data/results文件夹中选取文件,例如带有空占位符字符的.glyphs文件,或者当放置在源文件旁边时会在Glyphs.app侧边栏中出现的所谓自定义过滤器.plist文件。或者,您可以使用glyphsets工具创建自己的自定义过滤器,请参阅本文件的底部关于字符集工具的部分。

本README的其余部分是为正在编辑字符集和语言定义的人编写的。

最近(2023年末/2024年初),该仓库对字形集的构建方式进行了重大改进。当前的方法已成为一个更大工具网络的一部分,该网络还包括gflanguagesshaperglot以及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包的一部分进行分发。

  1. 在Python包内部:字形集在Python包文件夹/Lib/glyphsets/definitions中的.yaml文件中定义。

  2. 在Python包外部:/data/definitions子文件夹中的额外文件,一旦发现它们存在于特定的文件名下,就会成为字形集的一部分。如果您需要的文件不存在,请在适当的位置创建它。

字符和字形在哪里定义?

为了确定具有 Unicode 编码的 字符字形(未编码)的定义位置,请遵循以下逻辑

  1. 这是一个特定语言的 编码字符 吗?那么它将进入 gflanguages 数据库(这是一个独立的包),例如 这里gflanguages 只包含编码字符,不包含未编码的字形。如果您也要更改这些定义,请为 gflanguages 准备一个单独的 PR。
  2. 这是一个特定语言的 未编码字形 吗?那么它将进入 /data/definitions/per_language
  3. 这是一个更通用的 字形集特定字符或字形 吗?那么它将进入 /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-srcsnam-filemissing-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 编码)提供输入。

项目详细信息


下载文件

下载适用于您平台的应用程序文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

glyphsets-1.0.0.tar.gz (991.4 kB 查看哈希值)

上传时间

构建分发

glyphsets-1.0.0-py3-none-any.whl (88.1 kB 查看哈希值)

上传时间 Python 3

支持