Add getEncoding() to cmap subtables
This commit is contained in:
parent
e561b758c1
commit
5a18fc83e6
@ -1,6 +1,7 @@
|
||||
from __future__ import print_function, division, absolute_import
|
||||
from fontTools.misc.py23 import *
|
||||
from fontTools.misc.textTools import safeEval, readHex
|
||||
from fontTools.misc.encodingTools import getEncoding
|
||||
from fontTools.ttLib import getSearchRange
|
||||
from fontTools.unicode import Unicode
|
||||
from . import DefaultTable
|
||||
@ -139,6 +140,18 @@ class CmapSubtable(object):
|
||||
writer.endtag(self.__class__.__name__)
|
||||
writer.newline()
|
||||
|
||||
def getEncoding(self, default=None):
|
||||
"""Returns the Python encoding name for this cmap subtable based on its platformID,
|
||||
platEncID, and language. If encoding for these values is not known, by default
|
||||
None is returned. That can be overriden by passing a value to the default
|
||||
argument.
|
||||
|
||||
Note that if you want to choose a "preferred" cmap subtable, most of the time
|
||||
self.isUnicode() is what you want as that one only returns true for the modern,
|
||||
commonly used, Unicode-compatible triplets, not the legacy ones.
|
||||
"""
|
||||
return getEncoding(self.platformID, self.platEncID, self.language, default)
|
||||
|
||||
def isUnicode(self):
|
||||
return (self.platformID == 0 or
|
||||
(self.platformID == 3 and self.platEncID in [0, 1, 10]))
|
||||
|
40
Lib/fontTools/ttLib/tables/_c_m_a_p_test.py
Normal file
40
Lib/fontTools/ttLib/tables/_c_m_a_p_test.py
Normal file
@ -0,0 +1,40 @@
|
||||
from __future__ import print_function, division, absolute_import, unicode_literals
|
||||
from fontTools.misc.py23 import *
|
||||
import unittest
|
||||
from ._c_m_a_p import CmapSubtable
|
||||
|
||||
class CmapSubtableTest(unittest.TestCase):
|
||||
|
||||
def makeSubtable(self, platformID, platEncID, langID):
|
||||
subtable = CmapSubtable(None)
|
||||
subtable.platformID, subtable.platEncID, subtable.language = (platformID, platEncID, langID)
|
||||
return subtable
|
||||
|
||||
def test_toUnicode_utf16be(self):
|
||||
subtable = self.makeSubtable(0, 2, 7)
|
||||
self.assertEqual("utf-16be", subtable.getEncoding())
|
||||
self.assertEqual(True, subtable.isUnicode())
|
||||
|
||||
def test_toUnicode_macroman(self):
|
||||
subtable = self.makeSubtable(1, 0, 7) # MacRoman
|
||||
self.assertEqual("mac-roman", subtable.getEncoding())
|
||||
self.assertEqual(False, subtable.isUnicode())
|
||||
|
||||
def test_toUnicode_macromanian(self):
|
||||
subtable = self.makeSubtable(1, 0, 37) # Mac Romanian
|
||||
self.assertNotEqual(None, subtable.getEncoding())
|
||||
self.assertEqual(False, subtable.isUnicode())
|
||||
|
||||
def test_extended_mac_encodings(self):
|
||||
subtable = self.makeSubtable(1, 1, 0) # Mac Japanese
|
||||
self.assertNotEqual(None, subtable.getEncoding())
|
||||
self.assertEqual(False, subtable.isUnicode())
|
||||
|
||||
def test_extended_unknown(self):
|
||||
subtable = self.makeSubtable(10, 11, 12)
|
||||
self.assertEqual(subtable.getEncoding(), None)
|
||||
self.assertEqual(subtable.getEncoding("ascii"), "ascii")
|
||||
self.assertEqual(subtable.getEncoding(default="xyz"), "xyz")
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
Loading…
x
Reference in New Issue
Block a user