Home | History | Annotate | Download | only in fonttools.egg-info
      1 Metadata-Version: 2.1
      2 Name: fonttools
      3 Version: 3.39.0
      4 Summary: Tools to manipulate font files
      5 Home-page: http://github.com/fonttools/fonttools
      6 Author: Just van Rossum
      7 Author-email: just (a] letterror.com
      8 Maintainer: Behdad Esfahbod
      9 Maintainer-email: behdad (a] behdad.org
     10 License: MIT
     11 Description: |Travis Build Status| |Appveyor Build status| |Coverage Status| |PyPI| |Gitter Chat|
     12         
     13         What is this?
     14         ~~~~~~~~~~~~~
     15         
     16         | fontTools is a library for manipulating fonts, written in Python. The
     17           project includes the TTX tool, that can convert TrueType and OpenType
     18           fonts to and from an XML text format, which is also called TTX. It
     19           supports TrueType, OpenType, AFM and to an extent Type 1 and some
     20           Mac-specific formats. The project has an `MIT open-source
     21           licence <LICENSE>`__.
     22         | Among other things this means you can use it free of charge.
     23         
     24         Installation
     25         ~~~~~~~~~~~~
     26         
     27         FontTools requires `Python <http://www.python.org/download/>`__ 2.7, 3.4
     28         or later.
     29         
     30         **NOTE** After January 1 2019, until no later than June 30 2019, the support
     31         for *Python 2.7* will be limited to only bug fixes, and no new features will
     32         be added to the ``py27`` branch. The upcoming FontTools 4.x series will require
     33         *Python 3.5* or above. You can read more `here <https://python3statement.org>`__
     34         and `here <https://github.com/fonttools/fonttools/issues/765>`__ for the
     35         reasons behind this decision.
     36         
     37         The package is listed in the Python Package Index (PyPI), so you can
     38         install it with `pip <https://pip.pypa.io>`__:
     39         
     40         .. code:: sh
     41         
     42             pip install fonttools
     43         
     44         If you would like to contribute to its development, you can clone the
     45         repository from GitHub, install the package in 'editable' mode and
     46         modify the source code in place. We recommend creating a virtual
     47         environment, using `virtualenv <https://virtualenv.pypa.io>`__ or
     48         Python 3 `venv <https://docs.python.org/3/library/venv.html>`__ module.
     49         
     50         .. code:: sh
     51         
     52             # download the source code to 'fonttools' folder
     53             git clone https://github.com/fonttools/fonttools.git
     54             cd fonttools
     55         
     56             # create new virtual environment called e.g. 'fonttools-venv', or anything you like
     57             python -m virtualenv fonttools-venv
     58         
     59             # source the `activate` shell script to enter the environment (Un*x); to exit, just type `deactivate`
     60             . fonttools-venv/bin/activate
     61         
     62             # to activate the virtual environment in Windows `cmd.exe`, do
     63             fonttools-venv\Scripts\activate.bat
     64         
     65             # install in 'editable' mode
     66             pip install -e .
     67         
     68         TTX  From OpenType and TrueType to XML and Back
     69         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     70         
     71         Once installed you can use the ``ttx`` command to convert binary font
     72         files (``.otf``, ``.ttf``, etc) to the TTX XML format, edit them, and
     73         convert them back to binary format. TTX files have a .ttx file
     74         extension.
     75         
     76         .. code:: sh
     77         
     78             ttx /path/to/font.otf
     79             ttx /path/to/font.ttx
     80         
     81         The TTX application can be used in two ways, depending on what
     82         platform you run it on:
     83         
     84         -  As a command line tool (Windows/DOS, Unix, macOS)
     85         -  By dropping files onto the application (Windows, macOS)
     86         
     87         TTX detects what kind of files it is fed: it will output a ``.ttx`` file
     88         when it sees a ``.ttf`` or ``.otf``, and it will compile a ``.ttf`` or
     89         ``.otf`` when the input file is a ``.ttx`` file. By default, the output
     90         file is created in the same folder as the input file, and will have the
     91         same name as the input file but with a different extension. TTX will
     92         *never* overwrite existing files, but if necessary will append a unique
     93         number to the output filename (before the extension) such as
     94         ``Arial#1.ttf``
     95         
     96         When using TTX from the command line there are a bunch of extra options.
     97         These are explained in the help text, as displayed when typing
     98         ``ttx -h`` at the command prompt. These additional options include:
     99         
    100         -  specifying the folder where the output files are created
    101         -  specifying which tables to dump or which tables to exclude
    102         -  merging partial ``.ttx`` files with existing ``.ttf`` or ``.otf``
    103            files
    104         -  listing brief table info instead of dumping to ``.ttx``
    105         -  splitting tables to separate ``.ttx`` files
    106         -  disabling TrueType instruction disassembly
    107         
    108         The TTX file format
    109         -------------------
    110         
    111         The following tables are currently supported:
    112         
    113         .. begin table list
    114         .. code::
    115         
    116             BASE, CBDT, CBLC, CFF, CFF2, COLR, CPAL, DSIG, EBDT, EBLC, FFTM,
    117             Feat, GDEF, GMAP, GPKG, GPOS, GSUB, Glat, Gloc, HVAR, JSTF, LTSH,
    118             MATH, META, MVAR, OS/2, SING, STAT, SVG, Silf, Sill, TSI0, TSI1,
    119             TSI2, TSI3, TSI5, TSIB, TSID, TSIJ, TSIP, TSIS, TSIV, TTFA, VDMX,
    120             VORG, VVAR, ankr, avar, bsln, cidg, cmap, cvar, cvt, feat, fpgm,
    121             fvar, gasp, gcid, glyf, gvar, hdmx, head, hhea, hmtx, kern, lcar,
    122             loca, ltag, maxp, meta, mort, morx, name, opbd, post, prep, prop,
    123             sbix, trak, vhea and vmtx
    124         .. end table list
    125         
    126         Other tables are dumped as hexadecimal data.
    127         
    128         TrueType fonts use glyph indices (GlyphIDs) to refer to glyphs in most
    129         places. While this is fine in binary form, it is really hard to work
    130         with for humans. Therefore we use names instead.
    131         
    132         The glyph names are either extracted from the ``CFF`` table or the
    133         ``post`` table, or are derived from a Unicode ``cmap`` table. In the
    134         latter case the Adobe Glyph List is used to calculate names based on
    135         Unicode values. If all of these methods fail, names are invented based
    136         on GlyphID (eg ``glyph00142``)
    137         
    138         It is possible that different glyphs use the same name. If this happens,
    139         we force the names to be unique by appending ``#n`` to the name (``n``
    140         being an integer number.) The original names are being kept, so this has
    141         no influence on a "round tripped" font.
    142         
    143         Because the order in which glyphs are stored inside the binary font is
    144         important, we maintain an ordered list of glyph names in the font.
    145         
    146         Other Tools
    147         ~~~~~~~~~~~
    148         
    149         Commands for merging and subsetting fonts are also available:
    150         
    151         .. code:: sh
    152         
    153             pyftmerge
    154             pyftsubset
    155         
    156         fontTools Python Module
    157         ~~~~~~~~~~~~~~~~~~~~~~~
    158         
    159         The fontTools Python module provides a convenient way to
    160         programmatically edit font files.
    161         
    162         .. code:: py
    163         
    164             >>> from fontTools.ttLib import TTFont
    165             >>> font = TTFont('/path/to/font.ttf')
    166             >>> font
    167             <fontTools.ttLib.TTFont object at 0x10c34ed50>
    168             >>>
    169         
    170         A selection of sample Python programs is in the
    171         `Snippets <https://github.com/fonttools/fonttools/blob/master/Snippets/>`__
    172         directory.
    173         
    174         Optional Requirements
    175         ---------------------
    176         
    177         The ``fontTools`` package currently has no (required) external dependencies
    178         besides the modules included in the Python Standard Library.
    179         However, a few extra dependencies are required by some of its modules, which
    180         are needed to unlock optional features.
    181         The ``fonttools`` PyPI distribution also supports so-called "extras", i.e. a
    182         set of keywords that describe a group of additional dependencies, which can be
    183         used when installing via pip, or when specifying a requirement.
    184         For example:
    185         
    186         .. code:: sh
    187         
    188             pip install fonttools[ufo,lxml,woff,unicode]
    189         
    190         This command will install fonttools, as well as the optional dependencies that
    191         are required to unlock the extra features named "ufo", etc.
    192         
    193         - ``Lib/fontTools/misc/etree.py``
    194         
    195           The module exports a ElementTree-like API for reading/writing XML files, and
    196           allows to use as the backend either the built-in ``xml.etree`` module or
    197           `lxml <https://http://lxml.de>`__. The latter is preferred whenever present,
    198           as it is generally faster and more secure.
    199         
    200           *Extra:* ``lxml``
    201         
    202         - ``Lib/fontTools/ufoLib``
    203         
    204           Package for reading and writing UFO source files; it requires:
    205         
    206           * `fs <https://pypi.org/pypi/fs>`__: (aka ``pyfilesystem2``) filesystem
    207             abstraction layer.
    208         
    209           * `enum34 <https://pypi.org/pypi/enum34>`__: backport for the built-in ``enum``
    210             module (only required on Python < 3.4).
    211         
    212           *Extra:* ``ufo``
    213         
    214         - ``Lib/fontTools/ttLib/woff2.py``
    215         
    216           Module to compress/decompress WOFF 2.0 web fonts; it requires:
    217         
    218           * `brotli <https://pypi.python.org/pypi/Brotli>`__: Python bindings of
    219             the Brotli compression library.
    220         
    221           *Extra:* ``woff``
    222         
    223         - ``Lib/fontTools/ttLib/sfnt.py``
    224         
    225           To better compress WOFF 1.0 web fonts, the following module can be used
    226           instead of the built-in ``zlib`` library:
    227         
    228           * `zopfli <https://pypi.python.org/pypi/zopfli>`__: Python bindings of
    229             the Zopfli compression library.
    230         
    231           *Extra:* ``woff``
    232         
    233         - ``Lib/fontTools/unicode.py``
    234         
    235           To display the Unicode character names when dumping the ``cmap`` table
    236           with ``ttx`` we use the ``unicodedata`` module in the Standard Library.
    237           Theversion included in there varies between different Python versions.
    238           To use the latest available data, you can install:
    239         
    240           * `unicodedata2 <https://pypi.python.org/pypi/unicodedata2>`__:
    241             ``unicodedata`` backport for Python 2.7 and 3.5 updated to the latest
    242             Unicode version 9.0. Note this is not necessary if you use Python 3.6
    243             as the latter already comes with an up-to-date ``unicodedata``.
    244         
    245           *Extra:* ``unicode``
    246         
    247         - ``Lib/fontTools/varLib/interpolatable.py``
    248         
    249           Module for finding wrongcontour/component order between different masters.
    250           It requires one of the following packages in order to solve the so-called
    251           "minimum weight perfect matching problem in bipartite graphs", or
    252           the Assignment problem:
    253         
    254           * `scipy <https://pypi.python.org/pypi/scipy>`__: the Scientific Library
    255             for Python, which internally uses `NumPy <https://pypi.python.org/pypi/numpy>`__
    256             arrays and hence is very fast;
    257           * `munkres <https://pypi.python.org/pypi/munkres>`__: a pure-Python
    258             module that implements the Hungarian or Kuhn-Munkres algorithm.
    259         
    260           *Extra:* ``interpolatable``
    261         
    262         - ``Lib/fontTools/varLib/plot.py``
    263         
    264           Module for visualizing DesignSpaceDocument and resulting VariationModel.
    265         
    266           * `matplotlib <https://pypi.org/pypi/matplotlib>`__: 2D plotting library.
    267         
    268           *Extra:* ``plot``
    269         
    270         - ``Lib/fontTools/misc/symfont.py``
    271         
    272           Advanced module for symbolic font statistics analysis; it requires:
    273         
    274           * `sympy <https://pypi.python.org/pypi/sympy>`__: the Python library for
    275             symbolic mathematics.
    276         
    277           *Extra:* ``symfont``
    278         
    279         - ``Lib/fontTools/t1Lib.py``
    280         
    281           To get the file creatorand type of Macintosh PostScript Type 1 fonts
    282           on Python 3 you need to install the following module, as the old ``MacOS``
    283           module is no longer included in Mac Python:
    284         
    285           * `xattr <https://pypi.python.org/pypi/xattr>`__: Python wrapper for
    286             extended filesystem attributes (macOS platform only).
    287         
    288           *Extra:* ``type1``
    289         
    290         - ``Lib/fontTools/pens/cocoaPen.py``
    291         
    292           Pen for drawing glyphs with Cocoa ``NSBezierPath``, requires:
    293         
    294           * `PyObjC <https://pypi.python.org/pypi/pyobjc>`__: the bridge between
    295             Python and the Objective-C runtime (macOS platform only).
    296         
    297         - ``Lib/fontTools/pens/qtPen.py``
    298         
    299           Pen for drawing glyphs with Qt's ``QPainterPath``, requires:
    300         
    301           * `PyQt5 <https://pypi.python.org/pypi/PyQt5>`__: Python bindings for
    302             the Qtcross platform UI and application toolkit.
    303         
    304         - ``Lib/fontTools/pens/reportLabPen.py``
    305         
    306           Pen to drawing glyphs as PNG images, requires:
    307         
    308           * `reportlab <https://pypi.python.org/pypi/reportlab>`__: Python toolkit
    309             for generating PDFs and graphics.
    310         
    311         Testing
    312         ~~~~~~~
    313         
    314         To run the test suite, you need to install `pytest <http://docs.pytest.org/en/latest/>`__.
    315         When you run the ``pytest`` command, the tests will run against the
    316         installed ``fontTools`` package, or the first one found in the
    317         ``PYTHONPATH``.
    318         
    319         You can also use `tox <https://tox.readthedocs.io/en/latest/>`__ to
    320         automatically run tests on different Python versions in isolated virtual
    321         environments.
    322         
    323         .. code:: sh
    324         
    325             pip install tox
    326             tox
    327         
    328         Note that when you run ``tox`` without arguments, the tests are executed
    329         for all the environments listed in tox.ini's ``envlist``. In our case,
    330         this includes Python 2.7 and 3.7, so for this to work the ``python2.7``
    331         and ``python3.7`` executables must be available in your ``PATH``.
    332         
    333         You can specify an alternative environment list via the ``-e`` option,
    334         or the ``TOXENV`` environment variable:
    335         
    336         .. code:: sh
    337         
    338             tox -e py27
    339             TOXENV="py36-cov,htmlcov" tox
    340         
    341         Development Community
    342         ~~~~~~~~~~~~~~~~~~~~~
    343         
    344         TTX/FontTools development is ongoing in an active community of
    345         developers, that includes professional developers employed at major
    346         software corporations and type foundries as well as hobbyists.
    347         
    348         Feature requests and bug reports are always welcome at
    349         https://github.com/fonttools/fonttools/issues/
    350         
    351         The best place for discussions about TTX from an end-user perspective as
    352         well as TTX/FontTools development is the
    353         https://groups.google.com/d/forum/fonttools mailing list. There is also
    354         a development https://groups.google.com/d/forum/fonttools-dev mailing
    355         list for continuous integration notifications. You can also email Behdad
    356         privately at behdad (a] behdad.org
    357         
    358         History
    359         ~~~~~~~
    360         
    361         The fontTools project was started by Just van Rossum in 1999, and was
    362         maintained as an open source project at
    363         http://sourceforge.net/projects/fonttools/. In 2008, Paul Wise (pabs3)
    364         began helping Just with stability maintenance. In 2013 Behdad Esfahbod
    365         began a friendly fork, thoroughly reviewing the codebase and making
    366         changes at https://github.com/behdad/fonttools to add new features and
    367         support for new font formats.
    368         
    369         Acknowledgements
    370         ~~~~~~~~~~~~~~~~
    371         
    372         In alphabetical order:
    373         
    374         Olivier Berten, Samyak Bhuta, Erik van Blokland, Petr van Blokland,
    375         Jelle Bosma, Sascha Brawer, Tom Byrer, Frdric Coiffier, Vincent
    376         Connare, Dave Crossland, Simon Daniels, Behdad Esfahbod, Behnam
    377         Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis Haralambous,
    378         Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, Denis Moyogo
    379         Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, Antoine Leca,
    380         Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, Masaya Nakamura,
    381         Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret Rieger, Read
    382         Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, Georg
    383         Seifert, Miguel Sousa, Adam Twardoch, Adrien Ttar, Vitaly Volkov, Paul
    384         Wise.
    385         
    386         Copyrights
    387         ~~~~~~~~~~
    388         
    389         | Copyright (c) 1999-2004 Just van Rossum, LettError
    390           (just (a] letterror.com)
    391         | See `LICENSE <LICENSE>`__ for the full license.
    392         
    393         Copyright (c) 2000 BeOpen.com. All Rights Reserved.
    394         
    395         Copyright (c) 1995-2001 Corporation for National Research Initiatives.
    396         All Rights Reserved.
    397         
    398         Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All
    399         Rights Reserved.
    400         
    401         Have fun!
    402         
    403         .. |Travis Build Status| image:: https://travis-ci.org/fonttools/fonttools.svg
    404            :target: https://travis-ci.org/fonttools/fonttools
    405         .. |Appveyor Build status| image:: https://ci.appveyor.com/api/projects/status/0f7fmee9as744sl7/branch/master?svg=true
    406            :target: https://ci.appveyor.com/project/fonttools/fonttools/branch/master
    407         .. |Coverage Status| image:: https://codecov.io/gh/fonttools/fonttools/branch/master/graph/badge.svg
    408            :target: https://codecov.io/gh/fonttools/fonttools
    409         .. |PyPI| image:: https://img.shields.io/pypi/v/fonttools.svg
    410            :target: https://pypi.org/project/FontTools
    411         .. |Gitter Chat| image:: https://badges.gitter.im/fonttools-dev/Lobby.svg
    412            :alt: Join the chat at https://gitter.im/fonttools-dev/Lobby
    413            :target: https://gitter.im/fonttools-dev/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
    414         
    415         Changelog
    416         ~~~~~~~~~
    417         
    418         3.39.0 (released 2019-03-19)
    419         ----------------------------
    420         
    421         - [ttLib/glyf] Raise more specific error when encountering recursive
    422           component references (#1545, #1546).
    423         - [Doc/designspaceLib] Defined new ``public.skipExportGlyphs`` lib key (#1534,
    424           unified-font-object/ufo-spec#84).
    425         - [varLib] Use ``vmtx`` to compute vertical phantom points; or ``hhea.ascent``
    426           and ``head.unitsPerEM`` if ``vmtx`` is missing (#1528).
    427         - [gvar/cvar] Sort XML element's min/value/max attributes in TupleVariation
    428           toXML to improve readability of TTX dump (#1527).
    429         - [varLib.plot] Added support for 2D plots with only 1 variation axis (#1522).
    430         - [designspaceLib] Use axes maps when normalizing locations in
    431           DesignSpaceDocument (#1226, #1521), and when finding default source (#1535).
    432         - [mutator] Set ``OVERLAP_SIMPLE`` and ``OVERLAP_COMPOUND`` glyf flags by
    433           default in ``instantiateVariableFont``. Added ``--no-overlap`` cli option
    434           to disable this (#1518).
    435         - [subset] Fixed subsetting ``VVAR`` table (#1516, #1517).  
    436           Fixed subsetting an ``HVAR`` table that has an ``AdvanceWidthMap`` when the
    437           option ``--retain-gids`` is used.
    438         - [feaLib] Added ``forceChained`` in MultipleSubstStatement (#1511).  
    439           Fixed double indentation of ``subtable`` statement (#1512).  
    440           Added support for ``subtable`` statement in more places than just PairPos
    441           lookups (#1520).  
    442           Handle lookupflag 0 and lookupflag without a value (#1540).
    443         - [varLib] In ``load_designspace``, provide a default English name for the
    444           ``ital`` axis tag.
    445         - Remove pyftinspect because it is unmaintained and bitrotted.
    446         
    447         3.38.0 (released 2019-02-18)
    448         ----------------------------
    449         
    450         - [cffLib] Fixed RecursionError when unpickling or deepcopying TTFont with
    451           CFF table (#1488, 649dc49).
    452         - [subset] Fixed AttributeError when using --desubroutinize option (#1490).
    453           Also, fixed desubroutinizing bug when subrs contain hints (#1499).
    454         - [CPAL] Make Color a subclass of namedtuple (173a0f5).
    455         - [feaLib] Allow hyphen in glyph class names.
    456         - [feaLib] Added 'tables' option to __main__.py (#1497).
    457         - [feaLib] Add support for special-case contextual positioning formatting
    458           (#1501).
    459         - [svgLib] Support converting SVG basic shapes (rect, circle, etc.) into
    460           equivalent SVG paths (#1500, #1508).
    461         - [Snippets] Added name-viewer.ipynb Jupyter notebook.
    462         
    463         
    464         3.37.3 (released 2019-02-05)
    465         ----------------------------
    466         
    467         - The previous release accidentally changed several files from Unix to DOS
    468           line-endings. Fix that.
    469         
    470         3.37.2 (released 2019-02-05)
    471         ----------------------------
    472         
    473         - [varLib] Temporarily revert the fix to ``load_masters()``, which caused a
    474           crash in ``interpolate_layout()`` when ``deepcopy``-ing OTFs.
    475         
    476         3.37.1 (released 2019-02-05)
    477         ----------------------------
    478         
    479         - [varLib] ``load_masters()`` now actually assigns the fonts it loads to the
    480           source.font attributes.
    481         - [varLib] Fixed an MVAR table generation crash when sparse masters were
    482           involved.
    483         - [voltLib] ``parse_coverage_()`` returns a tuple instead of an ast.Enum.
    484         - [feaLib] A MarkClassDefinition inside a block is no longer doubly indented
    485           compared to the rest of the block.
    486         
    487         3.37.0 (released 2019-01-28)
    488         ----------------------------
    489         
    490         - [svgLib] Added support for converting elliptical arcs to cubic bezier curves
    491           (#1464).
    492         - [py23] Added backport for ``math.isfinite``.
    493         - [varLib] Apply HIDDEN flag to fvar axis if designspace axis has attribute
    494           ``hidden=1``.
    495         - Fixed "DeprecationWarning: invalid escape sequence" in Python 3.7.
    496         - [voltLib] Fixed parsing glyph groups. Distinguish different PROCESS_MARKS.
    497           Accept COMPONENT glyph type.
    498         - [feaLib] Distinguish missing value and explicit ``<NULL>`` for PairPos2
    499           format A (#1459). Round-trip ``useExtension`` keyword. Implemented
    500           ``ValueRecord.asFea`` method.
    501         - [subset] Insert empty widths into hdmx when retaining gids (#1458).
    502         
    503         3.36.0 (released 2019-01-17)
    504         ----------------------------
    505         
    506         - [ttx] Added ``--no-recalc-timestamp`` option to keep the original font's
    507           ``head.modified`` timestamp (#1455, #46).
    508         - [ttx/psCharStrings] Fixed issues while dumping and round-tripping CFF2 table
    509           with ttx (#1451, #1452, #1456).
    510         - [voltLib] Fixed check for duplicate anchors (#1450). Don't try to read past
    511           the ``END`` operator in .vtp file (#1453).
    512         - [varLib] Use sentinel value -0x8000 (-32768) to ignore post.underlineThickness
    513           and post.underlinePosition when generating MVAR deltas (#1449,
    514           googlei18n/ufo2ft#308).
    515         - [subset] Added ``--retain-gids`` option to subset font without modifying the
    516           current glyph indices (#1443, #1447).
    517         - [ufoLib] Replace deprecated calls to ``getbytes`` and ``setbytes`` with new
    518           equivalent ``readbytes`` and ``writebytes`` calls. ``fs`` >= 2.2 no required.
    519         - [varLib] Allow loading masters from TTX files as well (#1441).
    520         
    521         3.35.2 (released 2019-01-14)
    522         ----------------------------
    523         
    524         - [hmtx/vmtx]: Allow to compile/decompile ``hmtx`` and ``vmtx`` tables even
    525           without the corresponding (required) metrics header tables, ``hhea`` and
    526           ``vhea`` (#1439).
    527         - [varLib] Added support for localized axes' ``labelname`` and named instances'
    528           ``stylename`` (#1438).
    529         
    530         3.35.1 (released 2019-01-09)
    531         ----------------------------
    532         
    533         - [_m_a_x_p] Include ``maxComponentElements`` in ``maxp`` table's recalculation.
    534         
    535         3.35.0 (released 2019-01-07)
    536         ----------------------------
    537         
    538         - [psCharStrings] In ``encodeFloat`` function, use float's "general format" with
    539           8 digits of precision (i.e. ``%8g``) instead of ``str()``. This works around
    540           a macOS rendering issue when real numbers in CFF table are too long, and
    541           also makes sure that floats are encoded with the same precision in python 2.7
    542           and 3.x (#1430, googlei18n/ufo2ft#306).
    543         - [_n_a_m_e/fontBuilder] Make ``_n_a_m_e_table.addMultilingualName`` also add
    544           Macintosh (platformID=1) names by default. Added options to ``FontBuilder``
    545           ``setupNameTable`` method to optionally disable Macintosh or Windows names.
    546           (#1359, #1431).
    547         - [varLib] Make ``build`` optionally accept a ``DesignSpaceDocument`` object,
    548           instead of a designspace file path. The caller can now set the ``font``
    549           attribute of designspace's sources to a TTFont object, thus allowing to
    550           skip filenames manipulation altogether (#1416, #1425).
    551         - [sfnt] Allow SFNTReader objects to be deep-copied.
    552         - Require typing>=3.6.4 on py27 to fix issue with singledispatch (#1423).
    553         - [designspaceLib/t1Lib/macRes] Fixed some cases where pathlib.Path objects were
    554           not accepted (#1421).
    555         - [varLib] Fixed merging of multiple PairPosFormat2 subtables (#1411).
    556         - [varLib] The default STAT table version is now set to 1.1, to improve
    557           compatibility with legacy applications (#1413).
    558         
    559         3.34.2 (released 2018-12-17)
    560         ----------------------------
    561         
    562         - [merge] Fixed AssertionError when none of the script tables in GPOS/GSUB have
    563           a DefaultLangSys record (#1408, 135a4a1).
    564         
    565         3.34.1 (released 2018-12-17)
    566         ----------------------------
    567         
    568         - [varLib] Work around macOS rendering issue for composites without gvar entry (#1381).
    569         
    570         3.34.0 (released 2018-12-14)
    571         ----------------------------
    572         
    573         - [varLib] Support generation of CFF2 variable fonts. ``model.reorderMasters()``
    574           now supports arbitrary mapping. Fix handling of overlapping ranges for feature
    575           variations (#1400).
    576         - [cffLib, subset] Code clean-up and fixing related to CFF2 support.
    577         - [ttLib.tables.ttProgram] Use raw strings for regex patterns (#1389).
    578         - [fontbuilder] Initial support for building CFF2 fonts. Set CFF's
    579           ``FontMatrix`` automatically from unitsPerEm.
    580         - [plistLib] Accept the more general ``collections.Mapping`` instead of the
    581           specific ``dict`` class to support custom data classes that should serialize
    582           to dictionaries.
    583         
    584         3.33.0 (released 2018-11-30)
    585         ----------------------------
    586         - [subset] subsetter bug fix with variable fonts.
    587         - [varLib.featureVar] Improve FeatureVariations generation with many rules.
    588         - [varLib] Enable sparse masters when building variable fonts:
    589           https://github.com/fonttools/fonttools/pull/1368#issuecomment-437257368
    590         - [varLib.mutator] Add IDEF for GETVARIATION opcode, for handling hints in an
    591           instance.
    592         - [ttLib] Ignore the length of kern table subtable format 0
    593         
    594         3.32.0 (released 2018-11-01)
    595         ----------------------------
    596         
    597         - [ufoLib] Make ``UFOWriter`` a subclass of ``UFOReader``, and use mixins
    598           for shared methods (#1344).
    599         - [featureVars] Fixed normalization error when a condition's minimum/maximum
    600           attributes are missing in designspace ``<rule>`` (#1366).
    601         - [setup.py] Added ``[plot]`` to extras, to optionally install ``matplotlib``,
    602           needed to use the ``fonTools.varLib.plot`` module.
    603         - [varLib] Take total bounding box into account when resolving model (7ee81c8).
    604           If multiple axes have the same range ratio, cut across both (62003f4).
    605         - [subset] Don't error if ``STAT`` has no ``AxisValue`` tables.
    606         - [fontBuilder] Added a new submodule which contains a ``FontBuilder`` wrapper
    607           class around ``TTFont`` that makes it easier to create a working TTF or OTF
    608           font from scratch with code. NOTE: the API is still experimental and may
    609           change in future versions.
    610         
    611         3.31.0 (released 2018-10-21)
    612         ----------------------------
    613         
    614         - [ufoLib] Merged the `ufoLib <https://github.com/unified-font-objects/ufoLib>`__
    615           master branch into a new ``fontTools.ufoLib`` package (#1335, #1095).
    616           Moved ``ufoLib.pointPen`` module to ``fontTools.pens.pointPen``.
    617           Moved ``ufoLib.etree`` module to ``fontTools.misc.etree``.
    618           Moved ``ufoLib.plistlib`` module to ``fontTools.misc.plistlib``.
    619           To use the new ``fontTools.ufoLib`` module you need to install fonttools
    620           with the ``[ufo]`` extra, or you can manually install the required additional
    621           dependencies (cf. README.rst).
    622         - [morx] Support AAT action type to insert glyphs and clean up compilation
    623           of AAT action tables (4a1871f, 2011ccf).
    624         - [subset] The ``--no-hinting`` on a CFF font now also drops the optional
    625           hinting keys in Private dict: ``ForceBold``, ``LanguageGroup``, and
    626           ``ExpansionFactor`` (#1322).
    627         - [subset] Include nameIDs referenced by STAT table (#1327).
    628         - [loggingTools] Added ``msg=None`` argument to
    629           ``CapturingLogHandler.assertRegex`` (0245f2c).
    630         - [varLib.mutator] Implemented ``FeatureVariations`` instantiation (#1244).
    631         - [g_l_y_f] Added PointPen support to ``_TTGlyph`` objects (#1334).
    632         
    633         3.30.0 (released 2018-09-18)
    634         ----------------------------
    635         
    636         - [feaLib] Skip building noop class PairPos subtables when Coverage is NULL
    637           (#1318).
    638         - [ttx] Expose the previously reserved bit flag ``OVERLAP_SIMPLE`` of
    639           glyf table's contour points in the TTX dump. This is used in some
    640           implementations to specify a non-zero fill with overlapping contours (#1316).
    641         - [ttLib] Added support for decompiling/compiling ``TS1C`` tables containing
    642           VTT sources for ``cvar`` variation table (#1310).
    643         - [varLib] Use ``fontTools.designspaceLib`` to read DesignSpaceDocument. The
    644           ``fontTools.varLib.designspace`` module is now deprecated and will be removed
    645           in future versions. The presence of an explicit ``axes`` element is now
    646           required in order to build a variable font (#1224, #1313).
    647         - [varLib] Implemented building GSUB FeatureVariations table from the ``rules``
    648           element of DesignSpace document (#1240, #713, #1314).
    649         - [subset] Added ``--no-layout-closure`` option to not expand the subset with
    650           the glyphs produced by OpenType layout features. Instead, OpenType features
    651           will be subset to only rules that are relevant to the otherwise-specified
    652           glyph set (#43, #1121).
    653         
    654         3.29.1 (released 2018-09-10)
    655         ----------------------------
    656         
    657         - [feaLib] Fixed issue whereby lookups from DFLT/dflt were not included in the
    658           DFLT/non-dflt language systems (#1307).
    659         - [graphite] Fixed issue on big-endian architectures (e.g. ppc64) (#1311).
    660         - [subset] Added ``--layout-scripts`` option to add/exclude set of OpenType
    661           layout scripts that will be preserved. By default all scripts are retained
    662           (``'*'``) (#1303).
    663         
    664         3.29.0 (released 2018-07-26)
    665         ----------------------------
    666         
    667         - [feaLib] In the OTL table builder, when the ``name`` table is excluded
    668           from the list of tables to be build, skip compiling ``featureNames`` blocks,
    669           as the records referenced in ``FeatureParams`` table don't exist (68951b7).
    670         - [otBase] Try ``ExtensionLookup`` if other offset-overflow methods fail
    671           (05f95f0).
    672         - [feaLib] Added support for explicit ``subtable;`` break statements in
    673           PairPos lookups; previously these were ignored (#1279, #1300, #1302).
    674         - [cffLib.specializer] Make sure the stack depth does not exceed maxstack - 1,
    675           so that a subroutinizer can insert subroutine calls (#1301,
    676           https://github.com/googlei18n/ufo2ft/issues/266).
    677         - [otTables] Added support for fixing offset overflow errors occurring inside
    678           ``MarkBasePos`` subtables (#1297).
    679         - [subset] Write the default output file extension based on ``--flavor`` option,
    680           or the value of ``TTFont.sfntVersion`` (d7ac0ad).
    681         - [unicodedata] Updated Blocks, Scripts and ScriptExtensions for Unicode 11
    682           (452c85e).
    683         - [xmlWriter] Added context manager to XMLWriter class to autoclose file
    684           descriptor on exit (#1290).
    685         - [psCharStrings] Optimize the charstring's bytecode by encoding as integers
    686           all float values that have no decimal portion (8d7774a).
    687         - [ttFont] Fixed missing import of ``TTLibError`` exception (#1285).
    688         - [feaLib] Allow any languages other than ``dflt`` under ``DFLT`` script
    689           (#1278, #1292).
    690         
    691         3.28.0 (released 2018-06-19)
    692         ----------------------------
    693         
    694         - [featureVars] Added experimental module to build ``FeatureVariations``
    695           tables. Still needs to be hooked up to ``varLib.build`` (#1240).
    696         - [fixedTools] Added ``otRound`` to round floats to nearest integer towards
    697           positive Infinity. This is now used where we deal with visual data like X/Y
    698           coordinates, advance widths/heights, variation deltas, and similar (#1274,
    699           #1248).
    700         - [subset] Improved GSUB closure memoize algorithm.
    701         - [varLib.models] Fixed regression in model resolution (180124, #1269).
    702         - [feaLib.ast] Fixed error when converting ``SubtableStatement`` to string
    703           (#1275).
    704         - [varLib.mutator] Set ``OS/2.usWeightClass`` and ``usWidthClass``, and
    705           ``post.italicAngle`` based on the 'wght', 'wdth' and 'slnt' axis values
    706           (#1276, #1264).
    707         - [py23/loggingTools] Don't automatically set ``logging.lastResort`` handler
    708           on py27. Moved ``LastResortLogger`` to the ``loggingTools`` module (#1277).
    709         
    710         3.27.1 (released 2018-06-11)
    711         ----------------------------
    712         
    713         - [ttGlyphPen] Issue a warning and skip building non-existing components
    714           (https://github.com/googlei18n/fontmake/issues/411).
    715         - [tests] Fixed issue running ttx_test.py from a tagged commit.
    716         
    717         3.27.0 (released 2018-06-11)
    718         ----------------------------
    719         
    720         - [designspaceLib] Added new ``conditionSet`` element to ``rule`` element in
    721           designspace document. Bumped ``format`` attribute to ``4.0`` (previously,
    722           it was formatted as an integer). Removed ``checkDefault``, ``checkAxes``
    723           methods, and any kind of guessing about the axes when the ``<axes>`` element
    724           is missing. The default master is expected at the intersection of all default
    725           values for each axis (#1254, #1255, #1267).
    726         - [cffLib] Fixed issues when compiling CFF2 or converting from CFF when the
    727           font has an FDArray (#1211, #1271).
    728         - [varLib] Avoid attempting to build ``cvar`` table when ``glyf`` table is not
    729           present, as is the case for CFF2 fonts.
    730         - [subset] Handle None coverages in MarkGlyphSets; revert commit 02616ab that
    731           sets empty Coverage tables in MarkGlyphSets to None, to make OTS happy.
    732         - [ttFont] Allow to build glyph order from ``maxp.numGlyphs`` when ``post`` or
    733           ``cmap`` are missing.
    734         - [ttFont] Added ``__len__`` method to ``_TTGlyphSet``.
    735         - [glyf] Ensure ``GlyphCoordinates`` never overflow signed shorts (#1230).
    736         - [py23] Added alias for ``itertools.izip`` shadowing the built-in ``zip``.
    737         - [loggingTools] Memoize ``log`` property of ``LogMixin`` class (fbab12).
    738         - [ttx] Impoved test coverage (#1261).
    739         - [Snippets] Addded script to append a suffix to all family names in a font.
    740         - [varLib.plot] Make it work with matplotlib >= 2.1 (b38e2b).
    741         
    742         3.26.0 (released 2018-05-03)
    743         ----------------------------
    744         
    745         - [designspace] Added a new optional ``layer`` attribute to the source element,
    746           and a corresponding ``layerName`` attribute to the ``SourceDescriptor``
    747           object (#1253).
    748           Added ``conditionset`` element to the ``rule`` element to the spec, but not
    749           implemented in designspace reader/writer yet (#1254).
    750         - [varLib.models] Refine modeling one last time (0ecf5c5).
    751         - [otBase] Fixed sharing of tables referred to by different offset sizes
    752           (795f2f9).
    753         - [subset] Don't drop a GDEF that only has VarStore (fc819d6). Set to None
    754           empty Coverage tables in MarkGlyphSets (02616ab).
    755         - [varLib]: Added ``--master-finder`` command-line option (#1249).
    756         - [varLib.mutator] Prune fvar nameIDs from instance's name table (#1245).
    757         - [otTables] Allow decompiling bad ClassDef tables with invalid format, with
    758           warning (#1236).
    759         - [varLib] Make STAT v1.2 and reuse nameIDs from fvar table (#1242).
    760         - [varLib.plot] Show master locations. Set axis limits to -1, +1.
    761         - [subset] Handle HVAR direct mapping. Passthrough 'cvar'.
    762           Added ``--font-number`` command-line option for collections.
    763         - [t1Lib] Allow a text encoding to be specified when parsing a Type 1 font
    764           (#1234). Added ``kind`` argument to T1Font constructor (c5c161c).
    765         - [ttLib] Added context manager API to ``TTFont`` class, so it can be used in
    766           ``with`` statements to auto-close the file when exiting the context (#1232).
    767         
    768         3.25.0 (released 2018-04-03)
    769         ----------------------------
    770         
    771         - [varLib] Improved support-resolution algorithm. Previously, the on-axis
    772           masters would always cut the space. They don't anymore. That's more
    773           consistent, and fixes the main issue Erik showed at TYPO Labs 2017.
    774           Any varfont built that had an unusual master configuration will change
    775           when rebuilt (42bef17, a523a697,
    776           https://github.com/googlei18n/fontmake/issues/264).
    777         - [varLib.models] Added a ``main()`` entry point, that takes positions and
    778           prints model results.
    779         - [varLib.plot] Added new module to plot a designspace's
    780           VariationModel. Requires ``matplotlib``.
    781         - [varLib.mutator] Added -o option to specify output file path (2ef60fa).
    782         - [otTables] Fixed IndexError while pruning of HVAR pre-write (6b6c34a).
    783         - [varLib.models] Convert delta array to floats if values overflows signed
    784           short integer (0055f94).
    785         
    786         3.24.2 (released 2018-03-26)
    787         ----------------------------
    788         
    789         - [otBase] Don't fail during ``ValueRecord`` copy if src has more items.
    790           We drop hinting in the subsetter by simply changing ValueFormat, without
    791           cleaning up the actual ValueRecords. This was causing assertion error if
    792           a variable font was subsetted without hinting and then passed directly to
    793           the mutator for instantiation without first it saving to disk.
    794         
    795         3.24.1 (released 2018-03-06)
    796         ----------------------------
    797         
    798         - [varLib] Don't remap the same ``DeviceTable`` twice in VarStore optimizer
    799           (#1206).
    800         - [varLib] Add ``--disable-iup`` option to ``fonttools varLib`` script,
    801           and a ``optimize=True`` keyword argument to ``varLib.build`` function,
    802           to optionally disable IUP optimization while building varfonts.
    803         - [ttCollection] Fixed issue while decompiling ttc with python3 (#1207).
    804         
    805         3.24.0 (released 2018-03-01)
    806         ----------------------------
    807         
    808         - [ttGlyphPen] Decompose composite glyphs if any components' transform is too
    809           large to fit a ``F2Dot14`` value, or clamp transform values that are
    810           (almost) equal to +2.0 to make them fit and avoid decomposing (#1200,
    811           #1204, #1205).
    812         - [ttx] Added new ``-g`` option to dump glyphs from the ``glyf`` table
    813           splitted as individual ttx files (#153, #1035, #1132, #1202).
    814         - Copied ``ufoLib.filenames`` module to ``fontTools.misc.filenames``, used
    815           for the ttx split-glyphs option (#1202).
    816         - [feaLib] Added support for ``cvParameters`` blocks in Character Variant
    817           feautures ``cv01-cv99`` (#860, #1169).
    818         - [Snippets] Added ``checksum.py`` script to generate/check SHA1 hash of
    819           ttx files (#1197).
    820         - [varLib.mutator] Fixed issue while instantiating some variable fonts
    821           whereby the horizontal advance width computed from ``gvar`` phantom points
    822           could turn up to be negative (#1198).
    823         - [varLib/subset] Fixed issue with subsetting GPOS variation data not
    824           picking up ``ValueRecord`` ``Device`` objects (54fd71f).
    825         - [feaLib/voltLib] In all AST elements, the ``location`` is no longer a
    826           required positional argument, but an optional kewyord argument (defaults
    827           to ``None``). This will make it easier to construct feature AST from
    828           code (#1201).
    829         
    830         
    831         3.23.0 (released 2018-02-26)
    832         ----------------------------
    833         
    834         - [designspaceLib] Added an optional ``lib`` element to the designspace as a
    835           whole, as well as to the instance elements, to store arbitrary data in a
    836           property list dictionary, similar to the UFO's ``lib``. Added an optional
    837           ``font`` attribute to the ``SourceDescriptor``, to allow operating on
    838           in-memory font objects (#1175).
    839         - [cffLib] Fixed issue with lazy-loading of attributes when attempting to
    840           set the CFF TopDict.Encoding (#1177, #1187).
    841         - [ttx] Fixed regression introduced in 3.22.0 that affected the split tables
    842           ``-s`` option (#1188).
    843         - [feaLib] Added ``IncludedFeaNotFound`` custom exception subclass, raised
    844           when an included feature file cannot be found (#1186).
    845         - [otTables] Changed ``VarIdxMap`` to use glyph names internally instead of
    846           glyph indexes. The old ttx dumps of HVAR/VVAR tables that contain indexes
    847           can still be imported (21cbab8, 38a0ffb).
    848         - [varLib] Implemented VarStore optimizer (#1184).
    849         - [subset] Implemented pruning of GDEF VarStore, HVAR and MVAR (#1179).
    850         - [sfnt] Restore backward compatiblity with ``numFonts`` attribute of
    851           ``SFNTReader`` object (#1181).
    852         - [merge] Initial support for merging ``LangSysRecords`` (#1180).
    853         - [ttCollection] don't seek(0) when writing to possibly unseekable strems.
    854         - [subset] Keep all ``--name-IDs`` from 0 to 6 by default (#1170, #605, #114).
    855         - [cffLib] Added ``width`` module to calculate optimal CFF default and
    856           nominal glyph widths.
    857         - [varLib] Dont fail if STAT already in the master fonts (#1166).
    858         
    859         3.22.0 (released 2018-02-04)
    860         ----------------------------
    861         
    862         - [subset] Support subsetting ``endchar`` acting as ``seac``-like components
    863           in ``CFF`` (fixes #1162).
    864         - [feaLib] Allow to build from pre-parsed ``ast.FeatureFile`` object.
    865           Added ``tables`` argument to only build some tables instead of all (#1159,
    866           #1163).
    867         - [textTools] Replaced ``safeEval`` with ``ast.literal_eval`` (#1139).
    868         - [feaLib] Added option to the parser to not resolve ``include`` statements
    869           (#1154).
    870         - [ttLib] Added new ``ttCollection`` module to read/write TrueType and
    871           OpenType Collections. Exports a ``TTCollection`` class with a ``fonts``
    872           attribute containing a list of ``TTFont`` instances, the methods ``save``
    873           and ``saveXML``, plus some list-like methods. The ``importXML`` method is
    874           not implemented yet (#17).
    875         - [unicodeadata] Added ``ot_tag_to_script`` function that converts from
    876           OpenType script tag to Unicode script code.
    877         - Added new ``designspaceLib`` subpackage, originally from Erik Van Blokland's
    878           ``designSpaceDocument``: https://github.com/LettError/designSpaceDocument
    879           NOTE: this is not yet used internally by varLib, and the API may be subject
    880           to changes (#911, #1110, LettError/designSpaceDocument#28).
    881         - Added new FontTools icon images (8ee7c32).
    882         - [unicodedata] Added ``script_horizontal_direction`` function that returns
    883           either "LTR" or "RTL" given a unicode script code.
    884         - [otConverters] Don't write descriptive name string as XML comment if the
    885           NameID value is 0 (== NULL) (#1151, #1152).
    886         - [unicodedata] Add ``ot_tags_from_script`` function to get the list of
    887           OpenType script tags associated with unicode script code (#1150).
    888         - [feaLib] Don't error when "enumerated" kern pairs conflict with preceding
    889           single pairs; emit warning and chose the first value (#1147, #1148).
    890         - [loggingTools] In ``CapturingLogHandler.assertRegex`` method, match the
    891           fully formatted log message.
    892         - [sbix] Fixed TypeError when concatenating str and bytes (#1154).
    893         - [bezierTools] Implemented cusp support and removed ``approximate_fallback``
    894           arg in ``calcQuadraticArcLength``. Added ``calcCubicArcLength`` (#1142).
    895         
    896         3.21.2 (released 2018-01-08)
    897         ----------------------------
    898         
    899         - [varLib] Fixed merging PairPos Format1/2 with missing subtables (#1125).
    900         
    901         3.21.1 (released 2018-01-03)
    902         ----------------------------
    903         
    904         - [feaLib] Allow mixed single/multiple substitutions (#612)
    905         - Added missing ``*.afm`` test assets to MAINFEST.in (#1137).
    906         - Fixed dumping ``SVG`` tables containing color palettes (#1124).
    907         
    908         3.21.0 (released 2017-12-18)
    909         ----------------------------
    910         
    911         - [cmap] when compiling format6 subtable, don't assume gid0 is always called
    912           '.notdef' (1e42224).
    913         - [ot] Allow decompiling fonts with bad Coverage format number (1aafae8).
    914         - Change FontTools licence to MIT (#1127).
    915         - [post] Prune extra names already in standard Mac set (df1e8c7).
    916         - [subset] Delete empty SubrsIndex after subsetting (#994, #1118).
    917         - [varLib] Don't share points in cvar by default, as it currently fails on
    918           some browsers (#1113).
    919         - [afmLib] Make poor old afmLib work on python3.
    920         
    921         3.20.1 (released 2017-11-22)
    922         ----------------------------
    923         
    924         - [unicodedata] Fixed issue with ``script`` and ``script_extension`` functions
    925           returning inconsistent short vs long names. They both return the short four-
    926           letter script codes now. Added ``script_name`` and ``script_code`` functions
    927           to look up the long human-readable script name from the script code, and
    928           viceversa (#1109, #1111).
    929         
    930         3.20.0 (released 2017-11-21)
    931         ----------------------------
    932         
    933         - [unicodedata] Addded new module ``fontTools.unicodedata`` which exports the
    934           same interface as the built-in ``unicodedata`` module, with the addition of
    935           a few functions that are missing from the latter, such as ``script``,
    936           ``script_extension`` and ``block``. Added a ``MetaTools/buildUCD.py`` script
    937           to download and parse data files from the Unicode Character Database and
    938           generate python modules containing lists of ranges and property values.
    939         - [feaLib] Added ``__str__`` method to all ``ast`` elements (delegates to the
    940           ``asFea`` method).
    941         - [feaLib] ``Parser`` constructor now accepts a ``glyphNames`` iterable
    942           instead of ``glyphMap`` dict. The latter still works but with a pending
    943           deprecation warning (#1104).
    944         - [bezierTools] Added arc length calculation functions originally from
    945           ``pens.perimeterPen`` module (#1101).
    946         - [varLib] Started generating STAT table (8af4309). Right now it just reflects
    947           the axes, and even that with certain limitations:
    948           * AxisOrdering is set to the order axes are defined,
    949           * Name-table entries are not shared with fvar.
    950         - [py23] Added backports for ``redirect_stdout`` and ``redirect_stderr``
    951           context managers (#1097).
    952         - [Graphite] Fixed some round-trip bugs (#1093).
    953         
    954         3.19.0 (released 2017-11-06)
    955         ----------------------------
    956         
    957         - [varLib] Try set of used points instead of all points when testing whether to
    958           share points between tuples (#1090).
    959         - [CFF2] Fixed issue with reading/writing PrivateDict BlueValues to TTX file.
    960           Read the commit message 8b02b5a and issue #1030 for more details.
    961           NOTE: this change invalidates all the TTX files containing CFF2 tables
    962           that where dumped with previous verisons of fonttools.
    963           CFF2 Subr items can have values on the stack after the last operator, thus
    964           a ``CFF2Subr`` class was added to accommodate this (#1091).
    965         - [_k_e_r_n] Fixed compilation of AAT kern version=1.0 tables (#1089, #1094)
    966         - [ttLib] Added getBestCmap() convenience method to TTFont class and cmap table
    967           class that returns a preferred Unicode cmap subtable given a list of options
    968           (#1092).
    969         - [morx] Emit more meaningful subtable flags. Implement InsertionMorphAction
    970         
    971         3.18.0 (released 2017-10-30)
    972         ----------------------------
    973         
    974         - [feaLib] Fixed writing back nested glyph classes (#1086).
    975         - [TupleVariation] Reactivated shared points logic, bugfixes (#1009).
    976         - [AAT] Implemented ``morx`` ligature subtables (#1082).
    977         - [reverseContourPen] Keep duplicate lineTo following a moveTo (#1080,
    978           https://github.com/googlei18n/cu2qu/issues/51).
    979         - [varLib.mutator] Suport instantiation of GPOS, GDEF and MVAR (#1079).
    980         - [sstruct] Fixed issue with ``unicode_literals`` and ``struct`` module in
    981           old versions of python 2.7 (#993).
    982         
    983         3.17.0 (released 2017-10-16)
    984         ----------------------------
    985         
    986         - [svgPathPen] Added an ``SVGPathPen`` that translates segment pen commands
    987           into SVG path descriptions. Copied from Tal Leming's ``ufo2svg.svgPathPen``
    988           https://github.com/typesupply/ufo2svg/blob/d69f992/Lib/ufo2svg/svgPathPen.py
    989         - [reverseContourPen] Added ``ReverseContourPen``, a filter pen that draws
    990           contours with the winding direction reversed, while keeping the starting
    991           point (#1071).
    992         - [filterPen] Added ``ContourFilterPen`` to manipulate contours as a whole
    993           rather than segment by segment.
    994         - [arrayTools] Added ``Vector`` class to apply math operations on an array
    995           of numbers, and ``pairwise`` function to loop over pairs of items in an
    996           iterable.
    997         - [varLib] Added support for building and interpolation of ``cvar`` table
    998           (f874cf6, a25a401).
    999         
   1000         3.16.0 (released 2017-10-03)
   1001         ----------------------------
   1002         
   1003         - [head] Try using ``SOURCE_DATE_EPOCH`` environment variable when setting
   1004           the ``head`` modified timestamp to ensure reproducible builds (#1063).
   1005           See https://reproducible-builds.org/specs/source-date-epoch/
   1006         - [VTT] Decode VTT's ``TSI*`` tables text as UTF-8 (#1060).
   1007         - Added support for Graphite font tables: Feat, Glat, Gloc, Silf and Sill.
   1008           Thanks @mhosken! (#1054).
   1009         - [varLib] Default to using axis "name" attribute if "labelname" element
   1010           is missing (588f524).
   1011         - [merge] Added support for merging Script records. Remove unused features
   1012           and lookups after merge (d802580, 556508b).
   1013         - Added ``fontTools.svgLib`` package. Includes a parser for SVG Paths that
   1014           supports the Pen protocol (#1051). Also, added a snippet to convert SVG
   1015           outlines to UFO GLIF (#1053).
   1016         - [AAT] Added support for ``ankr``, ``bsln``, ``mort``, ``morx``, ``gcid``,
   1017           and ``cidg``.
   1018         - [subset] Implemented subsetting of ``prop``, ``opbd``, ``bsln``, ``lcar``.
   1019         
   1020         3.15.1 (released 2017-08-18)
   1021         ----------------------------
   1022         
   1023         - [otConverters] Implemented ``__add__`` and ``__radd__`` methods on
   1024           ``otConverters._LazyList`` that decompile a lazy list before adding
   1025           it to another list or ``_LazyList`` instance. Fixes an ``AttributeError``
   1026           in the ``subset`` module when attempting to sum ``_LazyList`` objects
   1027           (6ef48bd2, 1aef1683).
   1028         - [AAT] Support the `opbd` table with optical bounds (a47f6588).
   1029         - [AAT] Support `prop` table with glyph properties (d05617b4).
   1030         
   1031         
   1032         3.15.0 (released 2017-08-17)
   1033         ----------------------------
   1034         
   1035         - [AAT] Added support for AAT lookups. The ``lcar`` table can be decompiled
   1036           and recompiled; futher work needed to handle ``morx`` table (#1025).
   1037         - [subset] Keep (empty) DefaultLangSys for Script 'DFLT' (6eb807b5).
   1038         - [subset] Support GSUB/GPOS.FeatureVariations (fe01d87b).
   1039         - [varLib] In ``models.supportScalars``, ignore an axis when its peak value
   1040           is 0 (fixes #1020).
   1041         - [varLib] Add default mappings to all axes in avar to fix rendering issue
   1042           in some rasterizers (19c4b377, 04eacf13).
   1043         - [varLib] Flatten multiple tail PairPosFormat2 subtables before merging
   1044           (c55ef525).
   1045         - [ttLib] Added support for recalculating font bounding box in ``CFF`` and
   1046           ``head`` tables, and min/max values in ``hhea`` and ``vhea`` tables (#970).
   1047         
   1048         3.14.0 (released 2017-07-31)
   1049         ----------------------------
   1050         
   1051         - [varLib.merger] Remove Extensions subtables before merging (f7c20cf8).
   1052         - [varLib] Initialize the avar segment map with required default entries
   1053           (#1014).
   1054         - [varLib] Implemented optimal IUP optmiziation (#1019).
   1055         - [otData] Add ``AxisValueFormat4`` for STAT table v1.2 from OT v1.8.2
   1056           (#1015).
   1057         - [name] Fixed BCP46 language tag for Mac langID=9: 'si' -> 'sl'.
   1058         - [subset] Return value from ``_DehintingT2Decompiler.op_hintmask``
   1059           (c0d672ba).
   1060         - [cffLib] Allow to get TopDict by index as well as by name (dca96c9c).
   1061         - [cffLib] Removed global ``isCFF2`` state; use one set of classes for
   1062           both CFF and CFF2, maintaining backward compatibility existing code(#1007).
   1063         - [cffLib] Deprecated maxstack operator, per OpenType spec update 1.8.1.
   1064         - [cffLib] Added missing default (-100) for UnderlinePosition (#983).
   1065         - [feaLib] Enable setting nameIDs greater than 255 (#1003).
   1066         - [varLib] Recalculate ValueFormat when merging SinglePos (#996).
   1067         - [varLib] Do not emit MVAR if there are no entries in the variation store
   1068           (#987).
   1069         - [ttx] For ``-x`` option, pad with space if table tag length is < 4.
   1070         
   1071         3.13.1 (released 2017-05-30)
   1072         ----------------------------
   1073         
   1074         - [feaLib.builder] Removed duplicate lookups optimization. The original
   1075           lookup order and semantics of the feature file are preserved (#976).
   1076         
   1077         3.13.0 (released 2017-05-24)
   1078         ----------------------------
   1079         
   1080         - [varLib.mutator] Implement IUP optimization (#969).
   1081         - [_g_l_y_f.GlyphCoordinates] Changed ``__bool__()`` semantics to match those
   1082           of other iterables (e46f949). Removed ``__abs__()`` (3db5be2).
   1083         - [varLib.interpolate_layout] Added ``mapped`` keyword argument to
   1084           ``interpolate_layout`` to allow disabling avar mapping: if False (default),
   1085           the location is mapped using the map element of the axes in designspace file;
   1086           if True, it is assumed that location is in designspace's internal space and
   1087           no mapping is performed (#950, #975).
   1088         - [varLib.interpolate_layout] Import designspace-loading logic from varLib.
   1089         - [varLib] Fixed bug with recombining PairPosClass2 subtables (81498e5, #914).
   1090         - [cffLib.specializer] When copying iterables, cast to list (462b7f86).
   1091         
   1092         3.12.1 (released 2017-05-18)
   1093         ----------------------------
   1094         
   1095         - [pens.t2CharStringPen] Fixed AttributeError when calling addComponent in
   1096           T2CharStringPen (#965).
   1097         
   1098         3.12.0 (released 2017-05-17)
   1099         ----------------------------
   1100         
   1101         - [cffLib.specializer] Added new ``specializer`` module to optimize CFF
   1102           charstrings, used by the T2CharStringPen (#948).
   1103         - [varLib.mutator] Sort glyphs by component depth before calculating composite
   1104           glyphs' bounding boxes to ensure deltas are correctly caclulated (#945).
   1105         - [_g_l_y_f] Fixed loss of precision in GlyphCoordinates by using 'd' (double)
   1106           instead of 'f' (float) as ``array.array`` typecode (#963, #964).
   1107         
   1108         3.11.0 (released 2017-05-03)
   1109         ----------------------------
   1110         
   1111         - [t2CharStringPen] Initial support for specialized Type2 path operators:
   1112           vmoveto, hmoveto, vlineto, hlineto, vvcurveto, hhcurveto, vhcurveto and
   1113           hvcurveto. This should produce more compact charstrings (#940, #403).
   1114         - [Doc] Added Sphinx sources for the documentation. Thanks @gferreira (#935).
   1115         - [fvar] Expose flags in XML (#932)
   1116         - [name] Add helper function for building multi-lingual names (#921)
   1117         - [varLib] Fixed kern merging when a PairPosFormat2 has ClassDef1 with glyphs
   1118           that are NOT present in the Coverage (1b5e1c4, #939).
   1119         - [varLib] Fixed non-deterministic ClassDef order with PY3 (f056c12, #927).
   1120         - [feLib] Throw an error when the same glyph is defined in multiple mark
   1121           classes within the same lookup (3e3ff00, #453).
   1122         
   1123         3.10.0 (released 2017-04-14)
   1124         ----------------------------
   1125         
   1126         - [varLib] Added support for building ``avar`` table, using the designspace
   1127           ``<map>`` elements.
   1128         - [varLib] Removed unused ``build(..., axisMap)`` argument. Axis map should
   1129           be specified in designspace file now. We do not accept nonstandard axes
   1130           if ``<axes>`` element is not present.
   1131         - [varLib] Removed "custom" axis from the ``standard_axis_map``. This was
   1132           added before when glyphsLib was always exporting the (unused) custom axis.
   1133         - [varLib] Added partial support for building ``MVAR`` table; does not
   1134           implement ``gasp`` table variations yet.
   1135         - [pens] Added FilterPen base class, for pens that control another pen;
   1136           factored out ``addComponent`` method from BasePen into a separate abstract
   1137           DecomposingPen class; added DecomposingRecordingPen, which records
   1138           components decomposed as regular contours.
   1139         - [TSI1] Fixed computation of the textLength of VTT private tables (#913).
   1140         - [loggingTools] Added ``LogMixin`` class providing a ``log`` property to
   1141           subclasses, which returns a ``logging.Logger`` named after the latter.
   1142         - [loggingTools] Added ``assertRegex`` method to ``CapturingLogHandler``.
   1143         - [py23] Added backport for python 3's ``types.SimpleNamespace`` class.
   1144         - [EBLC] Fixed issue with python 3 ``zip`` iterator.
   1145         
   1146         3.9.2 (released 2017-04-08)
   1147         ---------------------------
   1148         
   1149         - [pens] Added pen to draw glyphs using WxPython ``GraphicsPath`` class:
   1150           https://wxpython.org/docs/api/wx.GraphicsPath-class.html
   1151         - [varLib.merger] Fixed issue with recombining multiple PairPosFormat2
   1152           subtables (#888)
   1153         - [varLib] Do not encode gvar deltas that are all zeroes, or if all values
   1154           are smaller than tolerance.
   1155         - [ttLib] _TTGlyphSet glyphs now also have ``height`` and ``tsb`` (top
   1156           side bearing) attributes from the ``vmtx`` table, if present.
   1157         - [glyf] In ``GlyphCoordintes`` class, added ``__bool__`` / ``__nonzero__``
   1158           methods, and ``array`` property to get raw array.
   1159         - [ttx] Support reading TTX files with BOM (#896)
   1160         - [CFF2] Fixed the reporting of the number of regions in the font.
   1161         
   1162         3.9.1 (released 2017-03-20)
   1163         ---------------------------
   1164         
   1165         - [varLib.merger] Fixed issue while recombining multiple PairPosFormat2
   1166           subtables if they were split because of offset overflows (9798c30).
   1167         - [varLib.merger] Only merge multiple PairPosFormat1 subtables if there is
   1168           at least one of the fonts with a non-empty Format1 subtable (0f5a46b).
   1169         - [varLib.merger] Fixed IndexError with empty ClassDef1 in PairPosFormat2
   1170           (aad0d46).
   1171         - [varLib.merger] Avoid reusing Class2Record (mutable) objects (e6125b3).
   1172         - [varLib.merger] Calculate ClassDef1 and ClassDef2's Format when merging
   1173           PairPosFormat2 (23511fd).
   1174         - [macUtils] Added missing ttLib import (b05f203).
   1175         
   1176         3.9.0 (released 2017-03-13)
   1177         ---------------------------
   1178         
   1179         - [feaLib] Added (partial) support for parsing feature file comments ``# ...``
   1180           appearing in between statements (#879).
   1181         - [feaLib] Cleaned up syntax tree for FeatureNames.
   1182         - [ttLib] Added support for reading/writing ``CFF2`` table (thanks to
   1183           @readroberts at Adobe), and ``TTFA`` (ttfautohint) table.
   1184         - [varLib] Fixed regression introduced with 3.8.0 in the calculation of
   1185           ``NumShorts``, i.e. the number of deltas in ItemVariationData's delta sets
   1186           that use a 16-bitrepresentation (b2825ff).
   1187         
   1188         3.8.0 (released 2017-03-05)
   1189         ---------------------------
   1190         
   1191         - New pens: MomentsPen, StatisticsPen, RecordingPen, and TeePen.
   1192         - [misc] Added new ``fontTools.misc.symfont`` module, for symbolic font
   1193           statistical analysis; requires ``sympy`` (http://www.sympy.org/en/index.html)
   1194         - [varLib] Added experimental ``fontTools.varLib.interpolatable`` module for
   1195           finding wrong contour order between different masters
   1196         - [varLib] designspace.load() now returns a dictionary, instead of a tuple,
   1197           and supports <axes> element (#864); the 'masters' item was renamed 'sources',
   1198           like the <sources> element in the designspace document
   1199         - [ttLib] Fixed issue with recalculating ``head`` modified timestamp when
   1200           saving CFF fonts
   1201         - [ttLib] In TupleVariation, round deltas before compiling (#861, fixed #592)
   1202         - [feaLib] Ignore duplicate glyphs in classes used as MarkFilteringSet and
   1203           MarkAttachmentType (#863)
   1204         - [merge] Changed the ``gasp`` table merge logic so that only the one from
   1205           the first font is retained, similar to other hinting tables (#862)
   1206         - [Tests] Added tests for the ``varLib`` package, as well as test fonts
   1207           from the "Annotated OpenType Specification" (AOTS) to exercise ``ttLib``'s
   1208           table readers/writers (<https://github.com/adobe-type-tools/aots>)
   1209         
   1210         3.7.2 (released 2017-02-17)
   1211         ---------------------------
   1212         
   1213         - [subset] Keep advance widths when stripping ".notdef" glyph outline in
   1214           CID-keyed CFF fonts (#845)
   1215         - [feaLib] Zero values now produce the same results as makeotf (#633, #848)
   1216         - [feaLib] More compact encoding for Contextual positioning with in-line
   1217           single positioning rules (#514)
   1218         
   1219         3.7.1 (released 2017-02-15)
   1220         ---------------------------
   1221         
   1222         - [subset] Fixed issue with ``--no-hinting`` option whereby advance widths in
   1223           Type 2 charstrings were also being stripped (#709, #343)
   1224         - [feaLib] include statements now resolve relative paths like makeotf (#838)
   1225         - [feaLib] table ``name`` now handles Unicode codepoints beyond the Basic
   1226           Multilingual Plane, also supports old-style MacOS platform encodings (#842)
   1227         - [feaLib] correctly escape string literals when emitting feature syntax (#780)
   1228         
   1229         3.7.0 (released 2017-02-11)
   1230         ---------------------------
   1231         
   1232         - [ttx, mtiLib] Preserve ordering of glyph alternates in GSUB type 3 (#833).
   1233         - [feaLib] Glyph names can have dashes, as per new AFDKO syntax v1.20 (#559).
   1234         - [feaLib] feaLib.Parser now needs the font's glyph map for parsing.
   1235         - [varLib] Fix regression where GPOS values were stored as 0.
   1236         - [varLib] Allow merging of class-based kerning when ClassDefs are different
   1237         
   1238         3.6.3 (released 2017-02-06)
   1239         ---------------------------
   1240         
   1241         - [varLib] Fix building variation of PairPosFormat2 (b5c34ce).
   1242         - Populate defaults even for otTables that have postRead (e45297b).
   1243         - Fix compiling of MultipleSubstFormat1 with zero 'out' glyphs (b887860).
   1244         
   1245         3.6.2 (released 2017-01-30)
   1246         ---------------------------
   1247         
   1248         - [varLib.merger] Fixed "TypeError: reduce() of empty sequence with no
   1249           initial value" (3717dc6).
   1250         
   1251         3.6.1 (released 2017-01-28)
   1252         ---------------------------
   1253         
   1254         -  [py23] Fixed unhandled exception occurring at interpreter shutdown in
   1255            the "lastresort" logging handler (972b3e6).
   1256         -  [agl] Ensure all glyph names are of native 'str' type; avoid mixing
   1257            'str' and 'unicode' in TTFont.glyphOrder (d8c4058).
   1258         -  Fixed inconsistent title levels in README.rst that caused PyPI to
   1259            incorrectly render the reStructuredText page.
   1260         
   1261         3.6.0 (released 2017-01-26)
   1262         ---------------------------
   1263         
   1264         -  [varLib] Refactored and improved the variation-font-building process.
   1265         -  Assembly code in the fpgm, prep, and glyf tables is now indented in
   1266            XML output for improved readability. The ``instruction`` element is
   1267            written as a simple tag if empty (#819).
   1268         -  [ttx] Fixed 'I/O operation on closed file' error when dumping
   1269            multiple TTXs to standard output with the '-o -' option.
   1270         -  The unit test modules (``*_test.py``) have been moved outside of the
   1271            fontTools package to the Tests folder, thus they are no longer
   1272            installed (#811).
   1273         
   1274         3.5.0 (released 2017-01-14)
   1275         ---------------------------
   1276         
   1277         -  Font tables read from XML can now be written back to XML with no
   1278            loss.
   1279         -  GSUB/GPOS LookupType is written out in XML as an element, not
   1280            comment. (#792)
   1281         -  When parsing cmap table, do not store items mapped to glyph id 0.
   1282            (#790)
   1283         -  [otlLib] Make ClassDef sorting deterministic. Fixes #766 (7d1ddb2)
   1284         -  [mtiLib] Added unit tests (#787)
   1285         -  [cvar] Implemented cvar table
   1286         -  [gvar] Renamed GlyphVariation to TupleVariation to match OpenType
   1287            terminology.
   1288         -  [otTables] Handle gracefully empty VarData.Item array when compiling
   1289            XML. (#797)
   1290         -  [varLib] Re-enabled generation of ``HVAR`` table for fonts with
   1291            TrueType outlines; removed ``--build-HVAR`` command-line option.
   1292         -  [feaLib] The parser can now be extended to support non-standard
   1293            statements in FEA code by using a customized Abstract Syntax Tree.
   1294            See, for example, ``feaLib.builder_test.test_extensions`` and
   1295            baseClass.feax (#794, fixes #773).
   1296         -  [feaLib] Added ``feaLib`` command to the 'fonttools' command-line
   1297            tool; applies a feature file to a font. ``fonttools feaLib -h`` for
   1298            help.
   1299         -  [pens] The ``T2CharStringPen`` now takes an optional
   1300            ``roundTolerance`` argument to control the rounding of coordinates
   1301            (#804, fixes #769).
   1302         -  [ci] Measure test coverage on all supported python versions and OSes,
   1303            combine coverage data and upload to
   1304            https://codecov.io/gh/fonttools/fonttools (#786)
   1305         -  [ci] Configured Travis and Appveyor for running tests on Python 3.6
   1306            (#785, 55c03bc)
   1307         -  The manual pages installation directory can be customized through
   1308            ``FONTTOOLS_MANPATH`` environment variable (#799, fixes #84).
   1309         -  [Snippets] Added otf2ttf.py, for converting fonts from CFF to
   1310            TrueType using the googlei18n/cu2qu module (#802)
   1311         
   1312         3.4.0 (released 2016-12-21)
   1313         ---------------------------
   1314         
   1315         -  [feaLib] Added support for generating FEA text from abstract syntax
   1316            tree (AST) objects (#776). Thanks @mhosken
   1317         -  Added ``agl.toUnicode`` function to convert AGL-compliant glyph names
   1318            to Unicode strings (#774)
   1319         -  Implemented MVAR table (b4d5381)
   1320         
   1321         3.3.1 (released 2016-12-15)
   1322         ---------------------------
   1323         
   1324         -  [setup] We no longer use versioneer.py to compute fonttools version
   1325            from git metadata, as this has caused issues for some users (#767).
   1326            Now we bump the version strings manually with a custom ``release``
   1327            command of setup.py script.
   1328         
   1329         3.3.0 (released 2016-12-06)
   1330         ---------------------------
   1331         
   1332         -  [ttLib] Implemented STAT table from OpenType 1.8 (#758)
   1333         -  [cffLib] Fixed decompilation of CFF fonts containing non-standard
   1334            key/value pairs in FontDict (issue #740; PR #744)
   1335         -  [py23] minor: in ``round3`` function, allow the second argument to be
   1336            ``None`` (#757)
   1337         -  The standalone ``sstruct`` and ``xmlWriter`` modules, deprecated
   1338            since vesion 3.2.0, have been removed. They can be imported from the
   1339            ``fontTools.misc`` package.
   1340         
   1341         3.2.3 (released 2016-12-02)
   1342         ---------------------------
   1343         
   1344         -  [py23] optimized performance of round3 function; added backport for
   1345            py35 math.isclose() (9d8dacb)
   1346         -  [subset] fixed issue with 'narrow' (UCS-2) Python 2 builds and
   1347            ``--text``/``--text-file`` options containing non-BMP chararcters
   1348            (16d0e5e)
   1349         -  [varLib] fixed issuewhen normalizing location values (8fa2ee1, #749)
   1350         -  [inspect] Made it compatible with both python2 and python3 (167ee60,
   1351            #748). Thanks @pnemade
   1352         
   1353         3.2.2 (released 2016-11-24)
   1354         ---------------------------
   1355         
   1356         -  [varLib] Do not emit null axes in fvar (1bebcec). Thanks @robmck-ms
   1357         -  [varLib] Handle fonts without GPOS (7915a45)
   1358         -  [merge] Ignore LangSys if None (a11bc56)
   1359         -  [subset] Fix subsetting MathVariants (78d3cbe)
   1360         -  [OS/2] Fix "Private Use (plane 15)" range (08a0d55). Thanks @mashabow
   1361         
   1362         3.2.1 (released 2016-11-03)
   1363         ---------------------------
   1364         
   1365         -  [OS/2] fix checking ``fsSelection`` bits matching ``head.macStyle``
   1366            bits
   1367         -  [varLib] added ``--build-HVAR`` option to generate ``HVAR`` table for
   1368            fonts with TrueType outlines. For ``CFF2``, it is enabled by default.
   1369         
   1370         3.2.0 (released 2016-11-02)
   1371         ---------------------------
   1372         
   1373         -  [varLib] Improve support for OpenType 1.8 Variable Fonts:
   1374         -  Implement GDEF's VariationStore
   1375         -  Implement HVAR/VVAR tables
   1376         -  Partial support for loading MutatorMath .designspace files with
   1377            varLib.designspace module
   1378         -  Add varLib.models with Variation fonts interpolation models
   1379         -  Implement GSUB/GPOS FeatureVariations
   1380         -  Initial support for interpolating and merging OpenType Layout tables
   1381            (see ``varLib.interpolate_layout`` and ``varLib.merger`` modules)
   1382         -  [API change] Change version to be an integer instead of a float in
   1383            XML output for GSUB, GPOS, GDEF, MATH, BASE, JSTF, HVAR, VVAR, feat,
   1384            hhea and vhea tables. Scripts that set the Version for those to 1.0
   1385            or other float values also need fixing. A warning is emitted when
   1386            code or XML needs fix.
   1387         -  several bug fixes to the cffLib module, contributed by Adobe's
   1388            @readroberts
   1389         -  The XML output for CFF table now has a 'major' and 'minor' elements
   1390            for specifying whether it's version 1.0 or 2.0 (support for CFF2 is
   1391            coming soon)
   1392         -  [setup.py] remove undocumented/deprecated ``extra_path`` Distutils
   1393            argument. This means that we no longer create a "FontTools" subfolder
   1394            in site-packages containing the actual fontTools package, as well as
   1395            the standalone xmlWriter and sstruct modules. The latter modules are
   1396            also deprecated, and scheduled for removal in upcoming releases.
   1397            Please change your import statements to point to from fontTools.misc
   1398            import xmlWriter and from fontTools.misc import sstruct.
   1399         -  [scripts] Add a 'fonttools' command-line tool that simply runs
   1400            ``fontTools.*`` sub-modules: e.g. ``fonttools ttx``,
   1401            ``fonttools subset``, etc.
   1402         -  [hmtx/vmts] Read advance width/heights as unsigned short (uint16);
   1403            automatically round float values to integers.
   1404         -  [ttLib/xmlWriter] add 'newlinestr=None' keyword argument to
   1405            ``TTFont.saveXML`` for overriding os-specific line endings (passed on
   1406            to ``XMLWriter`` instances).
   1407         -  [versioning] Use versioneer instead of ``setuptools_scm`` to
   1408            dynamically load version info from a git checkout at import time.
   1409         -  [feaLib] Support backslash-prefixed glyph names.
   1410         
   1411         3.1.2 (released 2016-09-27)
   1412         ---------------------------
   1413         
   1414         -  restore Makefile as an alternative way to build/check/install
   1415         -  README.md: update instructions for installing package from source,
   1416            and for running test suite
   1417         -  NEWS: Change log was out of sync with tagged release
   1418         
   1419         3.1.1 (released 2016-09-27)
   1420         ---------------------------
   1421         
   1422         -  Fix ``ttLibVersion`` attribute in TTX files still showing '3.0'
   1423            instead of '3.1'.
   1424         -  Use ``setuptools_scm`` to manage package versions.
   1425         
   1426         3.1.0 (released 2016-09-26)
   1427         ---------------------------
   1428         
   1429         -  [feaLib] New library to parse and compile Adobe FDK OpenType Feature
   1430            files.
   1431         -  [mtiLib] New library to parse and compile Monotype 'FontDame'
   1432            OpenType Layout Tables files.
   1433         -  [voltLib] New library to parse Microsoft VOLT project files.
   1434         -  [otlLib] New library to work with OpenType Layout tables.
   1435         -  [varLib] New library to work with OpenType Font Variations.
   1436         -  [pens] Add ttGlyphPen to draw to TrueType glyphs, and t2CharStringPen
   1437            to draw to Type 2 Charstrings (CFF); add areaPen and perimeterPen.
   1438         -  [ttLib.tables] Implement 'meta' and 'trak' tables.
   1439         -  [ttx] Add --flavor option for compiling to 'woff' or 'woff2'; add
   1440            ``--with-zopfli`` option to use Zopfli to compress WOFF 1.0 fonts.
   1441         -  [subset] Support subsetting 'COLR'/'CPAL' and 'CBDT'/'CBLC' color
   1442            fonts tables, and 'gvar' table for variation fonts.
   1443         -  [Snippets] Add ``symfont.py``, for symbolic font statistics analysis;
   1444            interpolatable.py, a preliminary script for detecting interpolation
   1445            errors; ``{merge,dump}_woff_metadata.py``.
   1446         -  [classifyTools] Helpers to classify things into classes.
   1447         -  [CI] Run tests on Windows, Linux and macOS using Appveyor and Travis
   1448            CI; check unit test coverage with Coverage.py/Coveralls; automatic
   1449            deployment to PyPI on tags.
   1450         -  [loggingTools] Use Python built-in logging module to print messages.
   1451         -  [py23] Make round() behave like Python 3 built-in round(); define
   1452            round2() and round3().
   1453         
   1454         3.0 (released 2015-09-01)
   1455         -------------------------
   1456         
   1457         -  Add Snippet scripts for cmap subtable format conversion, printing
   1458            GSUB/GPOS features, building a GX font from two masters
   1459         -  TTX WOFF2 support and a ``-f`` option to overwrite output file(s)
   1460         -  Support GX tables: ``avar``, ``gvar``, ``fvar``, ``meta``
   1461         -  Support ``feat`` and gzip-compressed SVG tables
   1462         -  Upgrade Mac East Asian encodings to native implementation if
   1463            available
   1464         -  Add Roman Croatian and Romanian encodings, codecs for mac-extended
   1465            East Asian encodings
   1466         -  Implement optimal GLYF glyph outline packing; disabled by default
   1467         
   1468         2.5 (released 2014-09-24)
   1469         -------------------------
   1470         
   1471         -  Add a Qt pen
   1472         -  Add VDMX table converter
   1473         -  Load all OpenType sub-structures lazily
   1474         -  Add support for cmap format 13.
   1475         -  Add pyftmerge tool
   1476         -  Update to Unicode 6.3.0d3
   1477         -  Add pyftinspect tool
   1478         -  Add support for Google CBLC/CBDT color bitmaps, standard EBLC/EBDT
   1479            embedded bitmaps, and ``SVG`` table (thanks to Read Roberts at Adobe)
   1480         -  Add support for loading, saving and ttx'ing WOFF file format
   1481         -  Add support for Microsoft COLR/CPAL layered color glyphs
   1482         -  Support PyPy
   1483         -  Support Jython, by replacing numpy with array/lists modules and
   1484            removed it, pure-Python StringIO, not cStringIO
   1485         -  Add pyftsubset and Subsetter object, supporting CFF and TTF
   1486         -  Add to ttx args for -q for quiet mode, -z to choose a bitmap dump
   1487            format
   1488         
   1489         2.4 (released 2013-06-22)
   1490         -------------------------
   1491         
   1492         -  Option to write to arbitrary files
   1493         -  Better dump format for DSIG
   1494         -  Better detection of OTF XML
   1495         -  Fix issue with Apple's kern table format
   1496         -  Fix mangling of TT glyph programs
   1497         -  Fix issues related to mona.ttf
   1498         -  Fix Windows Installer instructions
   1499         -  Fix some modern MacOS issues
   1500         -  Fix minor issues and typos
   1501         
   1502         2.3 (released 2009-11-08)
   1503         -------------------------
   1504         
   1505         -  TrueType Collection (TTC) support
   1506         -  Python 2.6 support
   1507         -  Update Unicode data to 5.2.0
   1508         -  Couple of bug fixes
   1509         
   1510         2.2 (released 2008-05-18)
   1511         -------------------------
   1512         
   1513         -  ClearType support
   1514         -  cmap format 1 support
   1515         -  PFA font support
   1516         -  Switched from Numeric to numpy
   1517         -  Update Unicode data to 5.1.0
   1518         -  Update AGLFN data to 1.6
   1519         -  Many bug fixes
   1520         
   1521         2.1 (released 2008-01-28)
   1522         -------------------------
   1523         
   1524         -  Many years worth of fixes and features
   1525         
   1526         2.0b2 (released 2002-??-??)
   1527         ---------------------------
   1528         
   1529         -  Be "forgiving" when interpreting the maxp table version field:
   1530            interpret any value as 1.0 if it's not 0.5. Fixes dumping of these
   1531            GPL fonts: http://www.freebsd.org/cgi/pds.cgi?ports/chinese/wangttf
   1532         -  Fixed ttx -l: it turned out this part of the code didn't work with
   1533            Python 2.2.1 and earlier. My bad to do most of my testing with a
   1534            different version than I shipped TTX with :-(
   1535         -  Fixed bug in ClassDef format 1 subtable (Andreas Seidel bumped into
   1536            this one).
   1537         
   1538         2.0b1 (released 2002-09-10)
   1539         ---------------------------
   1540         
   1541         -  Fixed embarrassing bug: the master checksum in the head table is now
   1542            calculated correctly even on little-endian platforms (such as Intel).
   1543         -  Made the cmap format 4 compiler smarter: the binary data it creates
   1544            is now more or less as compact as possible. TTX now makes more
   1545            compact data than in any shipping font I've tested it with.
   1546         -  Dump glyph names as a separate "GlyphOrder" pseudo table as opposed
   1547            to as part of the glyf table (obviously needed for CFF-OTF's).
   1548         -  Added proper support for the CFF table.
   1549         -  Don't barf on empty tables (questionable, but "there are font out
   1550            there...")
   1551         -  When writing TT glyf data, align glyphs on 4-byte boundaries. This
   1552            seems to be the current recommendation by MS. Also: don't barf on
   1553            fonts which are already 4-byte aligned.
   1554         -  Windows installer contributed bu Adam Twardoch! Yay!
   1555         -  Changed the command line interface again, now by creating one new
   1556            tool replacing the old ones: ttx It dumps and compiles, depending on
   1557            input file types. The options have changed somewhat.
   1558         -  The -d option is back (output dir)
   1559         -  ttcompile's -i options is now called -m (as in "merge"), to avoid
   1560            clash with dump's -i.
   1561         -  The -s option ("split tables") no longer creates a directory, but
   1562            instead outputs a small .ttx file containing references to the
   1563            individual table files. This is not a true link, it's a simple file
   1564            name, and the referenced file should be in the same directory so
   1565            ttcompile can find them.
   1566         -  compile no longer accepts a directory as input argument. Instead it
   1567            can parse the new "mini-ttx" format as output by "ttx -s".
   1568         -  all arguments are input files
   1569         -  Renamed the command line programs and moved them to the Tools
   1570            subdirectory. They are now installed by the setup.py install script.
   1571         -  Added OpenType support. BASE, GDEF, GPOS, GSUB and JSTF are (almost)
   1572            fully supported. The XML output is not yet final, as I'm still
   1573            considering to output certain subtables in a more human-friendly
   1574            manner.
   1575         -  Fixed 'kern' table to correctly accept subtables it doesn't know
   1576            about, as well as interpreting Apple's definition of the 'kern' table
   1577            headers correctly.
   1578         -  Fixed bug where glyphnames were not calculated from 'cmap' if it was
   1579            (one of the) first tables to be decompiled. More specifically: it
   1580            cmap was the first to ask for a glyphID -> glyphName mapping.
   1581         -  Switched XML parsers: use expat instead of xmlproc. Should be faster.
   1582         -  Removed my UnicodeString object: I now require Python 2.0 or up,
   1583            which has unicode support built in.
   1584         -  Removed assert in glyf table: redundant data at the end of the table
   1585            is now ignored instead of raising an error. Should become a warning.
   1586         -  Fixed bug in hmtx/vmtx code that only occured if all advances were
   1587            equal.
   1588         -  Fixed subtle bug in TT instruction disassembler.
   1589         -  Couple of fixes to the 'post' table.
   1590         -  Updated OS/2 table to latest spec.
   1591         
   1592         1.0b1 (released 2001-08-10)
   1593         ---------------------------
   1594         
   1595         -  Reorganized the command line interface for ttDump.py and
   1596            ttCompile.py, they now behave more like "normal" command line tool,
   1597            in that they accept multiple input files for batch processing.
   1598         -  ttDump.py and ttCompile.py don't silently override files anymore, but
   1599            ask before doing so. Can be overridden by -f.
   1600         -  Added -d option to both ttDump.py and ttCompile.py.
   1601         -  Installation is now done with distutils. (Needs work for environments
   1602            without compilers.)
   1603         -  Updated installation instructions.
   1604         -  Added some workarounds so as to handle certain buggy fonts more
   1605            gracefully.
   1606         -  Updated Unicode table to Unicode 3.0 (Thanks Antoine!)
   1607         -  Included a Python script by Adam Twardoch that adds some useful stuff
   1608            to the Windows registry.
   1609         -  Moved the project to SourceForge.
   1610         
   1611         1.0a6 (released 2000-03-15)
   1612         ---------------------------
   1613         
   1614         -  Big reorganization: made ttLib a subpackage of the new fontTools
   1615            package, changed several module names. Called the entire suite
   1616            "FontTools"
   1617         -  Added several submodules to fontTools, some new, some older.
   1618         -  Added experimental CFF/GPOS/GSUB support to ttLib, read-only (but XML
   1619            dumping of GPOS/GSUB is for now disabled)
   1620         -  Fixed hdmx endian bug
   1621         -  Added -b option to ttCompile.py, it disables recalculation of
   1622            bounding boxes, as requested by Werner Lemberg.
   1623         -  Renamed tt2xml.pt to ttDump.py and xml2tt.py to ttCompile.py
   1624         -  Use ".ttx" as file extension instead of ".xml".
   1625         -  TTX is now the name of the XML-based *format* for TT fonts, and not
   1626            just an application.
   1627         
   1628         1.0a5
   1629         -----
   1630         
   1631         Never released
   1632         
   1633         -  More tables supported: hdmx, vhea, vmtx
   1634         
   1635         1.0a3 & 1.0a4
   1636         -------------
   1637         
   1638         Never released
   1639         
   1640         -  fixed most portability issues
   1641         -  retracted the "Euro_or_currency" change from 1.0a2: it was
   1642            nonsense!
   1643         
   1644         1.0a2 (released 1999-05-02)
   1645         ---------------------------
   1646         
   1647         -  binary release for MacOS
   1648         -  genenates full FOND resources: including width table, PS font name
   1649            info and kern table if applicable.
   1650         -  added cmap format 4 support. Extra: dumps Unicode char names as XML
   1651            comments!
   1652         -  added cmap format 6 support
   1653         -  now accepts true type files starting with "true" (instead of just
   1654            0x00010000 and "OTTO")
   1655         -  'glyf' table support is now complete: I added support for composite
   1656            scale, xy-scale and two-by-two for the 'glyf' table. For now,
   1657            component offset scale behaviour defaults to Apple-style. This only
   1658            affects the (re)calculation of the glyph bounding box.
   1659         -  changed "Euro" to "Euro_or_currency" in the Standard Apple Glyph
   1660            order list, since we cannot tell from the 'post' table which is
   1661            meant. I should probably doublecheck with a Unicode encoding if
   1662            available. (This does not affect the output!)
   1663         
   1664         Fixed bugs: - 'hhea' table is now recalculated correctly - fixed wrong
   1665         assumption about sfnt resource names
   1666         
   1667         1.0a1 (released 1999-04-27)
   1668         ---------------------------
   1669         
   1670         -  initial binary release for MacOS
   1671         
   1672 Platform: Any
   1673 Classifier: Development Status :: 5 - Production/Stable
   1674 Classifier: Environment :: Console
   1675 Classifier: Environment :: Other Environment
   1676 Classifier: Intended Audience :: Developers
   1677 Classifier: Intended Audience :: End Users/Desktop
   1678 Classifier: License :: OSI Approved :: MIT License
   1679 Classifier: Natural Language :: English
   1680 Classifier: Operating System :: OS Independent
   1681 Classifier: Programming Language :: Python
   1682 Classifier: Programming Language :: Python :: 2
   1683 Classifier: Programming Language :: Python :: 3
   1684 Classifier: Topic :: Text Processing :: Fonts
   1685 Classifier: Topic :: Multimedia :: Graphics
   1686 Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion
   1687 Provides-Extra: symfont
   1688 Provides-Extra: type1
   1689 Provides-Extra: lxml
   1690 Provides-Extra: ufo
   1691 Provides-Extra: interpolatable
   1692 Provides-Extra: all
   1693 Provides-Extra: woff
   1694 Provides-Extra: plot
   1695 Provides-Extra: unicode
   1696 Provides-Extra: graphite
   1697