| <HTML> |
| <HEAD> |
| |
| <TITLE>TTX/FontTools</TITLE> |
| |
| |
| </HEAD> |
| <BODY bgcolor="#FFFFFF"> |
| |
| <H1>TTX/FontTools</H1> |
| |
| <A HREF="http://fonttools.sourceforge.net/">TTX/FontTools</A> is a |
| suite of tools and libraries for manipulating fonts. It is written in |
| Python and has a BSD-style, open-source licence -- see LICENSE.txt. |
| It's hosted at <A HREF="http://sourceforge.net/">sourceforge.net</A>. |
| |
| <P> |
| 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. |
| |
| <H3>Scope</H3> |
| |
| 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 <A |
| HREF="http://www.robofog.com/">RoboFog</A>, our (commercial) |
| PythonPowered font editor for MacOS. |
| |
| <H3>Installation</H3> |
| |
| You need the following software to use FontTools: |
| |
| <UL> |
| <LI> |
| <B>Python</B>. The fresh versions as well as older versions (You need 2.0 or higher) can be obtained here: |
| <A HREF="http://www.python.org/download/">http://www.python.org/download/</A> |
| or here: |
| <A HREF="http://sourceforge.net/projects/python/">http://sourceforge.net/projects/python/</A> |
| |
| <P>Windows: grab the Windows installer, run the full install. |
| <BR>Un*x: follow the build instructions. |
| <BR>MacOS: grab the installer, run "Easy Install" |
| <P> |
| <LI> |
| The <B>Numeric Python</B> extension (you don't need this under MacOS, since it's |
| included in the MacPython installer). Get a fresh version from the download page, |
| linked from here: |
| <A HREF="http://sourceforge.net/projects/numpy/">http://sourceforge.net/projects/numpy/</A> |
| <P>Windows: grab the "Numeric-*.exe" archive, it's an installer. Make sure the |
| Python version in the archive name (eg. "2.1") matches the Python version you have. |
| <BR>Linux/Un*x: get a source archive and run this command from the unpacked directory: |
| <BR><TT>python setup.py install</TT> |
| <P> |
| <LI> |
| <B>PyXML</B>, a set of XML tools: |
| <A HREF="http://sourceforge.net/projects/pyxml/">http://sourceforge.net/projects/pyxml/</A> |
| |
| <BR>Installation should be very similar to installing Numeric Python, see above. |
| |
| </UL> |
| |
| |
| 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. (XXX: need precompiled Mac and Windows binaries, |
| *or* a way to skip compilation when there's no compiler available.) |
| |
| <P>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. |
| |
| |
| <H3>User documentation</H3> |
| |
| <P>For Unix and DOS there are three command line programs: |
| <UL> |
| <LI>ttdump -- dumps a TrueType (or OpenType) font file to TTX format. |
| <LI>ttcompile -- compiles a TTX file back into a TTF (or OTF) file. |
| <LI>ttlist -- lists minimal info about each table in a font. |
| </UL> |
| They can all work with multiple input files. There are some extra |
| options which are explained by the 'usage' text; use the -h option to |
| display it. The setup.py script installs them as global tools, the |
| source is in the Tools directory. |
| |
| <P>For MacOS there's a 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. |
| |
| <P>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! |
| |
| <H3>Note about glyph names and TrueType GlyphID's</H3> |
| |
| 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. |
| |
| <P>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). |
| |
| <P>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. |
| |
| <H3>Feedback</H3> |
| |
| Please join the fonttools-discussion mailing list at SourceForge. Subscription |
| info can be found if you follow the "Mailing Lists" link at the |
| <A HREF="http://sourceforge.net/projects/fonttools/">SourceForge project page</A>. |
| You can also email me directly at <A HREF="mailto:just@letterror.com">just@letterror.com</A>. |
| |
| <P> |
| 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. |
| |
| <H3>Anonymous CVS-access</H3> |
| |
| The FontTools sources are also accessible through CVS, see the |
| the <A HREF="http://sourceforge.net/projects/fonttools/">SourceForge project |
| page</A>. Let me know if you'd like to become a co-developer. |
| |
| <H3>Developer documentation</H3> |
| |
| 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. |
| |
| <P> |
| <H3>The library</H3> |
| |
| Cross-platform |
| <UL> |
| <LI>fontTools.t1Lib -- Provides a Type 1 font reader. Writing is a planned feature. |
| <LI>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. |
| <LI>fontTools.afmLib -- And AFM file reader/writer. |
| <LI>fontTools.cffLib -- Reads CFF fonts. Writing is a planned feature. |
| <LI>fontTools.unicode -- A simple (but large) module that translates |
| Unicode values to their descriptive names. Still Unicode 2.0. |
| <LI>fontTools.agl -- Interface to the Adobe Glyph List: maps unicode values |
| to glyph names and back. |
| </UL> |
| |
| Mac-specific |
| <UL> |
| <LI>fontTools.fondLib -- A reader/writer class for Mac FOND resources. |
| <LI>fontTools.nfntLib -- Reads Mac NFNT bitmap font resources. |
| </UL> |
| |
| <H3>Thank-you's</H3> |
| |
| (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. |
| |
| <H3>Copyrights</H3> |
| |
| FontTools/TTX -- 1999-2002 Just van Rossum; Letterror (just@letterror.com) |
| |
| </BODY> |
| </HTML> |