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