[doc] Tidy up top-level access to documentation
* List all modules and utilities * Move wordy optional requirements to separate page * Remove cruft from README and add pointers to online documentation
This commit is contained in:
parent
9691acb15d
commit
7a59d8105b
@ -31,165 +31,59 @@ See the Optional Requirements section below for details about module-specific de
|
|||||||
Utilities
|
Utilities
|
||||||
---------
|
---------
|
||||||
|
|
||||||
Commands for merging and subsetting fonts are also available::
|
fontTools installs four command-line utilities:
|
||||||
|
|
||||||
pyftmerge
|
- ``pyftmerge``, a tool for merging fonts; see :py:mod:`fontTools.merge`
|
||||||
pyftsubset
|
- ``pyftsubset``, a tool for subsetting fonts; see :py:mod:`fontTools.subset`
|
||||||
|
- ``ttx``, a tool for converting between OpenType binary fonts (OTF) and an XML representation (TTX); see :py:mod:`fontTools.ttx`
|
||||||
|
- ``fonttools``, a "meta-tool" for accessing other components of the fontTools family.
|
||||||
|
|
||||||
Please see the :py:mod:`fontTools.merge` and :py:mod:`fontTools.subset` documentation for additional information about these tools.
|
This last utility takes a subcommand, which could be one of:
|
||||||
|
|
||||||
|
- ``cu2qu``: Convert a UFO font with cubic curves to quadratic curves
|
||||||
|
- ``feaLib``: Add features from a feature file (.fea) into a OTF font
|
||||||
|
- ``mtiLib``: Convert Monotype FontDame layout files to TTX
|
||||||
|
- ``subset``: OpenType font subsetter and optimizer
|
||||||
|
- ``varLib``: Build a variable font from a designspace file and masters
|
||||||
|
|
||||||
Libraries
|
Libraries
|
||||||
---------
|
---------
|
||||||
|
|
||||||
XXX
|
The main library you will want to access when using fontTools for font
|
||||||
|
engineering is likely to be :py:mod:`fontTools.ttLib`, which is the package
|
||||||
|
for handling TrueType/OpenType fonts. However, there are many other
|
||||||
|
libraries in the fontTools suite:
|
||||||
|
|
||||||
|
- :py:mod:`fontTools.afmLib`: Module for reading and writing AFM files
|
||||||
|
- :py:mod:`fontTools.agl`: Access to the Adobe Glyph List
|
||||||
|
- :py:mod:`fontTools.cffLib`: Read/write tools for Adobe CFF fonts
|
||||||
|
- :py:mod:`fontTools.colorLib`: Module for handling colors in CPAL/COLR fonts
|
||||||
|
- :py:mod:`fontTools.cu2qu`: Module for cubic to quadratic conversion
|
||||||
|
- :py:mod:`fontTools.designspaceLib`: Read and write designspace files
|
||||||
|
- :py:mod:`fontTools.encodings`: Support for font-related character encodings
|
||||||
|
- :py:mod:`fontTools.feaLib`: Read and read AFDKO feature files
|
||||||
|
- :py:mod:`fontTools.fontBuilder`: Construct TTF/OTF fonts from scratch
|
||||||
|
- :py:mod:`fontTools.merge`: Tools for merging font files
|
||||||
|
- :py:mod:`fontTools.pens`: Various classes for manipulating glyph outlines
|
||||||
|
- :py:mod:`fontTools.subset`: OpenType font subsetting and optimization
|
||||||
|
- :py:mod:`fontTools.svgLib.path`: Library for drawing SVG paths onto glyphs
|
||||||
|
- :py:mod:`fontTools.t1Lib`: Tools for PostScript Type 1 fonts (Python2 only)
|
||||||
|
- :py:mod:`fontTools.ttx`: Module for converting between OTF and XML representation
|
||||||
|
- :py:mod:`fontTools.ufoLib`: Module for reading and writing UFO files
|
||||||
|
- :py:mod:`fontTools.unicodedata`: Convert between Unicode and OpenType script information
|
||||||
|
- :py:mod:`fontTools.varLib`: Module for dealing with 'gvar'-style font variations
|
||||||
|
- :py:mod:`fontTools.voltLib`: Module for dealing with Visual OpenType Layout Tool (VOLT) files
|
||||||
|
|
||||||
A selection of sample Python programs using these libaries can be found in the `Snippets directory <https://github.com/fonttools/fonttools/blob/master/Snippets/>`_ of the fontTools repository.
|
A selection of sample Python programs using these libaries can be found in the `Snippets directory <https://github.com/fonttools/fonttools/blob/master/Snippets/>`_ of the fontTools repository.
|
||||||
|
|
||||||
Optional Requirements
|
Optional Dependencies
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
The fontTools package currently has no (required) external dependencies
|
The fontTools package currently has no (required) external dependencies
|
||||||
besides the modules included in the Python Standard Library.
|
besides the modules included in the Python Standard Library.
|
||||||
However, a few extra dependencies are required to unlock optional features
|
However, a few extra dependencies are required to unlock optional features
|
||||||
in some of the library modules.
|
in some of the library modules. See the :doc:`optional requirements <./optional>`
|
||||||
|
page for more information.
|
||||||
The fonttools PyPI distribution also supports so-called "extras", i.e. a
|
|
||||||
set of keywords that describe a group of additional dependencies, which can be
|
|
||||||
used when installing via pip, or when specifying a requirement.
|
|
||||||
For example:
|
|
||||||
|
|
||||||
.. code:: sh
|
|
||||||
|
|
||||||
pip install fonttools[ufo,lxml,woff,unicode]
|
|
||||||
|
|
||||||
This command will install fonttools, as well as the optional dependencies that
|
|
||||||
are required to unlock the extra features named "ufo", etc.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Optional dependencies are detailed by module in the list below with the ``Extra`` setting that automates ``pip`` dependency installation when this is supported.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.misc.etree`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
The module exports a ElementTree-like API for reading/writing XML files, and allows to use as the backend either the built-in ``xml.etree`` module or `lxml <https://lxml.de>`__. The latter is preferred whenever present, as it is generally faster and more secure.
|
|
||||||
|
|
||||||
*Extra:* ``lxml``
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.ufoLib`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Package for reading and writing UFO source files; it requires:
|
|
||||||
|
|
||||||
* `fs <https://pypi.org/pypi/fs>`__: (aka ``pyfilesystem2``) filesystem abstraction layer.
|
|
||||||
|
|
||||||
* `enum34 <https://pypi.org/pypi/enum34>`__: backport for the built-in ``enum`` module (only required on Python < 3.4).
|
|
||||||
|
|
||||||
*Extra:* ``ufo``
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.ttLib.woff2`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Module to compress/decompress WOFF 2.0 web fonts; it requires:
|
|
||||||
|
|
||||||
* `brotli <https://pypi.python.org/pypi/Brotli>`__: Python bindings of the Brotli compression library.
|
|
||||||
|
|
||||||
*Extra:* ``woff``
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.unicode`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
To display the Unicode character names when dumping the ``cmap`` table
|
|
||||||
with ``ttx`` we use the ``unicodedata`` module in the Standard Library.
|
|
||||||
The version included in there varies between different Python versions.
|
|
||||||
To use the latest available data, you can install:
|
|
||||||
|
|
||||||
* `unicodedata2 <https://pypi.python.org/pypi/unicodedata2>`__: ``unicodedata`` backport for Python 2.7
|
|
||||||
and 3.x updated to the latest Unicode version 12.0. Note this is not necessary if you use Python 3.8
|
|
||||||
as the latter already comes with an up-to-date ``unicodedata``.
|
|
||||||
|
|
||||||
*Extra:* ``unicode``
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.varLib.interpolatable`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Module for finding wrong contour/component order between different masters.
|
|
||||||
It requires one of the following packages in order to solve the so-called
|
|
||||||
"minimum weight perfect matching problem in bipartite graphs", or
|
|
||||||
the Assignment problem:
|
|
||||||
|
|
||||||
* `scipy <https://pypi.python.org/pypi/scipy>`__: the Scientific Library for Python, which internally
|
|
||||||
uses `NumPy <https://pypi.python.org/pypi/numpy>`__ arrays and hence is very fast;
|
|
||||||
* `munkres <https://pypi.python.org/pypi/munkres>`__: a pure-Python module that implements the Hungarian
|
|
||||||
or Kuhn-Munkres algorithm.
|
|
||||||
|
|
||||||
*Extra:* ``interpolatable``
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.varLib.plot`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Module for visualizing DesignSpaceDocument and resulting VariationModel.
|
|
||||||
|
|
||||||
* `matplotlib <https://pypi.org/pypi/matplotlib>`__: 2D plotting library.
|
|
||||||
|
|
||||||
*Extra:* ``plot``
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.misc.symfont`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Advanced module for symbolic font statistics analysis; it requires:
|
|
||||||
|
|
||||||
* `sympy <https://pypi.python.org/pypi/sympy>`__: the Python library for symbolic mathematics.
|
|
||||||
|
|
||||||
*Extra:* ``symfont``
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.t1Lib`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
To get the file creator and type of Macintosh PostScript Type 1 fonts
|
|
||||||
on Python 3 you need to install the following module, as the old ``MacOS``
|
|
||||||
module is no longer included in Mac Python:
|
|
||||||
|
|
||||||
* `xattr <https://pypi.python.org/pypi/xattr>`__: Python wrapper for extended filesystem attributes
|
|
||||||
(macOS platform only).
|
|
||||||
|
|
||||||
*Extra:* ``type1``
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.pens.cocoaPen`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Pen for drawing glyphs with Cocoa ``NSBezierPath``, requires:
|
|
||||||
|
|
||||||
* `PyObjC <https://pypi.python.org/pypi/pyobjc>`__: the bridge between Python and the Objective-C
|
|
||||||
runtime (macOS platform only).
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.pens.qtPen`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Pen for drawing glyphs with Qt's ``QPainterPath``, requires:
|
|
||||||
|
|
||||||
* `PyQt5 <https://pypi.python.org/pypi/PyQt5>`__: Python bindings for the Qt cross platform UI and
|
|
||||||
application toolkit.
|
|
||||||
|
|
||||||
|
|
||||||
:py:mod:`fontTools.pens.reportLabPen`
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Pen to drawing glyphs as PNG images, requires:
|
|
||||||
|
|
||||||
* `reportlab <https://pypi.python.org/pypi/reportlab>`__: Python toolkit for generating PDFs and
|
|
||||||
graphics.
|
|
||||||
|
|
||||||
Developer information
|
Developer information
|
||||||
---------------------
|
---------------------
|
||||||
|
140
Doc/source/optional.rst
Normal file
140
Doc/source/optional.rst
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
Optional Dependencies
|
||||||
|
=====================
|
||||||
|
|
||||||
|
The fonttools PyPI distribution also supports so-called "extras", i.e. a
|
||||||
|
set of keywords that describe a group of additional dependencies, which can be
|
||||||
|
used when installing via pip, or when specifying a requirement.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
.. code:: sh
|
||||||
|
|
||||||
|
pip install fonttools[ufo,lxml,woff,unicode]
|
||||||
|
|
||||||
|
This command will install fonttools, as well as the optional dependencies that
|
||||||
|
are required to unlock the extra features named "ufo", etc.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Optional dependencies are detailed by module in the list below with the ``Extra`` setting that automates ``pip`` dependency installation when this is supported.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.misc.etree`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The module exports a ElementTree-like API for reading/writing XML files, and allows to use as the backend either the built-in ``xml.etree`` module or `lxml <https://lxml.de>`__. The latter is preferred whenever present, as it is generally faster and more secure.
|
||||||
|
|
||||||
|
*Extra:* ``lxml``
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.ufoLib`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Package for reading and writing UFO source files; it requires:
|
||||||
|
|
||||||
|
* `fs <https://pypi.org/pypi/fs>`__: (aka ``pyfilesystem2``) filesystem abstraction layer.
|
||||||
|
|
||||||
|
* `enum34 <https://pypi.org/pypi/enum34>`__: backport for the built-in ``enum`` module (only required on Python < 3.4).
|
||||||
|
|
||||||
|
*Extra:* ``ufo``
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.ttLib.woff2`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Module to compress/decompress WOFF 2.0 web fonts; it requires:
|
||||||
|
|
||||||
|
* `brotli <https://pypi.python.org/pypi/Brotli>`__: Python bindings of the Brotli compression library.
|
||||||
|
|
||||||
|
*Extra:* ``woff``
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.unicode`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
To display the Unicode character names when dumping the ``cmap`` table
|
||||||
|
with ``ttx`` we use the ``unicodedata`` module in the Standard Library.
|
||||||
|
The version included in there varies between different Python versions.
|
||||||
|
To use the latest available data, you can install:
|
||||||
|
|
||||||
|
* `unicodedata2 <https://pypi.python.org/pypi/unicodedata2>`__: ``unicodedata`` backport for Python 2.7
|
||||||
|
and 3.x updated to the latest Unicode version 12.0. Note this is not necessary if you use Python 3.8
|
||||||
|
as the latter already comes with an up-to-date ``unicodedata``.
|
||||||
|
|
||||||
|
*Extra:* ``unicode``
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.varLib.interpolatable`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Module for finding wrong contour/component order between different masters.
|
||||||
|
It requires one of the following packages in order to solve the so-called
|
||||||
|
"minimum weight perfect matching problem in bipartite graphs", or
|
||||||
|
the Assignment problem:
|
||||||
|
|
||||||
|
* `scipy <https://pypi.python.org/pypi/scipy>`__: the Scientific Library for Python, which internally
|
||||||
|
uses `NumPy <https://pypi.python.org/pypi/numpy>`__ arrays and hence is very fast;
|
||||||
|
* `munkres <https://pypi.python.org/pypi/munkres>`__: a pure-Python module that implements the Hungarian
|
||||||
|
or Kuhn-Munkres algorithm.
|
||||||
|
|
||||||
|
*Extra:* ``interpolatable``
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.varLib.plot`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Module for visualizing DesignSpaceDocument and resulting VariationModel.
|
||||||
|
|
||||||
|
* `matplotlib <https://pypi.org/pypi/matplotlib>`__: 2D plotting library.
|
||||||
|
|
||||||
|
*Extra:* ``plot``
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.misc.symfont`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Advanced module for symbolic font statistics analysis; it requires:
|
||||||
|
|
||||||
|
* `sympy <https://pypi.python.org/pypi/sympy>`__: the Python library for symbolic mathematics.
|
||||||
|
|
||||||
|
*Extra:* ``symfont``
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.t1Lib`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
To get the file creator and type of Macintosh PostScript Type 1 fonts
|
||||||
|
on Python 3 you need to install the following module, as the old ``MacOS``
|
||||||
|
module is no longer included in Mac Python:
|
||||||
|
|
||||||
|
* `xattr <https://pypi.python.org/pypi/xattr>`__: Python wrapper for extended filesystem attributes
|
||||||
|
(macOS platform only).
|
||||||
|
|
||||||
|
*Extra:* ``type1``
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.pens.cocoaPen`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Pen for drawing glyphs with Cocoa ``NSBezierPath``, requires:
|
||||||
|
|
||||||
|
* `PyObjC <https://pypi.python.org/pypi/pyobjc>`__: the bridge between Python and the Objective-C
|
||||||
|
runtime (macOS platform only).
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.pens.qtPen`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Pen for drawing glyphs with Qt's ``QPainterPath``, requires:
|
||||||
|
|
||||||
|
* `PyQt5 <https://pypi.python.org/pypi/PyQt5>`__: Python bindings for the Qt cross platform UI and
|
||||||
|
application toolkit.
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`fontTools.pens.reportLabPen`
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Pen to drawing glyphs as PNG images, requires:
|
||||||
|
|
||||||
|
* `reportlab <https://pypi.python.org/pypi/reportlab>`__: Python toolkit for generating PDFs and
|
||||||
|
graphics.
|
167
README.rst
167
README.rst
@ -11,6 +11,9 @@ What is this?
|
|||||||
licence <LICENSE>`__.
|
licence <LICENSE>`__.
|
||||||
| Among other things this means you can use it free of charge.
|
| Among other things this means you can use it free of charge.
|
||||||
|
|
||||||
|
`User documentation <https://fonttools.readthedocs.io/en/latest/>` and
|
||||||
|
`developer documentation <https://fonttools.readthedocs.io/en/latest/developer.html>` is available at `Read the Docs <https://fonttools.readthedocs.io/>`.
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -54,112 +57,6 @@ Python 3 `venv <https://docs.python.org/3/library/venv.html>`__ module.
|
|||||||
# install in 'editable' mode
|
# install in 'editable' mode
|
||||||
pip install -e .
|
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 can be used in two ways, depending on what
|
|
||||||
platform you run it on:
|
|
||||||
|
|
||||||
- As a command line tool (Windows/DOS, Unix, macOS)
|
|
||||||
- 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
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
The following tables are currently supported:
|
|
||||||
|
|
||||||
.. begin table list
|
|
||||||
.. code::
|
|
||||||
|
|
||||||
BASE, CBDT, CBLC, CFF, CFF2, COLR, CPAL, DSIG, EBDT, EBLC, FFTM,
|
|
||||||
Feat, GDEF, GMAP, GPKG, GPOS, GSUB, Glat, Gloc, HVAR, JSTF, LTSH,
|
|
||||||
MATH, META, MVAR, OS/2, SING, STAT, SVG, Silf, Sill, TSI0, TSI1,
|
|
||||||
TSI2, TSI3, TSI5, TSIB, TSID, TSIJ, TSIP, TSIS, TSIV, TTFA, VDMX,
|
|
||||||
VORG, VVAR, ankr, avar, bsln, cidg, cmap, cvar, cvt, feat, fpgm,
|
|
||||||
fvar, gasp, gcid, glyf, gvar, hdmx, head, hhea, hmtx, kern, lcar,
|
|
||||||
loca, ltag, maxp, meta, mort, morx, name, opbd, post, prep, prop,
|
|
||||||
sbix, trak, vhea and vmtx
|
|
||||||
.. end table list
|
|
||||||
|
|
||||||
Other tables are dumped as hexadecimal data.
|
|
||||||
|
|
||||||
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 merging and subsetting fonts are also available:
|
|
||||||
|
|
||||||
.. code:: sh
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
Optional Requirements
|
Optional Requirements
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
@ -297,64 +194,6 @@ are required to unlock the extra features named "ufo", etc.
|
|||||||
* `reportlab <https://pypi.python.org/pypi/reportlab>`__: Python toolkit
|
* `reportlab <https://pypi.python.org/pypi/reportlab>`__: Python toolkit
|
||||||
for generating PDFs and graphics.
|
for generating PDFs and graphics.
|
||||||
|
|
||||||
Testing
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
To run the test suite, you need to install `pytest <http://docs.pytest.org/en/latest/>`__.
|
|
||||||
When you run the ``pytest`` command, the tests will run against the
|
|
||||||
installed ``fontTools`` package, or the first one found in the
|
|
||||||
``PYTHONPATH``.
|
|
||||||
|
|
||||||
You can also use `tox <https://tox.readthedocs.io/en/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 3.6 and 3.7, so for this to work the ``python3.6``
|
|
||||||
and ``python3.7`` 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 py36
|
|
||||||
TOXENV="py36-cov,htmlcov" 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
|
Acknowledgements
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user