Browse Source

Merge pull request #165 from googlefonts/less-aggression

Allow less aggressive renames
Marc Foley 1 year ago
parent
commit
90898af7d0
2 changed files with 65 additions and 23 deletions
  1. 34 23
      Lib/axisregistry/__init__.py
  2. 31 0
      tests/test_names.py

+ 34 - 23
Lib/axisregistry/__init__.py

@@ -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):

+ 31 - 0
tests/test_names.py

@@ -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",
     [