前言
今天在使用FontForge进行字体裁剪的时候,实现了一次Sublime Text 3插件开发的入门,简单记录一下,供以后参考。
插件要点
- 开发语言是python,新建代码文件后存放到指定目录:%User%/AppData\Roaming\Sublime Text 3\Packages(可通过sublime-preferences-browse packages菜单打开),可以在该目录下新建目录,但层级不可太深。
- 代码类的名称规则:命令名+Command,比如testCommand,后面会贴出示例。
- 如果不需要菜单,可通过Ctrl+` 打开sublime命令行窗口,执行命令view.run_command(“命令名”)即可运行。
- 如果要绑定菜单,在命令文件同级目录下,新建文本Main.sublime-menu,文本内容如下:
[
{
"id": "tools",
"children": [
{
"id": "CustomTools",
"caption": "自定义工具",
"children":[
{
"caption": "文本去重",
"id": "duplicatetextremover",
"command": "duplicatetextremover"
},
{
"caption": "转换为fontforge选择语句",
"id": "convert2unicode",
"command": "convert2unicode"
}
]
}
]
}
]
- 如果菜单没出来,可以重启sublime试试, 如果代码有问题,菜单会置灰不可用。
示例脚本
- 字符串去重
import sublime
import sublime_plugin
class duplicatetextremoverCommand(sublime_plugin.TextCommand):
def run(self, edit):
endPoint = self.view.size()
alltext = self.view.substr(sublime.Region(0, endPoint))
tempText = ""
for x in alltext:
if x not in tempText and x != "\n":
tempText += x
pass
self.view.insert(edit, endPoint, "\n\n去重结果:\n" + tempText)
- 转换为fontforge选择语句
import sublime
import sublime_plugin
class convert2unicodeCommand(sublime_plugin.TextCommand):
def run(self, edit):
endPoint = self.view.size()
alltext = self.view.substr(sublime.Region(0, endPoint))
tempText = ""
for x in alltext:
if x not in tempText and x != "\n":
tempText += "SelectMore(" + hex(ord(x)) + ")" + "\n"
pass
tempText = tempText.rstrip('\n')
self.view.insert(edit, endPoint, "\n\n转换结果:\n" + tempText)
FontForge精简字体
以上操作都是为了这一步,太复杂的不会搞,还是在FontForge里用图形化界面操作方便些,具体操作步骤:
1.使用FontForge打开字体文件后,点击“File-Execute Scripte”菜单;
2.在弹窗中粘贴在sublime中得到的命令文本,点击ok执行后FontForge会选中对应的字形;
3.点击“Edit-Select-Invert Selection”菜单进行反选;
4.点击“Encoding-Detach & Remove Glyphs”删除字形;
5.点击“Encoding-Remove Unused Slots”;
6.点击“File-Generate Fonts”生成字体文件即可;