Merge pull request #2526 from moontypespace/mod_get_current_family_name

Extend name table with more general functions
This commit is contained in:
Cosimo Lupo 2022-02-09 17:26:22 +00:00 committed by GitHub
commit 8a139f921c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 137 additions and 1 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,44 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
else:
return None
def getFirstDebugName(self, nameIDs):
for nameID in nameIDs:
name = self.getDebugName(nameID)
if name is not None:
return name
return None
def getBestFamilyName(self):
# 21 = WWS Family Name
# 16 = Typographic Family Name
# 1 = Family Name
return self.getFirstDebugName((21, 16, 1))
def getBestSubFamilyName(self):
# 22 = WWS SubFamily Name
# 17 = Typographic SubFamily Name
# 2 = SubFamily Name
return self.getFirstDebugName((22, 17, 2))
def getBestFullName(self):
# 4 = Full Name
# 6 = PostScript Name
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 is 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

@ -248,7 +248,7 @@ Simon Daniels, Peter Dekkers, Behdad Esfahbod, Behnam Esfahbod, Hannes
Famira, Sam Fishman, Matt Fontaine, Takaaki Fuji, Yannis Haralambous, Greg
Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, Denis Moyogo Jacquerye,
Jack Jansen, Tom Kacvinsky, Jens Kutilek, Antoine Leca, Werner Lemberg, Tal
Leming, Peter Lofting, Cosimo Lupo, Masaya Nakamura, Dave Opstad,
Leming, Peter Lofting, Cosimo Lupo, Olli Meier, Masaya Nakamura, Dave Opstad,
Laurence Penney, Roozbeh Pournader, Garret Rieger, Read Roberts, Guido
van Rossum, Just van Rossum, Andreas Seidel, Georg Seifert, Chris
Simpkins, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov,

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.getBestFamilyName()
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.getBestFamilyName()
self.assertEqual(expected_value, result_value)
expected_value = "Family Name ID 21"
name.setName(expected_value, 21, 1, 0, 0)
result_value = name.getBestFamilyName()
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.getBestSubFamilyName()
self.assertEqual("SubFamily Name ID 2", result_value)
expected_value = "Family Name ID 17"
name.setName(expected_value, 17, 1, 0, 0)
result_value = name.getBestSubFamilyName()
self.assertEqual(expected_value, result_value)
expected_value = "Family Name ID 22"
name.setName(expected_value, 22, 1, 0, 0)
result_value = name.getBestSubFamilyName()
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.getBestFullName()
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.getBestFullName()
self.assertEqual(expected_value, result_value)
name.setName('NID 17', 17, 1, 0, 0)
result_value = name.getBestFullName()
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.getBestFullName()
self.assertEqual(expected_value, result_value)
name.setName('NID 22', 22, 1, 0, 0)
result_value = name.getBestFullName()
self.assertEqual("NID 21 NID 22", result_value)
for NID in [2, 16, 17, 21, 22]:
name.removeNames(NID)
result_value = name.getBestFullName()
self.assertEqual("NID 4", result_value)
name.setName('Regular', 2, 1, 0, 0)
result_value = name.getBestFullName()
self.assertEqual("NID 1", result_value)
if __name__ == "__main__":
import sys
sys.exit(unittest.main())