Metadata-Version: 2.1
Name: fonttools
Version: 3.39.0
Summary: Tools to manipulate font files
Home-page: http://github.com/fonttools/fonttools
Author: Just van Rossum
Author-email: just@letterror.com
Maintainer: Behdad Esfahbod
Maintainer-email: behdad@behdad.org
License: MIT
Description: |Travis Build Status| |Appveyor Build status| |Coverage Status| |PyPI| |Gitter Chat|
        
        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 an `MIT 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.
        
        **NOTE** After January 1 2019, until no later than June 30 2019, the support
        for *Python 2.7* will be limited to only bug fixes, and no new features will
        be added to the ``py27`` branch. The upcoming FontTools 4.x series will require
        *Python 3.5* or above. You can read more `here <https://python3statement.org>`__
        and `here <https://github.com/fonttools/fonttools/issues/765>`__ for the
        reasons behind this decision.
        
        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 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
        ---------------------
        
        The ``fontTools`` package currently has no (required) external dependencies
        besides the modules included in the Python Standard Library.
        However, a few extra dependencies are required by some of its modules, which
        are needed to unlock optional features.
        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.
        
        - ``Lib/fontTools/misc/etree.py``
        
          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://http://lxml.de>`__. The latter is preferred whenever present,
          as it is generally faster and more secure.
        
          *Extra:* ``lxml``
        
        - ``Lib/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``
        
        - ``Lib/fontTools/ttLib/woff2.py``
        
          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``
        
        - ``Lib/fontTools/ttLib/sfnt.py``
        
          To better compress WOFF 1.0 web fonts, the following module can be used
          instead of the built-in ``zlib`` library:
        
          * `zopfli <https://pypi.python.org/pypi/zopfli>`__: Python bindings of
            the Zopfli compression library.
        
          *Extra:* ``woff``
        
        - ``Lib/fontTools/unicode.py``
        
          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.5 updated to the latest
            Unicode version 9.0. Note this is not necessary if you use Python 3.6
            as the latter already comes with an up-to-date ``unicodedata``.
        
          *Extra:* ``unicode``
        
        - ``Lib/fontTools/varLib/interpolatable.py``
        
          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``
        
        - ``Lib/fontTools/varLib/plot.py``
        
          Module for visualizing DesignSpaceDocument and resulting VariationModel.
        
          * `matplotlib <https://pypi.org/pypi/matplotlib>`__: 2D plotting library.
        
          *Extra:* ``plot``
        
        - ``Lib/fontTools/misc/symfont.py``
        
          Advanced module for symbolic font statistics analysis; it requires:
        
          * `sympy <https://pypi.python.org/pypi/sympy>`__: the Python library for
            symbolic mathematics.
        
          *Extra:* ``symfont``
        
        - ``Lib/fontTools/t1Lib.py``
        
          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``
        
        - ``Lib/fontTools/pens/cocoaPen.py``
        
          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).
        
        - ``Lib/fontTools/pens/qtPen.py``
        
          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.
        
        - ``Lib/fontTools/pens/reportLabPen.py``
        
          Pen to drawing glyphs as PNG images, requires:
        
          * `reportlab <https://pypi.python.org/pypi/reportlab>`__: Python toolkit
            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 2.7 and 3.7, so for this to work the ``python2.7``
        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 py27
            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
        ~~~~~~~~~~~~~~~~
        
        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
        .. |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
        .. |Gitter Chat| image:: https://badges.gitter.im/fonttools-dev/Lobby.svg
           :alt: Join the chat at https://gitter.im/fonttools-dev/Lobby
           :target: https://gitter.im/fonttools-dev/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
        
        Changelog
        ~~~~~~~~~
        
        3.39.0 (released 2019-03-19)
        ----------------------------
        
        - [ttLib/glyf] Raise more specific error when encountering recursive
          component references (#1545, #1546).
        - [Doc/designspaceLib] Defined new ``public.skipExportGlyphs`` lib key (#1534,
          unified-font-object/ufo-spec#84).
        - [varLib] Use ``vmtx`` to compute vertical phantom points; or ``hhea.ascent``
          and ``head.unitsPerEM`` if ``vmtx`` is missing (#1528).
        - [gvar/cvar] Sort XML element's min/value/max attributes in TupleVariation
          toXML to improve readability of TTX dump (#1527).
        - [varLib.plot] Added support for 2D plots with only 1 variation axis (#1522).
        - [designspaceLib] Use axes maps when normalizing locations in
          DesignSpaceDocument (#1226, #1521), and when finding default source (#1535).
        - [mutator] Set ``OVERLAP_SIMPLE`` and ``OVERLAP_COMPOUND`` glyf flags by
          default in ``instantiateVariableFont``. Added ``--no-overlap`` cli option
          to disable this (#1518).
        - [subset] Fixed subsetting ``VVAR`` table (#1516, #1517).  
          Fixed subsetting an ``HVAR`` table that has an ``AdvanceWidthMap`` when the
          option ``--retain-gids`` is used.
        - [feaLib] Added ``forceChained`` in MultipleSubstStatement (#1511).  
          Fixed double indentation of ``subtable`` statement (#1512).  
          Added support for ``subtable`` statement in more places than just PairPos
          lookups (#1520).  
          Handle lookupflag 0 and lookupflag without a value (#1540).
        - [varLib] In ``load_designspace``, provide a default English name for the
          ``ital`` axis tag.
        - Remove pyftinspect because it is unmaintained and bitrotted.
        
        3.38.0 (released 2019-02-18)
        ----------------------------
        
        - [cffLib] Fixed RecursionError when unpickling or deepcopying TTFont with
          CFF table (#1488, 649dc49).
        - [subset] Fixed AttributeError when using --desubroutinize option (#1490).
          Also, fixed desubroutinizing bug when subrs contain hints (#1499).
        - [CPAL] Make Color a subclass of namedtuple (173a0f5).
        - [feaLib] Allow hyphen in glyph class names.
        - [feaLib] Added 'tables' option to __main__.py (#1497).
        - [feaLib] Add support for special-case contextual positioning formatting
          (#1501).
        - [svgLib] Support converting SVG basic shapes (rect, circle, etc.) into
          equivalent SVG paths (#1500, #1508).
        - [Snippets] Added name-viewer.ipynb Jupyter notebook.
        
        
        3.37.3 (released 2019-02-05)
        ----------------------------
        
        - The previous release accidentally changed several files from Unix to DOS
          line-endings. Fix that.
        
        3.37.2 (released 2019-02-05)
        ----------------------------
        
        - [varLib] Temporarily revert the fix to ``load_masters()``, which caused a
          crash in ``interpolate_layout()`` when ``deepcopy``-ing OTFs.
        
        3.37.1 (released 2019-02-05)
        ----------------------------
        
        - [varLib] ``load_masters()`` now actually assigns the fonts it loads to the
          source.font attributes.
        - [varLib] Fixed an MVAR table generation crash when sparse masters were
          involved.
        - [voltLib] ``parse_coverage_()`` returns a tuple instead of an ast.Enum.
        - [feaLib] A MarkClassDefinition inside a block is no longer doubly indented
          compared to the rest of the block.
        
        3.37.0 (released 2019-01-28)
        ----------------------------
        
        - [svgLib] Added support for converting elliptical arcs to cubic bezier curves
          (#1464).
        - [py23] Added backport for ``math.isfinite``.
        - [varLib] Apply HIDDEN flag to fvar axis if designspace axis has attribute
          ``hidden=1``.
        - Fixed "DeprecationWarning: invalid escape sequence" in Python 3.7.
        - [voltLib] Fixed parsing glyph groups. Distinguish different PROCESS_MARKS.
          Accept COMPONENT glyph type.
        - [feaLib] Distinguish missing value and explicit ``<NULL>`` for PairPos2
          format A (#1459). Round-trip ``useExtension`` keyword. Implemented
          ``ValueRecord.asFea`` method.
        - [subset] Insert empty widths into hdmx when retaining gids (#1458).
        
        3.36.0 (released 2019-01-17)
        ----------------------------
        
        - [ttx] Added ``--no-recalc-timestamp`` option to keep the original font's
          ``head.modified`` timestamp (#1455, #46).
        - [ttx/psCharStrings] Fixed issues while dumping and round-tripping CFF2 table
          with ttx (#1451, #1452, #1456).
        - [voltLib] Fixed check for duplicate anchors (#1450). Don't try to read past
          the ``END`` operator in .vtp file (#1453).
        - [varLib] Use sentinel value -0x8000 (-32768) to ignore post.underlineThickness
          and post.underlinePosition when generating MVAR deltas (#1449,
          googlei18n/ufo2ft#308).
        - [subset] Added ``--retain-gids`` option to subset font without modifying the
          current glyph indices (#1443, #1447).
        - [ufoLib] Replace deprecated calls to ``getbytes`` and ``setbytes`` with new
          equivalent ``readbytes`` and ``writebytes`` calls. ``fs`` >= 2.2 no required.
        - [varLib] Allow loading masters from TTX files as well (#1441).
        
        3.35.2 (released 2019-01-14)
        ----------------------------
        
        - [hmtx/vmtx]: Allow to compile/decompile ``hmtx`` and ``vmtx`` tables even
          without the corresponding (required) metrics header tables, ``hhea`` and
          ``vhea`` (#1439).
        - [varLib] Added support for localized axes' ``labelname`` and named instances'
          ``stylename`` (#1438).
        
        3.35.1 (released 2019-01-09)
        ----------------------------
        
        - [_m_a_x_p] Include ``maxComponentElements`` in ``maxp`` table's recalculation.
        
        3.35.0 (released 2019-01-07)
        ----------------------------
        
        - [psCharStrings] In ``encodeFloat`` function, use float's "general format" with
          8 digits of precision (i.e. ``%8g``) instead of ``str()``. This works around
          a macOS rendering issue when real numbers in CFF table are too long, and
          also makes sure that floats are encoded with the same precision in python 2.7
          and 3.x (#1430, googlei18n/ufo2ft#306).
        - [_n_a_m_e/fontBuilder] Make ``_n_a_m_e_table.addMultilingualName`` also add
          Macintosh (platformID=1) names by default. Added options to ``FontBuilder``
          ``setupNameTable`` method to optionally disable Macintosh or Windows names.
          (#1359, #1431).
        - [varLib] Make ``build`` optionally accept a ``DesignSpaceDocument`` object,
          instead of a designspace file path. The caller can now set the ``font``
          attribute of designspace's sources to a TTFont object, thus allowing to
          skip filenames manipulation altogether (#1416, #1425).
        - [sfnt] Allow SFNTReader objects to be deep-copied.
        - Require typing>=3.6.4 on py27 to fix issue with singledispatch (#1423).
        - [designspaceLib/t1Lib/macRes] Fixed some cases where pathlib.Path objects were
          not accepted (#1421).
        - [varLib] Fixed merging of multiple PairPosFormat2 subtables (#1411).
        - [varLib] The default STAT table version is now set to 1.1, to improve
          compatibility with legacy applications (#1413).
        
        3.34.2 (released 2018-12-17)
        ----------------------------
        
        - [merge] Fixed AssertionError when none of the script tables in GPOS/GSUB have
          a DefaultLangSys record (#1408, 135a4a1).
        
        3.34.1 (released 2018-12-17)
        ----------------------------
        
        - [varLib] Work around macOS rendering issue for composites without gvar entry (#1381).
        
        3.34.0 (released 2018-12-14)
        ----------------------------
        
        - [varLib] Support generation of CFF2 variable fonts. ``model.reorderMasters()``
          now supports arbitrary mapping. Fix handling of overlapping ranges for feature
          variations (#1400).
        - [cffLib, subset] Code clean-up and fixing related to CFF2 support.
        - [ttLib.tables.ttProgram] Use raw strings for regex patterns (#1389).
        - [fontbuilder] Initial support for building CFF2 fonts. Set CFF's
          ``FontMatrix`` automatically from unitsPerEm.
        - [plistLib] Accept the more general ``collections.Mapping`` instead of the
          specific ``dict`` class to support custom data classes that should serialize
          to dictionaries.
        
        3.33.0 (released 2018-11-30)
        ----------------------------
        - [subset] subsetter bug fix with variable fonts.
        - [varLib.featureVar] Improve FeatureVariations generation with many rules.
        - [varLib] Enable sparse masters when building variable fonts:
          https://github.com/fonttools/fonttools/pull/1368#issuecomment-437257368
        - [varLib.mutator] Add IDEF for GETVARIATION opcode, for handling hints in an
          instance.
        - [ttLib] Ignore the length of kern table subtable format 0
        
        3.32.0 (released 2018-11-01)
        ----------------------------
        
        - [ufoLib] Make ``UFOWriter`` a subclass of ``UFOReader``, and use mixins
          for shared methods (#1344).
        - [featureVars] Fixed normalization error when a condition's minimum/maximum
          attributes are missing in designspace ``<rule>`` (#1366).
        - [setup.py] Added ``[plot]`` to extras, to optionally install ``matplotlib``,
          needed to use the ``fonTools.varLib.plot`` module.
        - [varLib] Take total bounding box into account when resolving model (7ee81c8).
          If multiple axes have the same range ratio, cut across both (62003f4).
        - [subset] Don't error if ``STAT`` has no ``AxisValue`` tables.
        - [fontBuilder] Added a new submodule which contains a ``FontBuilder`` wrapper
          class around ``TTFont`` that makes it easier to create a working TTF or OTF
          font from scratch with code. NOTE: the API is still experimental and may
          change in future versions.
        
        3.31.0 (released 2018-10-21)
        ----------------------------
        
        - [ufoLib] Merged the `ufoLib <https://github.com/unified-font-objects/ufoLib>`__
          master branch into a new ``fontTools.ufoLib`` package (#1335, #1095).
          Moved ``ufoLib.pointPen`` module to ``fontTools.pens.pointPen``.
          Moved ``ufoLib.etree`` module to ``fontTools.misc.etree``.
          Moved ``ufoLib.plistlib`` module to ``fontTools.misc.plistlib``.
          To use the new ``fontTools.ufoLib`` module you need to install fonttools
          with the ``[ufo]`` extra, or you can manually install the required additional
          dependencies (cf. README.rst).
        - [morx] Support AAT action type to insert glyphs and clean up compilation
          of AAT action tables (4a1871f, 2011ccf).
        - [subset] The ``--no-hinting`` on a CFF font now also drops the optional
          hinting keys in Private dict: ``ForceBold``, ``LanguageGroup``, and
          ``ExpansionFactor`` (#1322).
        - [subset] Include nameIDs referenced by STAT table (#1327).
        - [loggingTools] Added ``msg=None`` argument to
          ``CapturingLogHandler.assertRegex`` (0245f2c).
        - [varLib.mutator] Implemented ``FeatureVariations`` instantiation (#1244).
        - [g_l_y_f] Added PointPen support to ``_TTGlyph`` objects (#1334).
        
        3.30.0 (released 2018-09-18)
        ----------------------------
        
        - [feaLib] Skip building noop class PairPos subtables when Coverage is NULL
          (#1318).
        - [ttx] Expose the previously reserved bit flag ``OVERLAP_SIMPLE`` of
          glyf table's contour points in the TTX dump. This is used in some
          implementations to specify a non-zero fill with overlapping contours (#1316).
        - [ttLib] Added support for decompiling/compiling ``TS1C`` tables containing
          VTT sources for ``cvar`` variation table (#1310).
        - [varLib] Use ``fontTools.designspaceLib`` to read DesignSpaceDocument. The
          ``fontTools.varLib.designspace`` module is now deprecated and will be removed
          in future versions. The presence of an explicit ``axes`` element is now
          required in order to build a variable font (#1224, #1313).
        - [varLib] Implemented building GSUB FeatureVariations table from the ``rules``
          element of DesignSpace document (#1240, #713, #1314).
        - [subset] Added ``--no-layout-closure`` option to not expand the subset with
          the glyphs produced by OpenType layout features. Instead, OpenType features
          will be subset to only rules that are relevant to the otherwise-specified
          glyph set (#43, #1121).
        
        3.29.1 (released 2018-09-10)
        ----------------------------
        
        - [feaLib] Fixed issue whereby lookups from DFLT/dflt were not included in the
          DFLT/non-dflt language systems (#1307).
        - [graphite] Fixed issue on big-endian architectures (e.g. ppc64) (#1311).
        - [subset] Added ``--layout-scripts`` option to add/exclude set of OpenType
          layout scripts that will be preserved. By default all scripts are retained
          (``'*'``) (#1303).
        
        3.29.0 (released 2018-07-26)
        ----------------------------
        
        - [feaLib] In the OTL table builder, when the ``name`` table is excluded
          from the list of tables to be build, skip compiling ``featureNames`` blocks,
          as the records referenced in ``FeatureParams`` table don't exist (68951b7).
        - [otBase] Try ``ExtensionLookup`` if other offset-overflow methods fail
          (05f95f0).
        - [feaLib] Added support for explicit ``subtable;`` break statements in
          PairPos lookups; previously these were ignored (#1279, #1300, #1302).
        - [cffLib.specializer] Make sure the stack depth does not exceed maxstack - 1,
          so that a subroutinizer can insert subroutine calls (#1301,
          https://github.com/googlei18n/ufo2ft/issues/266).
        - [otTables] Added support for fixing offset overflow errors occurring inside
          ``MarkBasePos`` subtables (#1297).
        - [subset] Write the default output file extension based on ``--flavor`` option,
          or the value of ``TTFont.sfntVersion`` (d7ac0ad).
        - [unicodedata] Updated Blocks, Scripts and ScriptExtensions for Unicode 11
          (452c85e).
        - [xmlWriter] Added context manager to XMLWriter class to autoclose file
          descriptor on exit (#1290).
        - [psCharStrings] Optimize the charstring's bytecode by encoding as integers
          all float values that have no decimal portion (8d7774a).
        - [ttFont] Fixed missing import of ``TTLibError`` exception (#1285).
        - [feaLib] Allow any languages other than ``dflt`` under ``DFLT`` script
          (#1278, #1292).
        
        3.28.0 (released 2018-06-19)
        ----------------------------
        
        - [featureVars] Added experimental module to build ``FeatureVariations``
          tables. Still needs to be hooked up to ``varLib.build`` (#1240).
        - [fixedTools] Added ``otRound`` to round floats to nearest integer towards
          positive Infinity. This is now used where we deal with visual data like X/Y
          coordinates, advance widths/heights, variation deltas, and similar (#1274,
          #1248).
        - [subset] Improved GSUB closure memoize algorithm.
        - [varLib.models] Fixed regression in model resolution (180124, #1269).
        - [feaLib.ast] Fixed error when converting ``SubtableStatement`` to string
          (#1275).
        - [varLib.mutator] Set ``OS/2.usWeightClass`` and ``usWidthClass``, and
          ``post.italicAngle`` based on the 'wght', 'wdth' and 'slnt' axis values
          (#1276, #1264).
        - [py23/loggingTools] Don't automatically set ``logging.lastResort`` handler
          on py27. Moved ``LastResortLogger`` to the ``loggingTools`` module (#1277).
        
        3.27.1 (released 2018-06-11)
        ----------------------------
        
        - [ttGlyphPen] Issue a warning and skip building non-existing components
          (https://github.com/googlei18n/fontmake/issues/411).
        - [tests] Fixed issue running ttx_test.py from a tagged commit.
        
        3.27.0 (released 2018-06-11)
        ----------------------------
        
        - [designspaceLib] Added new ``conditionSet`` element to ``rule`` element in
          designspace document. Bumped ``format`` attribute to ``4.0`` (previously,
          it was formatted as an integer). Removed ``checkDefault``, ``checkAxes``
          methods, and any kind of guessing about the axes when the ``<axes>`` element
          is missing. The default master is expected at the intersection of all default
          values for each axis (#1254, #1255, #1267).
        - [cffLib] Fixed issues when compiling CFF2 or converting from CFF when the
          font has an FDArray (#1211, #1271).
        - [varLib] Avoid attempting to build ``cvar`` table when ``glyf`` table is not
          present, as is the case for CFF2 fonts.
        - [subset] Handle None coverages in MarkGlyphSets; revert commit 02616ab that
          sets empty Coverage tables in MarkGlyphSets to None, to make OTS happy.
        - [ttFont] Allow to build glyph order from ``maxp.numGlyphs`` when ``post`` or
          ``cmap`` are missing.
        - [ttFont] Added ``__len__`` method to ``_TTGlyphSet``.
        - [glyf] Ensure ``GlyphCoordinates`` never overflow signed shorts (#1230).
        - [py23] Added alias for ``itertools.izip`` shadowing the built-in ``zip``.
        - [loggingTools] Memoize ``log`` property of ``LogMixin`` class (fbab12).
        - [ttx] Impoved test coverage (#1261).
        - [Snippets] Addded script to append a suffix to all family names in a font.
        - [varLib.plot] Make it work with matplotlib >= 2.1 (b38e2b).
        
        3.26.0 (released 2018-05-03)
        ----------------------------
        
        - [designspace] Added a new optional ``layer`` attribute to the source element,
          and a corresponding ``layerName`` attribute to the ``SourceDescriptor``
          object (#1253).
          Added ``conditionset`` element to the ``rule`` element to the spec, but not
          implemented in designspace reader/writer yet (#1254).
        - [varLib.models] Refine modeling one last time (0ecf5c5).
        - [otBase] Fixed sharing of tables referred to by different offset sizes
          (795f2f9).
        - [subset] Don't drop a GDEF that only has VarStore (fc819d6). Set to None
          empty Coverage tables in MarkGlyphSets (02616ab).
        - [varLib]: Added ``--master-finder`` command-line option (#1249).
        - [varLib.mutator] Prune fvar nameIDs from instance's name table (#1245).
        - [otTables] Allow decompiling bad ClassDef tables with invalid format, with
          warning (#1236).
        - [varLib] Make STAT v1.2 and reuse nameIDs from fvar table (#1242).
        - [varLib.plot] Show master locations. Set axis limits to -1, +1.
        - [subset] Handle HVAR direct mapping. Passthrough 'cvar'.
          Added ``--font-number`` command-line option for collections.
        - [t1Lib] Allow a text encoding to be specified when parsing a Type 1 font
          (#1234). Added ``kind`` argument to T1Font constructor (c5c161c).
        - [ttLib] Added context manager API to ``TTFont`` class, so it can be used in
          ``with`` statements to auto-close the file when exiting the context (#1232).
        
        3.25.0 (released 2018-04-03)
        ----------------------------
        
        - [varLib] Improved support-resolution algorithm. Previously, the on-axis
          masters would always cut the space. They don't anymore. That's more
          consistent, and fixes the main issue Erik showed at TYPO Labs 2017.
          Any varfont built that had an unusual master configuration will change
          when rebuilt (42bef17, a523a697,
          https://github.com/googlei18n/fontmake/issues/264).
        - [varLib.models] Added a ``main()`` entry point, that takes positions and
          prints model results.
        - [varLib.plot] Added new module to plot a designspace's
          VariationModel. Requires ``matplotlib``.
        - [varLib.mutator] Added -o option to specify output file path (2ef60fa).
        - [otTables] Fixed IndexError while pruning of HVAR pre-write (6b6c34a).
        - [varLib.models] Convert delta array to floats if values overflows signed
          short integer (0055f94).
        
        3.24.2 (released 2018-03-26)
        ----------------------------
        
        - [otBase] Don't fail during ``ValueRecord`` copy if src has more items.
          We drop hinting in the subsetter by simply changing ValueFormat, without
          cleaning up the actual ValueRecords. This was causing assertion error if
          a variable font was subsetted without hinting and then passed directly to
          the mutator for instantiation without first it saving to disk.
        
        3.24.1 (released 2018-03-06)
        ----------------------------
        
        - [varLib] Don't remap the same ``DeviceTable`` twice in VarStore optimizer
          (#1206).
        - [varLib] Add ``--disable-iup`` option to ``fonttools varLib`` script,
          and a ``optimize=True`` keyword argument to ``varLib.build`` function,
          to optionally disable IUP optimization while building varfonts.
        - [ttCollection] Fixed issue while decompiling ttc with python3 (#1207).
        
        3.24.0 (released 2018-03-01)
        ----------------------------
        
        - [ttGlyphPen] Decompose composite glyphs if any components' transform is too
          large to fit a ``F2Dot14`` value, or clamp transform values that are
          (almost) equal to +2.0 to make them fit and avoid decomposing (#1200,
          #1204, #1205).
        - [ttx] Added new ``-g`` option to dump glyphs from the ``glyf`` table
          splitted as individual ttx files (#153, #1035, #1132, #1202).
        - Copied ``ufoLib.filenames`` module to ``fontTools.misc.filenames``, used
          for the ttx split-glyphs option (#1202).
        - [feaLib] Added support for ``cvParameters`` blocks in Character Variant
          feautures ``cv01-cv99`` (#860, #1169).
        - [Snippets] Added ``checksum.py`` script to generate/check SHA1 hash of
          ttx files (#1197).
        - [varLib.mutator] Fixed issue while instantiating some variable fonts
          whereby the horizontal advance width computed from ``gvar`` phantom points
          could turn up to be negative (#1198).
        - [varLib/subset] Fixed issue with subsetting GPOS variation data not
          picking up ``ValueRecord`` ``Device`` objects (54fd71f).
        - [feaLib/voltLib] In all AST elements, the ``location`` is no longer a
          required positional argument, but an optional kewyord argument (defaults
          to ``None``). This will make it easier to construct feature AST from
          code (#1201).
        
        
        3.23.0 (released 2018-02-26)
        ----------------------------
        
        - [designspaceLib] Added an optional ``lib`` element to the designspace as a
          whole, as well as to the instance elements, to store arbitrary data in a
          property list dictionary, similar to the UFO's ``lib``. Added an optional
          ``font`` attribute to the ``SourceDescriptor``, to allow operating on
          in-memory font objects (#1175).
        - [cffLib] Fixed issue with lazy-loading of attributes when attempting to
          set the CFF TopDict.Encoding (#1177, #1187).
        - [ttx] Fixed regression introduced in 3.22.0 that affected the split tables
          ``-s`` option (#1188).
        - [feaLib] Added ``IncludedFeaNotFound`` custom exception subclass, raised
          when an included feature file cannot be found (#1186).
        - [otTables] Changed ``VarIdxMap`` to use glyph names internally instead of
          glyph indexes. The old ttx dumps of HVAR/VVAR tables that contain indexes
          can still be imported (21cbab8, 38a0ffb).
        - [varLib] Implemented VarStore optimizer (#1184).
        - [subset] Implemented pruning of GDEF VarStore, HVAR and MVAR (#1179).
        - [sfnt] Restore backward compatiblity with ``numFonts`` attribute of
          ``SFNTReader`` object (#1181).
        - [merge] Initial support for merging ``LangSysRecords`` (#1180).
        - [ttCollection] don't seek(0) when writing to possibly unseekable strems.
        - [subset] Keep all ``--name-IDs`` from 0 to 6 by default (#1170, #605, #114).
        - [cffLib] Added ``width`` module to calculate optimal CFF default and
          nominal glyph widths.
        - [varLib] Don’t fail if STAT already in the master fonts (#1166).
        
        3.22.0 (released 2018-02-04)
        ----------------------------
        
        - [subset] Support subsetting ``endchar`` acting as ``seac``-like components
          in ``CFF`` (fixes #1162).
        - [feaLib] Allow to build from pre-parsed ``ast.FeatureFile`` object.
          Added ``tables`` argument to only build some tables instead of all (#1159,
          #1163).
        - [textTools] Replaced ``safeEval`` with ``ast.literal_eval`` (#1139).
        - [feaLib] Added option to the parser to not resolve ``include`` statements
          (#1154).
        - [ttLib] Added new ``ttCollection`` module to read/write TrueType and
          OpenType Collections. Exports a ``TTCollection`` class with a ``fonts``
          attribute containing a list of ``TTFont`` instances, the methods ``save``
          and ``saveXML``, plus some list-like methods. The ``importXML`` method is
          not implemented yet (#17).
        - [unicodeadata] Added ``ot_tag_to_script`` function that converts from
          OpenType script tag to Unicode script code.
        - Added new ``designspaceLib`` subpackage, originally from Erik Van Blokland's
          ``designSpaceDocument``: https://github.com/LettError/designSpaceDocument
          NOTE: this is not yet used internally by varLib, and the API may be subject
          to changes (#911, #1110, LettError/designSpaceDocument#28).
        - Added new FontTools icon images (8ee7c32).
        - [unicodedata] Added ``script_horizontal_direction`` function that returns
          either "LTR" or "RTL" given a unicode script code.
        - [otConverters] Don't write descriptive name string as XML comment if the
          NameID value is 0 (== NULL) (#1151, #1152).
        - [unicodedata] Add ``ot_tags_from_script`` function to get the list of
          OpenType script tags associated with unicode script code (#1150).
        - [feaLib] Don't error when "enumerated" kern pairs conflict with preceding
          single pairs; emit warning and chose the first value (#1147, #1148).
        - [loggingTools] In ``CapturingLogHandler.assertRegex`` method, match the
          fully formatted log message.
        - [sbix] Fixed TypeError when concatenating str and bytes (#1154).
        - [bezierTools] Implemented cusp support and removed ``approximate_fallback``
          arg in ``calcQuadraticArcLength``. Added ``calcCubicArcLength`` (#1142).
        
        3.21.2 (released 2018-01-08)
        ----------------------------
        
        - [varLib] Fixed merging PairPos Format1/2 with missing subtables (#1125).
        
        3.21.1 (released 2018-01-03)
        ----------------------------
        
        - [feaLib] Allow mixed single/multiple substitutions (#612)
        - Added missing ``*.afm`` test assets to MAINFEST.in (#1137).
        - Fixed dumping ``SVG`` tables containing color palettes (#1124).
        
        3.21.0 (released 2017-12-18)
        ----------------------------
        
        - [cmap] when compiling format6 subtable, don't assume gid0 is always called
          '.notdef' (1e42224).
        - [ot] Allow decompiling fonts with bad Coverage format number (1aafae8).
        - Change FontTools licence to MIT (#1127).
        - [post] Prune extra names already in standard Mac set (df1e8c7).
        - [subset] Delete empty SubrsIndex after subsetting (#994, #1118).
        - [varLib] Don't share points in cvar by default, as it currently fails on
          some browsers (#1113).
        - [afmLib] Make poor old afmLib work on python3.
        
        3.20.1 (released 2017-11-22)
        ----------------------------
        
        - [unicodedata] Fixed issue with ``script`` and ``script_extension`` functions
          returning inconsistent short vs long names. They both return the short four-
          letter script codes now. Added ``script_name`` and ``script_code`` functions
          to look up the long human-readable script name from the script code, and
          viceversa (#1109, #1111).
        
        3.20.0 (released 2017-11-21)
        ----------------------------
        
        - [unicodedata] Addded new module ``fontTools.unicodedata`` which exports the
          same interface as the built-in ``unicodedata`` module, with the addition of
          a few functions that are missing from the latter, such as ``script``,
          ``script_extension`` and ``block``. Added a ``MetaTools/buildUCD.py`` script
          to download and parse data files from the Unicode Character Database and
          generate python modules containing lists of ranges and property values.
        - [feaLib] Added ``__str__`` method to all ``ast`` elements (delegates to the
          ``asFea`` method).
        - [feaLib] ``Parser`` constructor now accepts a ``glyphNames`` iterable
          instead of ``glyphMap`` dict. The latter still works but with a pending
          deprecation warning (#1104).
        - [bezierTools] Added arc length calculation functions originally from
          ``pens.perimeterPen`` module (#1101).
        - [varLib] Started generating STAT table (8af4309). Right now it just reflects
          the axes, and even that with certain limitations:
          * AxisOrdering is set to the order axes are defined,
          * Name-table entries are not shared with fvar.
        - [py23] Added backports for ``redirect_stdout`` and ``redirect_stderr``
          context managers (#1097).
        - [Graphite] Fixed some round-trip bugs (#1093).
        
        3.19.0 (released 2017-11-06)
        ----------------------------
        
        - [varLib] Try set of used points instead of all points when testing whether to
          share points between tuples (#1090).
        - [CFF2] Fixed issue with reading/writing PrivateDict BlueValues to TTX file.
          Read the commit message 8b02b5a and issue #1030 for more details.
          NOTE: this change invalidates all the TTX files containing CFF2 tables
          that where dumped with previous verisons of fonttools.
          CFF2 Subr items can have values on the stack after the last operator, thus
          a ``CFF2Subr`` class was added to accommodate this (#1091).
        - [_k_e_r_n] Fixed compilation of AAT kern version=1.0 tables (#1089, #1094)
        - [ttLib] Added getBestCmap() convenience method to TTFont class and cmap table
          class that returns a preferred Unicode cmap subtable given a list of options
          (#1092).
        - [morx] Emit more meaningful subtable flags. Implement InsertionMorphAction
        
        3.18.0 (released 2017-10-30)
        ----------------------------
        
        - [feaLib] Fixed writing back nested glyph classes (#1086).
        - [TupleVariation] Reactivated shared points logic, bugfixes (#1009).
        - [AAT] Implemented ``morx`` ligature subtables (#1082).
        - [reverseContourPen] Keep duplicate lineTo following a moveTo (#1080,
          https://github.com/googlei18n/cu2qu/issues/51).
        - [varLib.mutator] Suport instantiation of GPOS, GDEF and MVAR (#1079).
        - [sstruct] Fixed issue with ``unicode_literals`` and ``struct`` module in
          old versions of python 2.7 (#993).
        
        3.17.0 (released 2017-10-16)
        ----------------------------
        
        - [svgPathPen] Added an ``SVGPathPen`` that translates segment pen commands
          into SVG path descriptions. Copied from Tal Leming's ``ufo2svg.svgPathPen``
          https://github.com/typesupply/ufo2svg/blob/d69f992/Lib/ufo2svg/svgPathPen.py
        - [reverseContourPen] Added ``ReverseContourPen``, a filter pen that draws
          contours with the winding direction reversed, while keeping the starting
          point (#1071).
        - [filterPen] Added ``ContourFilterPen`` to manipulate contours as a whole
          rather than segment by segment.
        - [arrayTools] Added ``Vector`` class to apply math operations on an array
          of numbers, and ``pairwise`` function to loop over pairs of items in an
          iterable.
        - [varLib] Added support for building and interpolation of ``cvar`` table
          (f874cf6, a25a401).
        
        3.16.0 (released 2017-10-03)
        ----------------------------
        
        - [head] Try using ``SOURCE_DATE_EPOCH`` environment variable when setting
          the ``head`` modified timestamp to ensure reproducible builds (#1063).
          See https://reproducible-builds.org/specs/source-date-epoch/
        - [VTT] Decode VTT's ``TSI*`` tables text as UTF-8 (#1060).
        - Added support for Graphite font tables: Feat, Glat, Gloc, Silf and Sill.
          Thanks @mhosken! (#1054).
        - [varLib] Default to using axis "name" attribute if "labelname" element
          is missing (588f524).
        - [merge] Added support for merging Script records. Remove unused features
          and lookups after merge (d802580, 556508b).
        - Added ``fontTools.svgLib`` package. Includes a parser for SVG Paths that
          supports the Pen protocol (#1051). Also, added a snippet to convert SVG
          outlines to UFO GLIF (#1053).
        - [AAT] Added support for ``ankr``, ``bsln``, ``mort``, ``morx``, ``gcid``,
          and ``cidg``.
        - [subset] Implemented subsetting of ``prop``, ``opbd``, ``bsln``, ``lcar``.
        
        3.15.1 (released 2017-08-18)
        ----------------------------
        
        - [otConverters] Implemented ``__add__`` and ``__radd__`` methods on
          ``otConverters._LazyList`` that decompile a lazy list before adding
          it to another list or ``_LazyList`` instance. Fixes an ``AttributeError``
          in the ``subset`` module when attempting to sum ``_LazyList`` objects
          (6ef48bd2, 1aef1683).
        - [AAT] Support the `opbd` table with optical bounds (a47f6588).
        - [AAT] Support `prop` table with glyph properties (d05617b4).
        
        
        3.15.0 (released 2017-08-17)
        ----------------------------
        
        - [AAT] Added support for AAT lookups. The ``lcar`` table can be decompiled
          and recompiled; futher work needed to handle ``morx`` table (#1025).
        - [subset] Keep (empty) DefaultLangSys for Script 'DFLT' (6eb807b5).
        - [subset] Support GSUB/GPOS.FeatureVariations (fe01d87b).
        - [varLib] In ``models.supportScalars``, ignore an axis when its peak value
          is 0 (fixes #1020).
        - [varLib] Add default mappings to all axes in avar to fix rendering issue
          in some rasterizers (19c4b377, 04eacf13).
        - [varLib] Flatten multiple tail PairPosFormat2 subtables before merging
          (c55ef525).
        - [ttLib] Added support for recalculating font bounding box in ``CFF`` and
          ``head`` tables, and min/max values in ``hhea`` and ``vhea`` tables (#970).
        
        3.14.0 (released 2017-07-31)
        ----------------------------
        
        - [varLib.merger] Remove Extensions subtables before merging (f7c20cf8).
        - [varLib] Initialize the avar segment map with required default entries
          (#1014).
        - [varLib] Implemented optimal IUP optmiziation (#1019).
        - [otData] Add ``AxisValueFormat4`` for STAT table v1.2 from OT v1.8.2
          (#1015).
        - [name] Fixed BCP46 language tag for Mac langID=9: 'si' -> 'sl'.
        - [subset] Return value from ``_DehintingT2Decompiler.op_hintmask``
          (c0d672ba).
        - [cffLib] Allow to get TopDict by index as well as by name (dca96c9c).
        - [cffLib] Removed global ``isCFF2`` state; use one set of classes for
          both CFF and CFF2, maintaining backward compatibility existing code (#1007).
        - [cffLib] Deprecated maxstack operator, per OpenType spec update 1.8.1.
        - [cffLib] Added missing default (-100) for UnderlinePosition (#983).
        - [feaLib] Enable setting nameIDs greater than 255 (#1003).
        - [varLib] Recalculate ValueFormat when merging SinglePos (#996).
        - [varLib] Do not emit MVAR if there are no entries in the variation store
          (#987).
        - [ttx] For ``-x`` option, pad with space if table tag length is < 4.
        
        3.13.1 (released 2017-05-30)
        ----------------------------
        
        - [feaLib.builder] Removed duplicate lookups optimization. The original
          lookup order and semantics of the feature file are preserved (#976).
        
        3.13.0 (released 2017-05-24)
        ----------------------------
        
        - [varLib.mutator] Implement IUP optimization (#969).
        - [_g_l_y_f.GlyphCoordinates] Changed ``__bool__()`` semantics to match those
          of other iterables (e46f949). Removed ``__abs__()`` (3db5be2).
        - [varLib.interpolate_layout] Added ``mapped`` keyword argument to
          ``interpolate_layout`` to allow disabling avar mapping: if False (default),
          the location is mapped using the map element of the axes in designspace file;
          if True, it is assumed that location is in designspace's internal space and
          no mapping is performed (#950, #975).
        - [varLib.interpolate_layout] Import designspace-loading logic from varLib.
        - [varLib] Fixed bug with recombining PairPosClass2 subtables (81498e5, #914).
        - [cffLib.specializer] When copying iterables, cast to list (462b7f86).
        
        3.12.1 (released 2017-05-18)
        ----------------------------
        
        - [pens.t2CharStringPen] Fixed AttributeError when calling addComponent in
          T2CharStringPen (#965).
        
        3.12.0 (released 2017-05-17)
        ----------------------------
        
        - [cffLib.specializer] Added new ``specializer`` module to optimize CFF
          charstrings, used by the T2CharStringPen (#948).
        - [varLib.mutator] Sort glyphs by component depth before calculating composite
          glyphs' bounding boxes to ensure deltas are correctly caclulated (#945).
        - [_g_l_y_f] Fixed loss of precision in GlyphCoordinates by using 'd' (double)
          instead of 'f' (float) as ``array.array`` typecode (#963, #964).
        
        3.11.0 (released 2017-05-03)
        ----------------------------
        
        - [t2CharStringPen] Initial support for specialized Type2 path operators:
          vmoveto, hmoveto, vlineto, hlineto, vvcurveto, hhcurveto, vhcurveto and
          hvcurveto. This should produce more compact charstrings (#940, #403).
        - [Doc] Added Sphinx sources for the documentation. Thanks @gferreira (#935).
        - [fvar] Expose flags in XML (#932)
        - [name] Add helper function for building multi-lingual names (#921)
        - [varLib] Fixed kern merging when a PairPosFormat2 has ClassDef1 with glyphs
          that are NOT present in the Coverage (1b5e1c4, #939).
        - [varLib] Fixed non-deterministic ClassDef order with PY3 (f056c12, #927).
        - [feLib] Throw an error when the same glyph is defined in multiple mark
          classes within the same lookup (3e3ff00, #453).
        
        3.10.0 (released 2017-04-14)
        ----------------------------
        
        - [varLib] Added support for building ``avar`` table, using the designspace
          ``<map>`` elements.
        - [varLib] Removed unused ``build(..., axisMap)`` argument. Axis map should
          be specified in designspace file now. We do not accept nonstandard axes
          if ``<axes>`` element is not present.
        - [varLib] Removed "custom" axis from the ``standard_axis_map``. This was
          added before when glyphsLib was always exporting the (unused) custom axis.
        - [varLib] Added partial support for building ``MVAR`` table; does not
          implement ``gasp`` table variations yet.
        - [pens] Added FilterPen base class, for pens that control another pen;
          factored out ``addComponent`` method from BasePen into a separate abstract
          DecomposingPen class; added DecomposingRecordingPen, which records
          components decomposed as regular contours.
        - [TSI1] Fixed computation of the textLength of VTT private tables (#913).
        - [loggingTools] Added ``LogMixin`` class providing a ``log`` property to
          subclasses, which returns a ``logging.Logger`` named after the latter.
        - [loggingTools] Added ``assertRegex`` method to ``CapturingLogHandler``.
        - [py23] Added backport for python 3's ``types.SimpleNamespace`` class.
        - [EBLC] Fixed issue with python 3 ``zip`` iterator.
        
        3.9.2 (released 2017-04-08)
        ---------------------------
        
        - [pens] Added pen to draw glyphs using WxPython ``GraphicsPath`` class:
          https://wxpython.org/docs/api/wx.GraphicsPath-class.html
        - [varLib.merger] Fixed issue with recombining multiple PairPosFormat2
          subtables (#888)
        - [varLib] Do not encode gvar deltas that are all zeroes, or if all values
          are smaller than tolerance.
        - [ttLib] _TTGlyphSet glyphs now also have ``height`` and ``tsb`` (top
          side bearing) attributes from the ``vmtx`` table, if present.
        - [glyf] In ``GlyphCoordintes`` class, added ``__bool__`` / ``__nonzero__``
          methods, and ``array`` property to get raw array.
        - [ttx] Support reading TTX files with BOM (#896)
        - [CFF2] Fixed the reporting of the number of regions in the font.
        
        3.9.1 (released 2017-03-20)
        ---------------------------
        
        - [varLib.merger] Fixed issue while recombining multiple PairPosFormat2
          subtables if they were split because of offset overflows (9798c30).
        - [varLib.merger] Only merge multiple PairPosFormat1 subtables if there is
          at least one of the fonts with a non-empty Format1 subtable (0f5a46b).
        - [varLib.merger] Fixed IndexError with empty ClassDef1 in PairPosFormat2
          (aad0d46).
        - [varLib.merger] Avoid reusing Class2Record (mutable) objects (e6125b3).
        - [varLib.merger] Calculate ClassDef1 and ClassDef2's Format when merging
          PairPosFormat2 (23511fd).
        - [macUtils] Added missing ttLib import (b05f203).
        
        3.9.0 (released 2017-03-13)
        ---------------------------
        
        - [feaLib] Added (partial) support for parsing feature file comments ``# ...``
          appearing in between statements (#879).
        - [feaLib] Cleaned up syntax tree for FeatureNames.
        - [ttLib] Added support for reading/writing ``CFF2`` table (thanks to
          @readroberts at Adobe), and ``TTFA`` (ttfautohint) table.
        - [varLib] Fixed regression introduced with 3.8.0 in the calculation of
          ``NumShorts``, i.e. the number of deltas in ItemVariationData's delta sets
          that use a 16-bit representation (b2825ff).
        
        3.8.0 (released 2017-03-05)
        ---------------------------
        
        - New pens: MomentsPen, StatisticsPen, RecordingPen, and TeePen.
        - [misc] Added new ``fontTools.misc.symfont`` module, for symbolic font
          statistical analysis; requires ``sympy`` (http://www.sympy.org/en/index.html)
        - [varLib] Added experimental ``fontTools.varLib.interpolatable`` module for
          finding wrong contour order between different masters
        - [varLib] designspace.load() now returns a dictionary, instead of a tuple,
          and supports <axes> element (#864); the 'masters' item was renamed 'sources',
          like the <sources> element in the designspace document
        - [ttLib] Fixed issue with recalculating ``head`` modified timestamp when
          saving CFF fonts
        - [ttLib] In TupleVariation, round deltas before compiling (#861, fixed #592)
        - [feaLib] Ignore duplicate glyphs in classes used as MarkFilteringSet and
          MarkAttachmentType (#863)
        - [merge] Changed the ``gasp`` table merge logic so that only the one from
          the first font is retained, similar to other hinting tables (#862)
        - [Tests] Added tests for the ``varLib`` package, as well as test fonts
          from the "Annotated OpenType Specification" (AOTS) to exercise ``ttLib``'s
          table readers/writers (<https://github.com/adobe-type-tools/aots>)
        
        3.7.2 (released 2017-02-17)
        ---------------------------
        
        - [subset] Keep advance widths when stripping ".notdef" glyph outline in
          CID-keyed CFF fonts (#845)
        - [feaLib] Zero values now produce the same results as makeotf (#633, #848)
        - [feaLib] More compact encoding for “Contextual positioning with in-line
          single positioning rules” (#514)
        
        3.7.1 (released 2017-02-15)
        ---------------------------
        
        - [subset] Fixed issue with ``--no-hinting`` option whereby advance widths in
          Type 2 charstrings were also being stripped (#709, #343)
        - [feaLib] include statements now resolve relative paths like makeotf (#838)
        - [feaLib] table ``name`` now handles Unicode codepoints beyond the Basic
          Multilingual Plane, also supports old-style MacOS platform encodings (#842)
        - [feaLib] correctly escape string literals when emitting feature syntax (#780)
        
        3.7.0 (released 2017-02-11)
        ---------------------------
        
        - [ttx, mtiLib] Preserve ordering of glyph alternates in GSUB type 3 (#833).
        - [feaLib] Glyph names can have dashes, as per new AFDKO syntax v1.20 (#559).
        - [feaLib] feaLib.Parser now needs the font's glyph map for parsing.
        - [varLib] Fix regression where GPOS values were stored as 0.
        - [varLib] Allow merging of class-based kerning when ClassDefs are different
        
        3.6.3 (released 2017-02-06)
        ---------------------------
        
        - [varLib] Fix building variation of PairPosFormat2 (b5c34ce).
        - Populate defaults even for otTables that have postRead (e45297b).
        - Fix compiling of MultipleSubstFormat1 with zero 'out' glyphs (b887860).
        
        3.6.2 (released 2017-01-30)
        ---------------------------
        
        - [varLib.merger] Fixed "TypeError: reduce() of empty sequence with no
          initial value" (3717dc6).
        
        3.6.1 (released 2017-01-28)
        ---------------------------
        
        -  [py23] Fixed unhandled exception occurring at interpreter shutdown in
           the "last resort" logging handler (972b3e6).
        -  [agl] Ensure all glyph names are of native 'str' type; avoid mixing
           'str' and 'unicode' in TTFont.glyphOrder (d8c4058).
        -  Fixed inconsistent title levels in README.rst that caused PyPI to
           incorrectly render the reStructuredText page.
        
        3.6.0 (released 2017-01-26)
        ---------------------------
        
        -  [varLib] Refactored and improved the variation-font-building process.
        -  Assembly code in the fpgm, prep, and glyf tables is now indented in
           XML output for improved readability. The ``instruction`` element is
           written as a simple tag if empty (#819).
        -  [ttx] Fixed 'I/O operation on closed file' error when dumping
           multiple TTXs to standard output with the '-o -' option.
        -  The unit test modules (``*_test.py``) have been moved outside of the
           fontTools package to the Tests folder, thus they are no longer
           installed (#811).
        
        3.5.0 (released 2017-01-14)
        ---------------------------
        
        -  Font tables read from XML can now be written back to XML with no
           loss.
        -  GSUB/GPOS LookupType is written out in XML as an element, not
           comment. (#792)
        -  When parsing cmap table, do not store items mapped to glyph id 0.
           (#790)
        -  [otlLib] Make ClassDef sorting deterministic. Fixes #766 (7d1ddb2)
        -  [mtiLib] Added unit tests (#787)
        -  [cvar] Implemented cvar table
        -  [gvar] Renamed GlyphVariation to TupleVariation to match OpenType
           terminology.
        -  [otTables] Handle gracefully empty VarData.Item array when compiling
           XML. (#797)
        -  [varLib] Re-enabled generation of ``HVAR`` table for fonts with
           TrueType outlines; removed ``--build-HVAR`` command-line option.
        -  [feaLib] The parser can now be extended to support non-standard
           statements in FEA code by using a customized Abstract Syntax Tree.
           See, for example, ``feaLib.builder_test.test_extensions`` and
           baseClass.feax (#794, fixes #773).
        -  [feaLib] Added ``feaLib`` command to the 'fonttools' command-line
           tool; applies a feature file to a font. ``fonttools feaLib -h`` for
           help.
        -  [pens] The ``T2CharStringPen`` now takes an optional
           ``roundTolerance`` argument to control the rounding of coordinates
           (#804, fixes #769).
        -  [ci] Measure test coverage on all supported python versions and OSes,
           combine coverage data and upload to
           https://codecov.io/gh/fonttools/fonttools (#786)
        -  [ci] Configured Travis and Appveyor for running tests on Python 3.6
           (#785, 55c03bc)
        -  The manual pages installation directory can be customized through
           ``FONTTOOLS_MANPATH`` environment variable (#799, fixes #84).
        -  [Snippets] Added otf2ttf.py, for converting fonts from CFF to
           TrueType using the googlei18n/cu2qu module (#802)
        
        3.4.0 (released 2016-12-21)
        ---------------------------
        
        -  [feaLib] Added support for generating FEA text from abstract syntax
           tree (AST) objects (#776). Thanks @mhosken
        -  Added ``agl.toUnicode`` function to convert AGL-compliant glyph names
           to Unicode strings (#774)
        -  Implemented MVAR table (b4d5381)
        
        3.3.1 (released 2016-12-15)
        ---------------------------
        
        -  [setup] We no longer use versioneer.py to compute fonttools version
           from git metadata, as this has caused issues for some users (#767).
           Now we bump the version strings manually with a custom ``release``
           command of setup.py script.
        
        3.3.0 (released 2016-12-06)
        ---------------------------
        
        -  [ttLib] Implemented STAT table from OpenType 1.8 (#758)
        -  [cffLib] Fixed decompilation of CFF fonts containing non-standard
           key/value pairs in FontDict (issue #740; PR #744)
        -  [py23] minor: in ``round3`` function, allow the second argument to be
           ``None`` (#757)
        -  The standalone ``sstruct`` and ``xmlWriter`` modules, deprecated
           since vesion 3.2.0, have been removed. They can be imported from the
           ``fontTools.misc`` package.
        
        3.2.3 (released 2016-12-02)
        ---------------------------
        
        -  [py23] optimized performance of round3 function; added backport for
           py35 math.isclose() (9d8dacb)
        -  [subset] fixed issue with 'narrow' (UCS-2) Python 2 builds and
           ``--text``/``--text-file`` options containing non-BMP chararcters
           (16d0e5e)
        -  [varLib] fixed issuewhen normalizing location values (8fa2ee1, #749)
        -  [inspect] Made it compatible with both python2 and python3 (167ee60,
           #748). Thanks @pnemade
        
        3.2.2 (released 2016-11-24)
        ---------------------------
        
        -  [varLib] Do not emit null axes in fvar (1bebcec). Thanks @robmck-ms
        -  [varLib] Handle fonts without GPOS (7915a45)
        -  [merge] Ignore LangSys if None (a11bc56)
        -  [subset] Fix subsetting MathVariants (78d3cbe)
        -  [OS/2] Fix "Private Use (plane 15)" range (08a0d55). Thanks @mashabow
        
        3.2.1 (released 2016-11-03)
        ---------------------------
        
        -  [OS/2] fix checking ``fsSelection`` bits matching ``head.macStyle``
           bits
        -  [varLib] added ``--build-HVAR`` option to generate ``HVAR`` table for
           fonts with TrueType outlines. For ``CFF2``, it is enabled by default.
        
        3.2.0 (released 2016-11-02)
        ---------------------------
        
        -  [varLib] Improve support for OpenType 1.8 Variable Fonts:
        -  Implement GDEF's VariationStore
        -  Implement HVAR/VVAR tables
        -  Partial support for loading MutatorMath .designspace files with
           varLib.designspace module
        -  Add varLib.models with Variation fonts interpolation models
        -  Implement GSUB/GPOS FeatureVariations
        -  Initial support for interpolating and merging OpenType Layout tables
           (see ``varLib.interpolate_layout`` and ``varLib.merger`` modules)
        -  [API change] Change version to be an integer instead of a float in
           XML output for GSUB, GPOS, GDEF, MATH, BASE, JSTF, HVAR, VVAR, feat,
           hhea and vhea tables. Scripts that set the Version for those to 1.0
           or other float values also need fixing. A warning is emitted when
           code or XML needs fix.
        -  several bug fixes to the cffLib module, contributed by Adobe's
           @readroberts
        -  The XML output for CFF table now has a 'major' and 'minor' elements
           for specifying whether it's version 1.0 or 2.0 (support for CFF2 is
           coming soon)
        -  [setup.py] remove undocumented/deprecated ``extra_path`` Distutils
           argument. This means that we no longer create a "FontTools" subfolder
           in site-packages containing the actual fontTools package, as well as
           the standalone xmlWriter and sstruct modules. The latter modules are
           also deprecated, and scheduled for removal in upcoming releases.
           Please change your import statements to point to from fontTools.misc
           import xmlWriter and from fontTools.misc import sstruct.
        -  [scripts] Add a 'fonttools' command-line tool that simply runs
           ``fontTools.*`` sub-modules: e.g. ``fonttools ttx``,
           ``fonttools subset``, etc.
        -  [hmtx/vmts] Read advance width/heights as unsigned short (uint16);
           automatically round float values to integers.
        -  [ttLib/xmlWriter] add 'newlinestr=None' keyword argument to
           ``TTFont.saveXML`` for overriding os-specific line endings (passed on
           to ``XMLWriter`` instances).
        -  [versioning] Use versioneer instead of ``setuptools_scm`` to
           dynamically load version info from a git checkout at import time.
        -  [feaLib] Support backslash-prefixed glyph names.
        
        3.1.2 (released 2016-09-27)
        ---------------------------
        
        -  restore Makefile as an alternative way to build/check/install
        -  README.md: update instructions for installing package from source,
           and for running test suite
        -  NEWS: Change log was out of sync with tagged release
        
        3.1.1 (released 2016-09-27)
        ---------------------------
        
        -  Fix ``ttLibVersion`` attribute in TTX files still showing '3.0'
           instead of '3.1'.
        -  Use ``setuptools_scm`` to manage package versions.
        
        3.1.0 (released 2016-09-26)
        ---------------------------
        
        -  [feaLib] New library to parse and compile Adobe FDK OpenType Feature
           files.
        -  [mtiLib] New library to parse and compile Monotype 'FontDame'
           OpenType Layout Tables files.
        -  [voltLib] New library to parse Microsoft VOLT project files.
        -  [otlLib] New library to work with OpenType Layout tables.
        -  [varLib] New library to work with OpenType Font Variations.
        -  [pens] Add ttGlyphPen to draw to TrueType glyphs, and t2CharStringPen
           to draw to Type 2 Charstrings (CFF); add areaPen and perimeterPen.
        -  [ttLib.tables] Implement 'meta' and 'trak' tables.
        -  [ttx] Add --flavor option for compiling to 'woff' or 'woff2'; add
           ``--with-zopfli`` option to use Zopfli to compress WOFF 1.0 fonts.
        -  [subset] Support subsetting 'COLR'/'CPAL' and 'CBDT'/'CBLC' color
           fonts tables, and 'gvar' table for variation fonts.
        -  [Snippets] Add ``symfont.py``, for symbolic font statistics analysis;
           interpolatable.py, a preliminary script for detecting interpolation
           errors; ``{merge,dump}_woff_metadata.py``.
        -  [classifyTools] Helpers to classify things into classes.
        -  [CI] Run tests on Windows, Linux and macOS using Appveyor and Travis
           CI; check unit test coverage with Coverage.py/Coveralls; automatic
           deployment to PyPI on tags.
        -  [loggingTools] Use Python built-in logging module to print messages.
        -  [py23] Make round() behave like Python 3 built-in round(); define
           round2() and round3().
        
        3.0 (released 2015-09-01)
        -------------------------
        
        -  Add Snippet scripts for cmap subtable format conversion, printing
           GSUB/GPOS features, building a GX font from two masters
        -  TTX WOFF2 support and a ``-f`` option to overwrite output file(s)
        -  Support GX tables: ``avar``, ``gvar``, ``fvar``, ``meta``
        -  Support ``feat`` and gzip-compressed SVG tables
        -  Upgrade Mac East Asian encodings to native implementation if
           available
        -  Add Roman Croatian and Romanian encodings, codecs for mac-extended
           East Asian encodings
        -  Implement optimal GLYF glyph outline packing; disabled by default
        
        2.5 (released 2014-09-24)
        -------------------------
        
        -  Add a Qt pen
        -  Add VDMX table converter
        -  Load all OpenType sub-structures lazily
        -  Add support for cmap format 13.
        -  Add pyftmerge tool
        -  Update to Unicode 6.3.0d3
        -  Add pyftinspect tool
        -  Add support for Google CBLC/CBDT color bitmaps, standard EBLC/EBDT
           embedded bitmaps, and ``SVG`` table (thanks to Read Roberts at Adobe)
        -  Add support for loading, saving and ttx'ing WOFF file format
        -  Add support for Microsoft COLR/CPAL layered color glyphs
        -  Support PyPy
        -  Support Jython, by replacing numpy with array/lists modules and
           removed it, pure-Python StringIO, not cStringIO
        -  Add pyftsubset and Subsetter object, supporting CFF and TTF
        -  Add to ttx args for -q for quiet mode, -z to choose a bitmap dump
           format
        
        2.4 (released 2013-06-22)
        -------------------------
        
        -  Option to write to arbitrary files
        -  Better dump format for DSIG
        -  Better detection of OTF XML
        -  Fix issue with Apple's kern table format
        -  Fix mangling of TT glyph programs
        -  Fix issues related to mona.ttf
        -  Fix Windows Installer instructions
        -  Fix some modern MacOS issues
        -  Fix minor issues and typos
        
        2.3 (released 2009-11-08)
        -------------------------
        
        -  TrueType Collection (TTC) support
        -  Python 2.6 support
        -  Update Unicode data to 5.2.0
        -  Couple of bug fixes
        
        2.2 (released 2008-05-18)
        -------------------------
        
        -  ClearType support
        -  cmap format 1 support
        -  PFA font support
        -  Switched from Numeric to numpy
        -  Update Unicode data to 5.1.0
        -  Update AGLFN data to 1.6
        -  Many bug fixes
        
        2.1 (released 2008-01-28)
        -------------------------
        
        -  Many years worth of fixes and features
        
        2.0b2 (released 2002-??-??)
        ---------------------------
        
        -  Be "forgiving" when interpreting the maxp table version field:
           interpret any value as 1.0 if it's not 0.5. Fixes dumping of these
           GPL fonts: http://www.freebsd.org/cgi/pds.cgi?ports/chinese/wangttf
        -  Fixed ttx -l: it turned out this part of the code didn't work with
           Python 2.2.1 and earlier. My bad to do most of my testing with a
           different version than I shipped TTX with :-(
        -  Fixed bug in ClassDef format 1 subtable (Andreas Seidel bumped into
           this one).
        
        2.0b1 (released 2002-09-10)
        ---------------------------
        
        -  Fixed embarrassing bug: the master checksum in the head table is now
           calculated correctly even on little-endian platforms (such as Intel).
        -  Made the cmap format 4 compiler smarter: the binary data it creates
           is now more or less as compact as possible. TTX now makes more
           compact data than in any shipping font I've tested it with.
        -  Dump glyph names as a separate "GlyphOrder" pseudo table as opposed
           to as part of the glyf table (obviously needed for CFF-OTF's).
        -  Added proper support for the CFF table.
        -  Don't barf on empty tables (questionable, but "there are font out
           there...")
        -  When writing TT glyf data, align glyphs on 4-byte boundaries. This
           seems to be the current recommendation by MS. Also: don't barf on
           fonts which are already 4-byte aligned.
        -  Windows installer contributed bu Adam Twardoch! Yay!
        -  Changed the command line interface again, now by creating one new
           tool replacing the old ones: ttx It dumps and compiles, depending on
           input file types. The options have changed somewhat.
        -  The -d option is back (output dir)
        -  ttcompile's -i options is now called -m (as in "merge"), to avoid
           clash with dump's -i.
        -  The -s option ("split tables") no longer creates a directory, but
           instead outputs a small .ttx file containing references to the
           individual table files. This is not a true link, it's a simple file
           name, and the referenced file should be in the same directory so
           ttcompile can find them.
        -  compile no longer accepts a directory as input argument. Instead it
           can parse the new "mini-ttx" format as output by "ttx -s".
        -  all arguments are input files
        -  Renamed the command line programs and moved them to the Tools
           subdirectory. They are now installed by the setup.py install script.
        -  Added OpenType support. BASE, GDEF, GPOS, GSUB and JSTF are (almost)
           fully supported. The XML output is not yet final, as I'm still
           considering to output certain subtables in a more human-friendly
           manner.
        -  Fixed 'kern' table to correctly accept subtables it doesn't know
           about, as well as interpreting Apple's definition of the 'kern' table
           headers correctly.
        -  Fixed bug where glyphnames were not calculated from 'cmap' if it was
           (one of the) first tables to be decompiled. More specifically: it
           cmap was the first to ask for a glyphID -> glyphName mapping.
        -  Switched XML parsers: use expat instead of xmlproc. Should be faster.
        -  Removed my UnicodeString object: I now require Python 2.0 or up,
           which has unicode support built in.
        -  Removed assert in glyf table: redundant data at the end of the table
           is now ignored instead of raising an error. Should become a warning.
        -  Fixed bug in hmtx/vmtx code that only occured if all advances were
           equal.
        -  Fixed subtle bug in TT instruction disassembler.
        -  Couple of fixes to the 'post' table.
        -  Updated OS/2 table to latest spec.
        
        1.0b1 (released 2001-08-10)
        ---------------------------
        
        -  Reorganized the command line interface for ttDump.py and
           ttCompile.py, they now behave more like "normal" command line tool,
           in that they accept multiple input files for batch processing.
        -  ttDump.py and ttCompile.py don't silently override files anymore, but
           ask before doing so. Can be overridden by -f.
        -  Added -d option to both ttDump.py and ttCompile.py.
        -  Installation is now done with distutils. (Needs work for environments
           without compilers.)
        -  Updated installation instructions.
        -  Added some workarounds so as to handle certain buggy fonts more
           gracefully.
        -  Updated Unicode table to Unicode 3.0 (Thanks Antoine!)
        -  Included a Python script by Adam Twardoch that adds some useful stuff
           to the Windows registry.
        -  Moved the project to SourceForge.
        
        1.0a6 (released 2000-03-15)
        ---------------------------
        
        -  Big reorganization: made ttLib a subpackage of the new fontTools
           package, changed several module names. Called the entire suite
           "FontTools"
        -  Added several submodules to fontTools, some new, some older.
        -  Added experimental CFF/GPOS/GSUB support to ttLib, read-only (but XML
           dumping of GPOS/GSUB is for now disabled)
        -  Fixed hdmx endian bug
        -  Added -b option to ttCompile.py, it disables recalculation of
           bounding boxes, as requested by Werner Lemberg.
        -  Renamed tt2xml.pt to ttDump.py and xml2tt.py to ttCompile.py
        -  Use ".ttx" as file extension instead of ".xml".
        -  TTX is now the name of the XML-based *format* for TT fonts, and not
           just an application.
        
        1.0a5
        -----
        
        Never released
        
        -  More tables supported: hdmx, vhea, vmtx
        
        1.0a3 & 1.0a4
        -------------
        
        Never released
        
        -  fixed most portability issues
        -  retracted the "Euro_or_currency" change from 1.0a2: it was
           nonsense!
        
        1.0a2 (released 1999-05-02)
        ---------------------------
        
        -  binary release for MacOS
        -  genenates full FOND resources: including width table, PS font name
           info and kern table if applicable.
        -  added cmap format 4 support. Extra: dumps Unicode char names as XML
           comments!
        -  added cmap format 6 support
        -  now accepts true type files starting with "true" (instead of just
           0x00010000 and "OTTO")
        -  'glyf' table support is now complete: I added support for composite
           scale, xy-scale and two-by-two for the 'glyf' table. For now,
           component offset scale behaviour defaults to Apple-style. This only
           affects the (re)calculation of the glyph bounding box.
        -  changed "Euro" to "Euro_or_currency" in the Standard Apple Glyph
           order list, since we cannot tell from the 'post' table which is
           meant. I should probably doublecheck with a Unicode encoding if
           available. (This does not affect the output!)
        
        Fixed bugs: - 'hhea' table is now recalculated correctly - fixed wrong
        assumption about sfnt resource names
        
        1.0a1 (released 1999-04-27)
        ---------------------------
        
        -  initial binary release for MacOS
        
Platform: Any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Environment :: Other Environment
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Text Processing :: Fonts
Classifier: Topic :: Multimedia :: Graphics
Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion
Provides-Extra: symfont
Provides-Extra: type1
Provides-Extra: lxml
Provides-Extra: ufo
Provides-Extra: interpolatable
Provides-Extra: all
Provides-Extra: woff
Provides-Extra: plot
Provides-Extra: unicode
Provides-Extra: graphite
