#! /usr/bin/env python # Sample script to convert legacy cmap subtables to format-4 # subtables. Note that this is rarely what one needs. You # probably need to just drop the legacy subtables if the font # already has a format-4 subtable. # # Other times, you would need to convert a non-Unicode cmap # legacy subtable to a Unicode one. In those cases, use the # getEncoding() of subtable and use that encoding to map the # characters to Unicode... TODO: Extend this script to do that. from __future__ import print_function, division, absolute_import from fontTools.misc.py23 import * from fontTools.ttLib import TTFont from fontTools.ttLib.tables._c_m_a_p import CmapSubtable import sys if len(sys.argv) != 3: print("usage: cmap-format.py fontfile.ttf outfile.ttf") sys.exit(1) fontfile = sys.argv[1] outfile = sys.argv[2] font = TTFont(fontfile) cmap = font['cmap'] outtables = [] for table in cmap.tables: if table.format in [4, 12, 13, 14]: outtables.append(table) # Convert ot format4 newtable = CmapSubtable.newSubtable(4) newtable.platformID = table.platformID newtable.platEncID = table.platEncID newtable.language = table.language newtable.cmap = table.cmap outtables.append(newtable) cmap.tables = outtables font.save(outfile)