[varLib] use magic 0x8000 to ignore post.underline* for MVAR

https://github.com/googlei18n/ufo2ft/issues/308#issuecomment-454079704
https://github.com/googlei18n/ufo2ft/pull/310
This commit is contained in:
Cosimo Lupo 2019-01-15 16:16:40 +00:00
parent 71dbe2daea
commit 7d947c9fd8
No known key found for this signature in database
GPG Key ID: 59D54DB0C9976482

View File

@ -512,13 +512,31 @@ def _add_MVAR(font, masterModel, master_ttfs, axisTags):
lastTableTag = None lastTableTag = None
fontTable = None fontTable = None
tables = None tables = None
# HACK: we need to special-case post.underlineThickness and .underlinePosition
# and unilaterally/arbitrarily define a sentinel value to distinguish the case
# when a post table is present in a given master simply because that's where
# the glyph names in TrueType must be stored, but the underline values are not
# meant to be used for building MVAR's deltas. The value of 0x8000 (-36768)
# the minimum FWord (int16) value, was chosen for its unlikelyhood to appear
# in real-world underline position/thickness values.
specialTags = {"unds": 0x8000, "undo": 0x8000}
for tag, (tableTag, itemName) in sorted(MVAR_ENTRIES.items(), key=lambda kv: kv[1]): for tag, (tableTag, itemName) in sorted(MVAR_ENTRIES.items(), key=lambda kv: kv[1]):
if tableTag != lastTableTag: if tableTag != lastTableTag:
tables = fontTable = None tables = fontTable = None
if tableTag in font: if tableTag in font:
fontTable = font[tableTag] fontTable = font[tableTag]
tables = [master[tableTag] if tableTag in master else None tables = []
for master in master_ttfs] for master in master_ttfs:
if tableTag in master:
if (
tag in specialTags
and getattr(master[tableTag], itemName) == specialTags[tag]
):
tables.append(None)
else:
tables.append(master[tableTag])
else:
tables.append(None)
lastTableTag = tableTag lastTableTag = tableTag
if tables is None: if tables is None:
continue continue