Merge pull request #299 from brawer/name
Helper function to find a debug string for a name
This commit is contained in:
commit
feeab5afa1
@ -90,6 +90,23 @@ class table__n_a_m_e(DefaultTable.DefaultTable):
|
||||
return namerecord
|
||||
return None # not found
|
||||
|
||||
def getDebugName(self, nameID):
|
||||
englishName = someName = None
|
||||
for name in self.names:
|
||||
try:
|
||||
unistr = name.toUnicode()
|
||||
except UnicodeDecodeError:
|
||||
unistr = None
|
||||
if name.nameID == nameID and unistr:
|
||||
someName = unistr
|
||||
if (name.platformID, name.langID) in ((1, 0), (3, 0x409)):
|
||||
englishName = unistr
|
||||
if englishName:
|
||||
return englishName
|
||||
elif someName:
|
||||
return someName
|
||||
else:
|
||||
return None
|
||||
|
||||
class NameRecord(object):
|
||||
|
||||
|
@ -1,34 +1,53 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import print_function, division, absolute_import, unicode_literals
|
||||
from fontTools.misc.py23 import *
|
||||
from fontTools.misc.xmlWriter import XMLWriter
|
||||
import unittest
|
||||
from ._n_a_m_e import NameRecord
|
||||
from ._n_a_m_e import table__n_a_m_e, NameRecord
|
||||
|
||||
|
||||
def makeName(text, nameID, platformID, platEncID, langID):
|
||||
name = NameRecord()
|
||||
name.nameID, name.platformID, name.platEncID, name.langID = (
|
||||
nameID, platformID, platEncID, langID)
|
||||
name.string = tobytes(text, encoding=name.getEncoding())
|
||||
return name
|
||||
|
||||
|
||||
class NameTableTest(unittest.TestCase):
|
||||
|
||||
def test_getDebugName(self):
|
||||
table = table__n_a_m_e()
|
||||
table.names = [
|
||||
makeName("Bold", 258, 1, 0, 0), # Mac, MacRoman, English
|
||||
makeName("Gras", 258, 1, 0, 1), # Mac, MacRoman, French
|
||||
makeName("Fett", 258, 1, 0, 2), # Mac, MacRoman, German
|
||||
makeName("Sem Fracções", 292, 1, 0, 8) # Mac, MacRoman, Portuguese
|
||||
]
|
||||
self.assertEqual("Bold", table.getDebugName(258))
|
||||
self.assertEqual("Sem Fracções", table.getDebugName(292))
|
||||
self.assertEqual(None, table.getDebugName(999))
|
||||
|
||||
|
||||
class NameRecordTest(unittest.TestCase):
|
||||
|
||||
def makeName(self, text, nameID, platformID, platEncID, langID):
|
||||
name = NameRecord()
|
||||
name.nameID, name.platformID, name.platEncID, name.langID = (nameID, platformID, platEncID, langID)
|
||||
name.string = tobytes(text, encoding=name.getEncoding())
|
||||
return name
|
||||
|
||||
def test_toUnicode_utf16be(self):
|
||||
name = self.makeName("Foo Bold", 111, 0, 2, 7)
|
||||
name = makeName("Foo Bold", 111, 0, 2, 7)
|
||||
self.assertEqual("utf_16_be", name.getEncoding())
|
||||
self.assertEqual("Foo Bold", name.toUnicode())
|
||||
|
||||
def test_toUnicode_macroman(self):
|
||||
name = self.makeName("Foo Italic", 222, 1, 0, 7) # MacRoman
|
||||
name = makeName("Foo Italic", 222, 1, 0, 7) # MacRoman
|
||||
self.assertEqual("mac_roman", name.getEncoding())
|
||||
self.assertEqual("Foo Italic", name.toUnicode())
|
||||
|
||||
def test_toUnicode_macromanian(self):
|
||||
name = self.makeName(b"Foo Italic\xfb", 222, 1, 0, 37) # Mac Romanian
|
||||
name = makeName(b"Foo Italic\xfb", 222, 1, 0, 37) # Mac Romanian
|
||||
self.assertEqual("mac_romanian", name.getEncoding())
|
||||
self.assertEqual("Foo Italic"+unichr(0x02DA), name.toUnicode())
|
||||
|
||||
def test_toUnicode_UnicodeDecodeError(self):
|
||||
name = self.makeName(b"\1", 111, 0, 2, 7)
|
||||
name = makeName(b"\1", 111, 0, 2, 7)
|
||||
self.assertEqual("utf_16_be", name.getEncoding())
|
||||
self.assertRaises(UnicodeDecodeError, name.toUnicode)
|
||||
|
||||
@ -39,7 +58,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
return xml.split(writer.newlinestr.decode("utf_8"))[1:]
|
||||
|
||||
def test_toXML_utf16be(self):
|
||||
name = self.makeName("Foo Bold", 111, 0, 2, 7)
|
||||
name = makeName("Foo Bold", 111, 0, 2, 7)
|
||||
self.assertEqual([
|
||||
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
||||
' Foo Bold',
|
||||
@ -47,7 +66,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
], self.toXML(name))
|
||||
|
||||
def test_toXML_utf16be_odd_length1(self):
|
||||
name = self.makeName(b"\0F\0o\0o\0", 111, 0, 2, 7)
|
||||
name = makeName(b"\0F\0o\0o\0", 111, 0, 2, 7)
|
||||
self.assertEqual([
|
||||
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
||||
' Foo',
|
||||
@ -55,7 +74,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
], self.toXML(name))
|
||||
|
||||
def test_toXML_utf16be_odd_length2(self):
|
||||
name = self.makeName(b"\0Fooz", 111, 0, 2, 7)
|
||||
name = makeName(b"\0Fooz", 111, 0, 2, 7)
|
||||
self.assertEqual([
|
||||
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
||||
' Fooz',
|
||||
@ -63,7 +82,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
], self.toXML(name))
|
||||
|
||||
def test_toXML_utf16be_double_encoded(self):
|
||||
name = self.makeName(b"\0\0\0F\0\0\0o", 111, 0, 2, 7)
|
||||
name = makeName(b"\0\0\0F\0\0\0o", 111, 0, 2, 7)
|
||||
self.assertEqual([
|
||||
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
||||
' Fo',
|
||||
@ -71,7 +90,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
], self.toXML(name))
|
||||
|
||||
def test_toXML_macroman(self):
|
||||
name = self.makeName("Foo Italic", 222, 1, 0, 7) # MacRoman
|
||||
name = makeName("Foo Italic", 222, 1, 0, 7) # MacRoman
|
||||
self.assertEqual([
|
||||
'<namerecord nameID="222" platformID="1" platEncID="0" langID="0x7" unicode="True">',
|
||||
' Foo Italic',
|
||||
@ -79,7 +98,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
], self.toXML(name))
|
||||
|
||||
def test_toXML_macroman_actual_utf16be(self):
|
||||
name = self.makeName("\0F\0o\0o", 222, 1, 0, 7)
|
||||
name = makeName("\0F\0o\0o", 222, 1, 0, 7)
|
||||
self.assertEqual([
|
||||
'<namerecord nameID="222" platformID="1" platEncID="0" langID="0x7" unicode="True">',
|
||||
' Foo',
|
||||
@ -87,7 +106,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
], self.toXML(name))
|
||||
|
||||
def test_toXML_unknownPlatEncID_nonASCII(self):
|
||||
name = self.makeName(b"B\x8arli", 333, 1, 9876, 7) # Unknown Mac encodingID
|
||||
name = makeName(b"B\x8arli", 333, 1, 9876, 7) # Unknown Mac encodingID
|
||||
self.assertEqual([
|
||||
'<namerecord nameID="333" platformID="1" platEncID="9876" langID="0x7" unicode="False">',
|
||||
' BŠrli',
|
||||
@ -95,7 +114,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
], self.toXML(name))
|
||||
|
||||
def test_toXML_unknownPlatEncID_ASCII(self):
|
||||
name = self.makeName(b"Barli", 333, 1, 9876, 7) # Unknown Mac encodingID
|
||||
name = makeName(b"Barli", 333, 1, 9876, 7) # Unknown Mac encodingID
|
||||
self.assertEqual([
|
||||
'<namerecord nameID="333" platformID="1" platEncID="9876" langID="0x7" unicode="True">',
|
||||
' Barli',
|
||||
@ -103,7 +122,7 @@ class NameRecordTest(unittest.TestCase):
|
||||
], self.toXML(name))
|
||||
|
||||
def test_encoding_macroman_misc(self):
|
||||
name = self.makeName('', 123, 1, 0, 17) # Mac Turkish
|
||||
name = makeName('', 123, 1, 0, 17) # Mac Turkish
|
||||
self.assertEqual(name.getEncoding(), "mac_turkish")
|
||||
name.langID = 37
|
||||
self.assertEqual(name.getEncoding(), "mac_romanian")
|
||||
@ -111,11 +130,11 @@ class NameRecordTest(unittest.TestCase):
|
||||
self.assertEqual(name.getEncoding(), "mac_roman")
|
||||
|
||||
def test_extended_mac_encodings(self):
|
||||
name = self.makeName(b'\xfe', 123, 1, 1, 0) # Mac Japanese
|
||||
name = makeName(b'\xfe', 123, 1, 1, 0) # Mac Japanese
|
||||
self.assertEqual(name.toUnicode(), unichr(0x2122))
|
||||
|
||||
def test_extended_unknown(self):
|
||||
name = self.makeName(b'\xfe', 123, 10, 11, 12)
|
||||
name = makeName(b'\xfe', 123, 10, 11, 12)
|
||||
self.assertEqual(name.getEncoding(), "ascii")
|
||||
self.assertEqual(name.getEncoding(None), None)
|
||||
self.assertEqual(name.getEncoding(default=None), None)
|
||||
|
Loading…
x
Reference in New Issue
Block a user