从Glyphs源文件 (.glyphs) 到UFOs的桥梁
项目描述
glyphsLib
这个Python库提供从Glyphs源文件 (.glyphs) 到UFOs和Designspace文件的桥梁,通过defcon和designspaceLib。
转换的主要方法位于__init__.py中。如果需要,可以访问中间数据而无需实际写入UFOs。
编写和返回UFOs
以下代码将把外星飞船和Designspace文件写入磁盘。
import glyphsLib
master_dir = "master_ufos"
ufos, designspace_path = glyphsLib.build_masters("MyFont.glyphs", master_dir)
如果您想插值实例,请使用fontmake。在处理Glyphs文件时,它会在幕后使用这个库。
加载UFO对象而不写入
import glyphsLib
ufos = glyphsLib.load_to_ufos("MyFont.glyphs")
以Python对象的形式读取和写入Glyphs数据
from glyphsLib import GSFont
font = GSFont(glyphs_file)
font.save(glyphs_file)
glyphsLib.classes模块旨在提供与Glyphs.app的Python脚本API类似的接口。
请注意,目前可能并非所有类和方法都已完全实现。我们尽力保持最新,但如果您发现缺少某些内容或功能不符合预期,请提出问题。
在UFO和Glyphs之间来回转换
您可以使用ufo2glyphs和glyphs2ufo命令行脚本来在源文件之间进行往返。默认情况下,脚本会尽可能保留尽可能多的元数据。
# Generate master UFOs and Designspace file glyphs2ufo Example.glyphs # Go back ufo2glyphs Example.designspace # You can also combine single UFOs into a Glyphs source file. ufo2glyphs Example-Regular.ufo Example-Bold.ufo
没有设计空间文件,例如使用来自Black[Foundry]的Inria字体
import glob from defcon import Font from glyphsLib import to_glyphs ufos = [Font(path) for path in glob.glob("*Italic.ufo")] # Sort the UFOs because glyphsLib will create masters in the same order ufos = sorted(ufos, key=lambda ufo: ufo.info.openTypeOS2WeightClass) font = to_glyphs(ufos) font.save("InriaSansItalic.glyphs")
使用设计空间,使用来自Production Type的Spectral
import glob from fontTools.designspaceLib import DesignSpaceDocument from glyphsLib import to_glyphs doc = DesignSpaceDocument() doc.read("spectral-build-roman.designspace") font = to_glyphs(doc) font.save("SpectralRoman.glyphs")
在两种程序性情况下,如果您在用Glyphs修改文件后打算返回UFO,应使用minimize_ufo_diffs参数来最小化在来回转换后在git中显示的差异量。为此,glyphsLib将在各种userData字段中添加一些账务值。例如,它会尝试记住哪个GSClass来自groups.plist或来自特性文件。
对于想要执行Glyphs->UFO->Glyphs的人,也存在相同的选项:minimize_glyphs_diffs,它将在UFO lib中添加一些账务数据。例如,它会保留Glyphs层的相同UUID,因此需要在UFO中存储这些层UUID。
import glob
import os
from fontTools.designspaceLib import DesignSpaceDocument
from glyphsLib import to_glyphs, to_designspace, GSFont
doc = DesignSpaceDocument()
doc.read("spectral-build-roman.designspace")
font = to_glyphs(doc, minimize_ufo_diffs=True)
doc2 = to_designspace(font, propagate_anchors=False)
# UFOs are in memory only, attached to the doc via `sources`
# Writing doc2 over the original doc should generate very few git diffs (ideally none)
doc2.write(doc.path)
for source in doc2.sources:
path = os.path.join(os.path.dirname(doc.path), source.filename)
# You will want to use ufoNormalizer after
source.font.save(path)
font = GSFont("SpectralRoman.glyphs")
doc = to_designspace(font, minimize_glyphs_diffs=True, propagate_anchors=False)
font2 = to_glyphs(doc)
# Writing font2 over font should generate very few git diffs (ideally none):
font2.save(font.filepath)
实际上,对于一些实际上并不重要的事情,总会有一些差异,比如可选内容被添加/删除、空格更改或内容被重新排序等。
制作一个版本
使用git tag -a创建一个新的注解标签,或者如果您更喜欢,使用git tag -s创建一个GPG签名的注解标签。
使用以“v”开头后跟三个MAJOR.MINOR.PATCH数字命名新标签,就像语义版本一样。查看现有标签以获取示例。
在标签消息中写入一些简短的发布说明,描述自上次标签以来的更改。
最后,将标签推送到远程仓库(例如,假设您的上游名为origin)
$ git push origin v0.4.3
如果所有测试都成功通过,这将触发CI自动构建分发包并将它们上传到Python包索引。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
glyphslib-6.9.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 253ea334ac46a7a80209e4307314ea5d2738eed834e63db8bd1c76b6356fcf12 |
|
MD5 | 2ec49f753dee9744678dae4e48fbb735 |
|
BLAKE2b-256 | f15d4f8b3b16cbb5c46dfa3449298222ec9f28e193b5abdf096f87c0a3912527 |