wip instancer: update uniqueID
This commit is contained in:
parent
ce1d8a9955
commit
b328475072
@ -1369,6 +1369,7 @@ def axisValuesFromAxisLimits(stat, axisLimits):
|
||||
def sortedAxisValues(axisValues):
|
||||
# Sort and remove duplicates so format 4 axisValues are dominant
|
||||
results, seenAxes = [], set()
|
||||
# ensure format4 axes with the most AxisValueRecords are first
|
||||
format4 = sorted(
|
||||
[a for a in axisValues if a.Format == 4],
|
||||
key=lambda k: len(k.AxisValueRecord), reverse=True
|
||||
@ -1392,14 +1393,15 @@ def updateNameTable(varfont, axisLimits):
|
||||
if "STAT" not in varfont:
|
||||
raise ValueError("Cannot update name table since there is no STAT table.")
|
||||
stat = varfont['STAT']
|
||||
fvar = varfont['fvar']
|
||||
nametable = varfont["name"]
|
||||
|
||||
# add default axis values if they are missing from axisLimits
|
||||
fvarDefaults = {a.axisTag: a.defaultValue for a in fvar.axes}
|
||||
for k, v in fvarDefaults.items():
|
||||
if k not in axisLimits:
|
||||
axisLimits[k] = v
|
||||
if 'fvar' in varfont:
|
||||
fvar = varfont['fvar']
|
||||
fvarDefaults = {a.axisTag: a.defaultValue for a in fvar.axes}
|
||||
for k, v in fvarDefaults.items():
|
||||
if k not in axisLimits:
|
||||
axisLimits[k] = v
|
||||
|
||||
selectedAxisValues = axisValuesFromAxisLimits(stat, axisLimits)
|
||||
_updateNameRecords(varfont, nametable, selectedAxisValues)
|
||||
@ -1419,6 +1421,7 @@ def _updateNameRecords(varfont, nametable, axisValues):
|
||||
nametblLangs = set((r.platformID, r.platEncID, r.langID) for r in nametable.names)
|
||||
for lang in nametblLangs:
|
||||
_updateStyleRecords(
|
||||
varfont,
|
||||
nametable,
|
||||
ribbiAxisValues,
|
||||
nonRibbiAxisValues,
|
||||
@ -1437,6 +1440,7 @@ def _ribbiAxisValues(nametable, axisValues):
|
||||
|
||||
|
||||
def _updateStyleRecords(
|
||||
varfont,
|
||||
nametable,
|
||||
ribbiAxisValues,
|
||||
nonRibbiAxisValues,
|
||||
@ -1480,13 +1484,39 @@ def _updateStyleRecords(
|
||||
|
||||
nameIDs[NameID.FULL_FONT_NAME] = f"{newFamilyName} {newStyleName}"
|
||||
nameIDs[NameID.POSTSCRIPT_NAME] = f"{newFamilyName.replace(' ', '')}-{newStyleName.replace(' ', '')}"
|
||||
# Update uniqueID
|
||||
# TODO
|
||||
# versionRecord = nametable.getName(5, 3, 1, 0x409)
|
||||
nameIDs[NameID.UNIQUE_FONT_IDENTIFIER] = _uniqueIdRecord(varfont, lang, nameIDs)
|
||||
|
||||
for nameID, string in nameIDs.items():
|
||||
if not string:
|
||||
continue
|
||||
nametable.setName(string, nameID, *lang)
|
||||
|
||||
|
||||
def _uniqueIdRecord(varfont, lang, nameIDs):
|
||||
name = varfont['name']
|
||||
record = name.getName(NameID.UNIQUE_FONT_IDENTIFIER, *lang)
|
||||
if not record:
|
||||
return None
|
||||
|
||||
def isSubString(string1, string2):
|
||||
if string2 in string1:
|
||||
return True
|
||||
return False
|
||||
|
||||
# Check if full name and postscript name are a substring
|
||||
for nameID in (4, 6):
|
||||
nameRecord = name.getName(nameID, *lang)
|
||||
if not nameRecord:
|
||||
continue
|
||||
if isSubString(record.toUnicode(), nameRecord.toUnicode()):
|
||||
return record.toUnicode().replace(
|
||||
nameRecord.toUnicode(),
|
||||
nameIDs[nameRecord.nameID]
|
||||
)
|
||||
# TODO (M Foley) Construct new uniqueID if full name or postscript names are not subsets
|
||||
return None
|
||||
|
||||
|
||||
def splitAxisLocationAndRanges(axisLimits, rangeType=AxisRange):
|
||||
location, axisRanges = {}, {}
|
||||
for axisTag, value in axisLimits.items():
|
||||
|
@ -1930,6 +1930,7 @@ def test_updateNameTable_with_registered_axes(varfont):
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x409)] == "Test Variable Font"
|
||||
assert names[(2, 3, 1, 0x0409)] == "Regular"
|
||||
assert names[(3, 3, 1, 0x0409)] == "2.001;GOOG;TestVariableFont-Regular"
|
||||
assert names[(6, 3, 1, 0x409)] == "TestVariableFont-Regular"
|
||||
assert (16, 3, 1, 0x409) not in names
|
||||
assert (17, 3, 1, 0x409) not in names
|
||||
@ -1939,6 +1940,7 @@ def test_updateNameTable_with_registered_axes(varfont):
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x409)] == "Test Variable Font Black"
|
||||
assert names[(2, 3, 1, 0x409)] == "Regular"
|
||||
assert names[(3, 3, 1, 0x0409)] == "2.001;GOOG;TestVariableFont-Black"
|
||||
assert names[(6, 3, 1, 0x409)] == "TestVariableFont-Black"
|
||||
assert names[(16, 3, 1, 0x409)] == "Test Variable Font"
|
||||
assert names[(17, 3, 1, 0x409)] == "Black"
|
||||
@ -1948,6 +1950,7 @@ def test_updateNameTable_with_registered_axes(varfont):
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x409)] == "Test Variable Font Thin"
|
||||
assert names[(2, 3, 1, 0x409)] == "Regular"
|
||||
assert names[(3, 3, 1, 0x0409)] == "2.001;GOOG;TestVariableFont-Thin"
|
||||
assert names[(6, 3, 1, 0x409)] == "TestVariableFont-Thin"
|
||||
assert names[(16, 3, 1, 0x409)] == "Test Variable Font"
|
||||
assert names[(17, 3, 1, 0x409)] == "Thin"
|
||||
@ -1957,6 +1960,7 @@ def test_updateNameTable_with_registered_axes(varfont):
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x409)] == "Test Variable Font Thin Condensed"
|
||||
assert names[(2, 3, 1, 0x409)] == "Regular"
|
||||
assert names[(3, 3, 1, 0x0409)] == "2.001;GOOG;TestVariableFont-ThinCondensed"
|
||||
assert names[(6, 3, 1, 0x409)] == "TestVariableFont-ThinCondensed"
|
||||
assert names[(16, 3, 1, 0x409)] == "Test Variable Font"
|
||||
assert names[(17, 3, 1, 0x409)] == "Thin Condensed"
|
||||
@ -1975,6 +1979,7 @@ def test_updateNameTable_with_multilingual_names(varfont):
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x405)] == "Test Variable Font"
|
||||
assert names[(2, 3, 1, 0x405)] == "Normal"
|
||||
assert (3, 3, 1, 0x405) not in names
|
||||
assert (16, 3, 1, 0x405) not in names
|
||||
assert (17, 3, 1, 0x405) not in names
|
||||
|
||||
@ -1983,6 +1988,7 @@ def test_updateNameTable_with_multilingual_names(varfont):
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x405)] == "Test Variable Font Negreta"
|
||||
assert names[(2, 3, 1, 0x405)] == "Normal"
|
||||
assert (3, 3, 1, 0x405) not in names
|
||||
assert names[(16, 3, 1, 0x405)] == "Test Variable Font"
|
||||
assert names[(17, 3, 1, 0x405)] == "Negreta"
|
||||
|
||||
@ -1991,6 +1997,7 @@ def test_updateNameTable_with_multilingual_names(varfont):
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x405)] == "Test Variable Font Negreta Zhuštěné"
|
||||
assert names[(2, 3, 1, 0x405)] == "Normal"
|
||||
assert (3, 3, 1, 0x405) not in names
|
||||
assert names[(16, 3, 1, 0x405)] == "Test Variable Font"
|
||||
assert names[(17, 3, 1, 0x405)] == "Negreta Zhuštěné"
|
||||
|
||||
@ -2000,6 +2007,7 @@ def test_updateNametable_partial(varfont):
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x409)] == "Test Variable Font Condensed"
|
||||
assert names[(2, 3, 1, 0x409)] == "Regular"
|
||||
assert (3, 3, 1, 0x405) not in names
|
||||
assert names[(16, 3, 1, 0x409)] == "Test Variable Font"
|
||||
assert names[(17, 3, 1, 0x409)] == "Condensed" #? maybe Condensed Regular?
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user