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 namerecord
|
||||||
return None # not found
|
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):
|
class NameRecord(object):
|
||||||
|
|
||||||
|
@ -1,34 +1,53 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import print_function, division, absolute_import, unicode_literals
|
from __future__ import print_function, division, absolute_import, unicode_literals
|
||||||
from fontTools.misc.py23 import *
|
from fontTools.misc.py23 import *
|
||||||
from fontTools.misc.xmlWriter import XMLWriter
|
from fontTools.misc.xmlWriter import XMLWriter
|
||||||
import unittest
|
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):
|
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):
|
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("utf_16_be", name.getEncoding())
|
||||||
self.assertEqual("Foo Bold", name.toUnicode())
|
self.assertEqual("Foo Bold", name.toUnicode())
|
||||||
|
|
||||||
def test_toUnicode_macroman(self):
|
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("mac_roman", name.getEncoding())
|
||||||
self.assertEqual("Foo Italic", name.toUnicode())
|
self.assertEqual("Foo Italic", name.toUnicode())
|
||||||
|
|
||||||
def test_toUnicode_macromanian(self):
|
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("mac_romanian", name.getEncoding())
|
||||||
self.assertEqual("Foo Italic"+unichr(0x02DA), name.toUnicode())
|
self.assertEqual("Foo Italic"+unichr(0x02DA), name.toUnicode())
|
||||||
|
|
||||||
def test_toUnicode_UnicodeDecodeError(self):
|
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.assertEqual("utf_16_be", name.getEncoding())
|
||||||
self.assertRaises(UnicodeDecodeError, name.toUnicode)
|
self.assertRaises(UnicodeDecodeError, name.toUnicode)
|
||||||
|
|
||||||
@ -39,7 +58,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
return xml.split(writer.newlinestr.decode("utf_8"))[1:]
|
return xml.split(writer.newlinestr.decode("utf_8"))[1:]
|
||||||
|
|
||||||
def test_toXML_utf16be(self):
|
def test_toXML_utf16be(self):
|
||||||
name = self.makeName("Foo Bold", 111, 0, 2, 7)
|
name = makeName("Foo Bold", 111, 0, 2, 7)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
||||||
' Foo Bold',
|
' Foo Bold',
|
||||||
@ -47,7 +66,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
], self.toXML(name))
|
], self.toXML(name))
|
||||||
|
|
||||||
def test_toXML_utf16be_odd_length1(self):
|
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([
|
self.assertEqual([
|
||||||
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
||||||
' Foo',
|
' Foo',
|
||||||
@ -55,7 +74,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
], self.toXML(name))
|
], self.toXML(name))
|
||||||
|
|
||||||
def test_toXML_utf16be_odd_length2(self):
|
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([
|
self.assertEqual([
|
||||||
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
||||||
' Fooz',
|
' Fooz',
|
||||||
@ -63,7 +82,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
], self.toXML(name))
|
], self.toXML(name))
|
||||||
|
|
||||||
def test_toXML_utf16be_double_encoded(self):
|
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([
|
self.assertEqual([
|
||||||
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
'<namerecord nameID="111" platformID="0" platEncID="2" langID="0x7">',
|
||||||
' Fo',
|
' Fo',
|
||||||
@ -71,7 +90,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
], self.toXML(name))
|
], self.toXML(name))
|
||||||
|
|
||||||
def test_toXML_macroman(self):
|
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([
|
self.assertEqual([
|
||||||
'<namerecord nameID="222" platformID="1" platEncID="0" langID="0x7" unicode="True">',
|
'<namerecord nameID="222" platformID="1" platEncID="0" langID="0x7" unicode="True">',
|
||||||
' Foo Italic',
|
' Foo Italic',
|
||||||
@ -79,7 +98,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
], self.toXML(name))
|
], self.toXML(name))
|
||||||
|
|
||||||
def test_toXML_macroman_actual_utf16be(self):
|
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([
|
self.assertEqual([
|
||||||
'<namerecord nameID="222" platformID="1" platEncID="0" langID="0x7" unicode="True">',
|
'<namerecord nameID="222" platformID="1" platEncID="0" langID="0x7" unicode="True">',
|
||||||
' Foo',
|
' Foo',
|
||||||
@ -87,7 +106,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
], self.toXML(name))
|
], self.toXML(name))
|
||||||
|
|
||||||
def test_toXML_unknownPlatEncID_nonASCII(self):
|
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([
|
self.assertEqual([
|
||||||
'<namerecord nameID="333" platformID="1" platEncID="9876" langID="0x7" unicode="False">',
|
'<namerecord nameID="333" platformID="1" platEncID="9876" langID="0x7" unicode="False">',
|
||||||
' BŠrli',
|
' BŠrli',
|
||||||
@ -95,7 +114,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
], self.toXML(name))
|
], self.toXML(name))
|
||||||
|
|
||||||
def test_toXML_unknownPlatEncID_ASCII(self):
|
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([
|
self.assertEqual([
|
||||||
'<namerecord nameID="333" platformID="1" platEncID="9876" langID="0x7" unicode="True">',
|
'<namerecord nameID="333" platformID="1" platEncID="9876" langID="0x7" unicode="True">',
|
||||||
' Barli',
|
' Barli',
|
||||||
@ -103,7 +122,7 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
], self.toXML(name))
|
], self.toXML(name))
|
||||||
|
|
||||||
def test_encoding_macroman_misc(self):
|
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")
|
self.assertEqual(name.getEncoding(), "mac_turkish")
|
||||||
name.langID = 37
|
name.langID = 37
|
||||||
self.assertEqual(name.getEncoding(), "mac_romanian")
|
self.assertEqual(name.getEncoding(), "mac_romanian")
|
||||||
@ -111,11 +130,11 @@ class NameRecordTest(unittest.TestCase):
|
|||||||
self.assertEqual(name.getEncoding(), "mac_roman")
|
self.assertEqual(name.getEncoding(), "mac_roman")
|
||||||
|
|
||||||
def test_extended_mac_encodings(self):
|
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))
|
self.assertEqual(name.toUnicode(), unichr(0x2122))
|
||||||
|
|
||||||
def test_extended_unknown(self):
|
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(), "ascii")
|
||||||
self.assertEqual(name.getEncoding(None), None)
|
self.assertEqual(name.getEncoding(None), None)
|
||||||
self.assertEqual(name.getEncoding(default=None), None)
|
self.assertEqual(name.getEncoding(default=None), None)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user