Metadata-Version: 1.2
Name: fonttools
Version: 3.28.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| |Health| |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 a `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.
        
        The package is listed in the Python Package Index (PyPI), so you can
        install it with `pip <https://pip.pypa.io>`__:
        
        .. code:: sh
        
            pip install fonttools
        
        If you would like to contribute to its development, you can clone the
        repository from Github, install the package in 'editable' mode and
        modify the source code in place. We recommend creating a virtual
        environment, using `virtualenv <https://virtualenv.pypa.io>`__ or
        Python 3 `venv <https://docs.python.org/3/library/venv.html>`__ module.
        
        .. code:: sh
        
            # download the source code to 'fonttools' folder
            git clone https://github.com/fonttools/fonttools.git
            cd fonttools
        
            # create new virtual environment called e.g. 'fonttools-venv', or anything you like
            python -m virtualenv fonttools-venv
        
            # source the `activate` shell script to enter the environment (Un\*x); to exit, just type `deactivate`
            . fonttools-venv/bin/activate
        
            # to activate the virtual environment in Windows `cmd.exe`, do
            fonttools-venv\Scripts\activate.bat
        
            # install in 'editable' mode
            pip install -e .
        
        TTX – From OpenType and TrueType to XML and Back
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
        Once installed you can use the ``ttx`` command to convert binary font
        files (``.otf``, ``.ttf``, etc) to the TTX xml format, edit them, and
        convert them back to binary format. TTX files have a .ttx file
        extension.
        
        .. code:: sh
        
            ttx /path/to/font.otf
            ttx /path/to/font.ttx
        
        The TTX application works can be used in two ways, depending on what
        platform you run it on:
        
        -  As a command line tool (Windows/DOS, Unix, MacOSX)
        -  By dropping files onto the application (Windows, MacOS)
        
        TTX detects what kind of files it is fed: it will output a ``.ttx`` file
        when it sees a ``.ttf`` or ``.otf``, and it will compile a ``.ttf`` or
        ``.otf`` when the input file is a ``.ttx`` file. By default, the output
        file is created in the same folder as the input file, and will have the
        same name as the input file but with a different extension. TTX will
        *never* overwrite existing files, but if necessary will append a unique
        number to the output filename (before the extension) such as
        ``Arial#1.ttf``
        
        When using TTX from the command line there are a bunch of extra options,
        these are explained in the help text, as displayed when typing
        ``ttx -h`` at the command prompt. These additional options include:
        
        -  specifying the folder where the output files are created
        -  specifying which tables to dump or which tables to exclude
        -  merging partial ``.ttx`` files with existing ``.ttf`` or ``.otf``
           files
        -  listing brief table info instead of dumping to ``.ttx``
        -  splitting tables to separate ``.ttx`` files
        -  disabling TrueType instruction disassembly
        
        The TTX file format
        -------------------
        
        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 inspecting, merging and subsetting fonts are also
        available:
        
        .. code:: sh
        
            pyftinspect
            pyftmerge
            pyftsubset
        
        fontTools Python Module
        ~~~~~~~~~~~~~~~~~~~~~~~
        
        The fontTools python module provides a convenient way to
        programmatically edit font files.
        
        .. code:: py
        
            >>> from fontTools.ttLib import TTFont
            >>> font = TTFont('/path/to/font.ttf')
            >>> font
            <fontTools.ttLib.TTFont object at 0x10c34ed50>
            >>>
        
        A selection of sample python programs is in the
        `Snippets <https://github.com/fonttools/fonttools/blob/master/Snippets/>`__
        directory.
        
        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.
        
        -  ``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.
        
        -  ``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.
        
        -  ``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``.
        
        -  ``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.
        
        -  ``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.
        
        -  ``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).
        
        -  ``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.
        
        -  ``Lib/fontTools/inspect.py``
        
           A GUI font inspector, requires one of the following packages:
        
           *  `PyGTK <https://pypi.python.org/pypi/PyGTK>`__: Python bindings for
              GTK  2.x (only works with Python 2).
           *  `PyGObject <https://wiki.gnome.org/action/show/Projects/PyGObject>`__ :
              Python bindings for GTK 3.x and gobject-introspection libraries (also
              compatible with Python 3).
        
        Testing
        ~~~~~~~
        
        To run the test suite, you can do:
        
        .. code:: sh
        
            python setup.py test
        
        If you have `pytest <http://docs.pytest.org/en/latest/>`__, you can run
        the ``pytest`` command directly. The tests will run against the
        installed ``fontTools`` package, or the first one found in the
        ``PYTHONPATH``.
        
        You can also use `tox <https://testrun.org/tox/latest/>`__ to
        automatically run tests on different Python versions in isolated virtual
        environments.
        
        .. code:: sh
        
            pip install tox
            tox
        
        Note that when you run ``tox`` without arguments, the tests are executed
        for all the environments listed in tox.ini's ``envlist``. In our case,
        this includes Python 2.7 and 3.6, so for this to work the ``python2.7``
        and ``python3.6`` executables must be available in your ``PATH``.
        
        You can specify an alternative environment list via the ``-e`` option,
        or the ``TOXENV`` environment variable:
        
        .. code:: sh
        
            tox -e py27-nocov
            TOXENV="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
        .. |Health| image:: https://landscape.io/github/behdad/fonttools/master/landscape.svg?style=flat
           :target: https://landscape.io/github/behdad/fonttools/master
        .. |Coverage Status| image:: https://codecov.io/gh/fonttools/fonttools/branch/master/graph/badge.svg
           :target: https://codecov.io/gh/fonttools/fonttools
        .. |PyPI| image:: https://img.shields.io/pypi/v/fonttools.svg
           :target: https://pypi.org/project/FontTools
        .. |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.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
