[avar2] Add compile test

This commit is contained in:
Behdad Esfahbod 2023-03-14 13:46:39 -06:00
parent 85036d5d83
commit 1deed38b8d
2 changed files with 81 additions and 0 deletions

View File

@ -52,6 +52,7 @@ class table__a_v_a_r(BaseTTXConverter):
axisTags = [axis.axisTag for axis in ttFont["fvar"].axes] axisTags = [axis.axisTag for axis in ttFont["fvar"].axes]
if not hasattr(self, "table"): if not hasattr(self, "table"):
self.table = otTables.avar() self.table = otTables.avar()
if not hasattr(self.table, "Reserved"):
self.table.Reserved = 0 self.table.Reserved = 0
self.table.Version = (getattr(self, "majorVersion", 1) << 16) | getattr( self.table.Version = (getattr(self, "majorVersion", 1) << 16) | getattr(
self, "minorVersion", 0 self, "minorVersion", 0
@ -111,6 +112,7 @@ class table__a_v_a_r(BaseTTXConverter):
def fromXML(self, name, attrs, content, ttFont): def fromXML(self, name, attrs, content, ttFont):
if not hasattr(self, "table"): if not hasattr(self, "table"):
self.table = otTables.avar() self.table = otTables.avar()
if not hasattr(self.table, "Reserved"):
self.table.Reserved = 0 self.table.Reserved = 0
if name == "version": if name == "version":
self.majorVersion = safeEval(attrs["major"]) self.majorVersion = safeEval(attrs["major"])

View File

@ -2,8 +2,11 @@ from fontTools.misc.testTools import parseXML
from fontTools.misc.textTools import deHexStr from fontTools.misc.textTools import deHexStr
from fontTools.misc.xmlWriter import XMLWriter from fontTools.misc.xmlWriter import XMLWriter
from fontTools.ttLib import TTFont, TTLibError from fontTools.ttLib import TTFont, TTLibError
import fontTools.ttLib.tables.otTables as otTables
from fontTools.ttLib.tables._a_v_a_r import table__a_v_a_r from fontTools.ttLib.tables._a_v_a_r import table__a_v_a_r
from fontTools.ttLib.tables._f_v_a_r import table__f_v_a_r, Axis from fontTools.ttLib.tables._f_v_a_r import table__f_v_a_r, Axis
import fontTools.varLib.models as models
import fontTools.varLib.varStore as varStore
from io import BytesIO from io import BytesIO
import unittest import unittest
@ -95,6 +98,82 @@ class AxisVariationTableTest(unittest.TestCase):
return [line.strip() for line in content.splitlines()][1:] return [line.strip() for line in content.splitlines()][1:]
class Avar2Test(unittest.TestCase):
def test(self):
axisTags = ["wght", "wdth"]
fvar = table__f_v_a_r()
for tag in axisTags:
axis = Axis()
axis.axisTag = tag
fvar.axes.append(axis)
master_locations_normalized = [
{},
{"wght": 1, "wdth": -1},
]
data = [
{},
{"wdth": -0.8},
]
model = models.VariationModel(master_locations_normalized, axisTags)
store_builder = varStore.OnlineVarStoreBuilder(axisTags)
store_builder.setModel(model)
varIdxes = {}
for axis in axisTags:
masters = [m.get(axis, 0) * (1 << 14) for m in data]
varIdxes[axis] = store_builder.storeMasters(masters)[1]
store = store_builder.finish()
mapping = store.optimize()
varIdxes = {axis: mapping[value] for axis, value in varIdxes.items()}
del model, store_builder, mapping
varIdxMap = otTables.DeltaSetIndexMap()
varIdxMap.mapping = []
for tag in axisTags:
varIdxMap.mapping.append(varIdxes[tag])
avar = table__a_v_a_r()
avar.segments["wght"] = {}
avar.segments["wdth"] = {-1.0: -1.0, 0.0: 0.0, 0.4: 0.5, 1.0: 1.0}
avar.majorVersion = 2
avar.table = otTables.avar()
avar.table.VarIdxMap = varIdxMap
avar.table.VarStore = store
font = TTFont()
font["fvar"] = fvar
font["avar"] = avar
b = BytesIO()
font.save(b)
b.seek(0)
font2 = TTFont(b)
assert font2["avar"].table.VarStore.VarRegionList.RegionAxisCount == 2
assert font2["avar"].table.VarStore.VarRegionList.RegionCount == 1
xml1 = BytesIO()
writer = XMLWriter(xml1)
font["avar"].toXML(writer, font)
xml2 = BytesIO()
writer = XMLWriter(xml2)
font2["avar"].toXML(writer, font2)
# We can't compare because VarStore goes through transformation during compile :(
# assert xml1.getvalue() == xml2.getvalue(), (xml1.getvalue(), xml2.getvalue())
avar = table__a_v_a_r()
xml = b"".join(xml2.getvalue().splitlines()[1:])
for name, attrs, content in parseXML(xml):
avar.fromXML(name, attrs, content, ttFont=TTFont())
assert avar.table.VarStore.VarRegionList.RegionAxisCount == 2
assert avar.table.VarStore.VarRegionList.RegionCount == 1
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys