instancer_test: add tests for instatiating GDEF ligature carets
This commit is contained in:
parent
dc14a50029
commit
9aa5407f31
@ -1,11 +1,17 @@
|
|||||||
from __future__ import print_function, division, absolute_import
|
from __future__ import print_function, division, absolute_import
|
||||||
from fontTools.misc.py23 import *
|
from fontTools.misc.py23 import *
|
||||||
from fontTools import ttLib
|
from fontTools import ttLib
|
||||||
|
from fontTools import designspaceLib
|
||||||
|
from fontTools.feaLib.builder import addOpenTypeFeaturesFromString
|
||||||
from fontTools.ttLib.tables import _f_v_a_r
|
from fontTools.ttLib.tables import _f_v_a_r
|
||||||
from fontTools.ttLib.tables.TupleVariation import TupleVariation
|
from fontTools.ttLib.tables.TupleVariation import TupleVariation
|
||||||
|
from fontTools import varLib
|
||||||
from fontTools.varLib import instancer
|
from fontTools.varLib import instancer
|
||||||
from fontTools.varLib.mvar import MVAR_ENTRIES
|
from fontTools.varLib.mvar import MVAR_ENTRIES
|
||||||
from fontTools.varLib import builder
|
from fontTools.varLib import builder
|
||||||
|
from fontTools.varLib import models
|
||||||
|
import collections
|
||||||
|
from copy import deepcopy
|
||||||
import os
|
import os
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@ -484,3 +490,122 @@ class TupleVarStoreAdapterTest(object):
|
|||||||
]
|
]
|
||||||
assert itemVarStore2.VarData[1].VarRegionIndex == [3, 4, 5, 6]
|
assert itemVarStore2.VarData[1].VarRegionIndex == [3, 4, 5, 6]
|
||||||
assert itemVarStore2.VarData[1].Item == [[5, -15, 25, -35], [45, -55, 65, -75]]
|
assert itemVarStore2.VarData[1].Item == [[5, -15, 25, -35], [45, -55, 65, -75]]
|
||||||
|
|
||||||
|
|
||||||
|
def makeTTFont(glyphOrder, features):
|
||||||
|
font = ttLib.TTFont()
|
||||||
|
font.setGlyphOrder(glyphOrder)
|
||||||
|
addOpenTypeFeaturesFromString(font, features)
|
||||||
|
font["name"] = ttLib.newTable("name")
|
||||||
|
return font
|
||||||
|
|
||||||
|
|
||||||
|
def _makeDSAxesDict(axes):
|
||||||
|
dsAxes = collections.OrderedDict()
|
||||||
|
for axisTag, axisValues in axes:
|
||||||
|
axis = designspaceLib.AxisDescriptor()
|
||||||
|
axis.name = axis.tag = axis.labelNames["en"] = axisTag
|
||||||
|
axis.minimum, axis.default, axis.maximum = axisValues
|
||||||
|
dsAxes[axis.tag] = axis
|
||||||
|
return dsAxes
|
||||||
|
|
||||||
|
|
||||||
|
def makeVariableFont(masters, baseIndex, axes, masterLocations):
|
||||||
|
vf = deepcopy(masters[baseIndex])
|
||||||
|
dsAxes = _makeDSAxesDict(axes)
|
||||||
|
fvar = varLib._add_fvar(vf, dsAxes, instances=())
|
||||||
|
axisTags = [axis.axisTag for axis in fvar.axes]
|
||||||
|
normalizedLocs = [models.normalizeLocation(m, dict(axes)) for m in masterLocations]
|
||||||
|
model = models.VariationModel(normalizedLocs, axisOrder=axisTags)
|
||||||
|
varLib._merge_OTL(vf, model, masters, axisTags)
|
||||||
|
return vf
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def varfontGDEF():
|
||||||
|
glyphOrder = [".notdef", "f", "i", "f_i"]
|
||||||
|
masters = []
|
||||||
|
masterLocations = []
|
||||||
|
weight = v = 100
|
||||||
|
for _ in range(3):
|
||||||
|
width = 50
|
||||||
|
for _ in range(3):
|
||||||
|
master = makeTTFont(
|
||||||
|
glyphOrder,
|
||||||
|
features=(
|
||||||
|
"feature liga { sub f i by f_i;} liga;"
|
||||||
|
"table GDEF { LigatureCaretByPos f_i %d; } GDEF;" % v
|
||||||
|
),
|
||||||
|
)
|
||||||
|
masters.append(master)
|
||||||
|
masterLocations.append({"wght": weight, "wdth": width})
|
||||||
|
width += 50
|
||||||
|
v += 10
|
||||||
|
weight += 300
|
||||||
|
v += 30
|
||||||
|
axes = [("wght", (100, 400, 700)), ("wdth", (50, 100, 150))]
|
||||||
|
baseIndex = 4 # index of base master (wght=400, wdth=100)
|
||||||
|
vf = makeVariableFont(masters, baseIndex, axes, masterLocations)
|
||||||
|
return vf
|
||||||
|
|
||||||
|
|
||||||
|
class InstantiateOTLTest(object):
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"location, expected",
|
||||||
|
[
|
||||||
|
({"wght": -1.0}, 110), # -60
|
||||||
|
({"wght": 0}, 170),
|
||||||
|
({"wght": 0.5}, 200), # +30
|
||||||
|
({"wght": 1.0}, 230), # +60
|
||||||
|
({"wdth": -1.0}, 160), # -10
|
||||||
|
({"wdth": -0.3}, 167), # -3
|
||||||
|
({"wdth": 0}, 170),
|
||||||
|
({"wdth": 1.0}, 180), # +10
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_pin_and_drop_axis_GDEF(self, varfontGDEF, location, expected):
|
||||||
|
vf = varfontGDEF
|
||||||
|
assert "GDEF" in vf
|
||||||
|
|
||||||
|
instancer.instantiateOTL(vf, location)
|
||||||
|
|
||||||
|
assert "GDEF" in vf
|
||||||
|
gdef = vf["GDEF"].table
|
||||||
|
assert gdef.Version == 0x00010003
|
||||||
|
assert gdef.VarStore
|
||||||
|
assert gdef.LigCaretList
|
||||||
|
caretValue = gdef.LigCaretList.LigGlyph[0].CaretValue[0]
|
||||||
|
assert caretValue.Format == 3
|
||||||
|
assert hasattr(caretValue, "DeviceTable")
|
||||||
|
assert caretValue.DeviceTable.DeltaFormat == 0x8000
|
||||||
|
assert caretValue.Coordinate == expected
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"location, expected",
|
||||||
|
[
|
||||||
|
({"wght": -1.0, "wdth": -1.0}, 100), # -60 - 10
|
||||||
|
({"wght": -1.0, "wdth": 0.0}, 110), # -60
|
||||||
|
({"wght": -1.0, "wdth": 1.0}, 120), # -60 + 10
|
||||||
|
({"wght": 0.0, "wdth": -1.0}, 160), # -10
|
||||||
|
({"wght": 0.0, "wdth": 0.0}, 170),
|
||||||
|
({"wght": 0.0, "wdth": 1.0}, 180), # +10
|
||||||
|
({"wght": 1.0, "wdth": -1.0}, 220), # +60 - 10
|
||||||
|
({"wght": 1.0, "wdth": 0.0}, 230), # +60
|
||||||
|
({"wght": 1.0, "wdth": 1.0}, 240), # +60 + 10
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_full_instance_GDEF(self, varfontGDEF, location, expected):
|
||||||
|
vf = varfontGDEF
|
||||||
|
assert "GDEF" in vf
|
||||||
|
|
||||||
|
instancer.instantiateOTL(vf, location)
|
||||||
|
|
||||||
|
assert "GDEF" in vf
|
||||||
|
gdef = vf["GDEF"].table
|
||||||
|
assert gdef.Version == 0x00010000
|
||||||
|
assert not hasattr(gdef, "VarStore")
|
||||||
|
assert gdef.LigCaretList
|
||||||
|
caretValue = gdef.LigCaretList.LigGlyph[0].CaretValue[0]
|
||||||
|
assert caretValue.Format == 1
|
||||||
|
assert not hasattr(caretValue, "DeviceTable")
|
||||||
|
assert caretValue.Coordinate == expected
|
||||||
|
Loading…
x
Reference in New Issue
Block a user