| <HTML> |
| <HEAD> |
| |
| <TITLE>FontTools</TITLE> |
| |
| |
| </HEAD> |
| <BODY bgcolor="#FFFFFF"> |
| |
| <H1>FontTools</H1> |
| |
| <A HREF="http://fonttools.sourceforge.net/">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> |
| |
| 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 1.5.1 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>Linux: maybe you already *have* Python: check whether you have |
| version 1.5.1 or newer. |
| <BR>MacOS: grab the installer, run "Easy Install" |
| |
| <P><B>Important:</B> If you have (or decided to install) a Python version |
| earlier than 2.0, you must also install |
| <A HREF="http://www.python.org/sigs/distutils-sig/download.html">distutils</A>, |
| a set of tools to help build and install Python packages. (It is included with |
| Python 2.0 and higher.) |
| <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 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. |
| |
| <P>For Unix and DOS I've provided two command line programs: |
| <UL> |
| <LI>ttDump.py |
| <LI>ttCompile.py |
| </UL> |
| 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. |
| |
| <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. |
| |
| |
| <H3>GUI Tools</H3> |
| TTX -- A simple Mac app that converts TrueType (or OpenType) fonts to TTX format and back. |
| <P> |
| <H3>Command line tools</H3> |
| |
| <UL> |
| <LI>ttDump.py -- dumps a TrueType (or OpenType) font file to TTX format. |
| <LI>ttCompile.py -- compiles a TTX file back into a TTF (or OTF) file. |
| </UL> |
| |
| <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-2001 Just van Rossum; Letterror (just@letterror.com) |
| |
| </BODY> |
| </HTML> |