设置自己的字符形数据
Each glyph name has a bulk of info associated with it, from Unicode value to categorization and sorting. All this is stored in the internal glyph database, or shortly: the ‘Glyph Data’.
是否曾疑惑过,为什么 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,很多人也喜欢 SublimeText 和 Atom,你可能也会喜欢 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
中的Fraction
或Letter
中的Lowercase
诸如此类。看一下 “窗口 > 字符形信息” 了解可能的次分类。大致来说,分类和次分类就是你在 “字体” 标签页的左侧边栏中所看到的,或者在网格视图中作为分节标题出现的内容。script
定义字符形所属的书写系统。如果它不属于任何书写系统(比如数学符号)可以留空。可能的值包括latin
、arabic
、cyrillic
、devanagari
、ethiopic
、greek
、han
等,你懂的。anchors
是逗号分隔的清单,用于这个字符形中可能出现的变音符锚点。通常可能出现的是top
、bottom
、center
、ogonek
、topleft
、topright
、bottomleft
、bottomright
、left
、right
。相应的标符锚点需要前面加上下划线,例如_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
之后,而不是在Adieresis
和Agrave
之间,请在其中添加一个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 (三言).