TTX/FontTools

TTX/FontTools is a suite of tools for manipulating fonts. It is written in
Python and has a BSD-style, open-source licence -- see LICENSE.txt.
It's hosted at http://sourceforge.net/.

The flagship is TTX, a tool to convert OpenType and TrueType font files to
an XML-based format (also called TTX), and back. This lets you edit TTF or
OTF files with any text editor.

The FontTools library currently reads and writes TrueType font files, reads
PostScript Type 1 fonts and more.


Scope

TTX/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

For Windows and MacOS there are easy-to-use TTX installers. The rest if this
document is meant for people who want to use TTX/FontTools from the source.

You need the following software:

Python
  The fresh versions as well as older versions (You need 2.0 or higher)
  can be downloaded from
     http://www.python.org/download/
  or here
     http://sourceforge.net/projects/python/
  
  Windows: grab the Windows installer, run the full install.
  Un*x: follow the build instructions.
  MacOS: grab the installer, run "Easy Install"

The numpy extension
  See http://numpy.scipy.org/

Now run the "setup.py" script from the FontTools archive. This will install
all the modules in the right places, as well as tries to compile the one
(optional) C extension contained in FontTools. On Unix it also installs the
"ttx" command line tool. This tool can also be used on Windows, but might
need some fiddling.

For instructions how to build a standalone Windows installer, see
Windows/README.TXT. Thanks a LOT to Adam Twardoch for this essential
contribution.

For TTX usage instructions, see the file "documentation.html".


Feedback

Please join the fonttools-discussion mailing list at SourceForge. Subscription
info can be found if you follow the "Mailing Lists" link at the SourceForge
project page:
  http://sourceforge.net/projects/fonttools/
You can also email me directly at just@letterror.com.

If you want to follow the development of FontTools closely, or would like to
contribute, you can also subscribe to the fonttools-checkins mailing list.


Anonymous VCS access

The FontTools sources are also accessible here:
  http://sourceforge.net/projects/fonttools/
Let me know if you'd like to become a co-developer.


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.


The library

  Cross-platform
     fontTools.t1Lib -- Provides a Type 1 font reader. Writing is a planned feature.
     fontTools.ttLib -- Extensive TrueType tools. Reads and writes. This is the flagship 
	 of FontTools, it's by far the most mature component. Contains a completely modular
	 TTF table converter architecture. See ttLib/tables/table_API_readme.txt.
     fontTools.afmLib -- And AFM file reader/writer.
     fontTools.cffLib -- Reads CFF fonts. Writing is a planned feature.
     fontTools.unicode -- A simple (but large) module that translates 
	 Unicode values to their descriptive names. Still Unicode 2.0.
     fontTools.agl -- Interface to the Adobe Glyph List: maps unicode values
	 to glyph names and back.

  Mac-specific
     fontTools.fondLib -- A reader/writer class for Mac FOND resources.
     fontTools.nfntLib -- Reads Mac NFNT bitmap font resources.


Thank-you's

(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, Adam Twardoch. 

Copyrights

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