Skip to content

Commit

Permalink
implement building GSUB FeatureVariations from DS rules
Browse files Browse the repository at this point in the history
Fixes #1176
  • Loading branch information
anthrotype committed Sep 14, 2018
1 parent 26ddbcf commit 9f18570
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions Lib/fontTools/varLib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
from fontTools.varLib.merger import VariationMerger, _all_equal
from fontTools.varLib.mvar import MVAR_ENTRIES
from fontTools.varLib.iup import iup_delta_optimize
from fontTools.varLib.featureVars import addFeatureVariations
from fontTools.designspaceLib import DesignSpaceDocument, AxisDescriptor
from collections import OrderedDict, namedtuple
import os.path
Expand Down Expand Up @@ -567,6 +568,38 @@ def _merge_OTL(font, model, master_fonts, axisTags):
font['GPOS'].table.remap_device_varidxes(varidx_map)


def _add_GSUB_feature_variations(font, axes, internal_axis_supports, rules):

def normalize(name, value):
return models.normalizeLocation(
{name: value}, internal_axis_supports
)[name]

log.info("Generating GSUB FeatureVariations")

axis_tags = {name: axis.tag for name, axis in axes.items()}

conditional_subs = []
for rule in rules:

region = []
for conditions in rule.conditionSets:
space = {}
for condition in conditions:
axis_name = condition["name"]
minimum = normalize(axis_name, condition["minimum"])
maximum = normalize(axis_name, condition["maximum"])
tag = axis_tags[axis_name]
space[tag] = (minimum, maximum)
region.append(space)

subs = {k: v for k, v in rule.subs}

conditional_subs.append((region, subs))

addFeatureVariations(font, conditional_subs)


_DesignSpaceData = namedtuple(
"_DesignSpaceData",
[
Expand Down Expand Up @@ -713,6 +746,8 @@ def build(designspace_filename, master_finder=lambda s:s, exclude=[], optimize=T
_add_gvar(vf, model, master_fonts, optimize=optimize)
if 'cvar' not in exclude and 'glyf' in vf:
_merge_TTHinting(vf, model, master_fonts)
if 'GSUB' not in exclude and ds.rules:
_add_GSUB_feature_variations(vf, ds.axes, ds.internal_axis_supports, ds.rules)

for tag in exclude:
if tag in vf:
Expand Down

0 comments on commit 9f18570

Please sign in to comment.