Release 3.37.2
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

+)