[Snippets] Add script for cmap subtable format conversion
Fixes https://github.com/behdad/fonttools/issues/340
This commit is contained in:
parent
b23d7cba8c
commit
b7e2391e66
40
Snippets/cmap-format.py
Executable file
40
Snippets/cmap-format.py
Executable file
@ -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)
|
Loading…
x
Reference in New Issue
Block a user