blob: c550e74ac88699e61109b01cddb5f681b0648507 [file] [log] [blame]
#! /usr/bin/env python
"""\
usage: %s [-hvisf] [-t <table>] [-x <table>] [-d <output-dir>] TrueType-file(s)
Dump TrueType fonts as TTX files (an XML-based text format).
Options:
-h Help: print this message
-v Verbose: messages will be written to stdout about what is
being done.
-i Disassemble TT instructions: when this option is given, all
TrueType programs (glyph programs, the font program and the
pre-program) will be written to the TTX file as assembly instead
of hex data.
-s Split tables: save the TTX data into separate TTX files per table.
The files will be saved in a directory. The name of this
directory will be constructed from the input filename (by
dropping the extension) or can be specified by the optional
TTX-output-file argument. This option implies -f.
-f Force overwriting existing files.
-d <output-dir> Specify a directory in which the output file(s)
should end up. The directory must exist.
-t <table> Specify a table to dump. Multiple -t options
are allowed. When no -t option is specified, all tables
will be dumped.
-x <table> Specify a table to exclude from the dump. Multiple
-x options are allowed. -t and -x are mutually exclusive.
"""
import sys, os, getopt
from fontTools import ttLib
options, args = getopt.getopt(sys.argv[1:], "hvisft:x:d:")
# default values
verbose = 0
splitTables = 0
disassembleInstructions = 0
forceOverwrite = 0
tables = []
skipTables = []
outputDir = None
for option, value in options:
if option == "-t":
if len(value) > 4:
print "illegal table tag: " + value
sys.exit(2)
# normalize tag
value = value + (4 - len(value)) * " "
tables.append(value)
elif option == "-x":
if len(value) > 4:
print "illegal table tag: " + value
sys.exit(2)
# normalize tag
value = value + (4 - len(value)) * " "
skipTables.append(value)
elif option == "-d":
outputDir = value
elif option == "-v":
verbose = 1
elif option == "-f":
forceOverwrite = 1
elif option == "-h":
print __doc__ % sys.argv[0]
sys.exit(0)
elif option == "-s":
splitTables = 1
elif option == "-i":
disassembleInstructions = 1
if tables and skipTables:
print "-t and -x options are mutually exlusive"
sys.exit(2)
if not args:
print __doc__ % sys.argv[0]
sys.exit(2)
for ttPath in args:
path, ext = os.path.splitext(ttPath)
if outputDir is not None:
fileName = os.path.basename(path)
path = os.path.join(outputDir, fileName)
if splitTables:
xmlPath = path
else:
xmlPath = path + ".ttx"
if not forceOverwrite and os.path.exists(xmlPath):
answer = raw_input('Overwrite "%s"? ' % xmlPath)
if not answer[:1] in ("Y", "y"):
print "skipped."
continue
print 'Dumping "%s" to "%s"...' % (ttPath, xmlPath)
tt = ttLib.TTFont(ttPath, 0, verbose=verbose)
tt.saveXML(xmlPath, tables=tables, skipTables=skipTables,
splitTables=splitTables, disassembleInstructions=disassembleInstructions)