2017-01-18 15:59:51 +00:00
|
|
|
|
|Travis Build Status| |Appveyor Build status| |Health| |Coverage Status|
|
|
|
|
|
|PyPI|
|
|
|
|
|
|
|
|
|
|
What is this?
|
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
| fontTools is a library for manipulating fonts, written in Python. The
|
|
|
|
|
project includes the TTX tool, that can convert TrueType and OpenType
|
|
|
|
|
fonts to and from an XML text format, which is also called TTX. It
|
|
|
|
|
supports TrueType, OpenType, AFM and to an extent Type 1 and some
|
|
|
|
|
Mac-specific formats. The project has a `BSD-style open-source
|
|
|
|
|
licence <LICENSE>`__.
|
|
|
|
|
| Among other things this means you can use it free of charge.
|
|
|
|
|
|
|
|
|
|
Installation
|
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
FontTools requires `Python <http://www.python.org/download/>`__ 2.7, 3.4
|
|
|
|
|
or later.
|
|
|
|
|
|
|
|
|
|
The package is listed in the Python Package Index (PyPI), so you can
|
|
|
|
|
install it with `pip <https://pip.pypa.io>`__:
|
|
|
|
|
|
|
|
|
|
.. code:: sh
|
|
|
|
|
|
|
|
|
|
pip install fonttools
|
|
|
|
|
|
|
|
|
|
If you would like to contribute to its development, you can clone the
|
|
|
|
|
repository from Github, install the package in 'editable' mode and
|
|
|
|
|
modify the source code in place. We recommend creating a virtual
|
|
|
|
|
environment, using `virtualenv <https://virtualenv.pypa.io>`__ or
|
|
|
|
|
Python 3 `venv <https://docs.python.org/3/library/venv.html>`__ module.
|
|
|
|
|
|
|
|
|
|
.. code:: sh
|
|
|
|
|
|
|
|
|
|
# download the source code to 'fonttools' folder
|
|
|
|
|
git clone https://github.com/fonttools/fonttools.git
|
|
|
|
|
cd fonttools
|
|
|
|
|
|
|
|
|
|
# create new virtual environment called e.g. 'fonttools-venv', or anything you like
|
|
|
|
|
python -m virtualenv fonttools-venv
|
|
|
|
|
|
|
|
|
|
# source the `activate` shell script to enter the environment (Un\*x); to exit, just type `deactivate`
|
|
|
|
|
. fonttools-venv/bin/activate
|
|
|
|
|
|
|
|
|
|
# to activate the virtual environment in Windows `cmd.exe`, do
|
|
|
|
|
fonttools-venv\Scripts\activate.bat
|
|
|
|
|
|
|
|
|
|
# install in 'editable' mode
|
|
|
|
|
pip install -e .
|
|
|
|
|
|
|
|
|
|
TTX – From OpenType and TrueType to XML and Back
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Once installed you can use the ``ttx`` command to convert binary font
|
|
|
|
|
files (``.otf``, ``.ttf``, etc) to the TTX xml format, edit them, and
|
|
|
|
|
convert them back to binary format. TTX files have a .ttx file
|
|
|
|
|
extension.
|
|
|
|
|
|
|
|
|
|
.. code:: sh
|
|
|
|
|
|
|
|
|
|
ttx /path/to/font.otf
|
|
|
|
|
ttx /path/to/font.ttx
|
|
|
|
|
|
|
|
|
|
The TTX application works can be used in two ways, depending on what
|
|
|
|
|
platform you run it on:
|
|
|
|
|
|
|
|
|
|
- As a command line tool (Windows/DOS, Unix, MacOSX)
|
|
|
|
|
- By dropping files onto the application (Windows, MacOS)
|
|
|
|
|
|
|
|
|
|
TTX detects what kind of files it is fed: it will output a ``.ttx`` file
|
|
|
|
|
when it sees a ``.ttf`` or ``.otf``, and it will compile a ``.ttf`` or
|
|
|
|
|
``.otf`` when the input file is a ``.ttx`` file. By default, the output
|
|
|
|
|
file is created in the same folder as the input file, and will have the
|
|
|
|
|
same name as the input file but with a different extension. TTX will
|
|
|
|
|
*never* overwrite existing files, but if necessary will append a unique
|
|
|
|
|
number to the output filename (before the extension) such as
|
|
|
|
|
``Arial#1.ttf``
|
|
|
|
|
|
|
|
|
|
When using TTX from the command line there are a bunch of extra options,
|
|
|
|
|
these are explained in the help text, as displayed when typing
|
|
|
|
|
``ttx -h`` at the command prompt. These additional options include:
|
|
|
|
|
|
|
|
|
|
- specifying the folder where the output files are created
|
|
|
|
|
- specifying which tables to dump or which tables to exclude
|
|
|
|
|
- merging partial ``.ttx`` files with existing ``.ttf`` or ``.otf``
|
|
|
|
|
files
|
|
|
|
|
- listing brief table info instead of dumping to ``.ttx``
|
|
|
|
|
- splitting tables to separate ``.ttx`` files
|
|
|
|
|
- disabling TrueType instruction disassembly
|
|
|
|
|
|
|
|
|
|
The TTX file format
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
2017-01-18 16:15:11 +00:00
|
|
|
|
The following tables are currently supported:
|
|
|
|
|
|
|
|
|
|
.. begin table list
|
|
|
|
|
.. code::
|
|
|
|
|
|
|
|
|
|
BASE, CBDT, CBLC, CFF, COLR, CPAL, DSIG, EBDT, EBLC, FFTM, GDEF,
|
|
|
|
|
GMAP, GPKG, GPOS, GSUB, HVAR, JSTF, LTSH, MATH, META, MVAR, OS/2,
|
|
|
|
|
SING, STAT, SVG, TSI0, TSI1, TSI2, TSI3, TSI5, TSIB, TSID, TSIJ,
|
|
|
|
|
TSIP, TSIS, TSIV, VDMX, VORG, VVAR, avar, cmap, cvar, cvt, feat,
|
|
|
|
|
fpgm, fvar, gasp, glyf, gvar, hdmx, head, hhea, hmtx, kern, loca,
|
|
|
|
|
ltag, maxp, meta, name, post, prep, sbix, trak, vhea and vmtx
|
|
|
|
|
.. end table list
|
|
|
|
|
|
|
|
|
|
Other tables are dumped as hexadecimal data.
|
2017-01-18 15:59:51 +00:00
|
|
|
|
|
|
|
|
|
TrueType fonts use glyph indices (GlyphIDs) 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.
|
|
|
|
|
|
|
|
|
|
The glyph names are either extracted from the ``CFF`` table or the
|
|
|
|
|
``post`` table, or are derived from a Unicode ``cmap`` table. In the
|
|
|
|
|
latter case the Adobe Glyph List is used to calculate names based on
|
|
|
|
|
Unicode values. If all of these methods fail, names are invented based
|
|
|
|
|
on GlyphID (eg ``glyph00142``)
|
|
|
|
|
|
|
|
|
|
It is possible that different glyphs use the same name. If this happens,
|
|
|
|
|
we force the names to be unique by appending ``#n`` to the name (``n``
|
|
|
|
|
being an integer number.) The original names are being kept, so this has
|
|
|
|
|
no influence on a "round tripped" font.
|
|
|
|
|
|
|
|
|
|
Because the order in which glyphs are stored inside the binary font is
|
|
|
|
|
important, we maintain an ordered list of glyph names in the font.
|
|
|
|
|
|
|
|
|
|
Other Tools
|
|
|
|
|
~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Commands for inspecting, merging and subsetting fonts are also
|
|
|
|
|
available:
|
|
|
|
|
|
|
|
|
|
.. code:: sh
|
|
|
|
|
|
|
|
|
|
pyftinspect
|
|
|
|
|
pyftmerge
|
|
|
|
|
pyftsubset
|
|
|
|
|
|
|
|
|
|
fontTools Python Module
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
The fontTools python module provides a convenient way to
|
|
|
|
|
programmatically edit font files.
|
|
|
|
|
|
|
|
|
|
.. code:: py
|
|
|
|
|
|
|
|
|
|
>>> from fontTools.ttLib import TTFont
|
|
|
|
|
>>> font = TTFont('/path/to/font.ttf')
|
|
|
|
|
>>> font
|
|
|
|
|
<fontTools.ttLib.TTFont object at 0x10c34ed50>
|
|
|
|
|
>>>
|
|
|
|
|
|
|
|
|
|
A selection of sample python programs is in the
|
|
|
|
|
`Snippets <https://github.com/fonttools/fonttools/blob/master/Snippets/>`__
|
|
|
|
|
directory.
|
|
|
|
|
|
|
|
|
|
Testing
|
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
|
|
To run the test suite, you can do:
|
|
|
|
|
|
|
|
|
|
.. code:: sh
|
|
|
|
|
|
|
|
|
|
python setup.py test
|
|
|
|
|
|
|
|
|
|
If you have `pytest <http://docs.pytest.org/en/latest/>`__, you can run
|
|
|
|
|
the ``pytest`` command directly. The tests will run against the
|
|
|
|
|
installed ``fontTools`` package, or the first one found in the
|
|
|
|
|
``PYTHONPATH``.
|
|
|
|
|
|
|
|
|
|
You can also use `tox <https://testrun.org/tox/latest/>`__ to
|
|
|
|
|
automatically run tests on different Python versions in isolated virtual
|
|
|
|
|
environments.
|
|
|
|
|
|
|
|
|
|
.. code:: sh
|
|
|
|
|
|
|
|
|
|
pip install tox
|
|
|
|
|
tox
|
|
|
|
|
|
|
|
|
|
Note that when you run ``tox`` without arguments, the tests are executed
|
|
|
|
|
for all the environments listed in tox.ini's ``envlist``. In our case,
|
|
|
|
|
this includes Python 2.7, 3.5 and 3.6, so for this to work the
|
|
|
|
|
``python2.7``, ``python3.5`` and ``python3.6`` executables must be
|
|
|
|
|
available in your ``PATH``.
|
|
|
|
|
|
|
|
|
|
You can specify an alternative environment list via the ``-e`` option,
|
|
|
|
|
or the ``TOXENV`` environment variable:
|
|
|
|
|
|
|
|
|
|
.. code:: sh
|
|
|
|
|
|
|
|
|
|
tox -e py27-nocov
|
|
|
|
|
TOXENV="py{27,36}-cov" tox
|
|
|
|
|
|
|
|
|
|
Development Community
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
TTX/FontTools development is ongoing in an active community of
|
|
|
|
|
developers, that includes professional developers employed at major
|
|
|
|
|
software corporations and type foundries as well as hobbyists.
|
|
|
|
|
|
|
|
|
|
Feature requests and bug reports are always welcome at
|
|
|
|
|
https://github.com/fonttools/fonttools/issues/
|
|
|
|
|
|
|
|
|
|
The best place for discussions about TTX from an end-user perspective as
|
|
|
|
|
well as TTX/FontTools development is the
|
|
|
|
|
https://groups.google.com/d/forum/fonttools mailing list. There is also
|
|
|
|
|
a development https://groups.google.com/d/forum/fonttools-dev mailing
|
|
|
|
|
list for continuous integration notifications. You can also email Behdad
|
|
|
|
|
privately at behdad@behdad.org
|
|
|
|
|
|
|
|
|
|
History
|
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
|
|
The fontTools project was started by Just van Rossum in 1999, and was
|
|
|
|
|
maintained as an open source project at
|
|
|
|
|
http://sourceforge.net/projects/fonttools/. In 2008, Paul Wise (pabs3)
|
|
|
|
|
began helping Just with stability maintenance. In 2013 Behdad Esfahbod
|
|
|
|
|
began a friendly fork, thoroughly reviewing the codebase and making
|
|
|
|
|
changes at https://github.com/behdad/fonttools to add new features and
|
|
|
|
|
support for new font formats.
|
|
|
|
|
|
|
|
|
|
Acknowledgements
|
|
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
In alphabetical order:
|
|
|
|
|
|
|
|
|
|
Olivier Berten, Samyak Bhuta, Erik van Blokland, Petr van Blokland,
|
|
|
|
|
Jelle Bosma, Sascha Brawer, Tom Byrer, Frédéric Coiffier, Vincent
|
|
|
|
|
Connare, Dave Crossland, Simon Daniels, Behdad Esfahbod, Behnam
|
|
|
|
|
Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis Haralambous,
|
|
|
|
|
Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, Denis Moyogo
|
|
|
|
|
Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, Antoine Leca,
|
|
|
|
|
Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, Masaya Nakamura,
|
|
|
|
|
Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret Rieger, Read
|
|
|
|
|
Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, Georg
|
|
|
|
|
Seifert, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov, Paul
|
|
|
|
|
Wise.
|
|
|
|
|
|
|
|
|
|
Copyrights
|
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
| Copyright (c) 1999-2004 Just van Rossum, LettError
|
|
|
|
|
(just@letterror.com)
|
|
|
|
|
| See `LICENSE <LICENSE>`__ for the full license.
|
|
|
|
|
|
|
|
|
|
Copyright (c) 2000 BeOpen.com. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
Copyright (c) 1995-2001 Corporation for National Research Initiatives.
|
|
|
|
|
All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All
|
|
|
|
|
Rights Reserved.
|
|
|
|
|
|
|
|
|
|
Have fun!
|
|
|
|
|
|
|
|
|
|
.. |Travis Build Status| image:: https://travis-ci.org/fonttools/fonttools.svg
|
|
|
|
|
:target: https://travis-ci.org/fonttools/fonttools
|
|
|
|
|
.. |Appveyor Build status| image:: https://ci.appveyor.com/api/projects/status/0f7fmee9as744sl7/branch/master?svg=true
|
|
|
|
|
:target: https://ci.appveyor.com/project/fonttools/fonttools/branch/master
|
|
|
|
|
.. |Health| image:: https://landscape.io/github/behdad/fonttools/master/landscape.svg?style=flat
|
|
|
|
|
:target: https://landscape.io/github/behdad/fonttools/master
|
|
|
|
|
.. |Coverage Status| image:: https://codecov.io/gh/fonttools/fonttools/branch/master/graph/badge.svg
|
|
|
|
|
:target: https://codecov.io/gh/fonttools/fonttools
|
|
|
|
|
.. |PyPI| image:: https://img.shields.io/pypi/v/fonttools.svg
|
|
|
|
|
:target: https://pypi.org/project/FontTools
|