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 +