extend name table with getFamilyName, getSubFamilyName and getNiceFullName + unittests

This commit is contained in:
Olli Meier 2022-02-09 17:06:02 +01:00
parent 31ba5e6b24
commit c50f38ed0e
4 changed files with 179 additions and 0 deletions

1
.gitignore vendored
View File

@ -14,6 +14,7 @@ dist/
*.egg-info/
*.egg
MANIFEST
.idea
# Installer logs
pip-log.txt

View File

@ -120,6 +120,37 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
else:
return None
def getFamilyName(self):
for nameID in (21, 16, 1):
name = self.getDebugName(nameID)
if name is not None:
return name
return None
def getSubFamilyName(self):
for nameID in (22, 17, 2):
name = self.getDebugName(nameID)
if name is not None:
return name
return None
def getNiceFullName(self):
for nameIDs in ((21, 22), (16, 17), (1, 2), (4, ), (6, )):
if len(nameIDs) == 2:
name_fam = self.getDebugName(nameIDs[0])
name_subfam = self.getDebugName(nameIDs[1])
if None in [name_fam, name_subfam]:
continue # if any if None, skip
name = f"{name_fam} {name_subfam}"
if name_subfam.lower() == 'regular':
name = f"{name_fam}"
return name
else:
name = self.getDebugName(nameIDs[0])
if name is not None:
return name
return None
def setName(self, string, nameID, platformID, platEncID, langID):
""" Set the 'string' for the name record identified by 'nameID', 'platformID',
'platEncID' and 'langID'. If a record with that nameID doesn't exist, create it

View File

@ -0,0 +1,50 @@
# coding=utf-8
"""
This test is for checking function within rename-fonts
"""
import unittest
from fontTools.misc.testTools import FakeFont
from fontTools.ttLib.tables._n_a_m_e import (table__n_a_m_e, NameRecord, nameRecordFormat, nameRecordSize, makeName, log)
from fonttools.Snippets.rename-fonts import get_current_family_name
class RenameFontsTest(unittest.TestCase):
@classmethod
def setUp(self):
self.font = FakeFont(['.nodef', 'A', 'B', 'C'])
name = table__n_a_m_e()
name.names = [
makeName("Copyright", 0, 1, 0, 0),
makeName("Family Name ID 1", 1, 1, 0, 0),
makeName("SubFamily Name ID 2", 2, 1, 0, 0),
makeName("Unique Name ID 3", 3, 1, 0, 0),
makeName("Full Name ID 4", 4, 1, 0, 0),
makeName("PS Name ID 6", 6, 1, 0, 0),
makeName("Version Name ID 5", 5, 1, 0, 0),
makeName("Trademark Name ID 7", 7, 1, 0, 0),
]
self.font['name'] = name
def test_get_current_family_name(self):
result_value = get_current_family_name(self.font['name'])
self.assertEqual("Family Name ID 1", result_value)
expected_value = "Family Name ID 16"
self.font['name'].setName(expected_value, 16, 1, 0, 0)
result_value = get_current_family_name(self.font['name'])
self.assertEqual(expected_value, result_value)
expected_value = "Family Name ID 21"
self.font['name'].setName(expected_value, 21, 1, 0, 0)
result_value = get_current_family_name(self.font['name'])
self.assertEqual(expected_value, result_value)
if __name__ == "__main__":
import sys
sys.exit(unittest.main())

View File

@ -450,6 +450,103 @@ class NameRecordTest(unittest.TestCase):
self.assertEqual(name.getEncoding(None), None)
self.assertEqual(name.getEncoding(default=None), None)
def test_get_family_name(self):
name = table__n_a_m_e()
name.names = [
makeName("Copyright", 0, 1, 0, 0),
makeName("Family Name ID 1", 1, 1, 0, 0),
makeName("SubFamily Name ID 2", 2, 1, 0, 0),
makeName("Unique Name ID 3", 3, 1, 0, 0),
makeName("Full Name ID 4", 4, 1, 0, 0),
makeName("PS Name ID 6", 6, 1, 0, 0),
makeName("Version Name ID 5", 5, 1, 0, 0),
makeName("Trademark Name ID 7", 7, 1, 0, 0),
]
result_value = name.getFamilyName()
self.assertEqual("Family Name ID 1", result_value)
expected_value = "Family Name ID 16"
name.setName(expected_value, 16, 1, 0, 0)
result_value = name.getFamilyName()
self.assertEqual(expected_value, result_value)
expected_value = "Family Name ID 21"
name.setName(expected_value, 21, 1, 0, 0)
result_value = name.getFamilyName()
self.assertEqual(expected_value, result_value)
def test_get_subfamily_name(self):
name = table__n_a_m_e()
name.names = [
makeName("Copyright", 0, 1, 0, 0),
makeName("Family Name ID 1", 1, 1, 0, 0),
makeName("SubFamily Name ID 2", 2, 1, 0, 0),
makeName("Unique Name ID 3", 3, 1, 0, 0),
makeName("Full Name ID 4", 4, 1, 0, 0),
makeName("PS Name ID 6", 6, 1, 0, 0),
makeName("Version Name ID 5", 5, 1, 0, 0),
makeName("Trademark Name ID 7", 7, 1, 0, 0),
]
result_value = name.getSubFamilyName()
self.assertEqual("Family Name ID 2", result_value)
expected_value = "Family Name ID 17"
name.setName(expected_value, 16, 1, 0, 0)
result_value = name.getSubFamilyName()
self.assertEqual(expected_value, result_value)
expected_value = "Family Name ID 22"
name.setName(expected_value, 21, 1, 0, 0)
result_value = name.getSubFamilyName()
self.assertEqual(expected_value, result_value)
def test_get_nice_full_name(self):
name = table__n_a_m_e()
name.names = [
makeName("NID 1", 1, 1, 0, 0),
makeName("NID 2", 2, 1, 0, 0),
makeName("NID 4", 4, 1, 0, 0),
makeName("NID 6", 6, 1, 0, 0),
]
result_value = name.getNiceFullName()
self.assertEqual("NID 1 NID 2", result_value)
expected_value = "NID 1 NID 2"
# expection is still NID 1 NID 2,
# because name ID 17 is missing
name.setName("NID 16", 16, 1, 0, 0)
result_value = name.getNiceFullName()
self.assertEqual(expected_value, result_value)
name.setName('NID 17', 17, 1, 0, 0)
result_value = name.getNiceFullName()
self.assertEqual("NID 16 NID 17", result_value)
expected_value = "NID 16 NID 17"
# expection is still NID 16 NID 17,
# because name ID 21 is missing
name.setName('NID 21', 21, 1, 0, 0)
result_value = name.getNiceFullName()
self.assertEqual(expected_value, result_value)
name.setName('NID 22', 22, 1, 0, 0)
result_value = name.getNiceFullName()
self.assertEqual("NID 21 NID 22", result_value)
for NID in [2, 16, 17, 21, 22]:
name.removeNames(NID)
result_value = name.getNiceFullName()
self.assertEqual("NID 4", result_value)
name.setName('Regular', 2, 1, 0, 0)
result_value = name.getNiceFullName()
self.assertEqual("NID 1", result_value)
if __name__ == "__main__":
import sys
sys.exit(unittest.main())