[varLib] Update tests for VarStore optimization
Also, don't emit GDEF if VarStore is empty.
This commit is contained in:
parent
398f7169c8
commit
1adf7fd2c0
@ -513,7 +513,11 @@ def _merge_OTL(font, model, master_fonts, axisTags):
|
|||||||
merger = VariationMerger(model, axisTags, font)
|
merger = VariationMerger(model, axisTags, font)
|
||||||
|
|
||||||
merger.mergeTables(font, master_fonts, ['GPOS'])
|
merger.mergeTables(font, master_fonts, ['GPOS'])
|
||||||
|
# TODO Merge GSUB
|
||||||
|
# TODO Merge GDEF itself!
|
||||||
store = merger.store_builder.finish()
|
store = merger.store_builder.finish()
|
||||||
|
if not store.VarData:
|
||||||
|
return
|
||||||
try:
|
try:
|
||||||
GDEF = font['GDEF'].table
|
GDEF = font['GDEF'].table
|
||||||
assert GDEF.Version <= 0x00010002
|
assert GDEF.Version <= 0x00010002
|
||||||
@ -527,6 +531,7 @@ def _merge_OTL(font, model, master_fonts, axisTags):
|
|||||||
# Optimize
|
# Optimize
|
||||||
varidx_map = store.optimize()
|
varidx_map = store.optimize()
|
||||||
GDEF.remap_device_varidxes(varidx_map)
|
GDEF.remap_device_varidxes(varidx_map)
|
||||||
|
if 'GPOS' in font:
|
||||||
font['GPOS'].table.remap_device_varidxes(varidx_map)
|
font['GPOS'].table.remap_device_varidxes(varidx_map)
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,14 +22,24 @@ class OnlineVarStoreBuilder(object):
|
|||||||
self._regionMap = {}
|
self._regionMap = {}
|
||||||
self._regionList = buildVarRegionList([], axisTags)
|
self._regionList = buildVarRegionList([], axisTags)
|
||||||
self._store = buildVarStore(self._regionList, [])
|
self._store = buildVarStore(self._regionList, [])
|
||||||
|
self._data = None
|
||||||
|
|
||||||
def setModel(self, model):
|
def setModel(self, model):
|
||||||
self._model = model
|
self._model = model
|
||||||
|
|
||||||
|
def finish(self, optimize=True):
|
||||||
|
self._regionList.RegionCount = len(self._regionList.Region)
|
||||||
|
self._store.VarDataCount = len(self._store.VarData)
|
||||||
|
for data in self._store.VarData:
|
||||||
|
data.ItemCount = len(data.Item)
|
||||||
|
VarData_CalculateNumShorts(data, optimize)
|
||||||
|
return self._store
|
||||||
|
|
||||||
|
def _add_VarData(self):
|
||||||
regionMap = self._regionMap
|
regionMap = self._regionMap
|
||||||
regionList = self._regionList
|
regionList = self._regionList
|
||||||
|
|
||||||
regions = model.supports[1:]
|
regions = self._model.supports[1:]
|
||||||
regionIndices = []
|
regionIndices = []
|
||||||
for region in regions:
|
for region in regions:
|
||||||
key = _getLocationKey(region)
|
key = _getLocationKey(region)
|
||||||
@ -44,21 +54,15 @@ class OnlineVarStoreBuilder(object):
|
|||||||
self._outer = len(self._store.VarData)
|
self._outer = len(self._store.VarData)
|
||||||
self._store.VarData.append(data)
|
self._store.VarData.append(data)
|
||||||
|
|
||||||
def finish(self, optimize=True):
|
|
||||||
self._regionList.RegionCount = len(self._regionList.Region)
|
|
||||||
self._store.VarDataCount = len(self._store.VarData)
|
|
||||||
for data in self._store.VarData:
|
|
||||||
data.ItemCount = len(data.Item)
|
|
||||||
VarData_CalculateNumShorts(data, optimize)
|
|
||||||
return self._store
|
|
||||||
|
|
||||||
def storeMasters(self, master_values):
|
def storeMasters(self, master_values):
|
||||||
|
if not self._data:
|
||||||
|
self._add_VarData()
|
||||||
deltas = [round(d) for d in self._model.getDeltas(master_values)]
|
deltas = [round(d) for d in self._model.getDeltas(master_values)]
|
||||||
base = deltas.pop(0)
|
base = deltas.pop(0)
|
||||||
inner = len(self._data.Item)
|
inner = len(self._data.Item)
|
||||||
if inner == 0xFFFF:
|
if inner == 0xFFFF:
|
||||||
# Full array. Start new one.
|
# Full array. Start new one.
|
||||||
self.setModel(self._model)
|
self._add_VarData()
|
||||||
return self.storeMasters(master_values)
|
return self.storeMasters(master_values)
|
||||||
self._data.Item.append(deltas)
|
self._data.Item.append(deltas)
|
||||||
return base, (self._outer << 16) + inner
|
return base, (self._outer << 16) + inner
|
||||||
|
@ -1,83 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.17">
|
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.17">
|
||||||
|
|
||||||
<GDEF>
|
|
||||||
<Version value="0x00010003"/>
|
|
||||||
<VarStore Format="1">
|
|
||||||
<Format value="1"/>
|
|
||||||
<VarRegionList>
|
|
||||||
<!-- RegionAxisCount=2 -->
|
|
||||||
<!-- RegionCount=5 -->
|
|
||||||
<Region index="0">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="-1.0"/>
|
|
||||||
<PeakCoord value="-1.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="0.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
<Region index="1">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="0.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
<Region index="2">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="0.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
<Region index="3">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="-1.0"/>
|
|
||||||
<PeakCoord value="-1.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
<Region index="4">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
</VarRegionList>
|
|
||||||
<!-- VarDataCount=1 -->
|
|
||||||
<VarData index="0">
|
|
||||||
<!-- ItemCount=0 -->
|
|
||||||
<NumShorts value="0"/>
|
|
||||||
<!-- VarRegionCount=0 -->
|
|
||||||
</VarData>
|
|
||||||
</VarStore>
|
|
||||||
</GDEF>
|
|
||||||
|
|
||||||
<HVAR>
|
<HVAR>
|
||||||
<Version value="0x00010000"/>
|
<Version value="0x00010000"/>
|
||||||
<VarStore Format="1">
|
<VarStore Format="1">
|
||||||
|
@ -1,30 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.14">
|
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.14">
|
||||||
|
|
||||||
<GDEF>
|
|
||||||
<Version value="0x00010003"/>
|
|
||||||
<VarStore Format="1">
|
|
||||||
<Format value="1"/>
|
|
||||||
<VarRegionList>
|
|
||||||
<!-- RegionAxisCount=1 -->
|
|
||||||
<!-- RegionCount=1 -->
|
|
||||||
<Region index="0">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
</VarRegionList>
|
|
||||||
<!-- VarDataCount=1 -->
|
|
||||||
<VarData index="0">
|
|
||||||
<!-- ItemCount=0 -->
|
|
||||||
<NumShorts value="0"/>
|
|
||||||
<!-- VarRegionCount=0 -->
|
|
||||||
</VarData>
|
|
||||||
</VarStore>
|
|
||||||
</GDEF>
|
|
||||||
|
|
||||||
<HVAR>
|
<HVAR>
|
||||||
<Version value="0x00010000"/>
|
<Version value="0x00010000"/>
|
||||||
<VarStore Format="1">
|
<VarStore Format="1">
|
||||||
@ -92,17 +68,17 @@
|
|||||||
<NumShorts value="0"/>
|
<NumShorts value="0"/>
|
||||||
<!-- VarRegionCount=1 -->
|
<!-- VarRegionCount=1 -->
|
||||||
<VarRegionIndex index="0" value="0"/>
|
<VarRegionIndex index="0" value="0"/>
|
||||||
<Item index="0" value="[22]"/>
|
<Item index="0" value="[13]"/>
|
||||||
<Item index="1" value="[13]"/>
|
<Item index="1" value="[22]"/>
|
||||||
</VarData>
|
</VarData>
|
||||||
</VarStore>
|
</VarStore>
|
||||||
<ValueRecord index="0">
|
<ValueRecord index="0">
|
||||||
<ValueTag value="stro"/>
|
<ValueTag value="stro"/>
|
||||||
<VarIdx value="1"/>
|
<VarIdx value="0"/>
|
||||||
</ValueRecord>
|
</ValueRecord>
|
||||||
<ValueRecord index="1">
|
<ValueRecord index="1">
|
||||||
<ValueTag value="xhgt"/>
|
<ValueTag value="xhgt"/>
|
||||||
<VarIdx value="0"/>
|
<VarIdx value="1"/>
|
||||||
</ValueRecord>
|
</ValueRecord>
|
||||||
</MVAR>
|
</MVAR>
|
||||||
|
|
||||||
|
@ -616,83 +616,6 @@
|
|||||||
</extraNames>
|
</extraNames>
|
||||||
</post>
|
</post>
|
||||||
|
|
||||||
<GDEF>
|
|
||||||
<Version value="0x00010003"/>
|
|
||||||
<VarStore Format="1">
|
|
||||||
<Format value="1"/>
|
|
||||||
<VarRegionList>
|
|
||||||
<!-- RegionAxisCount=2 -->
|
|
||||||
<!-- RegionCount=5 -->
|
|
||||||
<Region index="0">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="-1.0"/>
|
|
||||||
<PeakCoord value="-1.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="0.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
<Region index="1">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="0.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
<Region index="2">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="0.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
<Region index="3">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="-1.0"/>
|
|
||||||
<PeakCoord value="-1.0"/>
|
|
||||||
<EndCoord value="0.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
<Region index="4">
|
|
||||||
<VarRegionAxis index="0">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
<VarRegionAxis index="1">
|
|
||||||
<StartCoord value="0.0"/>
|
|
||||||
<PeakCoord value="1.0"/>
|
|
||||||
<EndCoord value="1.0"/>
|
|
||||||
</VarRegionAxis>
|
|
||||||
</Region>
|
|
||||||
</VarRegionList>
|
|
||||||
<!-- VarDataCount=1 -->
|
|
||||||
<VarData index="0">
|
|
||||||
<!-- ItemCount=0 -->
|
|
||||||
<NumShorts value="0"/>
|
|
||||||
<!-- VarRegionCount=0 -->
|
|
||||||
</VarData>
|
|
||||||
</VarStore>
|
|
||||||
</GDEF>
|
|
||||||
|
|
||||||
<HVAR>
|
<HVAR>
|
||||||
<Version value="0x00010000"/>
|
<Version value="0x00010000"/>
|
||||||
<VarStore Format="1">
|
<VarStore Format="1">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user