Merge pull request #2526 from moontypespace/mod_get_current_family_name
Extend name table with more general functions
This commit is contained in:
commit
8a139f921c
1
.gitignore
vendored
1
.gitignore
vendored
@ -14,6 +14,7 @@ dist/
|
||||
*.egg-info/
|
||||
*.egg
|
||||
MANIFEST
|
||||
.idea
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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())
|
||||
|
Loading…
x
Reference in New Issue
Block a user