diff --git a/Snippets/cmap-format.py b/Snippets/cmap-format.py new file mode 100755 index 000000000..0cee39c5b --- /dev/null +++ b/Snippets/cmap-format.py @@ -0,0 +1,40 @@ +#! /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)