Example #1
0
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)
Example #2
0
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
Example #3
0
	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))
Example #4
0
	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, [])
Example #5
0
    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
Example #6
0
	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)
Example #7
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