def add_name(font, string, nameID): nameTable = font.get("name") if nameTable is None: nameTable = font["name"] = table__n_a_m_e() nameTable.names = [] namerec = NameRecord() namerec.nameID = nameID namerec.string = string.encode('mac_roman') namerec.platformID, namerec.platEncID, namerec.langID = (1, 0, 0) nameTable.names.append(namerec)
def AddName(font, name): nameTable = font.get("name") if nameTable is None: nameTable = font["name"] = table__n_a_m_e() nameTable.names = [] namerec = NameRecord() namerec.nameID = 1 + max([n.nameID for n in nameTable.names] + [256]) namerec.string = name.encode('mac_roman') namerec.platformID, namerec.platEncID, namerec.langID = (1, 0, 0) nameTable.names.append(namerec) return namerec
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))
def test_decompile_badOffset(self): # https://github.com/behdad/fonttools/issues/525 table = table__n_a_m_e() badRecord = { "platformID": 1, "platEncID": 3, "langID": 7, "nameID": 1, "length": 3, "offset": 8765 # out of range } data = bytesjoin([ struct.pack(">HHH", 1, 1, 6 + nameRecordSize), sstruct.pack(nameRecordFormat, badRecord)]) table.decompile(data, ttFont=None) self.assertEqual(table.names, [])
def add_name_table(self): # FontForge doesn't support all font fields, so we use FontTools. self.name_table = table__n_a_m_e() self.name_table.names = [] tn = self.conf['table_name'] # Set the values that will always exist. self.add_name_records(tn['family'], NR.FAMILY) self.add_name_records(tn['subfamily'], NR.SUBFAMILY) fullname = '' if 'full_name' in tn: fullname = tn['full_name'] else: fullname = "{} {}".format(tn['family'], tn['subfamily']) self.add_name_records(fullname, NR.FULL_NAME) # Add the build date to the version now = time.strftime('%Y%m%d') version = "{} {}".format(tn['version'], now) self.add_name_records(version, NR.VERSION) # Add the build date to the unique id unique_id = '' if 'unique_id' in tn: unique_id = "{} {}".format(tn['unique_id'], now) else: unique_id = now self.add_name_records(unique_id, NR.UNIQUE_ID) # Set the values that don't always exist for key, name_id in ( ('copyright', NR.COPYRIGHT), ('postscript_name', NR.PS_NAME), ('trademark', NR.TRADEMARK), ('manufacturer', NR.MANUFACTURER), ('designer', NR.DESIGNER), ('description', NR.DESCRIPTION), ('url_vendor', NR.URL_VENDOR), ('url_designer', NR.URL_DESIGNER), ('license', NR.LICENSE), ('url_license', NR.URL_LICENSE)): if key in tn: self.add_name_records(tn[key], name_id) self.font['name'] = self.name_table
def test_setName(self): table = table__n_a_m_e() table.setName("Regular", 2, 1, 0, 0) table.setName("Version 1.000", 5, 3, 1, 0x409) table.setName("寬鬆", 276, 1, 2, 0x13) self.assertEqual("Regular", table.getName(2, 1, 0, 0).toUnicode()) self.assertEqual("Version 1.000", table.getName(5, 3, 1, 0x409).toUnicode()) self.assertEqual("寬鬆", table.getName(276, 1, 2, 0x13).toUnicode()) self.assertTrue(len(table.names) == 3) table.setName("緊縮", 276, 1, 2, 0x13) self.assertEqual("緊縮", table.getName(276, 1, 2, 0x13).toUnicode()) self.assertTrue(len(table.names) == 3) # passing bytes issues a warning with CapturingLogHandler(log, "WARNING") as captor: table.setName(b"abc", 0, 1, 0, 0) self.assertTrue( len([r for r in captor.records if "string is bytes" in r.msg]) == 1) # anything other than unicode or bytes raises an error with self.assertRaises(TypeError): table.setName(1.000, 5, 1, 0, 0)
def test_addName(self): table = table__n_a_m_e() nameIDs = [] for string in ("Width", "Weight", "Custom"): nameIDs.append(table.addName(string)) self.assertEqual(nameIDs[0], 256) self.assertEqual(nameIDs[1], 257) self.assertEqual(nameIDs[2], 258) self.assertEqual(len(table.names), 6) self.assertEqual(table.names[0].string, "Width") self.assertEqual(table.names[1].string, "Width") self.assertEqual(table.names[2].string, "Weight") self.assertEqual(table.names[3].string, "Weight") self.assertEqual(table.names[4].string, "Custom") self.assertEqual(table.names[5].string, "Custom") with self.assertRaises(ValueError): table.addName('Invalid nameID', minNameID=32767) with self.assertRaises(TypeError): table.addName(b"abc") # must be unicode string