设置自己的字符形数据

教程
作者:Rainer Erich Scheichelbauer
en zh

 

是否曾疑惑过,为什么 Glyphs 对你创建的字符形了解得这么多?比如说,当你输入一个字符形的名称时,软件就会设定 Unicode,以及当你选择 “字符 > 设定锚点”(Cmd-U)或 “字符 > 重设锚点”(Cmd-Opt-U)时,就会设定正确的变音符锚点。所有这些信息都存储在哪里?

隐藏在 Glyphs 应用程序中的,是一个名为 GlyphData.xml 的文件。你不应该动应用程序内部的那个文件,但可以在 “Application Support” 文件夹中复制,并在其中保存个人的自定义设置。Glyphs 将使用你的字符形信息来覆盖内建的设置。

复制 GlyphData.xml

好,所以我们必须深入应用程序,然后找出 XML 文件。为此,首先要确保你的 Glyphs 应用程序名为 “Glyphs”,并且位于你的 “应用程序” 文件夹中。然后,将这行内容拷贝到剪贴板中:

/Applications/Glyphs.app/Contents/Frameworks/GlyphsCore.framework/Versions/A/Resources/GlyphData.xml

然后,在 “访达” 中,选择 “前往 > 前往文件夹…”(Cmd-Shift-G)。将我们刚刚拷贝到剪贴板的那行内容粘贴进出现的对话框中:

按下 “前往” 后访达会为你呈现 GlyphData.xml,深埋在 Glyphs 应用程序的某处:

保持 XML 文件选中,选择 “编辑 > 拷贝 GlyphData.xml”(Cmd-C)。现在你可以关闭访达窗口了。

接下来我们需要前往 “Application Support” 文件夹。最简单的方法是,在 Glyphs 中选择 “脚本 > 打开脚本文件夹”(Cmd-Shift-Y)这会带你前往 “Application Support” 中的 “Scripts” 文件夹。你只需要确保自己位于上层文件夹中。在 “Scripts” 文件夹旁,你会看到 “Temp” 和 “Plugins” 文件夹,以及一个 CustomFilter.plist 文件。如果你在那里看不到 “Info” 文件夹,那么就是时候来创建它了(Cmd-Shift-N)。在 “Info” 文件夹中,粘贴 GlyphData.xml

编辑 GlyphData.xml

使用你最喜欢的 XML 或纯文本编辑器打开这个 XML 文件。个人而言,我推荐 TextMate,很多人也喜欢 SublimeTextAtom,你可能也会喜欢 BBEdit 或者它的免费版 TextWrangler

这两个 XML 文件——深埋在应用程序中的,以及我们刚刚拷贝到 “Info” 文件夹中的——都包含全部的相应字符形信息。它们会互相补充,因此你可以仅将副本 XML 文件限制在所需字母中。为此,请删除 <glyphData>(应该位于第 20 行左右)和 </glyphData>(最后一行)之间的所有内容。这样,你最终会得到如下结果:

现在,一个字母的条目必须遵循特定的形式。举个例子。想象一下,你想对自己最喜欢的文种精灵语中的一个字母进行编码,比如 U+E000 TENGWAR LETTER TINCO 如何,可能再把 U+E046 TENGWAR SIGN ACUTE 也放进去。我们将这几行内容添加到我们的 GlyphData.xml 副本中:

<glyph unicode="E000" name="tinco-tengwar" decompose="longCarrier-tengwar, ooreStemless-tengwar" category="Letter" subCategory="Primary" script="tengwar" altNames="tincoTengwar, tengwarTinco" production="uniE000" description="TENGWAR LETTER TINCO" anchors="top, bottom" accents="threeDotsAbove-tengwar, threeDotsBelow-tengwar, twoDotsAbove-tengwar, twoDotsBelow-tengwar, dotAbove-tengwar, dotBelow-tengwar, acute-tengwar, doubleAcute-tengwar, rightCurl-tengwar, doubleRightCurl-tengwar, leftCurl-tengwar, doubleLeftCurl-tengwar, nasalizer-tengwar, doubler-tengwar, tilde-tengwar, breve-tengwar"  />
<glyph unicode="E046" name="acute-tengwar" category="Mark" subCategory="Nonspacing" script="tengwar" altNames="acuteTengwar, tengwarAcute, andaith" production="uniE046" description="TENGWAR SIGN ACUTE" />

现在,它应该会如下所示(我承认在这里的缩进上作了点弊):

保存,重启 Glyphs,看一下 “窗口 > 字符形信息”,搜索 tengwar 来看看 Glyphs 是不是接受了你添加的内容。如果一切操作无误,你会看到如下所示的样子:

任务完成。啊等一下,还不算完成。尚缺少所有其他的精灵语字符形。不过不要紧张,大曲都市已经先你一步做了出来

XML 技术指标

你知道了,如果你想要向数据库中添加一个新字符形,你必须添加一个名为 glyph 的 XML 元素。其基本结构为:

<glyph attribute="value" />

每个 glyph 元素可以有多个 attribute="value" 结构的属性。每个字符形条目需要这三个必要的属性:

  • name 是字符形名称。Glyphs 根据名称识别字符形,所以它必须被设置为可用的字符形名称,并且在整个字符形数据库中是名称唯一
  • description 字符形 Unicode 风格的描述。如果你的字符形已被编码,你可以通过 Unicode Checker 找到其官方名称,或从 “构造文种 Unicode 登记处” 找到非官方的名称。
  • category 是字符形的分类或分组。可能的值为:Letter(字母,如 ‘x’ 或 ‘ä’)、Number(数字,如 ‘3’)、Mark(标符,如锐音符)、Punctuation(标点,如句号或逗号)、Separator(分隔符,如空格)、Symbol(符号,如 emoji、箭头或 “放射性物质” 符号)。

你可以(在可能的地方,你应当)使用这些可选属性:

  • unicode 是十六进制的 UTF16 值。如果你想创建未被编码的字符形,比如合字,则留空。
  • subCategory 次分类,帮你进一步定义字符形的种类。当然了,这个取决于 category。它可以是 Number 中的 FractionLetter 中的 Lowercase 诸如此类。看一下 “窗口 > 字符形信息” 了解可能的次分类。大致来说,分类和次分类就是你在 “字体” 标签页的左侧边栏中所看到的,或者在网格视图中作为分节标题出现的内容。
  • script 定义字符形所属的书写系统。如果它不属于任何书写系统(比如数学符号)可以留空。可能的值包括 latinarabiccyrillicdevanagariethiopicgreekhan 等,你懂的。
  • anchors 是逗号分隔的清单,用于这个字符形中可能出现的变音符锚点。通常可能出现的是 topbottomcenterogonektoplefttoprightbottomleftbottomrightleftright。相应的标符锚点需要前面加上下划线,例如 _top。叠加结合标符可同时包含这两种(带或不带下划线的)锚点。如果你的字符形上不能加变音符,或不能作为变音符添加在其他字符形上,则忽略这一属性。
  • accents 定义字符形可以带的变音符。这主要帮助 Glyphs 在你点击锚点时绘制标符云。
  • altNames 是逗号分隔的变体字符形名称清单,会被应用程序识别,以便字符形被正确归类或重命名。例如,oslash 有时被称作 ostroke。当你打开一款使用这种奇怪命名的旧版字体时,Glyphs 会在你运行 “字符 > 更新字符形信息” 时将其重命名为 oslash
  • production 是字符形在导出时被重命名的名称。通常为过时的 Adobe 字符形列表名称。你会想在 AGL 使用 uni 后接四位 Unicode 值或 u 加五位值的地方应用这一属性。例如,用于罗马尼亚语和摩尔多瓦语的字符形元素 Tcommaaccent 拥有 name="Tcommaaccent"production="uni021A" 这两个属性。
  • decompose 定义一个合成字符形中的部件。换句话说,组成这一字符形的部件。这个信息在你通过 “字符 > 创建组合字符形” 命令(Cmd-Opt-Shift-C)时用到。确保基础字符形在最前,变音符跟在其后。这对于合字也很有用。在这种情况下,你添加构成合字的字符形,例如 f_f_k 合字使用 decompose="f, f, k"
  • sortName:默认地,Glyphs 在字符形分类下按字母顺序排列字符形。如果你想要操作显示顺序,请添加此属性。 例如,要想确保 AE 出现在所有的带变音符的 A 之后,而不是在 AdieresisAgrave 之间,请在其中添加一个 sortName="Az" 属性。这对于数字而言非常重要,其中的 sortName 可能会像是 Number.dnom.4 这样。

有一个应用程序可以做这个!

从 2017 年五月起,有了一个更加聪明、更加方便的办法来编辑你的字符形数据:其名为 EditGlyphData,你可以在我们网站的 “Tools” 一节找到它。使用这个工具将多个 XML 文件合并成一个,以及可能最好的功能是,将数据导出为制表符分隔的文本文件,这样你就可以在你最喜欢的电子表格应用程序中编辑它。此外,可以避免所有的 XML 不一致问题(见下文)。很酷。

潜在的坑

请小心仔细。如果你搞乱了字符形数据,你就会遇到问题。这里有一些常见问题,你可以从一开始就避免它们:

首先,确保你每次都填满了三个必要的属性,尤其是 category每次都是

其次,使用这一技巧创造自己的命名方案非常动人。但请记住,Glyphs 会用特定的名称来自动构建 OpenType 特性。所以,在你重写了自己的字符形数据之后,你可能也要自己来写特性代码。

第三,这个很重要:如果你的 GlyphData.xml 中包含损坏的 XML,Glyphs 会忽略你的自定义字符形信息。因此,请确保不时正确验证你的 XML。 诸如 TextMate 的许多工具都具有内置的验证器。当然,你也可以将 XML 拷贝粘贴到基于网页的验证器中,例如 W3 标记验证服务。或者,使用 EditGlyphData 应用程序(见上文)。

这就是关于将你的自定义信息加入 Glyphs 的全部内容。如果你认为其他人也可以从你添加的信息中受益,那么可以将你的 GlyphData.xml 文件放在 Github 上。要这样做,请使用 GlyphsInfo GitHub 仓库(说明在自述文件中)。或者,如果你不习惯于 git,请在 Glyphs 论坛中发布建议;再或者,如果认为你所做的修改应该成为每个 Glyphs 用户的默认设置,在论坛中提交功能需求,或者与我们联系。


2013-02-03 更新:添加了如何在 10.6 中导航到 GlyphData.xml(感谢 @typefacts);两处细微文本优化。
2013-02-12 更新:添加了 “潜在的坑”。
2013-03-25 更新:更正了 XML 文件名的录入错误(感谢 George Thomas)。
2014-12-11 更新:更新了关于不加点字符形的注解,将 sortName 的例子改为了 AE。
2015-07-08 更新:部分重写。更新到 Glyphs 2 和新增的、更新的链接。删除了过时的文段。添加了精灵语和链接(感谢 @Tosche_E)。
2017-05-30 更新:添加了 EditGlyphData 应用程序参考,删除了不推荐使用的错误报告链接。
2018-09-25 更新:添加了到 GlyphsInfo 仓库的链接。感谢 Dave。

Chinese translation by Willie Liu (刘育黎) from 3type (三言).