Implement mac-platform roman-encoding language-specific name table encodings
Part of https://github.com/behdad/fonttools/issues/236
This commit is contained in:
parent
a310df0848
commit
a2d063c840
@ -92,6 +92,7 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
|
||||
|
||||
class NameRecord(object):
|
||||
|
||||
# Map keyed by platformID, then platEncID, then possibly langID
|
||||
_encodingMap = {
|
||||
0: { # Unicode
|
||||
0: 'utf-16be',
|
||||
@ -105,7 +106,22 @@ class NameRecord(object):
|
||||
1: { # Macintosh
|
||||
# See
|
||||
# https://github.com/behdad/fonttools/issues/236
|
||||
0: 'macroman',
|
||||
0: { # Macintosh, platEncID==0, keyed by langID
|
||||
15: "mac-iceland",
|
||||
17: "mac-turkish",
|
||||
18: None,
|
||||
24: "mac-latin2",
|
||||
25: "mac-latin2",
|
||||
26: "mac-latin2",
|
||||
27: "mac-latin2",
|
||||
28: "mac-latin2",
|
||||
36: "mac-latin2",
|
||||
37: None,
|
||||
38: "mac-latin2",
|
||||
39: "mac-latin2",
|
||||
40: "mac-latin2",
|
||||
Ellipsis: 'mac-roman', # Other
|
||||
},
|
||||
1: 'shift-jis',
|
||||
2: 'big5',
|
||||
3: 'euc-kr',
|
||||
@ -134,7 +150,10 @@ class NameRecord(object):
|
||||
}
|
||||
|
||||
def getEncoding(self):
|
||||
return self._encodingMap.get(self.platformID, {}).get(self.platEncID, None)
|
||||
encoding = self._encodingMap.get(self.platformID, {}).get(self.platEncID, None)
|
||||
if isinstance(encoding, dict):
|
||||
encoding = encoding.get(self.langID, encoding[Ellipsis])
|
||||
return encoding
|
||||
|
||||
def encodingIsUnicodeCompatible(self):
|
||||
return self.getEncoding() in ['utf-16be', 'ucs2be', 'ascii', 'latin1']
|
||||
|
@ -42,6 +42,14 @@ class NameRecordTest(unittest.TestCase):
|
||||
'</namerecord>'
|
||||
], self.toXML(name))
|
||||
|
||||
def test_encoding_macroman_misc(self):
|
||||
name = NameRecord()
|
||||
name.nameID, name.platformID, name.platEncID, name.langID = (123, 1, 0, 17)
|
||||
self.assertEqual(name.getEncoding(), "mac-turkish")
|
||||
name.langID = 37
|
||||
self.assertEqual(name.getEncoding(), None)
|
||||
name.langID = 45
|
||||
self.assertEqual(name.getEncoding(), "mac-roman")
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user