跳转到主要内容

从Glyphs源文件 (.glyphs) 到UFOs的桥梁

项目描述

CI Build Status PyPI Version Codecov Join the chat at https://gitter.im/fonttools-dev/glyphsLib

glyphsLib

这个Python库提供从Glyphs源文件 (.glyphs) 到UFOs和Designspace文件的桥梁,通过defcondesignspaceLib

转换的主要方法位于__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之间来回转换

  1. 您可以使用ufo2glyphsglyphs2ufo命令行脚本来在源文件之间进行往返。默认情况下,脚本会尽可能保留尽可能多的元数据。

    # 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
  2. 没有设计空间文件,例如使用来自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")

    以下是生成的glyphs文件

  3. 使用设计空间,使用来自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文件

  4. 在两种程序性情况下,如果您在用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包索引。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

glyphslib-6.9.0.tar.gz (25.9 MB 查看哈希值)

上传时间

构建分布

glyphsLib-6.9.0-py3-none-any.whl (896.8 kB 查看哈希值)

上传时间 Python 3

由以下支持