• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Metadata-Version: 2.1
2Name: fonttools
3Version: 3.39.0
4Summary: Tools to manipulate font files
5Home-page: http://github.com/fonttools/fonttools
6Author: Just van Rossum
7Author-email: just@letterror.com
8Maintainer: Behdad Esfahbod
9Maintainer-email: behdad@behdad.org
10License: MIT
11Description: |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          The version 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 wrong contour/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 creator and 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 Qt cross 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@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, Frédéric 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 Tétar, Vitaly Volkov, Paul
384        Wise.
385
386        Copyrights
387        ~~~~~~~~~~
388
389        | Copyright (c) 1999-2004 Just van Rossum, LettError
390          (just@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] Don’t 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-bit representation (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 "last resort" 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
1672Platform: Any
1673Classifier: Development Status :: 5 - Production/Stable
1674Classifier: Environment :: Console
1675Classifier: Environment :: Other Environment
1676Classifier: Intended Audience :: Developers
1677Classifier: Intended Audience :: End Users/Desktop
1678Classifier: License :: OSI Approved :: MIT License
1679Classifier: Natural Language :: English
1680Classifier: Operating System :: OS Independent
1681Classifier: Programming Language :: Python
1682Classifier: Programming Language :: Python :: 2
1683Classifier: Programming Language :: Python :: 3
1684Classifier: Topic :: Text Processing :: Fonts
1685Classifier: Topic :: Multimedia :: Graphics
1686Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion
1687Provides-Extra: symfont
1688Provides-Extra: type1
1689Provides-Extra: lxml
1690Provides-Extra: ufo
1691Provides-Extra: interpolatable
1692Provides-Extra: all
1693Provides-Extra: woff
1694Provides-Extra: plot
1695Provides-Extra: unicode
1696Provides-Extra: graphite
1697