lib/fontcustom/scripts/eotlitetool.py in fontcustom-1.3.8 vs lib/fontcustom/scripts/eotlitetool.py in fontcustom-2.0.0
- old
+ new
@@ -223,11 +223,11 @@
class FontError(Exception):
"""Error related to font handling"""
pass
def multichar(str):
- vals = struct.unpack('4B', str[:4])
+ vals = struct.unpack('4B', str[:4].encode('utf-8'))
return (vals[0] << 24) + (vals[1] << 16) + (vals[2] << 8) + vals[3]
def multicharval(v):
return struct.pack('4B', (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF)
@@ -287,23 +287,23 @@
def get_table_directory(data):
"""read the SFNT header and table directory"""
datalen = len(data)
sfntsize = struct.calcsize(OpenType.SFNT_UNPACK)
if sfntsize > datalen:
- raise FontError, 'truncated font data'
+ raise FontError('truncated font data')
sfntvers, numTables = struct.unpack(OpenType.SFNT_UNPACK, data[:sfntsize])[:2]
if sfntvers != OpenType.SFNT_CFF and sfntvers != OpenType.SFNT_TRUE:
- raise FontError, 'invalid font type';
+ raise FontError('invalid font type')
font = {}
font['version'] = sfntvers
font['numTables'] = numTables
# create set of offsets, lengths for tables
table_dir_size = struct.calcsize(OpenType.TABLE_DIR_UNPACK)
if sfntsize + table_dir_size * numTables > datalen:
- raise FontError, 'truncated font data, table directory extends past end of data'
+ raise FontError('truncated font data, table directory extends past end of data')
table_dir = {}
for i in range(0, numTables):
start = sfntsize + i * table_dir_size
end = start + table_dir_size
tag, check, bongo, dirlen = struct.unpack(OpenType.TABLE_DIR_UNPACK, data[start:end])
@@ -319,11 +319,11 @@
# read the header
headersize = 6
count, strOffset = struct.unpack('>2H', nametable[2:6])
namerecsize = struct.calcsize(OpenType.NAME_RECORD_UNPACK)
if count * namerecsize + headersize > len(nametable):
- raise FontError, 'names exceed size of name table'
+ raise FontError('names exceed size of name table')
name['count'] = count
name['strOffset'] = strOffset
# read through the name records
namerecs = {}
@@ -361,11 +361,11 @@
nstr = struct.unpack('>' + nformat, fontdata[start:end])
nameheaders.append(struct.pack('<H' + nformat + '2x', nlen, *nstr))
else:
nameheaders.append(struct.pack('4x')) # len = 0, padding = 0
- return ''.join(nameheaders)
+ return b''.join(nameheaders)
# just return a null-string (len = 0)
def make_root_string():
return struct.pack('2x')
@@ -379,11 +379,11 @@
# check for required tables
required = (OpenType.TABLE_HEAD, OpenType.TABLE_NAME, OpenType.TABLE_OS2)
for table in required:
if not (table in tableDir):
- raise FontError, 'missing required table ' + multicharval(table)
+ raise FontError('missing required table ' + multicharval(table))
# read name strings
# pull out data from individual tables to construct fixed header portion
# need to calculate eotSize before packing
@@ -396,11 +396,11 @@
os2Dir = tableDir[OpenType.TABLE_OS2]
os2offset = os2Dir['offset']
os2size = struct.calcsize(OpenType.OS2_UNPACK)
if os2size > os2Dir['length']:
- raise FontError, 'OS/2 table invalid length'
+ raise FontError('OS/2 table invalid length')
os2fields = struct.unpack(OpenType.OS2_UNPACK, fontdata[os2offset : os2offset + os2size])
panose = []
urange = []
@@ -418,11 +418,11 @@
headDir = tableDir[OpenType.TABLE_HEAD]
headoffset = headDir['offset']
headsize = struct.calcsize(OpenType.HEAD_UNPACK)
if headsize > headDir['length']:
- raise FontError, 'head table invalid length'
+ raise FontError('head table invalid length')
headfields = struct.unpack(OpenType.HEAD_UNPACK, fontdata[headoffset : headoffset + headsize])
checkSumAdjustment = headfields[0]
# make name headers
@@ -433,15 +433,15 @@
eotSize = struct.calcsize(EOT.EOT_HEADER_PACK) + len(nameheaders) + len(rootstring) + fontDataSize
fixed = struct.pack(EOT.EOT_HEADER_PACK,
*([eotSize, fontDataSize, version, flags] + panose + [charset, italic] +
[weight, fsType, magicNumber] + urange + codepage + [checkSumAdjustment]))
- return ''.join((fixed, nameheaders, rootstring))
+ return b''.join((fixed, nameheaders, rootstring))
def write_eot_font(eot, header, data):
- open(eot,'wb').write(''.join((header, data)))
+ open(eot,'wb').write(b''.join((header, data)))
return
def main():
# deal with options
@@ -451,16 +451,16 @@
# iterate over font files
for f in args:
data = readfont(f)
if len(data) == 0:
- print 'Error reading %s' % f
+ print('Error reading %s' % f)
else:
eot = eotname(f)
header = make_eot_header(data)
write_eot_font(eot, header, data)
if __name__ == '__main__':
main()
-
\ No newline at end of file
+