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