2015-04-19 03:50:55 -07:00
|
|
|
from __future__ import print_function, division, absolute_import, unicode_literals
|
|
|
|
from fontTools.misc.py23 import *
|
2015-04-26 02:40:53 -04:00
|
|
|
from fontTools import ttLib
|
2015-04-19 03:50:55 -07:00
|
|
|
import unittest
|
2017-01-15 21:45:57 +00:00
|
|
|
from fontTools.ttLib.tables._c_m_a_p import CmapSubtable, table__c_m_a_p
|
2015-04-19 03:50:55 -07:00
|
|
|
|
|
|
|
class CmapSubtableTest(unittest.TestCase):
|
|
|
|
|
2015-09-04 10:21:55 +02:00
|
|
|
def makeSubtable(self, cmapFormat, platformID, platEncID, langID):
|
|
|
|
subtable = CmapSubtable.newSubtable(cmapFormat)
|
2015-04-19 03:50:55 -07:00
|
|
|
subtable.platformID, subtable.platEncID, subtable.language = (platformID, platEncID, langID)
|
|
|
|
return subtable
|
|
|
|
|
|
|
|
def test_toUnicode_utf16be(self):
|
2015-09-04 10:21:55 +02:00
|
|
|
subtable = self.makeSubtable(4, 0, 2, 7)
|
2015-04-24 12:48:37 -07:00
|
|
|
self.assertEqual("utf_16_be", subtable.getEncoding())
|
2015-04-19 03:50:55 -07:00
|
|
|
self.assertEqual(True, subtable.isUnicode())
|
|
|
|
|
|
|
|
def test_toUnicode_macroman(self):
|
2015-09-04 10:21:55 +02:00
|
|
|
subtable = self.makeSubtable(4, 1, 0, 7) # MacRoman
|
2015-04-19 04:24:55 -07:00
|
|
|
self.assertEqual("mac_roman", subtable.getEncoding())
|
2015-04-19 03:50:55 -07:00
|
|
|
self.assertEqual(False, subtable.isUnicode())
|
|
|
|
|
|
|
|
def test_toUnicode_macromanian(self):
|
2015-09-04 10:21:55 +02:00
|
|
|
subtable = self.makeSubtable(4, 1, 0, 37) # Mac Romanian
|
2015-04-19 03:50:55 -07:00
|
|
|
self.assertNotEqual(None, subtable.getEncoding())
|
|
|
|
self.assertEqual(False, subtable.isUnicode())
|
|
|
|
|
|
|
|
def test_extended_mac_encodings(self):
|
2015-09-04 10:21:55 +02:00
|
|
|
subtable = self.makeSubtable(4, 1, 1, 0) # Mac Japanese
|
2015-04-19 03:50:55 -07:00
|
|
|
self.assertNotEqual(None, subtable.getEncoding())
|
|
|
|
self.assertEqual(False, subtable.isUnicode())
|
|
|
|
|
|
|
|
def test_extended_unknown(self):
|
2015-09-04 10:21:55 +02:00
|
|
|
subtable = self.makeSubtable(4, 10, 11, 12)
|
2015-04-19 03:50:55 -07:00
|
|
|
self.assertEqual(subtable.getEncoding(), None)
|
|
|
|
self.assertEqual(subtable.getEncoding("ascii"), "ascii")
|
|
|
|
self.assertEqual(subtable.getEncoding(default="xyz"), "xyz")
|
|
|
|
|
2015-04-26 02:40:53 -04:00
|
|
|
def test_decompile_4(self):
|
|
|
|
subtable = CmapSubtable.newSubtable(4)
|
|
|
|
font = ttLib.TTFont()
|
|
|
|
font.setGlyphOrder([])
|
|
|
|
subtable.decompile(b'\0' * 3 + b'\x10' + b'\0' * 12, font)
|
|
|
|
|
|
|
|
def test_decompile_12(self):
|
|
|
|
subtable = CmapSubtable.newSubtable(12)
|
|
|
|
font = ttLib.TTFont()
|
|
|
|
font.setGlyphOrder([])
|
|
|
|
subtable.decompile(b'\0' * 7 + b'\x10' + b'\0' * 8, font)
|
|
|
|
|
2015-09-04 10:21:55 +02:00
|
|
|
def test_buildReversed(self):
|
|
|
|
c4 = self.makeSubtable(4, 3, 1, 0)
|
|
|
|
c4.cmap = {0x0041:'A', 0x0391:'A'}
|
|
|
|
c12 = self.makeSubtable(12, 3, 10, 0)
|
|
|
|
c12.cmap = {0x10314: 'u10314'}
|
|
|
|
cmap = table__c_m_a_p()
|
|
|
|
cmap.tables = [c4, c12]
|
|
|
|
self.assertEqual(cmap.buildReversed(), {'A':{0x0041, 0x0391}, 'u10314':{0x10314}})
|
|
|
|
|
2017-11-03 15:10:06 +01:00
|
|
|
def test_getBestCmap(self):
|
|
|
|
c4 = self.makeSubtable(4, 3, 1, 0)
|
|
|
|
c4.cmap = {0x0041:'A', 0x0391:'A'}
|
|
|
|
c12 = self.makeSubtable(12, 3, 10, 0)
|
|
|
|
c12.cmap = {0x10314: 'u10314'}
|
|
|
|
cmap = table__c_m_a_p()
|
|
|
|
cmap.tables = [c4, c12]
|
|
|
|
self.assertEqual(cmap.getBestCmap(), {0x10314: 'u10314'})
|
|
|
|
self.assertEqual(cmap.getBestCmap(cmapPreferences=[(3, 1)]), {0x0041:'A', 0x0391:'A'})
|
2017-11-03 16:19:48 +01:00
|
|
|
self.assertEqual(cmap.getBestCmap(cmapPreferences=[(0, 4)]), None)
|
2017-11-03 15:10:06 +01:00
|
|
|
|
2017-11-03 16:01:45 +01:00
|
|
|
def test_font_getBestCmap(self):
|
|
|
|
c4 = self.makeSubtable(4, 3, 1, 0)
|
|
|
|
c4.cmap = {0x0041:'A', 0x0391:'A'}
|
|
|
|
c12 = self.makeSubtable(12, 3, 10, 0)
|
|
|
|
c12.cmap = {0x10314: 'u10314'}
|
|
|
|
cmap = table__c_m_a_p()
|
|
|
|
cmap.tables = [c4, c12]
|
|
|
|
font = ttLib.TTFont()
|
|
|
|
font["cmap"] = cmap
|
|
|
|
self.assertEqual(font.getBestCmap(), {0x10314: 'u10314'})
|
|
|
|
self.assertEqual(font.getBestCmap(cmapPreferences=[(3, 1)]), {0x0041:'A', 0x0391:'A'})
|
2017-11-03 16:19:48 +01:00
|
|
|
self.assertEqual(font.getBestCmap(cmapPreferences=[(0, 4)]), None)
|
2017-11-03 16:01:45 +01:00
|
|
|
|
2015-09-04 10:21:55 +02:00
|
|
|
|
2015-04-19 03:50:55 -07:00
|
|
|
if __name__ == "__main__":
|
2017-01-11 13:05:35 +00:00
|
|
|
import sys
|
|
|
|
sys.exit(unittest.main())
|