interpolate_layout: allow to pass DesignSpaceDocument as input, like varLib.build

This commit is contained in:
Cosimo Lupo 2018-12-20 13:00:45 +00:00
parent 6f317aa362
commit 9b4509496f
No known key found for this signature in database
GPG Key ID: 59D54DB0C9976482

View File

@ -4,7 +4,7 @@ Interpolate OpenType Layout tables (GDEF / GPOS / GSUB).
from __future__ import print_function, division, absolute_import
from fontTools.misc.py23 import *
from fontTools.ttLib import TTFont
from fontTools.varLib import models, VarLibError, load_designspace
from fontTools.varLib import models, VarLibError, load_designspace, load_masters
from fontTools.varLib.merger import InstancerMerger
import os.path
import logging
@ -13,7 +13,7 @@ from pprint import pformat
log = logging.getLogger("fontTools.varLib.interpolate_layout")
def interpolate_layout(designspace_filename, loc, master_finder=lambda s:s, mapped=False):
def interpolate_layout(designspace, loc, master_finder=lambda s:s, mapped=False):
"""
Interpolate GPOS from a designspace file and location.
@ -26,18 +26,18 @@ def interpolate_layout(designspace_filename, loc, master_finder=lambda s:s, mapp
it is assumed that location is in designspace's internal space and
no mapping is performed.
"""
ds = load_designspace(designspace_filename)
if hasattr(designspace, "sources"): # Assume a DesignspaceDocument
pass
else: # Assume a file path
from fontTools.designspaceLib import DesignSpaceDocument
designspace = DesignSpaceDocument.fromfile(designspace)
ds = load_designspace(designspace)
log.info("Building interpolated font")
log.info("Loading master fonts")
basedir = os.path.dirname(designspace_filename)
master_ttfs = [
master_finder(os.path.join(basedir, m.filename)) for m in ds.masters
]
master_fonts = [TTFont(ttf_path) for ttf_path in master_ttfs]
#font = master_fonts[ds.base_idx]
font = TTFont(master_ttfs[ds.base_idx])
log.info("Loading master fonts")
master_fonts = load_masters(designspace, master_finder)
font = master_fonts[ds.base_idx].copy()
log.info("Location: %s", pformat(loc))
if not mapped: