| #! /usr/bin/env python3 | |
| # 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 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) |