# FontForge

FontForge -- An outline font editor that lets you create your own postscript, truetype, opentype, cid-keyed, multi-master, cff, svg and bitmap (bdf) fonts, or edit existing ones. Also lets you convert one format to another. FontForge has support for many macintosh font formats.

FontForge's user interface has been localized for: (English), Russian, Japanese, French, Italian, Spanish.

Contents

- User & Reference manual. (downloadable)-- Shorter tutorial html - pdf - example files
- SourceForge Project page / SourceForge File Release System
- Downloads
  - Binary
  - Source (tarball)
    - File Release System
    - Browse the CVS tree
    - Brief description of other ways to get CVS
    - CVS Manual
  - External libraries used (but not required)
  - Helper files for editing CID keyed fonts
  - Suggested fonts
  - Configuring a wacom tablet
  - Documentation
  - A library sfd fonts
- Companion programs
  - sfddiff man page
  - acorn2sfd man page
  - random font utilities
- License
- Future Improvements
- Change Log (older changes, even older changes -- to PfaEdit)
- FAQ
- Things missing...
- Mailing Lists
- Known Bugs
- Reporting Bugs
- How else you can help
- Acknowledgements
- Font File Formats (standards)
- Unicode
- Books
- Related tools

I have no one to do QA for me except users on the net, so this is essentially (and eternally) beta software. Expect to find bugs. Please let me know when you do.

## Binary distributions:

- File Release System
- Apostolos Syropoulos has a Solaris x86 package at his site
- A debian package is available at the debian site.
- A netbsd package is available at the netbsd site.
- How to install FontForge on Mac OS/X
- How to install FontForge under windows
- An OpenVMS executable (by Jacob Jansen)

- FontForge used to be called PfaEdit. Previous releases may be found at http://pfaedit.sf.net/oldindex.html

See the dependencies section below for external libraries/programs you may want to add to your system to enhance FontForge's capabilities.

## Source distribution

You can download the source tree in one .tgz file: Version 24-June-2005
Or there's a test version (24-June)
Or you can go to the cvs tree and get the most recent version. (This may be delayed by 24 hours)

#### Anonymous cvs

To download the entire source package (including documentation), create a new directory, cd into it and use anonymous cvs (with no password):

    $ cvs -d:pserver:anonymous@cvs1.sourceforge.net:/cvsroot/fontforge login
    CVS password:
    $ cvs -d:pserver:anonymous@cvs1.sourceforge.net:/cvsroot/fontforge checkout fontforge

Or see sourceforge's description for more information (their information is out of date, the correct server is cvs1.sf.net not cvs.sf.net)

## Dependencies

If you want to do autotracing around character images you should also download either

- Martin Weber's autotrace program.
- Peter Selinger's potrace

If you want to edit CID keyed fonts you need these character set descriptions. (These were last updated 22-Dec-2004)

You might want a copy of this extension to FontForge's built in character set encodings.

With the appropriate libraries, FontForge can import png, tiff, and gif images to act as character backgrounds for tracing purposes (FontForge can import bmp and xbm formats without external libraries). With libxml2 FontForge can read SVG fonts. With the freetype library FontForge will do a better job making bitmap characters for you. None is required for the proper compilation/execution of FontForge, if the libraries are not present they will not be used. If your machine doesn't have them and you want them they are available from:

- Image Libraries (to allow FontForge to import images in those formats)
  - libpng (and required helper zlib)
  - libtiff
  - libungif
  - libjpeg

  Under Mac OS/X these libraries are available from the fink project.

- libxml2
  To parse SVG files and fonts
- libuninameslist
  To display unicode names and annotations. And to know what
- libiconv
  For systems with no built-in iconv(). If not present FontForge contains a minimal version of the library which allows it to work. If used you must compile with `--enable-extra-encodings`, FontForge requires Shift-JIS.
- freetype
  To do a better job rasterizing bitmaps, and to enable the truetype debugger

  Some of FontForge's commands depend on your compiling freetype with the byte code interpreter enabled. This is disabled by default because it infringes on certain patents granted to Apple. If you have a license from Apple then you may enable the interpreter by setting the appropriate macro in .../include/freetype/config/ftoption.h before you build the library (see the README.UNX file on the top level of the freetype distribution).

  FontForge needs to have the freetype source directories available when it is built (there are some include files there which it depends on)

Versions of shared libraries in my builds
| libpng | libtiff | libungif | libjpeg | libxml2 | libuninameslist | freetype
i386 linux builds | 3.1.2.2 =1.2.2 | 3.5 =20011128 | 4.1.0 =4 | 62.0.0 =62 (6b) | 2.5.4 =2.5.4 | 0.0.1 | 6.3.3 =2.1.9

solaris builds

2
=1.0.8

3
=19970127

6
=62 (6b)

Mac OS/X builds

(static)

(static)

(static)

2.5.0
=2.5.0

6.3.3
=2.1.4

Normally FontForge depends on the X11 windowing system, but if you are just interested in the scripting engine (with no user interface), it may be built on systems without X (the configure script should figure this out).

FontForge has been ported to the following systems (at some point in its life)

- Linux (obviously, (redhat, debian, suse, mandrake), 386,spark,arm,alpha,ia64,m68k,mips,mipsel,powerpc,s390)
- Solaris
- Irix
- FreeBsd
- NetBsd
- Mac OS/X
- OpenVMS7.3 for Alpha
- cygwin with X running on top of MS windows.

You might also want to pull down some unicode bitmap fonts that fontforge uses

- my monospace fonts
- my sans-serif font
- The unifont
- ClearlyU's font
- The FreeFont project
- X fixed
- Computer Modern Unicode fonts

## Documentation

All the documentation files in this directory bundled up into one tgz file 24-June-2005.
If you do the following then FontForge will find the docs for you when you press F1 (ie. FontForge it will look in /usr/local/share/doc/fontforge before it looks on the web):

>     $ mkdir -p /usr/local/share/doc/fontforge
>     $ cd /usr/local/share/doc/fontforge
>     $ gunzip fontforge_htdocs-*.tgz
>     $ tar xf fontforge_htdocs-*.tar
>     $ rm fontforge_htdocs-*.tar

Or you can just browse the docs online. (Always current)

## Building it

>     $ gunzip fontforge_full-*.tgz
>     $ tar xf fontforge-full*.tar
>     $ cd fontforge
>     $ configure
>     $ make
>     $ su
>     # make install

FontForge now compiles dynamic libraries by default. If you would rather not deal with dynamic libraries (or if the compiler generates internal compiler errors when asked to generate PIC code, as Mac OS/X did in older versions) then use
`$ configure.static`
instead and things should be configured for static libraries.

If you want access to type3 editing capabilities
`$ configure --with-multilayer
` (this has the disadvantage of using even more memory that FontForge normally does, so it is off by default)

## Installing it

The executable tarball contains a shell script doinstall

>     $ gunzip fontforge-*.tgz
>     $ tar xf fontforge-*.tar
>     $ cd fontforge
>     $ su
>     # doinstall

See above on how to install using the makefile.

## Running it

`$ fontforge font.pfa font2.pfb font3.sfd font4.ttf font5.otf font6.gsf font7.bdf`
will start fontforge looking at the fonts you specify on the command line. It can read either pfb or pfa fonts, and some ps fonts (type 0 fonts based on a type 1 dictionary) as well as truetype fonts, non-CID open type fonts and bitmap fonts.
`$ fontforge -new`
will cause fontforge to create a new font (in iso-8859-1 encoding)
`$ fontforge`
will open up a file picker dialog and allow you to browse till you've found a font file (or have created a new one). `$ fontforge -script script.pe fonts...`
This will invoke fontforge in a non-interactive mode, and have it run the named script. Any further arguments on the command line will be passed as arguments to the script and processed (or not) by it.

## License

> > Copyright © 2000,2001,2002,2003,2004,2005 by George Williams

> > Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

> > Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

> > Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

> > The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

> > THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This is essentially the "revised BSD license".

## Lacks

FontForge is by no means complete. And probably doesn't work very well. Be prepared to save frequently and always work on a copy of the original.

- No attempt has been made to be efficient.
- No attempt has been made to interpret truetype instructions (hints), instead the instructions will be stored and used as long as no significant changes happen to the character they are associated with.
- No attempt has been made to retain the change-over points for hint substitution. FontForge will refigure this when it saves the font.
- Many type 3 fonts will not be read in correctly (those generated by fontforge should always be acceptable)
- Importing a type0 font loses the encoding. FontForge only imports simple type0 fonts (such as those made by itself), will get confused if there's more than one font with a chars dictionary.
- FontForge's support for the VORG table output is limited.
- FontForge's support for Apple's Advanced Typography tables (AAT) is limited.

## Mailing Lists

There are currently three mailing lists established for FontForge. You may subscribe to any of them on sourceforge: http://sourceforge.net/mail/?group_id=103338. You may not post to a list until you have subscribed (sorry about that, but we were getting too much spam).

Caveat: Posting to these mailing lists exposes your email address.

- fontforge-devel -- for reporting bugs, requesting features and such
  To subscribe, look at http://lists.sourceforge.net/lists/listinfo/fontforge-devel
  For archives, look at http://sourceforge.net/mailarchive/forum.php?forum=fontforge-devel
- fontforge-testcases -- To send large test cases to me
  Do not subscribe to this list.
  For archives, look at http://sourceforge.net/mailarchive/forum.php?forum=fontforge-testcases
- fontforge-users -- for general discussion of fontforge
  To subscribe, look at http://lists.sourceforge.net/lists/listinfo/fontforge-users
  For archives, look at http://sourceforge.net/mailarchive/forum.php?forum=fontforge-users
- fontforge-announce -- used (by me) to report major changes, etc.
  To subscribe, look at http://lists.sourceforge.net/lists/listinfo/fontforge-announce

## Bugs

This list includes the gross bugs that I'm aware of but don't know how to fix. Minor bugs get reported to me and are generally fixed within a week and rarely appear on this list.

- My truetype hinting is still bad. Especially for diagonals.
  - R C van Dalen's truetype hinting utilities may be helpful here.
- Some truetype fonts (kaiu and mingliu) do not store the correct outline. Instead they rely on using the instructions to move points around to generate the outline. The outline does not appear to be grid-fit at all, just positioned. FontForge will not read the instructions. In most fonts this would be the wrong thing to do, and I don't know how I could tell when it needs to be done...
- After adding the Johab encoding 23/Nov/01, any old fonts (in sfd files) which had a unicode encoding will suddenly claim to have a Johab encoding. I don't see a way around this at the moment. Just reencode them as unicode and all should be well.
- I'm told AutoKern doesn't work too well. (I may have fixed this, but I'm not sure)
- FontForge is confused by small splines, on the order of one em unit. If you need something that small, scale the font up by a factor of 2 or more (including the ascent and descent).
- There is a fundamental problem when importing a type3 font (or an eps file). In an most postscript programs each contour is stroked or filled individually, but in a type1 character, all contours are filled together. This can lead to unexpected side-effects if contours overlap. (configuring fontforge for mutlilayered editing can help with this)
- The MetaFont command doesn't work well.
- On linux boxes the dashed lines representing hints or the outlines of references get screwed up. I think this is a bug in the XServer on linux (it doesn't happen on other systems) but I have not examined it closely.
- FontForge will not copy and paste large (>XServer transfer (4Meg on my machine)) clipboards of text.
- Under gnome mnemonics in menus don't work. Personally I consider this a bug in gnome.
- Under gnome, docked palettes don't work the first time. Personally I consider this a bug in gnome.
- Under kde, iconifying a FontForge window crashes the button bar at the bottom of the screen. Personally I consider this a bug in kde.
- FontForge only produces an approximation to the OS/2 Codepages fields.
- ???

## Reporting bugs...

I'm sure you'll find some. If you can isolate it and come up with a reproducible minimal case, that would be great. The executable has symbols in it so if you run it in gdb you should be able to get a stack trace... Do what you can. Please post bugs to:

fontforge-devel@lists.sourceforge.net

## How else you can help.

- My writing leaves much to be desired. Anyone who can make my documentation more readable is encouraged to do so. (or who wishes to translate it into other languages, or who wishes to put it into a more flexable format, KANOU has a Japanese version under construction)
- I also have a brief tutorial in pdf format. This could also be translated into other languages (and would be a simpler job than trying to translate the entire website, here is the TeX source if you wish to attempt it).
- The UI can be translated into different languages. Unfortunately it does not use gnu gettext.
  - English I take care of
  - Russian is provided by Valek Filippov.
  - Japanese is provided by KANOU Hiroki.
  - French is provided by Pierre Hanser and Yannis Haralambous.
  - Italian is provided by Claudio Beccari
  - I've also created a very minimal German translations that lapses into English, anyone who wants to take this on is encouraged to do so.
  - Any other language additions would be great (the entire UI does not need to be translated, any subset is a help)
- Different font formats
  FontForge supports Type1, truetype and opentype fonts (to greater and lesser extents), also bdf and NFNT for bitmaps
  FontForge will sort-of accept metafont files (essentially it runs metafont and autotraces the result). It won't produce .mf files
  FontForge will read acorn font files with a helper app.
  But there are other formats out there that I can't find descriptions of:
  - Microsoft FON files (bitmap font resource files for windows)
- There are certain commands which don't work very well and if someone else wanted to they might code them better than I...
  - Remove overlap
  - Autokern (might be fixed now)
  - Metafont
  - generating instructions to do hinting in truetype (especially hints for diagonal stems)
- References
  - I'd like to provide a reasonable bibliography, please suggest some good relevant books.
  - Are there any other programs or websites that I should be mentioning?
- Tests
  - I've just started working on a very simplistic testsuite-- more to weed out crashes in the underlying engine, than to make sure it produces the right results. If anyone has a better idea for an automated suite, or would like to contribute tests to the current stuff, please let me know.
- QA
  - I don't.
    I find QA boring, and since no one is paying me for this I don't do very much. This is obviously a problem. If anyone wants to undertake to do QA for me (or several anyones) I'd be delighted.
- Printing tests
  - I'm always on the look out for short copyright free texts for printing. I'm looking for samples from languages I don't have anything on, or in styles that I don't have.
    I'm also interested in phrases equivalent to "The quick brown fox jumps over the lazy dog." (pangrams). These are short sentences which use every letter in the script.
- Indic information
  - Indic languages have a series of special ligature features in opentype. I believe that FontForge could probably generate some of these by default but I don't know enough to say which. If you are familiar with indic scripts could you give me a list of conversions in a format like

    >     U+0066 + U+0069 => U+FB01 'liga'

## Acknowledgements

The sample text in File->Print comes from many sources.

The following people have helped debug fontforge. Many thanks! (actually the list should be far longer than this)

- Tom Harvey
- Ken Chilton
- Gerhard Killesreiter
- Alexander Kotelnikov
- University of California, Santa Barbara
  (which has several times let me use some of their machines to do builds and find bugs if I didn't have the requisite system at home).
- Uwe Koloska
- Max Neunhoeffer
- Martin Giese
- E.J. Neafsey
- Norvell Spearman
- Stefan Fendt
- Harald ?Gleis?
- Valek Filippov
- Pasi Eronen
- Luc Devroye
- Scott Pakin
- Robert Brady
- Dung Ta Quang
- Sivan Toledo
- Gerhard Schellhorn
- MinGyoon
- Olaf Rogalsky
- Baruch Even
- Volker Gering
- Torsten Bronger
- Jacob Jansen
- Ulrich Klauer
- Andrey V. Panov
- Edward G.J. Lee
- Werner LEMBERG
- KANOU Hiroki
- Pierre Hanser
- Claudio Beccari
- Yannis Haralambous
- Walter Echarri
- And many others!

I owe David Turner (and everyone else) of FreeType a debt for providing an API which allows me to debug truetype instructions. Also he came up with the name "FontForge".

FontForge was inspired by AltSys's Fontographer now placed in graceful retirement by MacroMedia.

My father inspired a general interest in typography (though he is interested in renaissance printing techniques rather than computers).

And finally I owe thanks to Linda Dozier, David Cole and everyone at NaviSoft which company has given me the free time to write this program.

## Related Tools

- BDF editors
  - xmbdfed -- bdf editor.
  - gfe -- GNU font editor. Eventually supposed to support other formats
  - fstobdf -- Part of the X distribution, reads a font from the server and generates a bdf file from it.
- Postscript/ttf font editors
  - Manutius -- (only for windows, German UI, Type1 fonts)
  - spif -- under development (open source)
  - gfonted -- under development (open source)
  - DoubleType -- Java based open source truetype designer
  - Luc Devroye's page of links to font creation programs
  - pfaedit -- The old name for fontforge

  - Fontographer -- my favorite, no longer updated (proprietary)
  - FontLab -- Said to have really good tools for hinting truetype. (proprietary)
  - Ikarus -- Top of the line font creation software. (proprietary)
- Automated font creation by template
  - stiligt (swedish)
- MetaFont -- Knuth's font generation which produces bitmaps from a program based on splines (& other TeX utilities)
  - (available with the TeX package)
  - MetaPost, Uses the metafont language to produce PostScript pictures.
  - MetaType1, Which attempts to generate a type1 font directly from the metafont splines (I think)
  - TeXTrace, generates pfb fonts from TeX fonts by rasterizing at high res and then autotracing them
  - mftops, similar
  - mftrace, traces pk fonts (bitmap images) and creates pfb/pfa files. (formerly called pktrace)
- Postscript utilities
  - gfontview -- displays a postscript/ttf font
  - gglyph -- another font displayer
  - t1utils -- Type 1 utility programs & multiple master utilities
  - Type1inst -- helps to install type 1 fonts under X and ghostscript
  - ttf2pt1 -- Converts truetype to type1 postscript fonts and generates hints
  - ttftot42 -- Converts truetype to type42 postscript fonts.
  - type1fix -- (part of the TeXtrace package). Used to make some Type1 fonts work with ATM.
  - my stuff -- Type 1 decoders and converters. True Type & open type decoder.
- TrueType utilities
  - Rogier C van Dalen has written a set of utilities for viewing and hinting truetype fonts
  - TTX provides an opensource way of editing all the strange tables in a opentype font (by converting them from/to XML)
  - Microsoft provides a bunch of stuff (for windows only of course)
    - Various tools
    - Font Properties Editor
    - Font instructors
    - Font signer (will produce a DSIG (digital signature) table for the font. You need to get a key from verisign first)
  - And Adobe provides a Font Developer Kit (mostly for setting opentype tables I think)
  - And Apple does too (mac only)
  - And some OS/X tools (mac only)
- Palm pilot font converters
- pcf to windows fon converter
- bdf to windows fon converter (BDFtoFON)
- Font manipulation libraries
  - RoboFab -- Font library for python
- Rasterizers
  - FreeType's Rasterizer (used to be just truetype, handles almost anything now)
  - t1lib -- Type1 Rasterizer
- Other font tools of mine
  - fondu -- Unwraps fonts from mac resource files (this includes dfonts). Produces ttf, pfb and bdf files for 'sfnt', 'POST' and 'NFNT' resources
  - mensis -- Allows the user much finer control over some truetype tables than is provided by FontForge.
  - showttf -- Dumps the contents of a truetype/opentype font. Does some error checking too.
  - pcl2ttf -- Reads a pcl file (to go to an HP printer) and extracts any truetype fonts in it.
- font organizers
  - fontlinge
- Other related links...

If you know of a tool you think should be on this list, please let me know. I did my research a couple of years ago and expect it is out of date.