Code clean-up of items pointed out in review.

re-named variables from snake-case to camel-case throughout functions, except for 'master_ttfs' (which is ugly when camel-cased, and is the lone snake-cased in other functions) and the function names (which follows the precedent set in almost all of the rest of the module).
This commit is contained in:
ReadRoberts 2019-03-26 13:24:35 -07:00
parent c06c5c5087
commit ff0716f7b5

View File

@ -464,81 +464,80 @@ def _merge_TTHinting(font, masterModel, master_ttfs, tolerance=0.5):
cvar.variations.append(var)
MetricsFields = namedtuple('MetricsFields',
['table_tag', 'metrics_tag', 'sb1', 'sb2', 'adv_mapping', 'vorig_mapping'])
['tableTag', 'metricsTag', 'sb1', 'sb2', 'advMapping', 'vOrigMapping'])
hvar_fields = MetricsFields(table_tag='HVAR', metrics_tag='hmtx', sb1='LsbMap',
sb2='RsbMap', adv_mapping='AdvWidthMap', vorig_mapping=None)
hvarFields = MetricsFields(tableTag='HVAR', metricsTag='hmtx', sb1='LsbMap',
sb2='RsbMap', advMapping='AdvWidthMap', vOrigMapping=None)
vvar_fields = MetricsFields(table_tag='VVAR', metrics_tag='vmtx', sb1='TsbMap',
sb2='BsbMap', adv_mapping='AdvHeightMap', vorig_mapping='VOrgMap')
vvarFields = MetricsFields(tableTag='VVAR', metricsTag='vmtx', sb1='TsbMap',
sb2='BsbMap', advMapping='AdvHeightMap', vOrigMapping='VOrgMap')
def _add_HVAR(font, masterModel, master_ttfs, axisTags):
_add_VHVAR(font, masterModel, master_ttfs, axisTags, hvar_fields)
_add_VHVAR(font, masterModel, master_ttfs, axisTags, hvarFields)
def _add_VVAR(font, masterModel, master_ttfs, axisTags):
_add_VHVAR(font, masterModel, master_ttfs, axisTags, vvar_fields)
_add_VHVAR(font, masterModel, master_ttfs, axisTags, vvarFields)
def _add_VHVAR(font, masterModel, master_ttfs, axisTags, tableFields):
def _add_VHVAR(font, masterModel, master_ttfs, axisTags, table_fields):
table_tag = table_fields.table_tag
assert table_tag not in font
log.info("Generating " + table_tag)
VHVAR = newTable(table_tag)
table_class = getattr(ot, table_tag)
tableTag = tableFields.tableTag
assert tableTag not in font
log.info("Generating " + tableTag)
VHVAR = newTable(tableTag)
table_class = getattr(ot, tableTag)
vhvar = VHVAR.table = table_class()
vhvar.Version = 0x00010000
glyphOrder = font.getGlyphOrder()
# Build list of source font advance widths for each glyph
metrics_tag = table_fields.metrics_tag
adv_metricses = [m[metrics_tag].metrics for m in master_ttfs]
metricsTag = tableFields.metricsTag
advMetricses = [m[metricsTag].metrics for m in master_ttfs]
# Build list of source font vertical origin coords for each glyph
if table_tag == 'VVAR' and 'VORG' in master_ttfs[0]:
v_orig_metricses = [m['VORG'].VOriginRecords for m in master_ttfs]
default_y_origs = [m['VORG'].defaultVertOriginY for m in master_ttfs]
v_orig_metricses = list(zip(v_orig_metricses, default_y_origs))
if tableTag == 'VVAR' and 'VORG' in master_ttfs[0]:
vOrigMetricses = [m['VORG'].VOriginRecords for m in master_ttfs]
defaultYOrigs = [m['VORG'].defaultVertOriginY for m in master_ttfs]
vOrigMetricses = list(zip(vOrigMetricses, defaultYOrigs))
else:
v_orig_metricses = None
vOrigMetricses = None
metricsStore, advanceMapping, vOrigMapping = _get_advance_metrics(font,
masterModel, master_ttfs, axisTags, glyphOrder, adv_metricses,
v_orig_metricses)
masterModel, master_ttfs, axisTags, glyphOrder, advMetricses,
vOrigMetricses)
vhvar.VarStore = metricsStore
if advanceMapping is None:
setattr(vhvar, table_fields.adv_mapping, None)
setattr(vhvar, tableFields.advMapping, None)
else:
setattr(vhvar, table_fields.adv_mapping, advanceMapping)
setattr(vhvar, tableFields.advMapping, advanceMapping)
if vOrigMapping is not None:
setattr(vhvar, table_fields.vorig_mapping, vOrigMapping)
setattr(vhvar, table_fields.sb1, None)
setattr(vhvar, table_fields.sb2, None)
setattr(vhvar, tableFields.vOrigMapping, vOrigMapping)
setattr(vhvar, tableFields.sb1, None)
setattr(vhvar, tableFields.sb2, None)
font[table_tag] = VHVAR
font[tableTag] = VHVAR
return
def _get_advance_metrics(font, masterModel, master_ttfs,
axisTags, glyphOrder, adv_metricses, v_orig_metricses=None):
axisTags, glyphOrder, advMetricses, vOrigMetricses=None):
vhAdvanceDeltasAndSupports = {}
vOrigDeltasAndSupports = {}
for glyph in glyphOrder:
vhAdvances = [metrics[glyph][0] if glyph in metrics else None for metrics in adv_metricses]
vhAdvances = [metrics[glyph][0] if glyph in metrics else None for metrics in advMetricses]
vhAdvanceDeltasAndSupports[glyph] = masterModel.getDeltasAndSupports(vhAdvances)
singleModel = models.allEqual(id(v[1]) for v in vhAdvanceDeltasAndSupports.values())
if v_orig_metricses:
if vOrigMetricses:
singleModel = False
for glyph in glyphOrder:
# We need to supply a vOrigs tuple with non-None default values
# for each glyph. v_orig_metricses contains values only for those
# for each glyph. vOrigMetricses contains values only for those
# glyphs which have a non-default vOrig.
vOrigs = [metrics[glyph] if glyph in metrics else defaultVOrig
for metrics, defaultVOrig in v_orig_metricses]
for metrics, defaultVOrig in vOrigMetricses]
vOrigDeltasAndSupports[glyph] = masterModel.getDeltasAndSupports(vOrigs)
directStore = None
@ -555,28 +554,28 @@ def _get_advance_metrics(font, masterModel, master_ttfs,
# Build optimized indirect mapping
storeBuilder = varStore.OnlineVarStoreBuilder(axisTags)
adv_mapping = {}
advMapping = {}
for glyphName in glyphOrder:
deltas, supports = vhAdvanceDeltasAndSupports[glyphName]
storeBuilder.setSupports(supports)
adv_mapping[glyphName] = storeBuilder.storeDeltas(deltas)
advMapping[glyphName] = storeBuilder.storeDeltas(deltas)
if v_orig_metricses:
v_orig_mapping = {}
if vOrigMetricses:
vOrigMap = {}
for glyphName in glyphOrder:
deltas, supports = vOrigDeltasAndSupports[glyphName]
storeBuilder.setSupports(supports)
v_orig_mapping[glyphName] = storeBuilder.storeDeltas(deltas)
vOrigMap[glyphName] = storeBuilder.storeDeltas(deltas)
indirectStore = storeBuilder.finish()
mapping2 = indirectStore.optimize()
adv_mapping = [mapping2[adv_mapping[g]] for g in glyphOrder]
advanceMapping = builder.buildVarIdxMap(adv_mapping, glyphOrder)
advMapping = [mapping2[advMapping[g]] for g in glyphOrder]
advanceMapping = builder.buildVarIdxMap(advMapping, glyphOrder)
if v_orig_metricses:
v_orig_mapping = [mapping2[v_orig_mapping[g]] for g in glyphOrder]
if vOrigMetricses:
vOrigMap = [mapping2[vOrigMap[g]] for g in glyphOrder]
use_direct = False
useDirect = False
vOrigMapping = None
if directStore:
# Compile both, see which is more compact
@ -590,19 +589,18 @@ def _get_advance_metrics(font, masterModel, master_ttfs,
advanceMapping.compile(writer, font)
indirectSize = len(writer.getAllData())
use_direct = directSize < indirectSize
useDirect = directSize < indirectSize
if use_direct:
if useDirect:
metricsStore = directStore
advanceMapping = None
else:
metricsStore = indirectStore
if v_orig_metricses:
vOrigMapping = builder.buildVarIdxMap(v_orig_mapping, glyphOrder)
if vOrigMetricses:
vOrigMapping = builder.buildVarIdxMap(vOrigMap, glyphOrder)
return metricsStore, advanceMapping, vOrigMapping
def _add_MVAR(font, masterModel, master_ttfs, axisTags):
log.info("Generating MVAR")