blob: ac2dee2c7e02ed7aba9c8466d3ee943217f5a980 [file] [log] [blame]
Just4977da41999-12-18 18:18:09 +00001<HTML>
2<HEAD>
3
4<TITLE>FontTools</TITLE>
5
6
7</HEAD>
8<BODY bgcolor="#FFFFFF">
9
10<H1>FontTools</H1>
11
jvrf5ccb352001-08-10 08:54:14 +000012<A HREF="http://fonttools.sourceforge.net/">FontTools</A> is a suite of tools and
13libraries for manipulating fonts. It is written
14in Python and has a BSD-style, open-source licence -- see LICENSE.txt. It's hosted at
15<A HREF="http://sourceforge.net/">sourceforge.net</A>.
Just4977da41999-12-18 18:18:09 +000016
17<P>
Juste5ad9c92000-03-15 20:56:20 +000018It currently reads and writes TrueType font files, reads PostScript Type 1 fonts
19and more. It contains two command line programs to convert TrueType fonts to an
20XML based format (called TTX) and back.
21
22<H3>Scope</H3>
23
24FontTools' functionality is aimed towards font developers and font tool developers.
25It can of course be used to just access fonts (outlines, metrics, etc.) but it is
26not optimized for that. It will be further developed so it can be the core of any
27font editor. And that's exactly what it will be for our upcoming major rewrite of
28<A HREF="http://www.robofog.com/">RoboFog</A>, our (commercial) PythonPowered font
29editor for MacOS.
30
31<H3>Installation</H3>
32
33You need the following software to use FontTools:
34
35<UL>
36<LI>
jvr8eb99922002-05-02 08:11:37 +000037 <B>Python</B>. The fresh versions as well as older versions (You need 2.0 or higher) can be obtained here:
jvrf5ccb352001-08-10 08:54:14 +000038 <A HREF="http://www.python.org/download/">http://www.python.org/download/</A>
39 or here:
40 <A HREF="http://sourceforge.net/projects/python/">http://sourceforge.net/projects/python/</A>
Juste5ad9c92000-03-15 20:56:20 +000041
jvrf5ccb352001-08-10 08:54:14 +000042 <P>Windows: grab the Windows installer, run the full install.
43 <BR>Un*x: follow the build instructions.
Juste5ad9c92000-03-15 20:56:20 +000044 <BR>MacOS: grab the installer, run "Easy Install"
Juste5ad9c92000-03-15 20:56:20 +000045<P>
46<LI>
jvrf5ccb352001-08-10 08:54:14 +000047 The <B>Numeric Python</B> extension (you don't need this under MacOS, since it's
48 included in the MacPython installer). Get a fresh version from the download page,
49 linked from here:
50 <A HREF="http://sourceforge.net/projects/numpy/">http://sourceforge.net/projects/numpy/</A>
51 <P>Windows: grab the "Numeric-*.exe" archive, it's an installer. Make sure the
52 Python version in the archive name (eg. "2.1") matches the Python version you have.
53 <BR>Linux/Un*x: get a source archive and run this command from the unpacked directory:
54 <BR><TT>python ./setup.py install</TT>
Juste5ad9c92000-03-15 20:56:20 +000055<P>
56<LI>
jvrf5ccb352001-08-10 08:54:14 +000057 <B>PyXML</B>, a set of XML tools:
58 <A HREF="http://sourceforge.net/projects/pyxml/">http://sourceforge.net/projects/pyxml/</A>
Juste5ad9c92000-03-15 20:56:20 +000059
jvrf5ccb352001-08-10 08:54:14 +000060 <BR>Installation should be very similar to installing Numeric Python, see above.
Juste5ad9c92000-03-15 20:56:20 +000061
62</UL>
63
64
jvrf5ccb352001-08-10 08:54:14 +000065Now run the "setup.py" script from the FontTools archive. This will install
66all the modules in the right places, as well as tries to compile the one (optional)
67C extension contained in FontTools. (XXX: need precompiled Mac and Windows binaries,
68*or* a way to skip compilation when there's no compiler available.)
Juste5ad9c92000-03-15 20:56:20 +000069
70<P>Additional Mac instructions:
71De-binhex "TTX.rsrc.hqx" by dropping it onto StuffIt expander. (Or use your
72own preferred method)
73The "TTX.py" script included in this archive is the Mac-only main program:
74Drop it onto the "BuildApplet" app inside the Python folder; this will
75produce the TTX applet.
76
77
78<H3>User documentation</H3>
79
80<P>For MacOS there's a small application called TTX. If you drop a TrueType file
81onto it, it will convert it to XML. If you drop an XML file onto it, it will
82convert it back to TrueType. Please read the additional README file in the Mac
83subdirectory, since it behaves quite differently than the command line programs
84described below.
85
86<P>For Unix and DOS I've provided two command line programs:
87<UL>
88 <LI>ttDump.py
89 <LI>ttCompile.py
90</UL>
91They do pretty much what you'd expect. They take several arguments:
92an input file name and optionally an output file name. There are some extra
93options which are explained by the 'usage' text; use the -h option to display
94it.
95
Juste5ad9c92000-03-15 20:56:20 +000096<P>Adam Twardoch contributed a Windows registry script (ttx_shellext_win32.py) which
97makes the two above tools available under the Right Mouse Button. I haven't tested
98these myself, but I'm very interested in hearing about the results!
99
Juste5ad9c92000-03-15 20:56:20 +0000100<H3>Note about glyph names and TrueType GlyphID's</H3>
101
102TrueType fonts use glyph indices (GlyphID's) to refer to glyphs in most places.
103While this is fine in binary form, it is really hard to work with for
104humans. Therefore we use names instead.
105
106<P>The names are derived from what is found in the 'post' table. It is
107possible that different glyphs use the same PS name. If this happens, we
108force the names to be unique by appending "#n" to the name (n being an
109integer number). The original PS names will still be maintained by the
110'post' table, so even though we use a different name internally, we are
111still able to write the 'post' table back in original form. If there is
112no proper 'post' table available, names will be derived from a Unicode
113cmap (if available) in conjuction with the Adobe Glyph List (see fontTools/agl.py).
114
115<P>Because the order in which glyphs are stored inside the TT font is
116important, ttLib maintains an ordered list of glyph names in the font.
117
118<H3>Feedback</H3>
119
jvrf5ccb352001-08-10 08:54:14 +0000120Please join the fonttools-discussion mailing list at SourceForge. Subscription
121info can be found if you follow the "Mailing Lists" link at the
122<A HREF="http://sourceforge.net/projects/fonttools/">SourceForge project page</A>.
123You can also email me directly at <A HREF="mailto:just@letterror.com">just@letterror.com</A>.
124
125<P>
126If you want to follow the development of FontTools closely, or would like to
127contribute, you can also subscribe to the fonttools-checkins mailing list.
Juste5ad9c92000-03-15 20:56:20 +0000128
129<H3>Anonymous CVS-access</H3>
130
jvrf5ccb352001-08-10 08:54:14 +0000131The FontTools sources are also accessible through CVS, see the
132the <A HREF="http://sourceforge.net/projects/fonttools/">SourceForge project
133page</A>. Let me know if you'd like to become a co-developer.
Juste5ad9c92000-03-15 20:56:20 +0000134
135<H3>Developer documentation</H3>
136
137Sorry, documentation beyond doc strings in the source code is still on my to-do list...
138Below follows a brief overview of what's there.
139
140
Just4977da41999-12-18 18:18:09 +0000141<H3>GUI Tools</H3>
Juste5ad9c92000-03-15 20:56:20 +0000142TTX -- A simple Mac app that converts TrueType (or OpenType) fonts to TTX format and back.
Just4977da41999-12-18 18:18:09 +0000143<P>
144<H3>Command line tools</H3>
145
Juste5ad9c92000-03-15 20:56:20 +0000146<UL>
jvrf5ccb352001-08-10 08:54:14 +0000147 <LI>ttDump.py -- dumps a TrueType (or OpenType) font file to TTX format.
148 <LI>ttCompile.py -- compiles a TTX file back into a TTF (or OTF) file.
Just4977da41999-12-18 18:18:09 +0000149</UL>
150
151<P>
152<H3>The library</H3>
153
154Cross-platform
Juste5ad9c92000-03-15 20:56:20 +0000155<UL>
156 <LI>fontTools.t1Lib -- Provides a Type 1 font reader. Writing is a planned feature.
157 <LI>fontTools.ttLib -- Extensive TrueType tools. Reads and writes. This is the flagship
158 of FontTools, it's by far the most mature component. Contains a completely modular
159 TTF table converter architecture. See ttLib/tables/table_API_readme.txt.
160 <LI>fontTools.afmLib -- And AFM file reader/writer.
161 <LI>fontTools.cffLib -- Reads CFF fonts. Writing is a planned feature.
162 <LI>fontTools.unicode -- A simple (but large) module that translates
163 Unicode values to their descriptive names. Still Unicode 2.0.
164 <LI>fontTools.agl -- Interface to the Adobe Glyph List: maps unicode values
165 to glyph names and back.
Just4977da41999-12-18 18:18:09 +0000166</UL>
167
168Mac-specific
Juste5ad9c92000-03-15 20:56:20 +0000169<UL>
170 <LI>fontTools.fondLib -- A reader/writer class for Mac FOND resources.
171 <LI>fontTools.nfntLib -- Reads Mac NFNT bitmap font resources.
Just4977da41999-12-18 18:18:09 +0000172</UL>
173
Juste5ad9c92000-03-15 20:56:20 +0000174<H3>Thank-you's</H3>
175
176(in alphabetical order)
177Erik van Blokland, Petr van Blokland, Jelle Bosma, Vincent Connare,
178Simon Daniels, Hannes Famira, Greg Hitchcock, Jack Jansen, Antoine Leca,
179Werner Lemberg, Peter Lofting, Dave Opstad, Laurence Penney,
180Guido van Rossum, Adam Twardoch.
181
182<H3>Copyrights</H3>
183
jvrf5ccb352001-08-10 08:54:14 +0000184FontTools/TTX -- 1999-2001 Just van Rossum; Letterror (just@letterror.com)
Just4977da41999-12-18 18:18:09 +0000185
186</BODY>
187</HTML>