FontTools

FontTools is a suite of tools and libraries for manipulating fonts. It is written in Python and has a Python-style, open-source licence -- see LICENSE.txt.

It currently reads and writes TrueType font files, reads PostScript Type 1 fonts and more. It contains two command line programs to convert TrueType fonts to an XML based format (called TTX) and back.

Scope

FontTools' functionality is aimed towards font developers and font tool developers. It can of course be used to just access fonts (outlines, metrics, etc.) but it is not optimized for that. It will be further developed so it can be the core of any font editor. And that's exactly what it will be for our upcoming major rewrite of RoboFog, our (commercial) PythonPowered font editor for MacOS.

Installation

You need the following software to use FontTools: Now run the "install.py" script from the FontTools archive. This will make sure Python knows where to find FontTools. It doesn't copy anything. (Note that the "install.py" script has only been lightly tested.)

Additional Mac instructions: De-binhex "TTX.rsrc.hqx" by dropping it onto StuffIt expander. (Or use your own preferred method) The "TTX.py" script included in this archive is the Mac-only main program: Drop it onto the "BuildApplet" app inside the Python folder; this will produce the TTX applet.

User documentation

For MacOS there's a small application called TTX. If you drop a TrueType file onto it, it will convert it to XML. If you drop an XML file onto it, it will convert it back to TrueType. Please read the additional README file in the Mac subdirectory, since it behaves quite differently than the command line programs described below.

For Unix and DOS I've provided two command line programs:

They do pretty much what you'd expect. They take several arguments: an input file name and optionally an output file name. There are some extra options which are explained by the 'usage' text; use the -h option to display it.

If you don't provide an output file name, an output file name will be contructed from the input file name: foo.ttf becomes foo.ttx in ttDump.py and vice versa for ttCompile.py. WARNING: these tools will silently overwrite existing files!

Adam Twardoch contributed a Windows registry script (ttx_shellext_win32.py) which makes the two above tools available under the Right Mouse Button. I haven't tested these myself, but I'm very interested in hearing about the results!

Note about glyph names and TrueType GlyphID's

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 names are derived from what is found in the 'post' table. It is possible that different glyphs use the same PS name. If this happens, we force the names to be unique by appending "#n" to the name (n being an integer number). The original PS names will still be maintained by the 'post' table, so even though we use a different name internally, we are still able to write the 'post' table back in original form. If there is no proper 'post' table available, names will be derived from a Unicode cmap (if available) in conjuction with the Adobe Glyph List (see fontTools/agl.py).

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

Feedback

Please direct all feedback to just@letterror.com. I hope to create a discussion mailing list at some point.

Anonymous CVS-access

The FontTools sources are also accessible through CVS:
    :pserver:fonttools@rietveld.petr.nl:/usr/local/cvsanon
    password: fontypython
    module name: FontTools

Developer documentation

Sorry, documentation beyond doc strings in the source code is still on my to-do list... Below follows a brief overview of what's there.

GUI Tools

TTX -- A simple Mac app that converts TrueType (or OpenType) fonts to TTX format and back.

Command line tools

The library

Cross-platform Mac-specific

The Future

In /Lib/fontTools/objects you'll find several objects-under-construction which will be (and partially are) a generic outline font implementation, offering transparent access to various font formats (currently only Type 1 and TTF/OTF). Plans:

Thank-you's

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

Copyrights

FontTools/TTX -- 1999-2000 Just van Rossum; Letterror (just@letterror.com)
Python -- Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands.
Numeric Python -- Copyright (c) 1996. The Regents of the University of California. All rights reserved.
xmlproc -- Lars Marius Garshol