为 Glyphs 编写脚本(三)

教程
作者:Rafał Buchner & Rainer Scheichelbauer
en zh

 

所以,既然我们已经理解了对象模型,我们就可以用自己的脚本来扩充“脚本”菜单了。

本教程假定你之前已读过了为 Glyphs 编写脚本(一)为 Glyphs 编写脚本(二)

你可能已经注意到了 Glyphs 菜单栏中的 “脚本” 菜单。我们打算编写一个脚本,并把它放在这个菜单里。首先,我们要找一款好用的文本编辑器。个人而言,我喜欢 TextMate($60)和 SublimeText($80),因为这两款都有着能让写代码更加轻松有趣的特别功能。Mac 老手也喜欢 BBEdit($50)、Smultron($15)以及 Coda(\$100)。有可能你已经购买了其中某款软件的许可证,这样的话,你可以直接将其用作写 Python 代码的编辑器。不过如果你手头紧,或者只是想先写写代码试试、以后再决定投入金钱,你可以选择免费的 TextWranglerSubEthaEdit,或最近非常流行的 Atom

无论你选择了何种编辑器,敲 Cmd-N 创建一个新文档,保存在这个文件夹中:

~/Library/Application Support/Glyphs/Scripts/

波浪线(~)代表你的个人文件夹。提示:在 “保存” 对话框中,你可以敲 Cmd-Shift-G 来唤出 “前往文件夹” 功能,将上面这行内容粘贴进去。为你的脚本起个名字,比如 Glyph Shaker.py,因为我们打算将上次写的 Python 代码变成一个成熟的脚本。没错,.py 后缀名代表 Python 脚本。不过现在,我们看看代码……

最重要的事情优先。我们先来输入菜单项名称,声明文件的编码方式,再加一小段说明文本:

#MenuTitle: 字符形震荡器
__doc__="""
遍历所有选定的字符形,将其中的每个节点移动一小段距离。
"""

第一行实际上是一个注释,因为在 Python 中,井号(#)后面的内容就是注释。不过,Glyphs 会将 #MenuTitle: 开头的注释解译为脚本的菜单标题。如果你的脚本中没有这一行,Glyphs 会使用文件名作为菜单标题。我们的脚本,就会在 “脚本” 菜单中显示为 “字符形振荡器”。

第二行也是一个注释,不过这次,是 Python 会从其中解读出信息,顾名思义就是 .py 文件的编码方式。除非你有更好的主意、并且知道你在做什么,否则一直选择 UTF-8。

后面几行,我们声明了一个特殊的变量,名为 __doc__。该变量存储所谓的 “档案字串”(doc string),一小段关于你 Python 对象(本例中即为你的脚本)的档案文本。三个双引号标示着一段多行字符串,因此如果你想的话也可以添加一段长达几个自然段的说明文本。Glyphs 使用 “档案字串” 作为工具提示,当你的鼠标指针在 “脚本” 菜单中的脚本名称上停留时,会显示出来。

然后,像上次一样,我们需要设置随机数生成器:

import random
random.seed()

然后我们获取当前所选的图层,把它们放在 selectedLayers 变量中。(我们不想把所有图层 / 母版混合在一起,只作用与我们能看到的图层上。)我们开始:

selectedLayers = Glyphs.font.selectedLayers

现在,我们可以用 selectedLayers 做一些事情,比如遍历每个图层、每个路径、每个节点,将其移动一个从 -5050 之间的随机数值:

for thisLayer in selectedLayers:
    for thisPath in thisLayer.paths:
        for thisNode in thisPath.nodes:
            thisNode.x += random.randint( -50, 50 )

如果你做得全部正确,它看上去差不多应该是这样:

就是这样了。保存你的脚本,切换回 Glyph,看一下 “脚本” 菜单。什么?!我们的 “字符形振荡器” 不在那里!这是因为,我们必须要先让 Glyphs 重新扫描一下它的脚本文件夹。这样做:打开菜单时,按住 Option 键,“打开脚本文件夹” 一项会变成 “重新载入脚本”。之后,你的脚本就会出现在那里,其名称就是你在 #MenuTitle: 之后所定义的那个。

现在你可以打开你最不喜欢的字体,选择你最讨厌的那个字母,然后选择 “脚本” 菜单中的 “字符形振荡器” 给它来上活该的一拳。使用 Cmd-Opt-R 快捷键来重复打拳。尝尝这个吧,Helvetica!

现在,好好享受你应得的咖啡和冰淇淋小憩吧。当你觉得准备好进行下一步时,请继续阅读这系列 Python 介绍的第四部分


2014-10-04 更新:添加编码行,更新“档案字串”的解释。
2016-12-08 更新:修正截图(感谢 Friedrich)
2017-05-24 更新:添加第四部分的指引。
2018-12-26 更新:添加更多文本编辑器的链接。
2020-12-02 更新:升级到 Python3。

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