[instancer.featureVars] Combine two functions

Fold _limitFeatureVariationRecord() into
_instantiateFeatureVariationRecord().
This commit is contained in:
Behdad Esfahbod 2022-11-03 14:22:02 -06:00
parent 6e156a7f13
commit ecfcdffe9f

View File

@ -48,6 +48,7 @@ def _instantiateFeatureVariationRecord(
record, recIdx, axisLimits, fvarAxes, axisIndexMap record, recIdx, axisLimits, fvarAxes, axisIndexMap
): ):
applies = True applies = True
shouldKeep = False
newConditions = [] newConditions = []
from fontTools.varLib.instancer import NormalizedAxisTriple from fontTools.varLib.instancer import NormalizedAxisTriple
default_triple = NormalizedAxisTriple(-1, 0, +1) default_triple = NormalizedAxisTriple(-1, 0, +1)
@ -69,7 +70,23 @@ def _instantiateFeatureVariationRecord(
if axisTag in axisIndexMap: if axisTag in axisIndexMap:
# remap axis index # remap axis index
condition.AxisIndex = axisIndexMap[axisTag] condition.AxisIndex = axisIndexMap[axisTag]
newConditions.append(condition)
# remap condition limits
newRange = _limitFeatureVariationConditionRange(condition, triple)
if newRange:
# keep condition with updated limits
minimum, maximum = newRange
condition.FilterRangeMinValue = minimum
condition.FilterRangeMaxValue = maximum
shouldKeep = True
if minimum != -1 or maximum != +1:
newConditions.append(condition)
else:
# condition out of range, remove entire record
newConditions = None
break
else: else:
log.warning( log.warning(
"Condition table {0} of FeatureVariationRecord {1} has " "Condition table {0} of FeatureVariationRecord {1} has "
@ -78,7 +95,7 @@ def _instantiateFeatureVariationRecord(
applies = False applies = False
newConditions.append(condition) newConditions.append(condition)
if newConditions: if newConditions is not None and shouldKeep:
record.ConditionSet.ConditionTable = newConditions record.ConditionSet.ConditionTable = newConditions
shouldKeep = True shouldKeep = True
else: else:
@ -87,35 +104,6 @@ def _instantiateFeatureVariationRecord(
return applies, shouldKeep return applies, shouldKeep
def _limitFeatureVariationRecord(record, axisLimits, axisOrder):
newConditions = []
for condition in record.ConditionSet.ConditionTable:
if condition.Format == 1:
axisIdx = condition.AxisIndex
axisTag = axisOrder[axisIdx]
if axisTag in axisLimits:
axisLimit = axisLimits[axisTag]
newRange = _limitFeatureVariationConditionRange(condition, axisLimit)
if newRange:
# keep condition with updated limits
minimum, maximum = newRange
condition.FilterRangeMinValue = minimum
condition.FilterRangeMaxValue = maximum
if minimum != -1 or maximum != +1:
newConditions.append(condition)
else:
# condition out of range, remove entire record
newConditions = None
break
else:
newConditions.append(condition)
else:
newConditions.append(condition)
record.ConditionSet.ConditionTable = newConditions
return newConditions is not None
def _instantiateFeatureVariations(table, fvarAxes, axisLimits): def _instantiateFeatureVariations(table, fvarAxes, axisLimits):
pinnedAxes = set(axisLimits.pinnedLocation()) pinnedAxes = set(axisLimits.pinnedLocation())
axisOrder = [axis.axisTag for axis in fvarAxes if axis.axisTag not in pinnedAxes] axisOrder = [axis.axisTag for axis in fvarAxes if axis.axisTag not in pinnedAxes]
@ -129,8 +117,6 @@ def _instantiateFeatureVariations(table, fvarAxes, axisLimits):
applies, shouldKeep = _instantiateFeatureVariationRecord( applies, shouldKeep = _instantiateFeatureVariationRecord(
record, i, axisLimits, fvarAxes, axisIndexMap record, i, axisLimits, fvarAxes, axisIndexMap
) )
if shouldKeep:
shouldKeep = _limitFeatureVariationRecord(record, axisLimits, axisOrder)
if shouldKeep and _featureVariationRecordIsUnique(record, uniqueRecords): if shouldKeep and _featureVariationRecordIsUnique(record, uniqueRecords):
newRecords.append(record) newRecords.append(record)