From a2d063c840ce5f4e02dede09eda330f7bccbc6ff Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 16 Apr 2015 01:17:06 -0700 Subject: [PATCH] Implement mac-platform roman-encoding language-specific name table encodings Part of https://github.com/behdad/fonttools/issues/236 --- Lib/fontTools/ttLib/tables/_n_a_m_e.py | 23 +++++++++++++++++++-- Lib/fontTools/ttLib/tables/_n_a_m_e_test.py | 8 +++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Lib/fontTools/ttLib/tables/_n_a_m_e.py b/Lib/fontTools/ttLib/tables/_n_a_m_e.py index ac6411bac..2e0263040 100644 --- a/Lib/fontTools/ttLib/tables/_n_a_m_e.py +++ b/Lib/fontTools/ttLib/tables/_n_a_m_e.py @@ -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'] diff --git a/Lib/fontTools/ttLib/tables/_n_a_m_e_test.py b/Lib/fontTools/ttLib/tables/_n_a_m_e_test.py index e496db066..d70db0d20 100644 --- a/Lib/fontTools/ttLib/tables/_n_a_m_e_test.py +++ b/Lib/fontTools/ttLib/tables/_n_a_m_e_test.py @@ -42,6 +42,14 @@ class NameRecordTest(unittest.TestCase): '' ], 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()