### TTX -- From OpenType and TrueType to XML and Back

TTX is a tool for manipulating TrueType and OpenType fonts. It is written in Python and has a BSD-style, open-source licence -- see LICENSE.txt. Among other things this means you can use it free of charge. It's hosted at sourceforge.net.

TTX can dump TrueType and OpenType fonts to an XML-based text format, which is also called TTX. TTX files have a .ttx file extension.

### How to use TTX

The TTX application works can be used in two ways, depending on what platform you run it on:

- As a command line tool (Windows/DOS, Unix, MacOSX)
- By dropping files onto the application (Windows, MacOS)

TTX detects what kind of files it is fed: it will output a .ttx file when it sees a .ttf or .otf, and it will compile a .ttf or .otf when the input file is a .ttx file. By default, the output file is created in the same folder as the input file, and will have the same name as the input file but with a different extension. TTX will never overwrite existing files, but if neccesary will append a unique number to the output filename (before the extension), eg.: "Arial#1.ttf".

When using TTX from the command line there are a bunch of extra options, these are explained in the help text, as displayed when typing "ttx -h" at the command prompt. These additional options include:

- specifying the folder where the output files are created
- specifying which tables to dump or which tables to exclude
- merging partial .ttx files with existing .ttf or .otf files
- listing brief table info isntead of dumping to .ttx
- splitting tables to separate .ttx files
- disabling TT instruction disassembly

### The TTX file format

The following tables are currently supported:
BASE, CFF, DSIG, GDEF, GPOS, GSUB, JSTF, LTSH, OS/2, TSI0, TSI1, TSI2, TSI3, TSI5, TSIB, TSID, TSIJ, TSIP, TSIS, TSIV, cmap, cvt, fpgm, gasp, glyf, hdmx, head, hhea, hmtx, kern, loca, maxp, name, post, prep, vhea and vmtx
Other tables are dumped as hexadecimal data.

TrueType fonts use glyph indices (GlyphID's) to refer to glyphs in most places. While this is fine in binary form, it is really hard to work with for humans. Therefore we use names instead.

The glyph names are either extracted from the 'CFF ' table or the 'post' table, or are derived from a Unicode 'cmap' table. In the latter case the Adobe Glyph List is used to calculate names based on Unicode values. If all of these mthods fail, names are invented based on GlyphID (eg. "glyph00142").

It is possible that different glyphs use the same name. If this happens, we force the names to be unique by appending "#n" to the name (n being an integer number). The original names are being kept, so this has no influence on a "round tripped" font.

Because the order in which glyphs are stored inside the TT font is important, we maintain an ordered list of glyph names in the font.

### Development and feedback

TTX/FontTools development is ongoing, but often goes in spurts. Feature requests and bug reports are always welcome. The best place for these is currently the fonttools-discussion mailing list at SourceForge. This list is both for discussion TTX from an end-user perspective as well as TTX/FontTools development. Subscription info can be found if you follow the "Mailing Lists" link at the SourceForge project page. You can also email me directly at just@letterror.com.

Let me take this opportunity to mention that if you have special needs (eg. custom font monipulators, dufferent table formats, etc.): I am available for contracting.

### Credits

Windows setup script: Adam Twardoch
Icon: Hannes Famira

### Acknowledgements

(in alphabetical order) Erik van Blokland, Petr van Blokland, Jelle Bosma, Vincent Connare, Simon Daniels, Hannes Famira, Greg Hitchcock, John Hudson, Jack Jansen, Antoine Leca, Werner Lemberg, Peter Lofting, Dave Opstad, Laurence Penney, Guido van Rossum, Andreas Seidel, Adam Twardoch.

### Copyrights

FontTools/TTX -- 1999-2002 Just van Rossum; Letterror (just@letterror.com)
See LICENCE.txt for the full license.