[avar2] Add compile test
This commit is contained in:
parent
85036d5d83
commit
1deed38b8d
@ -52,6 +52,7 @@ class table__a_v_a_r(BaseTTXConverter):
|
||||
axisTags = [axis.axisTag for axis in ttFont["fvar"].axes]
|
||||
if not hasattr(self, "table"):
|
||||
self.table = otTables.avar()
|
||||
if not hasattr(self.table, "Reserved"):
|
||||
self.table.Reserved = 0
|
||||
self.table.Version = (getattr(self, "majorVersion", 1) << 16) | getattr(
|
||||
self, "minorVersion", 0
|
||||
@ -111,6 +112,7 @@ class table__a_v_a_r(BaseTTXConverter):
|
||||
def fromXML(self, name, attrs, content, ttFont):
|
||||
if not hasattr(self, "table"):
|
||||
self.table = otTables.avar()
|
||||
if not hasattr(self.table, "Reserved"):
|
||||
self.table.Reserved = 0
|
||||
if name == "version":
|
||||
self.majorVersion = safeEval(attrs["major"])
|
||||
|
@ -2,8 +2,11 @@ from fontTools.misc.testTools import parseXML
|
||||
from fontTools.misc.textTools import deHexStr
|
||||
from fontTools.misc.xmlWriter import XMLWriter
|
||||
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._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
|
||||
import unittest
|
||||
|
||||
@ -95,6 +98,82 @@ class AxisVariationTableTest(unittest.TestCase):
|
||||
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__":
|
||||
import sys
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user