1
0
mirror of synced 2025-12-19 17:48:10 -05:00

Merge pull request #165 from googlefonts/less-aggression

Allow less aggressive renames
This commit is contained in:
Marc Foley
2024-02-20 17:38:41 +00:00
committed by GitHub
2 changed files with 65 additions and 23 deletions

View File

@@ -257,7 +257,9 @@ def build_stat(ttFont, sibling_ttFonts=[]):
buildStatTable(ttFont, res, macNames=False)
def build_name_table(ttFont, family_name=None, style_name=None, siblings=[]):
def build_name_table(
ttFont, family_name=None, style_name=None, siblings=[], aggressive=True
):
from fontTools.varLib.instancer import setRibbiBits
log.info("Building name table")
@@ -265,9 +267,13 @@ def build_name_table(ttFont, family_name=None, style_name=None, siblings=[]):
family_name = family_name if family_name else name_table.getBestFamilyName()
style_name = style_name if style_name else name_table.getBestSubFamilyName()
if is_variable(ttFont):
build_vf_name_table(ttFont, family_name, siblings=siblings)
build_vf_name_table(
ttFont, family_name, siblings=siblings, aggressive=aggressive
)
else:
build_static_name_table_v1(ttFont, family_name, style_name)
build_static_name_table_v1(
ttFont, family_name, style_name, aggressive=aggressive
)
# Set bits
style_name = name_table.getBestSubFamilyName()
@@ -299,14 +305,16 @@ def _fvar_instance_collisions(ttFont, siblings=[]):
return len(family_styles) != len(set(family_styles))
def build_vf_name_table(ttFont, family_name, siblings=[]):
def build_vf_name_table(ttFont, family_name, siblings=[], aggressive=True):
# VF name table should reflect the 0 origin of the font!
assert is_variable(ttFont), "Not a VF!"
style_name = _vf_style_name(ttFont, family_name)
if _fvar_instance_collisions(ttFont, siblings):
build_static_name_table_v1(ttFont, family_name, style_name)
build_static_name_table_v1(
ttFont, family_name, style_name, aggressive=aggressive
)
else:
build_static_name_table(ttFont, family_name, style_name)
build_static_name_table(ttFont, family_name, style_name, aggressive=aggressive)
build_variations_ps_name(ttFont, family_name)
@@ -434,7 +442,7 @@ def build_fvar_instances(ttFont, axis_dflts={}):
fvar.instances = instances
def build_static_name_table(ttFont, family_name, style_name):
def build_static_name_table(ttFont, family_name, style_name, aggressive=True):
# stip mac names
name_table = ttFont["name"]
name_table.removeNames(platformID=1)
@@ -506,23 +514,26 @@ def build_static_name_table(ttFont, family_name, style_name):
name_table.setName(v, *k)
# Replace occurences of old family name in untouched records
skip_ids = [i.numerator for i in NameID]
for r in ttFont["name"].names:
if r.nameID in skip_ids:
continue
current = r.toUnicode()
if existing_name not in current:
continue
if " " not in current:
replacement = current.replace(existing_name, family_name).replace(" ", "")
else:
replacement = current.replace(existing_name, family_name)
ttFont["name"].setName(
replacement, r.nameID, r.platformID, r.platEncID, r.langID
)
if aggressive:
skip_ids = [i.numerator for i in NameID]
for r in ttFont["name"].names:
if r.nameID in skip_ids:
continue
current = r.toUnicode()
if existing_name not in current:
continue
if " " not in current:
replacement = current.replace(existing_name, family_name).replace(
" ", ""
)
else:
replacement = current.replace(existing_name, family_name)
ttFont["name"].setName(
replacement, r.nameID, r.platformID, r.platEncID, r.langID
)
def build_static_name_table_v1(ttFont, family_name, style_name):
def build_static_name_table_v1(ttFont, family_name, style_name, aggressive=True):
"""Pre VF name tables, this version can only accept wght + ital"""
non_weight_tokens = []
v1_tokens = []
@@ -547,7 +558,7 @@ def build_static_name_table_v1(ttFont, family_name, style_name):
style_name = style_name or "Regular"
log.debug(f"New family name: {family_name}")
log.debug(f"New style name: {style_name}")
build_static_name_table(ttFont, family_name, style_name)
build_static_name_table(ttFont, family_name, style_name, aggressive)
def build_filename(ttFont):

View File

@@ -321,6 +321,37 @@ def test_name_table(fp, family_name, style_name, siblings, expected):
_test_names(font, expected)
def test_name_table_aggression():
font = TTFont(mavenpro_fp)
build_name_table(font, "Raven Am", "Regular", aggressive=True)
_test_names(
font,
{
(
0,
3,
1,
0x409,
): 'Copyright 2011 The Raven Am Project Authors (http://www.vissol.co.uk/mavenpro/), with Reserved Font Name "Raven Am".',
(4, 3, 1, 0x409): "Raven Am Regular",
},
)
font = TTFont(mavenpro_fp)
build_name_table(font, "Raven Am", "Regular", aggressive=False)
_test_names(
font,
{
(
0,
3,
1,
0x409,
): 'Copyright 2011 The Maven Pro Project Authors (http://www.vissol.co.uk/mavenpro/), with Reserved Font Name "Maven Pro".',
(4, 3, 1, 0x409): "Raven Am Regular",
},
)
@pytest.mark.parametrize(
"font_fp, dflt_coords, expected",
[