13.44.0 (released 2019-08-02)
2----------------------------
3
4- NOTE: This is the last scheduled release to support Python 2.7. The upcoming fonttools
5  v4.x series is going to require Python 3.6 or greater.
6- [varLib] Added new ``varLib.instancer`` module for partially instantiating variable
7  fonts. This extends (and will eventually replace) ``varLib.mutator`` module, as
8  it allows to create not just full static instances from a variable font, but also
9  "partial" or "less variable" fonts where some of the axes are dropped or
10  instantiated at a particular value.
11  Also available from the command-line as `fonttools varLib.instancer --help`
12  (#1537, #1628).
13- [cffLib] Added support for ``FDSelect`` format 4 (#1677).
14- [subset] Added support for subsetting ``sbix`` (Apple bitmap color font) table.
15- [t1Lib] Fixed issue parsing ``eexec`` section in Type1 fonts when whitespace
16  characters are interspersed among the trailing zeros (#1676).
17- [cffLib.specializer] Fixed bug in ``programToCommands`` with CFF2 charstrings (#1669).
18
193.43.2 (released 2019-07-10)
20----------------------------
21
22- [featureVars] Fixed region-merging code on python3 (#1659).
23- [varLib.cff] Fixed merging of sparse PrivateDict items (#1653).
24
253.43.1 (released 2019-06-19)
26----------------------------
27
28- [subset] Fixed regression when passing ``--flavor=woff2`` option with an input font
29  that was already compressed as WOFF 1.0 (#1650).
30
313.43.0 (released 2019-06-18)
32----------------------------
33
34- [woff2] Added support for compressing/decompressing WOFF2 fonts with non-transformed
35  ``glyf`` and ``loca`` tables, as well as with transformed ``hmtx`` table.
36  Removed ``Snippets/woff2_compress.py`` and ``Snippets/woff2_decompress.py`` scripts,
37  and replaced them with a new console entry point ``fonttools ttLib.woff2``
38  that provides two sub-commands ``compress`` and ``decompress``.
39- [varLib.cff] Fixed bug when merging CFF2 ``PrivateDicts``. The ``PrivateDict``
40  data from the first region font was incorrecty used for all subsequent fonts.
41  The bug would only affect variable CFF2 fonts with hinting (#1643, #1644).
42  Also, fixed a merging bug when VF masters have no blends or marking glyphs (#1632,
43  #1642).
44- [loggingTools] Removed unused backport of ``LastResortLogger`` class.
45- [subset] Gracefully handle partial MATH table (#1635).
46- [featureVars] Avoid duplicate references to ``rvrn`` feature record in
47  ``DefaultLangSys`` tables when calling ``addFeatureVariations`` on a font that
48  does not already have a ``GSUB`` table (aa8a5bc6).
49- [varLib] Fixed merging of class-based kerning. Before, the process could introduce
50  rogue kerning values and variations for random classes against class zero (everything
51  not otherwise classed).
52- [varLib] Fixed merging GPOS tables from master fonts with different number of
53  ``SinglePos`` subtables (#1621, #1641).
54- [unicodedata] Updated Blocks, Scripts and ScriptExtensions to Unicode 12.1.
55
563.42.0 (released 2019-05-28)
57----------------------------
58
59- [OS/2] Fixed sign of ``fsType``: it should be ``uint16``, not ``int16`` (#1619).
60- [subset] Skip out-of-range class values in mark attachment (#1478).
61- [fontBuilder] Add an empty ``DSIG`` table with ``setupDummyDSIG`` method (#1621).
62- [varLib.merger] Fixed bug whereby ``GDEF.GlyphClassDef`` were being dropped
63  when generating instance via ``varLib.mutator`` (#1614).
64- [varLib] Added command-line options ``-v`` and ``-q`` to configure logging (#1613).
65- [subset] Update font extents in head table (#1612).
66- [subset] Make --retain-gids truncate empty glyphs after the last non-empty glyph
67  (#1611).
68- [requirements] Updated ``unicodedata2`` backport for Unicode 12.0.
69
703.41.2 (released 2019-05-13)
71----------------------------
72
73- [cffLib] Fixed issue when importing a ``CFF2`` variable font from XML, whereby
74  the VarStore state was not propagated to PrivateDict (#1598).
75- [varLib] Don't drop ``post`` glyph names when building CFF2 variable font (#1609).
76
77
783.41.1 (released 2019-05-13)
79----------------------------
80
81- [designspaceLib] Added ``loadSourceFonts`` method to load source fonts using
82  custom opener function (#1606).
83- [head] Round font bounding box coordinates to integers to fix compile error
84  if CFF font has float coordinates (#1604, #1605).
85- [feaLib] Don't write ``None`` in ``ast.ValueRecord.asFea()`` (#1599).
86- [subset] Fixed issue ``AssertionError`` when using ``--desubroutinize`` option
87  (#1590, #1594).
88- [graphite] Fixed bug in ``Silf`` table's ``decompile`` method unmasked by
89  previous typo fix (#1597). Decode languange code as UTF-8 in ``Sill`` table's
90  ``decompile`` method (#1600).
91
923.41.0 (released 2019-04-29)
93----------------------------
94
95- [varLib/cffLib] Added support for building ``CFF2`` variable font from sparse
96  masters, or masters with more than one model (multiple ``VarStore.VarData``).
97  In ``cffLib.specializer``, added support for ``CFF2`` CharStrings with
98  ``blend`` operators (#1547, #1591).
99- [subset] Fixed subsetting ``HVAR`` and ``VVAR`` with ``--retain-gids`` option,
100  and when advances mapping is null while sidebearings mappings are non-null
101  (#1587, #1588).
102- Added ``otlLib.maxContextCalc`` module to compute ``OS/2.usMaxContext`` value.
103  Calculate it automatically when compiling features with feaLib. Added option
104  ``--recalc-max-context`` to ``subset`` module (#1582).
105- [otBase/otTables] Fixed ``AttributeError`` on missing OT table fields after
106  importing font from TTX (#1584).
107- [graphite] Fixed typo ``Silf`` table's ``decompile`` method (#1586).
108- [otlLib] Better compress ``GPOS`` SinglePos (LookupType 1) subtables (#1539).
109
1103.40.0 (released 2019-04-08)
111----------------------------
112
113- [subset] Fixed error while subsetting ``VVAR`` with ``--retain-gids``
114  option (#1552).
115- [designspaceLib] Use up-to-date default location in ``findDefault`` method
116  (#1554).
117- [voltLib] Allow passing file-like object to Parser.
118- [arrayTools/glyf] ``calcIntBounds`` (used to compute bounding boxes of glyf
119  table's glyphs) now uses ``otRound`` instead of ``round3`` (#1566).
120- [svgLib] Added support for converting more SVG shapes to path ``d`` strings
121  (ellipse, line, polyline), as well as support for ``transform`` attributes.
122  Only ``matrix`` transformations are currently supported (#1564, #1564).
123- [varLib] Added support for building ``VVAR`` table from ``vmtx`` and ``VORG``
124  tables (#1551).
125- [fontBuilder] Enable making CFF2 fonts with ``post`` table format 2 (#1557).
126- Fixed ``DeprecationWarning`` on invalid escape sequences (#1562).
127
1283.39.0 (released 2019-03-19)
129----------------------------
130
131- [ttLib/glyf] Raise more specific error when encountering recursive
132  component references (#1545, #1546).
133- [Doc/designspaceLib] Defined new ``public.skipExportGlyphs`` lib key (#1534,
134  unified-font-object/ufo-spec#84).
135- [varLib] Use ``vmtx`` to compute vertical phantom points; or ``hhea.ascent``
136  and ``head.unitsPerEM`` if ``vmtx`` is missing (#1528).
137- [gvar/cvar] Sort XML element's min/value/max attributes in TupleVariation
138  toXML to improve readability of TTX dump (#1527).
139- [varLib.plot] Added support for 2D plots with only 1 variation axis (#1522).
140- [designspaceLib] Use axes maps when normalizing locations in
141  DesignSpaceDocument (#1226, #1521), and when finding default source (#1535).
142- [mutator] Set ``OVERLAP_SIMPLE`` and ``OVERLAP_COMPOUND`` glyf flags by
143  default in ``instantiateVariableFont``. Added ``--no-overlap`` cli option
144  to disable this (#1518).
145- [subset] Fixed subsetting ``VVAR`` table (#1516, #1517).
146  Fixed subsetting an ``HVAR`` table that has an ``AdvanceWidthMap`` when the
147  option ``--retain-gids`` is used.
148- [feaLib] Added ``forceChained`` in MultipleSubstStatement (#1511).
149  Fixed double indentation of ``subtable`` statement (#1512).
150  Added support for ``subtable`` statement in more places than just PairPos
151  lookups (#1520).
152  Handle lookupflag 0 and lookupflag without a value (#1540).
153- [varLib] In ``load_designspace``, provide a default English name for the
154  ``ital`` axis tag.
155- Remove pyftinspect because it is unmaintained and bitrotted.
156
1573.38.0 (released 2019-02-18)
158----------------------------
159
160- [cffLib] Fixed RecursionError when unpickling or deepcopying TTFont with
161  CFF table (#1488, 649dc49).
162- [subset] Fixed AttributeError when using --desubroutinize option (#1490).
163  Also, fixed desubroutinizing bug when subrs contain hints (#1499).
164- [CPAL] Make Color a subclass of namedtuple (173a0f5).
165- [feaLib] Allow hyphen in glyph class names.
166- [feaLib] Added 'tables' option to __main__.py (#1497).
167- [feaLib] Add support for special-case contextual positioning formatting
168  (#1501).
169- [svgLib] Support converting SVG basic shapes (rect, circle, etc.) into
170  equivalent SVG paths (#1500, #1508).
171- [Snippets] Added name-viewer.ipynb Jupyter notebook.
172
173
1743.37.3 (released 2019-02-05)
175----------------------------
176
177- The previous release accidentally changed several files from Unix to DOS
178  line-endings. Fix that.
179
1803.37.2 (released 2019-02-05)
181----------------------------
182
183- [varLib] Temporarily revert the fix to ``load_masters()``, which caused a
184  crash in ``interpolate_layout()`` when ``deepcopy``-ing OTFs.
185
1863.37.1 (released 2019-02-05)
187----------------------------
188
189- [varLib] ``load_masters()`` now actually assigns the fonts it loads to the
190  source.font attributes.
191- [varLib] Fixed an MVAR table generation crash when sparse masters were
192  involved.
193- [voltLib] ``parse_coverage_()`` returns a tuple instead of an ast.Enum.
194- [feaLib] A MarkClassDefinition inside a block is no longer doubly indented
195  compared to the rest of the block.
196
1973.37.0 (released 2019-01-28)
198----------------------------
199
200- [svgLib] Added support for converting elliptical arcs to cubic bezier curves
201  (#1464).
202- [py23] Added backport for ``math.isfinite``.
203- [varLib] Apply HIDDEN flag to fvar axis if designspace axis has attribute
204  ``hidden=1``.
205- Fixed "DeprecationWarning: invalid escape sequence" in Python 3.7.
206- [voltLib] Fixed parsing glyph groups. Distinguish different PROCESS_MARKS.
207  Accept COMPONENT glyph type.
208- [feaLib] Distinguish missing value and explicit ``<NULL>`` for PairPos2
209  format A (#1459). Round-trip ``useExtension`` keyword. Implemented
210  ``ValueRecord.asFea`` method.
211- [subset] Insert empty widths into hdmx when retaining gids (#1458).
212
2133.36.0 (released 2019-01-17)
214----------------------------
215
216- [ttx] Added ``--no-recalc-timestamp`` option to keep the original font's
217  ``head.modified`` timestamp (#1455, #46).
218- [ttx/psCharStrings] Fixed issues while dumping and round-tripping CFF2 table
219  with ttx (#1451, #1452, #1456).
220- [voltLib] Fixed check for duplicate anchors (#1450). Don't try to read past
221  the ``END`` operator in .vtp file (#1453).
222- [varLib] Use sentinel value -0x8000 (-32768) to ignore post.underlineThickness
223  and post.underlinePosition when generating MVAR deltas (#1449,
224  googlei18n/ufo2ft#308).
225- [subset] Added ``--retain-gids`` option to subset font without modifying the
226  current glyph indices (#1443, #1447).
227- [ufoLib] Replace deprecated calls to ``getbytes`` and ``setbytes`` with new
228  equivalent ``readbytes`` and ``writebytes`` calls. ``fs`` >= 2.2 no required.
229- [varLib] Allow loading masters from TTX files as well (#1441).
230
2313.35.2 (released 2019-01-14)
232----------------------------
233
234- [hmtx/vmtx]: Allow to compile/decompile ``hmtx`` and ``vmtx`` tables even
235  without the corresponding (required) metrics header tables, ``hhea`` and
236  ``vhea`` (#1439).
237- [varLib] Added support for localized axes' ``labelname`` and named instances'
238  ``stylename`` (#1438).
239
2403.35.1 (released 2019-01-09)
241----------------------------
242
243- [_m_a_x_p] Include ``maxComponentElements`` in ``maxp`` table's recalculation.
244
2453.35.0 (released 2019-01-07)
246----------------------------
247
248- [psCharStrings] In ``encodeFloat`` function, use float's "general format" with
249  8 digits of precision (i.e. ``%8g``) instead of ``str()``. This works around
250  a macOS rendering issue when real numbers in CFF table are too long, and
251  also makes sure that floats are encoded with the same precision in python 2.7
252  and 3.x (#1430, googlei18n/ufo2ft#306).
253- [_n_a_m_e/fontBuilder] Make ``_n_a_m_e_table.addMultilingualName`` also add
254  Macintosh (platformID=1) names by default. Added options to ``FontBuilder``
255  ``setupNameTable`` method to optionally disable Macintosh or Windows names.
256  (#1359, #1431).
257- [varLib] Make ``build`` optionally accept a ``DesignSpaceDocument`` object,
258  instead of a designspace file path. The caller can now set the ``font``
259  attribute of designspace's sources to a TTFont object, thus allowing to
260  skip filenames manipulation altogether (#1416, #1425).
261- [sfnt] Allow SFNTReader objects to be deep-copied.
262- Require typing>=3.6.4 on py27 to fix issue with singledispatch (#1423).
263- [designspaceLib/t1Lib/macRes] Fixed some cases where pathlib.Path objects were
264  not accepted (#1421).
265- [varLib] Fixed merging of multiple PairPosFormat2 subtables (#1411).
266- [varLib] The default STAT table version is now set to 1.1, to improve
267  compatibility with legacy applications (#1413).
268
2693.34.2 (released 2018-12-17)
270----------------------------
271
272- [merge] Fixed AssertionError when none of the script tables in GPOS/GSUB have
273  a DefaultLangSys record (#1408, 135a4a1).
274
2753.34.1 (released 2018-12-17)
276----------------------------
277
278- [varLib] Work around macOS rendering issue for composites without gvar entry (#1381).
279
2803.34.0 (released 2018-12-14)
281----------------------------
282
283- [varLib] Support generation of CFF2 variable fonts. ``model.reorderMasters()``
284  now supports arbitrary mapping. Fix handling of overlapping ranges for feature
285  variations (#1400).
286- [cffLib, subset] Code clean-up and fixing related to CFF2 support.
287- [ttLib.tables.ttProgram] Use raw strings for regex patterns (#1389).
288- [fontbuilder] Initial support for building CFF2 fonts. Set CFF's
289  ``FontMatrix`` automatically from unitsPerEm.
290- [plistLib] Accept the more general ``collections.Mapping`` instead of the
291  specific ``dict`` class to support custom data classes that should serialize
292  to dictionaries.
293
2943.33.0 (released 2018-11-30)
295----------------------------
296- [subset] subsetter bug fix with variable fonts.
297- [varLib.featureVar] Improve FeatureVariations generation with many rules.
298- [varLib] Enable sparse masters when building variable fonts:
299  https://github.com/fonttools/fonttools/pull/1368#issuecomment-437257368
300- [varLib.mutator] Add IDEF for GETVARIATION opcode, for handling hints in an
301  instance.
302- [ttLib] Ignore the length of kern table subtable format 0
303
3043.32.0 (released 2018-11-01)
305----------------------------
306
307- [ufoLib] Make ``UFOWriter`` a subclass of ``UFOReader``, and use mixins
308  for shared methods (#1344).
309- [featureVars] Fixed normalization error when a condition's minimum/maximum
310  attributes are missing in designspace ``<rule>`` (#1366).
311- [setup.py] Added ``[plot]`` to extras, to optionally install ``matplotlib``,
312  needed to use the ``fonTools.varLib.plot`` module.
313- [varLib] Take total bounding box into account when resolving model (7ee81c8).
314  If multiple axes have the same range ratio, cut across both (62003f4).
315- [subset] Don't error if ``STAT`` has no ``AxisValue`` tables.
316- [fontBuilder] Added a new submodule which contains a ``FontBuilder`` wrapper
317  class around ``TTFont`` that makes it easier to create a working TTF or OTF
318  font from scratch with code. NOTE: the API is still experimental and may
319  change in future versions.
320
3213.31.0 (released 2018-10-21)
322----------------------------
323
324- [ufoLib] Merged the `ufoLib <https://github.com/unified-font-objects/ufoLib>`__
325  master branch into a new ``fontTools.ufoLib`` package (#1335, #1095).
326  Moved ``ufoLib.pointPen`` module to ``fontTools.pens.pointPen``.
327  Moved ``ufoLib.etree`` module to ``fontTools.misc.etree``.
328  Moved ``ufoLib.plistlib`` module to ``fontTools.misc.plistlib``.
329  To use the new ``fontTools.ufoLib`` module you need to install fonttools
330  with the ``[ufo]`` extra, or you can manually install the required additional
331  dependencies (cf. README.rst).
332- [morx] Support AAT action type to insert glyphs and clean up compilation
333  of AAT action tables (4a1871f, 2011ccf).
334- [subset] The ``--no-hinting`` on a CFF font now also drops the optional
335  hinting keys in Private dict: ``ForceBold``, ``LanguageGroup``, and
336  ``ExpansionFactor`` (#1322).
337- [subset] Include nameIDs referenced by STAT table (#1327).
338- [loggingTools] Added ``msg=None`` argument to
339  ``CapturingLogHandler.assertRegex`` (0245f2c).
340- [varLib.mutator] Implemented ``FeatureVariations`` instantiation (#1244).
341- [g_l_y_f] Added PointPen support to ``_TTGlyph`` objects (#1334).
342
3433.30.0 (released 2018-09-18)
344----------------------------
345
346- [feaLib] Skip building noop class PairPos subtables when Coverage is NULL
347  (#1318).
348- [ttx] Expose the previously reserved bit flag ``OVERLAP_SIMPLE`` of
349  glyf table's contour points in the TTX dump. This is used in some
350  implementations to specify a non-zero fill with overlapping contours (#1316).
351- [ttLib] Added support for decompiling/compiling ``TS1C`` tables containing
352  VTT sources for ``cvar`` variation table (#1310).
353- [varLib] Use ``fontTools.designspaceLib`` to read DesignSpaceDocument. The
354  ``fontTools.varLib.designspace`` module is now deprecated and will be removed
355  in future versions. The presence of an explicit ``axes`` element is now
356  required in order to build a variable font (#1224, #1313).
357- [varLib] Implemented building GSUB FeatureVariations table from the ``rules``
358  element of DesignSpace document (#1240, #713, #1314).
359- [subset] Added ``--no-layout-closure`` option to not expand the subset with
360  the glyphs produced by OpenType layout features. Instead, OpenType features
361  will be subset to only rules that are relevant to the otherwise-specified
362  glyph set (#43, #1121).
363
3643.29.1 (released 2018-09-10)
365----------------------------
366
367- [feaLib] Fixed issue whereby lookups from DFLT/dflt were not included in the
368  DFLT/non-dflt language systems (#1307).
369- [graphite] Fixed issue on big-endian architectures (e.g. ppc64) (#1311).
370- [subset] Added ``--layout-scripts`` option to add/exclude set of OpenType
371  layout scripts that will be preserved. By default all scripts are retained
372  (``'*'``) (#1303).
373
3743.29.0 (released 2018-07-26)
375----------------------------
376
377- [feaLib] In the OTL table builder, when the ``name`` table is excluded
378  from the list of tables to be build, skip compiling ``featureNames`` blocks,
379  as the records referenced in ``FeatureParams`` table don't exist (68951b7).
380- [otBase] Try ``ExtensionLookup`` if other offset-overflow methods fail
381  (05f95f0).
382- [feaLib] Added support for explicit ``subtable;`` break statements in
383  PairPos lookups; previously these were ignored (#1279, #1300, #1302).
384- [cffLib.specializer] Make sure the stack depth does not exceed maxstack - 1,
385  so that a subroutinizer can insert subroutine calls (#1301,
386  https://github.com/googlei18n/ufo2ft/issues/266).
387- [otTables] Added support for fixing offset overflow errors occurring inside
388  ``MarkBasePos`` subtables (#1297).
389- [subset] Write the default output file extension based on ``--flavor`` option,
390  or the value of ``TTFont.sfntVersion`` (d7ac0ad).
391- [unicodedata] Updated Blocks, Scripts and ScriptExtensions for Unicode 11
392  (452c85e).
393- [xmlWriter] Added context manager to XMLWriter class to autoclose file
394  descriptor on exit (#1290).
395- [psCharStrings] Optimize the charstring's bytecode by encoding as integers
396  all float values that have no decimal portion (8d7774a).
397- [ttFont] Fixed missing import of ``TTLibError`` exception (#1285).
398- [feaLib] Allow any languages other than ``dflt`` under ``DFLT`` script
399  (#1278, #1292).
400
4013.28.0 (released 2018-06-19)
402----------------------------
403
404- [featureVars] Added experimental module to build ``FeatureVariations``
405  tables. Still needs to be hooked up to ``varLib.build`` (#1240).
406- [fixedTools] Added ``otRound`` to round floats to nearest integer towards
407  positive Infinity. This is now used where we deal with visual data like X/Y
408  coordinates, advance widths/heights, variation deltas, and similar (#1274,
409  #1248).
410- [subset] Improved GSUB closure memoize algorithm.
411- [varLib.models] Fixed regression in model resolution (180124, #1269).
412- [feaLib.ast] Fixed error when converting ``SubtableStatement`` to string
413  (#1275).
414- [varLib.mutator] Set ``OS/2.usWeightClass`` and ``usWidthClass``, and
415  ``post.italicAngle`` based on the 'wght', 'wdth' and 'slnt' axis values
416  (#1276, #1264).
417- [py23/loggingTools] Don't automatically set ``logging.lastResort`` handler
418  on py27. Moved ``LastResortLogger`` to the ``loggingTools`` module (#1277).
419
4203.27.1 (released 2018-06-11)
421----------------------------
422
423- [ttGlyphPen] Issue a warning and skip building non-existing components
424  (https://github.com/googlei18n/fontmake/issues/411).
425- [tests] Fixed issue running ttx_test.py from a tagged commit.
426
4273.27.0 (released 2018-06-11)
428----------------------------
429
430- [designspaceLib] Added new ``conditionSet`` element to ``rule`` element in
431  designspace document. Bumped ``format`` attribute to ``4.0`` (previously,
432  it was formatted as an integer). Removed ``checkDefault``, ``checkAxes``
433  methods, and any kind of guessing about the axes when the ``<axes>`` element
434  is missing. The default master is expected at the intersection of all default
435  values for each axis (#1254, #1255, #1267).
436- [cffLib] Fixed issues when compiling CFF2 or converting from CFF when the
437  font has an FDArray (#1211, #1271).
438- [varLib] Avoid attempting to build ``cvar`` table when ``glyf`` table is not
439  present, as is the case for CFF2 fonts.
440- [subset] Handle None coverages in MarkGlyphSets; revert commit 02616ab that
441  sets empty Coverage tables in MarkGlyphSets to None, to make OTS happy.
442- [ttFont] Allow to build glyph order from ``maxp.numGlyphs`` when ``post`` or
443  ``cmap`` are missing.
444- [ttFont] Added ``__len__`` method to ``_TTGlyphSet``.
445- [glyf] Ensure ``GlyphCoordinates`` never overflow signed shorts (#1230).
446- [py23] Added alias for ``itertools.izip`` shadowing the built-in ``zip``.
447- [loggingTools] Memoize ``log`` property of ``LogMixin`` class (fbab12).
448- [ttx] Impoved test coverage (#1261).
449- [Snippets] Addded script to append a suffix to all family names in a font.
450- [varLib.plot] Make it work with matplotlib >= 2.1 (b38e2b).
451
4523.26.0 (released 2018-05-03)
453----------------------------
454
455- [designspace] Added a new optional ``layer`` attribute to the source element,
456  and a corresponding ``layerName`` attribute to the ``SourceDescriptor``
457  object (#1253).
458  Added ``conditionset`` element to the ``rule`` element to the spec, but not
459  implemented in designspace reader/writer yet (#1254).
460- [varLib.models] Refine modeling one last time (0ecf5c5).
461- [otBase] Fixed sharing of tables referred to by different offset sizes
462  (795f2f9).
463- [subset] Don't drop a GDEF that only has VarStore (fc819d6). Set to None
464  empty Coverage tables in MarkGlyphSets (02616ab).
465- [varLib]: Added ``--master-finder`` command-line option (#1249).
466- [varLib.mutator] Prune fvar nameIDs from instance's name table (#1245).
467- [otTables] Allow decompiling bad ClassDef tables with invalid format, with
468  warning (#1236).
469- [varLib] Make STAT v1.2 and reuse nameIDs from fvar table (#1242).
470- [varLib.plot] Show master locations. Set axis limits to -1, +1.
471- [subset] Handle HVAR direct mapping. Passthrough 'cvar'.
472  Added ``--font-number`` command-line option for collections.
473- [t1Lib] Allow a text encoding to be specified when parsing a Type 1 font
474  (#1234). Added ``kind`` argument to T1Font constructor (c5c161c).
475- [ttLib] Added context manager API to ``TTFont`` class, so it can be used in
476  ``with`` statements to auto-close the file when exiting the context (#1232).
477
4783.25.0 (released 2018-04-03)
479----------------------------
480
481- [varLib] Improved support-resolution algorithm. Previously, the on-axis
482  masters would always cut the space. They don't anymore. That's more
483  consistent, and fixes the main issue Erik showed at TYPO Labs 2017.
484  Any varfont built that had an unusual master configuration will change
485  when rebuilt (42bef17, a523a697,
486  https://github.com/googlei18n/fontmake/issues/264).
487- [varLib.models] Added a ``main()`` entry point, that takes positions and
488  prints model results.
489- [varLib.plot] Added new module to plot a designspace's
490  VariationModel. Requires ``matplotlib``.
491- [varLib.mutator] Added -o option to specify output file path (2ef60fa).
492- [otTables] Fixed IndexError while pruning of HVAR pre-write (6b6c34a).
493- [varLib.models] Convert delta array to floats if values overflows signed
494  short integer (0055f94).
495
4963.24.2 (released 2018-03-26)
497----------------------------
498
499- [otBase] Don't fail during ``ValueRecord`` copy if src has more items.
500  We drop hinting in the subsetter by simply changing ValueFormat, without
501  cleaning up the actual ValueRecords. This was causing assertion error if
502  a variable font was subsetted without hinting and then passed directly to
503  the mutator for instantiation without first it saving to disk.
504
5053.24.1 (released 2018-03-06)
506----------------------------
507
508- [varLib] Don't remap the same ``DeviceTable`` twice in VarStore optimizer
509  (#1206).
510- [varLib] Add ``--disable-iup`` option to ``fonttools varLib`` script,
511  and a ``optimize=True`` keyword argument to ``varLib.build`` function,
512  to optionally disable IUP optimization while building varfonts.
513- [ttCollection] Fixed issue while decompiling ttc with python3 (#1207).
514
5153.24.0 (released 2018-03-01)
516----------------------------
517
518- [ttGlyphPen] Decompose composite glyphs if any components' transform is too
519  large to fit a ``F2Dot14`` value, or clamp transform values that are
520  (almost) equal to +2.0 to make them fit and avoid decomposing (#1200,
521  #1204, #1205).
522- [ttx] Added new ``-g`` option to dump glyphs from the ``glyf`` table
523  splitted as individual ttx files (#153, #1035, #1132, #1202).
524- Copied ``ufoLib.filenames`` module to ``fontTools.misc.filenames``, used
525  for the ttx split-glyphs option (#1202).
526- [feaLib] Added support for ``cvParameters`` blocks in Character Variant
527  feautures ``cv01-cv99`` (#860, #1169).
528- [Snippets] Added ``checksum.py`` script to generate/check SHA1 hash of
529  ttx files (#1197).
530- [varLib.mutator] Fixed issue while instantiating some variable fonts
531  whereby the horizontal advance width computed from ``gvar`` phantom points
532  could turn up to be negative (#1198).
533- [varLib/subset] Fixed issue with subsetting GPOS variation data not
534  picking up ``ValueRecord`` ``Device`` objects (54fd71f).
535- [feaLib/voltLib] In all AST elements, the ``location`` is no longer a
536  required positional argument, but an optional kewyord argument (defaults
537  to ``None``). This will make it easier to construct feature AST from
538  code (#1201).
539
540
5413.23.0 (released 2018-02-26)
542----------------------------
543
544- [designspaceLib] Added an optional ``lib`` element to the designspace as a
545  whole, as well as to the instance elements, to store arbitrary data in a
546  property list dictionary, similar to the UFO's ``lib``. Added an optional
547  ``font`` attribute to the ``SourceDescriptor``, to allow operating on
548  in-memory font objects (#1175).
549- [cffLib] Fixed issue with lazy-loading of attributes when attempting to
550  set the CFF TopDict.Encoding (#1177, #1187).
551- [ttx] Fixed regression introduced in 3.22.0 that affected the split tables
552  ``-s`` option (#1188).
553- [feaLib] Added ``IncludedFeaNotFound`` custom exception subclass, raised
554  when an included feature file cannot be found (#1186).
555- [otTables] Changed ``VarIdxMap`` to use glyph names internally instead of
556  glyph indexes. The old ttx dumps of HVAR/VVAR tables that contain indexes
557  can still be imported (21cbab8, 38a0ffb).
558- [varLib] Implemented VarStore optimizer (#1184).
559- [subset] Implemented pruning of GDEF VarStore, HVAR and MVAR (#1179).
560- [sfnt] Restore backward compatiblity with ``numFonts`` attribute of
561  ``SFNTReader`` object (#1181).
562- [merge] Initial support for merging ``LangSysRecords`` (#1180).
563- [ttCollection] don't seek(0) when writing to possibly unseekable strems.
564- [subset] Keep all ``--name-IDs`` from 0 to 6 by default (#1170, #605, #114).
565- [cffLib] Added ``width`` module to calculate optimal CFF default and
566  nominal glyph widths.
567- [varLib] Don’t fail if STAT already in the master fonts (#1166).
568
5693.22.0 (released 2018-02-04)
570----------------------------
571
572- [subset] Support subsetting ``endchar`` acting as ``seac``-like components
573  in ``CFF`` (fixes #1162).
574- [feaLib] Allow to build from pre-parsed ``ast.FeatureFile`` object.
575  Added ``tables`` argument to only build some tables instead of all (#1159,
576  #1163).
577- [textTools] Replaced ``safeEval`` with ``ast.literal_eval`` (#1139).
578- [feaLib] Added option to the parser to not resolve ``include`` statements
579  (#1154).
580- [ttLib] Added new ``ttCollection`` module to read/write TrueType and
581  OpenType Collections. Exports a ``TTCollection`` class with a ``fonts``
582  attribute containing a list of ``TTFont`` instances, the methods ``save``
583  and ``saveXML``, plus some list-like methods. The ``importXML`` method is
584  not implemented yet (#17).
585- [unicodeadata] Added ``ot_tag_to_script`` function that converts from
586  OpenType script tag to Unicode script code.
587- Added new ``designspaceLib`` subpackage, originally from Erik Van Blokland's
588  ``designSpaceDocument``: https://github.com/LettError/designSpaceDocument
589  NOTE: this is not yet used internally by varLib, and the API may be subject
590  to changes (#911, #1110, LettError/designSpaceDocument#28).
591- Added new FontTools icon images (8ee7c32).
592- [unicodedata] Added ``script_horizontal_direction`` function that returns
593  either "LTR" or "RTL" given a unicode script code.
594- [otConverters] Don't write descriptive name string as XML comment if the
595  NameID value is 0 (== NULL) (#1151, #1152).
596- [unicodedata] Add ``ot_tags_from_script`` function to get the list of
597  OpenType script tags associated with unicode script code (#1150).
598- [feaLib] Don't error when "enumerated" kern pairs conflict with preceding
599  single pairs; emit warning and chose the first value (#1147, #1148).
600- [loggingTools] In ``CapturingLogHandler.assertRegex`` method, match the
601  fully formatted log message.
602- [sbix] Fixed TypeError when concatenating str and bytes (#1154).
603- [bezierTools] Implemented cusp support and removed ``approximate_fallback``
604  arg in ``calcQuadraticArcLength``. Added ``calcCubicArcLength`` (#1142).
605
6063.21.2 (released 2018-01-08)
607----------------------------
608
609- [varLib] Fixed merging PairPos Format1/2 with missing subtables (#1125).
610
6113.21.1 (released 2018-01-03)
612----------------------------
613
614- [feaLib] Allow mixed single/multiple substitutions (#612)
615- Added missing ``*.afm`` test assets to MAINFEST.in (#1137).
616- Fixed dumping ``SVG`` tables containing color palettes (#1124).
617
6183.21.0 (released 2017-12-18)
619----------------------------
620
621- [cmap] when compiling format6 subtable, don't assume gid0 is always called
622  '.notdef' (1e42224).
623- [ot] Allow decompiling fonts with bad Coverage format number (1aafae8).
624- Change FontTools licence to MIT (#1127).
625- [post] Prune extra names already in standard Mac set (df1e8c7).
626- [subset] Delete empty SubrsIndex after subsetting (#994, #1118).
627- [varLib] Don't share points in cvar by default, as it currently fails on
628  some browsers (#1113).
629- [afmLib] Make poor old afmLib work on python3.
630
6313.20.1 (released 2017-11-22)
632----------------------------
633
634- [unicodedata] Fixed issue with ``script`` and ``script_extension`` functions
635  returning inconsistent short vs long names. They both return the short four-
636  letter script codes now. Added ``script_name`` and ``script_code`` functions
637  to look up the long human-readable script name from the script code, and
638  viceversa (#1109, #1111).
639
6403.20.0 (released 2017-11-21)
641----------------------------
642
643- [unicodedata] Addded new module ``fontTools.unicodedata`` which exports the
644  same interface as the built-in ``unicodedata`` module, with the addition of
645  a few functions that are missing from the latter, such as ``script``,
646  ``script_extension`` and ``block``. Added a ``MetaTools/buildUCD.py`` script
647  to download and parse data files from the Unicode Character Database and
648  generate python modules containing lists of ranges and property values.
649- [feaLib] Added ``__str__`` method to all ``ast`` elements (delegates to the
650  ``asFea`` method).
651- [feaLib] ``Parser`` constructor now accepts a ``glyphNames`` iterable
652  instead of ``glyphMap`` dict. The latter still works but with a pending
653  deprecation warning (#1104).
654- [bezierTools] Added arc length calculation functions originally from
655  ``pens.perimeterPen`` module (#1101).
656- [varLib] Started generating STAT table (8af4309). Right now it just reflects
657  the axes, and even that with certain limitations:
658  * AxisOrdering is set to the order axes are defined,
659  * Name-table entries are not shared with fvar.
660- [py23] Added backports for ``redirect_stdout`` and ``redirect_stderr``
661  context managers (#1097).
662- [Graphite] Fixed some round-trip bugs (#1093).
663
6643.19.0 (released 2017-11-06)
665----------------------------
666
667- [varLib] Try set of used points instead of all points when testing whether to
668  share points between tuples (#1090).
669- [CFF2] Fixed issue with reading/writing PrivateDict BlueValues to TTX file.
670  Read the commit message 8b02b5a and issue #1030 for more details.
671  NOTE: this change invalidates all the TTX files containing CFF2 tables
672  that where dumped with previous verisons of fonttools.
673  CFF2 Subr items can have values on the stack after the last operator, thus
674  a ``CFF2Subr`` class was added to accommodate this (#1091).
675- [_k_e_r_n] Fixed compilation of AAT kern version=1.0 tables (#1089, #1094)
676- [ttLib] Added getBestCmap() convenience method to TTFont class and cmap table
677  class that returns a preferred Unicode cmap subtable given a list of options
678  (#1092).
679- [morx] Emit more meaningful subtable flags. Implement InsertionMorphAction
680
6813.18.0 (released 2017-10-30)
682----------------------------
683
684- [feaLib] Fixed writing back nested glyph classes (#1086).
685- [TupleVariation] Reactivated shared points logic, bugfixes (#1009).
686- [AAT] Implemented ``morx`` ligature subtables (#1082).
687- [reverseContourPen] Keep duplicate lineTo following a moveTo (#1080,
688  https://github.com/googlei18n/cu2qu/issues/51).
689- [varLib.mutator] Suport instantiation of GPOS, GDEF and MVAR (#1079).
690- [sstruct] Fixed issue with ``unicode_literals`` and ``struct`` module in
691  old versions of python 2.7 (#993).
692
6933.17.0 (released 2017-10-16)
694----------------------------
695
696- [svgPathPen] Added an ``SVGPathPen`` that translates segment pen commands
697  into SVG path descriptions. Copied from Tal Leming's ``ufo2svg.svgPathPen``
698  https://github.com/typesupply/ufo2svg/blob/d69f992/Lib/ufo2svg/svgPathPen.py
699- [reverseContourPen] Added ``ReverseContourPen``, a filter pen that draws
700  contours with the winding direction reversed, while keeping the starting
701  point (#1071).
702- [filterPen] Added ``ContourFilterPen`` to manipulate contours as a whole
703  rather than segment by segment.
704- [arrayTools] Added ``Vector`` class to apply math operations on an array
705  of numbers, and ``pairwise`` function to loop over pairs of items in an
706  iterable.
707- [varLib] Added support for building and interpolation of ``cvar`` table
708  (f874cf6, a25a401).
709
7103.16.0 (released 2017-10-03)
711----------------------------
712
713- [head] Try using ``SOURCE_DATE_EPOCH`` environment variable when setting
714  the ``head`` modified timestamp to ensure reproducible builds (#1063).
715  See https://reproducible-builds.org/specs/source-date-epoch/
716- [VTT] Decode VTT's ``TSI*`` tables text as UTF-8 (#1060).
717- Added support for Graphite font tables: Feat, Glat, Gloc, Silf and Sill.
718  Thanks @mhosken! (#1054).
719- [varLib] Default to using axis "name" attribute if "labelname" element
720  is missing (588f524).
721- [merge] Added support for merging Script records. Remove unused features
722  and lookups after merge (d802580, 556508b).
723- Added ``fontTools.svgLib`` package. Includes a parser for SVG Paths that
724  supports the Pen protocol (#1051). Also, added a snippet to convert SVG
725  outlines to UFO GLIF (#1053).
726- [AAT] Added support for ``ankr``, ``bsln``, ``mort``, ``morx``, ``gcid``,
727  and ``cidg``.
728- [subset] Implemented subsetting of ``prop``, ``opbd``, ``bsln``, ``lcar``.
729
7303.15.1 (released 2017-08-18)
731----------------------------
732
733- [otConverters] Implemented ``__add__`` and ``__radd__`` methods on
734  ``otConverters._LazyList`` that decompile a lazy list before adding
735  it to another list or ``_LazyList`` instance. Fixes an ``AttributeError``
736  in the ``subset`` module when attempting to sum ``_LazyList`` objects
737  (6ef48bd2, 1aef1683).
738- [AAT] Support the `opbd` table with optical bounds (a47f6588).
739- [AAT] Support `prop` table with glyph properties (d05617b4).
740
741
7423.15.0 (released 2017-08-17)
743----------------------------
744
745- [AAT] Added support for AAT lookups. The ``lcar`` table can be decompiled
746  and recompiled; futher work needed to handle ``morx`` table (#1025).
747- [subset] Keep (empty) DefaultLangSys for Script 'DFLT' (6eb807b5).
748- [subset] Support GSUB/GPOS.FeatureVariations (fe01d87b).
749- [varLib] In ``models.supportScalars``, ignore an axis when its peak value
750  is 0 (fixes #1020).
751- [varLib] Add default mappings to all axes in avar to fix rendering issue
752  in some rasterizers (19c4b377, 04eacf13).
753- [varLib] Flatten multiple tail PairPosFormat2 subtables before merging
754  (c55ef525).
755- [ttLib] Added support for recalculating font bounding box in ``CFF`` and
756  ``head`` tables, and min/max values in ``hhea`` and ``vhea`` tables (#970).
757
7583.14.0 (released 2017-07-31)
759----------------------------
760
761- [varLib.merger] Remove Extensions subtables before merging (f7c20cf8).
762- [varLib] Initialize the avar segment map with required default entries
763  (#1014).
764- [varLib] Implemented optimal IUP optmiziation (#1019).
765- [otData] Add ``AxisValueFormat4`` for STAT table v1.2 from OT v1.8.2
766  (#1015).
767- [name] Fixed BCP46 language tag for Mac langID=9: 'si' -> 'sl'.
768- [subset] Return value from ``_DehintingT2Decompiler.op_hintmask``
769  (c0d672ba).
770- [cffLib] Allow to get TopDict by index as well as by name (dca96c9c).
771- [cffLib] Removed global ``isCFF2`` state; use one set of classes for
772  both CFF and CFF2, maintaining backward compatibility existing code (#1007).
773- [cffLib] Deprecated maxstack operator, per OpenType spec update 1.8.1.
774- [cffLib] Added missing default (-100) for UnderlinePosition (#983).
775- [feaLib] Enable setting nameIDs greater than 255 (#1003).
776- [varLib] Recalculate ValueFormat when merging SinglePos (#996).
777- [varLib] Do not emit MVAR if there are no entries in the variation store
778  (#987).
779- [ttx] For ``-x`` option, pad with space if table tag length is < 4.
780
7813.13.1 (released 2017-05-30)
782----------------------------
783
784- [feaLib.builder] Removed duplicate lookups optimization. The original
785  lookup order and semantics of the feature file are preserved (#976).
786
7873.13.0 (released 2017-05-24)
788----------------------------
789
790- [varLib.mutator] Implement IUP optimization (#969).
791- [_g_l_y_f.GlyphCoordinates] Changed ``__bool__()`` semantics to match those
792  of other iterables (e46f949). Removed ``__abs__()`` (3db5be2).
793- [varLib.interpolate_layout] Added ``mapped`` keyword argument to
794  ``interpolate_layout`` to allow disabling avar mapping: if False (default),
795  the location is mapped using the map element of the axes in designspace file;
796  if True, it is assumed that location is in designspace's internal space and
797  no mapping is performed (#950, #975).
798- [varLib.interpolate_layout] Import designspace-loading logic from varLib.
799- [varLib] Fixed bug with recombining PairPosClass2 subtables (81498e5, #914).
800- [cffLib.specializer] When copying iterables, cast to list (462b7f86).
801
8023.12.1 (released 2017-05-18)
803----------------------------
804
805- [pens.t2CharStringPen] Fixed AttributeError when calling addComponent in
806  T2CharStringPen (#965).
807
8083.12.0 (released 2017-05-17)
809----------------------------
810
811- [cffLib.specializer] Added new ``specializer`` module to optimize CFF
812  charstrings, used by the T2CharStringPen (#948).
813- [varLib.mutator] Sort glyphs by component depth before calculating composite
814  glyphs' bounding boxes to ensure deltas are correctly caclulated (#945).
815- [_g_l_y_f] Fixed loss of precision in GlyphCoordinates by using 'd' (double)
816  instead of 'f' (float) as ``array.array`` typecode (#963, #964).
817
8183.11.0 (released 2017-05-03)
819----------------------------
820
821- [t2CharStringPen] Initial support for specialized Type2 path operators:
822  vmoveto, hmoveto, vlineto, hlineto, vvcurveto, hhcurveto, vhcurveto and
823  hvcurveto. This should produce more compact charstrings (#940, #403).
824- [Doc] Added Sphinx sources for the documentation. Thanks @gferreira (#935).
825- [fvar] Expose flags in XML (#932)
826- [name] Add helper function for building multi-lingual names (#921)
827- [varLib] Fixed kern merging when a PairPosFormat2 has ClassDef1 with glyphs
828  that are NOT present in the Coverage (1b5e1c4, #939).
829- [varLib] Fixed non-deterministic ClassDef order with PY3 (f056c12, #927).
830- [feLib] Throw an error when the same glyph is defined in multiple mark
831  classes within the same lookup (3e3ff00, #453).
832
8333.10.0 (released 2017-04-14)
834----------------------------
835
836- [varLib] Added support for building ``avar`` table, using the designspace
837  ``<map>`` elements.
838- [varLib] Removed unused ``build(..., axisMap)`` argument. Axis map should
839  be specified in designspace file now. We do not accept nonstandard axes
840  if ``<axes>`` element is not present.
841- [varLib] Removed "custom" axis from the ``standard_axis_map``. This was
842  added before when glyphsLib was always exporting the (unused) custom axis.
843- [varLib] Added partial support for building ``MVAR`` table; does not
844  implement ``gasp`` table variations yet.
845- [pens] Added FilterPen base class, for pens that control another pen;
846  factored out ``addComponent`` method from BasePen into a separate abstract
847  DecomposingPen class; added DecomposingRecordingPen, which records
848  components decomposed as regular contours.
849- [TSI1] Fixed computation of the textLength of VTT private tables (#913).
850- [loggingTools] Added ``LogMixin`` class providing a ``log`` property to
851  subclasses, which returns a ``logging.Logger`` named after the latter.
852- [loggingTools] Added ``assertRegex`` method to ``CapturingLogHandler``.
853- [py23] Added backport for python 3's ``types.SimpleNamespace`` class.
854- [EBLC] Fixed issue with python 3 ``zip`` iterator.
855
8563.9.2 (released 2017-04-08)
857---------------------------
858
859- [pens] Added pen to draw glyphs using WxPython ``GraphicsPath`` class:
860  https://wxpython.org/docs/api/wx.GraphicsPath-class.html
861- [varLib.merger] Fixed issue with recombining multiple PairPosFormat2
862  subtables (#888)
863- [varLib] Do not encode gvar deltas that are all zeroes, or if all values
864  are smaller than tolerance.
865- [ttLib] _TTGlyphSet glyphs now also have ``height`` and ``tsb`` (top
866  side bearing) attributes from the ``vmtx`` table, if present.
867- [glyf] In ``GlyphCoordintes`` class, added ``__bool__`` / ``__nonzero__``
868  methods, and ``array`` property to get raw array.
869- [ttx] Support reading TTX files with BOM (#896)
870- [CFF2] Fixed the reporting of the number of regions in the font.
871
8723.9.1 (released 2017-03-20)
873---------------------------
874
875- [varLib.merger] Fixed issue while recombining multiple PairPosFormat2
876  subtables if they were split because of offset overflows (9798c30).
877- [varLib.merger] Only merge multiple PairPosFormat1 subtables if there is
878  at least one of the fonts with a non-empty Format1 subtable (0f5a46b).
879- [varLib.merger] Fixed IndexError with empty ClassDef1 in PairPosFormat2
880  (aad0d46).
881- [varLib.merger] Avoid reusing Class2Record (mutable) objects (e6125b3).
882- [varLib.merger] Calculate ClassDef1 and ClassDef2's Format when merging
883  PairPosFormat2 (23511fd).
884- [macUtils] Added missing ttLib import (b05f203).
885
8863.9.0 (released 2017-03-13)
887---------------------------
888
889- [feaLib] Added (partial) support for parsing feature file comments ``# ...``
890  appearing in between statements (#879).
891- [feaLib] Cleaned up syntax tree for FeatureNames.
892- [ttLib] Added support for reading/writing ``CFF2`` table (thanks to
893  @readroberts at Adobe), and ``TTFA`` (ttfautohint) table.
894- [varLib] Fixed regression introduced with 3.8.0 in the calculation of
895  ``NumShorts``, i.e. the number of deltas in ItemVariationData's delta sets
896  that use a 16-bit representation (b2825ff).
897
8983.8.0 (released 2017-03-05)
899---------------------------
900
901- New pens: MomentsPen, StatisticsPen, RecordingPen, and TeePen.
902- [misc] Added new ``fontTools.misc.symfont`` module, for symbolic font
903  statistical analysis; requires ``sympy`` (http://www.sympy.org/en/index.html)
904- [varLib] Added experimental ``fontTools.varLib.interpolatable`` module for
905  finding wrong contour order between different masters
906- [varLib] designspace.load() now returns a dictionary, instead of a tuple,
907  and supports <axes> element (#864); the 'masters' item was renamed 'sources',
908  like the <sources> element in the designspace document
909- [ttLib] Fixed issue with recalculating ``head`` modified timestamp when
910  saving CFF fonts
911- [ttLib] In TupleVariation, round deltas before compiling (#861, fixed #592)
912- [feaLib] Ignore duplicate glyphs in classes used as MarkFilteringSet and
913  MarkAttachmentType (#863)
914- [merge] Changed the ``gasp`` table merge logic so that only the one from
915  the first font is retained, similar to other hinting tables (#862)
916- [Tests] Added tests for the ``varLib`` package, as well as test fonts
917  from the "Annotated OpenType Specification" (AOTS) to exercise ``ttLib``'s
918  table readers/writers (<https://github.com/adobe-type-tools/aots>)
919
9203.7.2 (released 2017-02-17)
921---------------------------
922
923- [subset] Keep advance widths when stripping ".notdef" glyph outline in
924  CID-keyed CFF fonts (#845)
925- [feaLib] Zero values now produce the same results as makeotf (#633, #848)
926- [feaLib] More compact encoding for “Contextual positioning with in-line
927  single positioning rules” (#514)
928
9293.7.1 (released 2017-02-15)
930---------------------------
931
932- [subset] Fixed issue with ``--no-hinting`` option whereby advance widths in
933  Type 2 charstrings were also being stripped (#709, #343)
934- [feaLib] include statements now resolve relative paths like makeotf (#838)
935- [feaLib] table ``name`` now handles Unicode codepoints beyond the Basic
936  Multilingual Plane, also supports old-style MacOS platform encodings (#842)
937- [feaLib] correctly escape string literals when emitting feature syntax (#780)
938
9393.7.0 (released 2017-02-11)
940---------------------------
941
942- [ttx, mtiLib] Preserve ordering of glyph alternates in GSUB type 3 (#833).
943- [feaLib] Glyph names can have dashes, as per new AFDKO syntax v1.20 (#559).
944- [feaLib] feaLib.Parser now needs the font's glyph map for parsing.
945- [varLib] Fix regression where GPOS values were stored as 0.
946- [varLib] Allow merging of class-based kerning when ClassDefs are different
947
9483.6.3 (released 2017-02-06)
949---------------------------
950
951- [varLib] Fix building variation of PairPosFormat2 (b5c34ce).
952- Populate defaults even for otTables that have postRead (e45297b).
953- Fix compiling of MultipleSubstFormat1 with zero 'out' glyphs (b887860).
954
9553.6.2 (released 2017-01-30)
956---------------------------
957
958- [varLib.merger] Fixed "TypeError: reduce() of empty sequence with no
959  initial value" (3717dc6).
960
9613.6.1 (released 2017-01-28)
962---------------------------
963
964-  [py23] Fixed unhandled exception occurring at interpreter shutdown in
965   the "last resort" logging handler (972b3e6).
966-  [agl] Ensure all glyph names are of native 'str' type; avoid mixing
967   'str' and 'unicode' in TTFont.glyphOrder (d8c4058).
968-  Fixed inconsistent title levels in README.rst that caused PyPI to
969   incorrectly render the reStructuredText page.
970
9713.6.0 (released 2017-01-26)
972---------------------------
973
974-  [varLib] Refactored and improved the variation-font-building process.
975-  Assembly code in the fpgm, prep, and glyf tables is now indented in
976   XML output for improved readability. The ``instruction`` element is
977   written as a simple tag if empty (#819).
978-  [ttx] Fixed 'I/O operation on closed file' error when dumping
979   multiple TTXs to standard output with the '-o -' option.
980-  The unit test modules (``*_test.py``) have been moved outside of the
981   fontTools package to the Tests folder, thus they are no longer
982   installed (#811).
983
9843.5.0 (released 2017-01-14)
985---------------------------
986
987-  Font tables read from XML can now be written back to XML with no
988   loss.
989-  GSUB/GPOS LookupType is written out in XML as an element, not
990   comment. (#792)
991-  When parsing cmap table, do not store items mapped to glyph id 0.
992   (#790)
993-  [otlLib] Make ClassDef sorting deterministic. Fixes #766 (7d1ddb2)
994-  [mtiLib] Added unit tests (#787)
995-  [cvar] Implemented cvar table
996-  [gvar] Renamed GlyphVariation to TupleVariation to match OpenType
997   terminology.
998-  [otTables] Handle gracefully empty VarData.Item array when compiling
999   XML. (#797)
1000-  [varLib] Re-enabled generation of ``HVAR`` table for fonts with
1001   TrueType outlines; removed ``--build-HVAR`` command-line option.
1002-  [feaLib] The parser can now be extended to support non-standard
1003   statements in FEA code by using a customized Abstract Syntax Tree.
1004   See, for example, ``feaLib.builder_test.test_extensions`` and
1005   baseClass.feax (#794, fixes #773).
1006-  [feaLib] Added ``feaLib`` command to the 'fonttools' command-line
1007   tool; applies a feature file to a font. ``fonttools feaLib -h`` for
1008   help.
1009-  [pens] The ``T2CharStringPen`` now takes an optional
1010   ``roundTolerance`` argument to control the rounding of coordinates
1011   (#804, fixes #769).
1012-  [ci] Measure test coverage on all supported python versions and OSes,
1013   combine coverage data and upload to
1014   https://codecov.io/gh/fonttools/fonttools (#786)
1015-  [ci] Configured Travis and Appveyor for running tests on Python 3.6
1016   (#785, 55c03bc)
1017-  The manual pages installation directory can be customized through
1018   ``FONTTOOLS_MANPATH`` environment variable (#799, fixes #84).
1019-  [Snippets] Added otf2ttf.py, for converting fonts from CFF to
1020   TrueType using the googlei18n/cu2qu module (#802)
1021
10223.4.0 (released 2016-12-21)
1023---------------------------
1024
1025-  [feaLib] Added support for generating FEA text from abstract syntax
1026   tree (AST) objects (#776). Thanks @mhosken
1027-  Added ``agl.toUnicode`` function to convert AGL-compliant glyph names
1028   to Unicode strings (#774)
1029-  Implemented MVAR table (b4d5381)
1030
10313.3.1 (released 2016-12-15)
1032---------------------------
1033
1034-  [setup] We no longer use versioneer.py to compute fonttools version
1035   from git metadata, as this has caused issues for some users (#767).
1036   Now we bump the version strings manually with a custom ``release``
1037   command of setup.py script.
1038
10393.3.0 (released 2016-12-06)
1040---------------------------
1041
1042-  [ttLib] Implemented STAT table from OpenType 1.8 (#758)
1043-  [cffLib] Fixed decompilation of CFF fonts containing non-standard
1044   key/value pairs in FontDict (issue #740; PR #744)
1045-  [py23] minor: in ``round3`` function, allow the second argument to be
1046   ``None`` (#757)
1047-  The standalone ``sstruct`` and ``xmlWriter`` modules, deprecated
1048   since vesion 3.2.0, have been removed. They can be imported from the
1049   ``fontTools.misc`` package.
1050
10513.2.3 (released 2016-12-02)
1052---------------------------
1053
1054-  [py23] optimized performance of round3 function; added backport for
1055   py35 math.isclose() (9d8dacb)
1056-  [subset] fixed issue with 'narrow' (UCS-2) Python 2 builds and
1057   ``--text``/``--text-file`` options containing non-BMP chararcters
1058   (16d0e5e)
1059-  [varLib] fixed issuewhen normalizing location values (8fa2ee1, #749)
1060-  [inspect] Made it compatible with both python2 and python3 (167ee60,
1061   #748). Thanks @pnemade
1062
10633.2.2 (released 2016-11-24)
1064---------------------------
1065
1066-  [varLib] Do not emit null axes in fvar (1bebcec). Thanks @robmck-ms
1067-  [varLib] Handle fonts without GPOS (7915a45)
1068-  [merge] Ignore LangSys if None (a11bc56)
1069-  [subset] Fix subsetting MathVariants (78d3cbe)
1070-  [OS/2] Fix "Private Use (plane 15)" range (08a0d55). Thanks @mashabow
1071
10723.2.1 (released 2016-11-03)
1073---------------------------
1074
1075-  [OS/2] fix checking ``fsSelection`` bits matching ``head.macStyle``
1076   bits
1077-  [varLib] added ``--build-HVAR`` option to generate ``HVAR`` table for
1078   fonts with TrueType outlines. For ``CFF2``, it is enabled by default.
1079
10803.2.0 (released 2016-11-02)
1081---------------------------
1082
1083-  [varLib] Improve support for OpenType 1.8 Variable Fonts:
1084-  Implement GDEF's VariationStore
1085-  Implement HVAR/VVAR tables
1086-  Partial support for loading MutatorMath .designspace files with
1087   varLib.designspace module
1088-  Add varLib.models with Variation fonts interpolation models
1089-  Implement GSUB/GPOS FeatureVariations
1090-  Initial support for interpolating and merging OpenType Layout tables
1091   (see ``varLib.interpolate_layout`` and ``varLib.merger`` modules)
1092-  [API change] Change version to be an integer instead of a float in
1093   XML output for GSUB, GPOS, GDEF, MATH, BASE, JSTF, HVAR, VVAR, feat,
1094   hhea and vhea tables. Scripts that set the Version for those to 1.0
1095   or other float values also need fixing. A warning is emitted when
1096   code or XML needs fix.
1097-  several bug fixes to the cffLib module, contributed by Adobe's
1098   @readroberts
1099-  The XML output for CFF table now has a 'major' and 'minor' elements
1100   for specifying whether it's version 1.0 or 2.0 (support for CFF2 is
1101   coming soon)
1102-  [setup.py] remove undocumented/deprecated ``extra_path`` Distutils
1103   argument. This means that we no longer create a "FontTools" subfolder
1104   in site-packages containing the actual fontTools package, as well as
1105   the standalone xmlWriter and sstruct modules. The latter modules are
1106   also deprecated, and scheduled for removal in upcoming releases.
1107   Please change your import statements to point to from fontTools.misc
1108   import xmlWriter and from fontTools.misc import sstruct.
1109-  [scripts] Add a 'fonttools' command-line tool that simply runs
1110   ``fontTools.*`` sub-modules: e.g. ``fonttools ttx``,
1111   ``fonttools subset``, etc.
1112-  [hmtx/vmts] Read advance width/heights as unsigned short (uint16);
1113   automatically round float values to integers.
1114-  [ttLib/xmlWriter] add 'newlinestr=None' keyword argument to
1115   ``TTFont.saveXML`` for overriding os-specific line endings (passed on
1116   to ``XMLWriter`` instances).
1117-  [versioning] Use versioneer instead of ``setuptools_scm`` to
1118   dynamically load version info from a git checkout at import time.
1119-  [feaLib] Support backslash-prefixed glyph names.
1120
11213.1.2 (released 2016-09-27)
1122---------------------------
1123
1124-  restore Makefile as an alternative way to build/check/install
1125-  README.md: update instructions for installing package from source,
1126   and for running test suite
1127-  NEWS: Change log was out of sync with tagged release
1128
11293.1.1 (released 2016-09-27)
1130---------------------------
1131
1132-  Fix ``ttLibVersion`` attribute in TTX files still showing '3.0'
1133   instead of '3.1'.
1134-  Use ``setuptools_scm`` to manage package versions.
1135
11363.1.0 (released 2016-09-26)
1137---------------------------
1138
1139-  [feaLib] New library to parse and compile Adobe FDK OpenType Feature
1140   files.
1141-  [mtiLib] New library to parse and compile Monotype 'FontDame'
1142   OpenType Layout Tables files.
1143-  [voltLib] New library to parse Microsoft VOLT project files.
1144-  [otlLib] New library to work with OpenType Layout tables.
1145-  [varLib] New library to work with OpenType Font Variations.
1146-  [pens] Add ttGlyphPen to draw to TrueType glyphs, and t2CharStringPen
1147   to draw to Type 2 Charstrings (CFF); add areaPen and perimeterPen.
1148-  [ttLib.tables] Implement 'meta' and 'trak' tables.
1149-  [ttx] Add --flavor option for compiling to 'woff' or 'woff2'; add
1150   ``--with-zopfli`` option to use Zopfli to compress WOFF 1.0 fonts.
1151-  [subset] Support subsetting 'COLR'/'CPAL' and 'CBDT'/'CBLC' color
1152   fonts tables, and 'gvar' table for variation fonts.
1153-  [Snippets] Add ``symfont.py``, for symbolic font statistics analysis;
1154   interpolatable.py, a preliminary script for detecting interpolation
1155   errors; ``{merge,dump}_woff_metadata.py``.
1156-  [classifyTools] Helpers to classify things into classes.
1157-  [CI] Run tests on Windows, Linux and macOS using Appveyor and Travis
1158   CI; check unit test coverage with Coverage.py/Coveralls; automatic
1159   deployment to PyPI on tags.
1160-  [loggingTools] Use Python built-in logging module to print messages.
1161-  [py23] Make round() behave like Python 3 built-in round(); define
1162   round2() and round3().
1163
11643.0 (released 2015-09-01)
1165-------------------------
1166
1167-  Add Snippet scripts for cmap subtable format conversion, printing
1168   GSUB/GPOS features, building a GX font from two masters
1169-  TTX WOFF2 support and a ``-f`` option to overwrite output file(s)
1170-  Support GX tables: ``avar``, ``gvar``, ``fvar``, ``meta``
1171-  Support ``feat`` and gzip-compressed SVG tables
1172-  Upgrade Mac East Asian encodings to native implementation if
1173   available
1174-  Add Roman Croatian and Romanian encodings, codecs for mac-extended
1175   East Asian encodings
1176-  Implement optimal GLYF glyph outline packing; disabled by default
1177
11782.5 (released 2014-09-24)
1179-------------------------
1180
1181-  Add a Qt pen
1182-  Add VDMX table converter
1183-  Load all OpenType sub-structures lazily
1184-  Add support for cmap format 13.
1185-  Add pyftmerge tool
1186-  Update to Unicode 6.3.0d3
1187-  Add pyftinspect tool
1188-  Add support for Google CBLC/CBDT color bitmaps, standard EBLC/EBDT
1189   embedded bitmaps, and ``SVG`` table (thanks to Read Roberts at Adobe)
1190-  Add support for loading, saving and ttx'ing WOFF file format
1191-  Add support for Microsoft COLR/CPAL layered color glyphs
1192-  Support PyPy
1193-  Support Jython, by replacing numpy with array/lists modules and
1194   removed it, pure-Python StringIO, not cStringIO
1195-  Add pyftsubset and Subsetter object, supporting CFF and TTF
1196-  Add to ttx args for -q for quiet mode, -z to choose a bitmap dump
1197   format
1198
11992.4 (released 2013-06-22)
1200-------------------------
1201
1202-  Option to write to arbitrary files
1203-  Better dump format for DSIG
1204-  Better detection of OTF XML
1205-  Fix issue with Apple's kern table format
1206-  Fix mangling of TT glyph programs
1207-  Fix issues related to mona.ttf
1208-  Fix Windows Installer instructions
1209-  Fix some modern MacOS issues
1210-  Fix minor issues and typos
1211
12122.3 (released 2009-11-08)
1213-------------------------
1214
1215-  TrueType Collection (TTC) support
1216-  Python 2.6 support
1217-  Update Unicode data to 5.2.0
1218-  Couple of bug fixes
1219
12202.2 (released 2008-05-18)
1221-------------------------
1222
1223-  ClearType support
1224-  cmap format 1 support
1225-  PFA font support
1226-  Switched from Numeric to numpy
1227-  Update Unicode data to 5.1.0
1228-  Update AGLFN data to 1.6
1229-  Many bug fixes
1230
12312.1 (released 2008-01-28)
1232-------------------------
1233
1234-  Many years worth of fixes and features
1235
12362.0b2 (released 2002-??-??)
1237---------------------------
1238
1239-  Be "forgiving" when interpreting the maxp table version field:
1240   interpret any value as 1.0 if it's not 0.5. Fixes dumping of these
1241   GPL fonts: http://www.freebsd.org/cgi/pds.cgi?ports/chinese/wangttf
1242-  Fixed ttx -l: it turned out this part of the code didn't work with
1243   Python 2.2.1 and earlier. My bad to do most of my testing with a
1244   different version than I shipped TTX with :-(
1245-  Fixed bug in ClassDef format 1 subtable (Andreas Seidel bumped into
1246   this one).
1247
12482.0b1 (released 2002-09-10)
1249---------------------------
1250
1251-  Fixed embarrassing bug: the master checksum in the head table is now
1252   calculated correctly even on little-endian platforms (such as Intel).
1253-  Made the cmap format 4 compiler smarter: the binary data it creates
1254   is now more or less as compact as possible. TTX now makes more
1255   compact data than in any shipping font I've tested it with.
1256-  Dump glyph names as a separate "GlyphOrder" pseudo table as opposed
1257   to as part of the glyf table (obviously needed for CFF-OTF's).
1258-  Added proper support for the CFF table.
1259-  Don't barf on empty tables (questionable, but "there are font out
1260   there...")
1261-  When writing TT glyf data, align glyphs on 4-byte boundaries. This
1262   seems to be the current recommendation by MS. Also: don't barf on
1263   fonts which are already 4-byte aligned.
1264-  Windows installer contributed bu Adam Twardoch! Yay!
1265-  Changed the command line interface again, now by creating one new
1266   tool replacing the old ones: ttx It dumps and compiles, depending on
1267   input file types. The options have changed somewhat.
1268-  The -d option is back (output dir)
1269-  ttcompile's -i options is now called -m (as in "merge"), to avoid
1270   clash with dump's -i.
1271-  The -s option ("split tables") no longer creates a directory, but
1272   instead outputs a small .ttx file containing references to the
1273   individual table files. This is not a true link, it's a simple file
1274   name, and the referenced file should be in the same directory so
1275   ttcompile can find them.
1276-  compile no longer accepts a directory as input argument. Instead it
1277   can parse the new "mini-ttx" format as output by "ttx -s".
1278-  all arguments are input files
1279-  Renamed the command line programs and moved them to the Tools
1280   subdirectory. They are now installed by the setup.py install script.
1281-  Added OpenType support. BASE, GDEF, GPOS, GSUB and JSTF are (almost)
1282   fully supported. The XML output is not yet final, as I'm still
1283   considering to output certain subtables in a more human-friendly
1284   manner.
1285-  Fixed 'kern' table to correctly accept subtables it doesn't know
1286   about, as well as interpreting Apple's definition of the 'kern' table
1287   headers correctly.
1288-  Fixed bug where glyphnames were not calculated from 'cmap' if it was
1289   (one of the) first tables to be decompiled. More specifically: it
1290   cmap was the first to ask for a glyphID -> glyphName mapping.
1291-  Switched XML parsers: use expat instead of xmlproc. Should be faster.
1292-  Removed my UnicodeString object: I now require Python 2.0 or up,
1293   which has unicode support built in.
1294-  Removed assert in glyf table: redundant data at the end of the table
1295   is now ignored instead of raising an error. Should become a warning.
1296-  Fixed bug in hmtx/vmtx code that only occured if all advances were
1297   equal.
1298-  Fixed subtle bug in TT instruction disassembler.
1299-  Couple of fixes to the 'post' table.
1300-  Updated OS/2 table to latest spec.
1301
13021.0b1 (released 2001-08-10)
1303---------------------------
1304
1305-  Reorganized the command line interface for ttDump.py and
1306   ttCompile.py, they now behave more like "normal" command line tool,
1307   in that they accept multiple input files for batch processing.
1308-  ttDump.py and ttCompile.py don't silently override files anymore, but
1309   ask before doing so. Can be overridden by -f.
1310-  Added -d option to both ttDump.py and ttCompile.py.
1311-  Installation is now done with distutils. (Needs work for environments
1312   without compilers.)
1313-  Updated installation instructions.
1314-  Added some workarounds so as to handle certain buggy fonts more
1315   gracefully.
1316-  Updated Unicode table to Unicode 3.0 (Thanks Antoine!)
1317-  Included a Python script by Adam Twardoch that adds some useful stuff
1318   to the Windows registry.
1319-  Moved the project to SourceForge.
1320
13211.0a6 (released 2000-03-15)
1322---------------------------
1323
1324-  Big reorganization: made ttLib a subpackage of the new fontTools
1325   package, changed several module names. Called the entire suite
1326   "FontTools"
1327-  Added several submodules to fontTools, some new, some older.
1328-  Added experimental CFF/GPOS/GSUB support to ttLib, read-only (but XML
1329   dumping of GPOS/GSUB is for now disabled)
1330-  Fixed hdmx endian bug
1331-  Added -b option to ttCompile.py, it disables recalculation of
1332   bounding boxes, as requested by Werner Lemberg.
1333-  Renamed tt2xml.pt to ttDump.py and xml2tt.py to ttCompile.py
1334-  Use ".ttx" as file extension instead of ".xml".
1335-  TTX is now the name of the XML-based *format* for TT fonts, and not
1336   just an application.
1337
13381.0a5
1339-----
1340
1341Never released
1342
1343-  More tables supported: hdmx, vhea, vmtx
1344
13451.0a3 & 1.0a4
1346-------------
1347
1348Never released
1349
1350-  fixed most portability issues
1351-  retracted the "Euro_or_currency" change from 1.0a2: it was
1352   nonsense!
1353
13541.0a2 (released 1999-05-02)
1355---------------------------
1356
1357-  binary release for MacOS
1358-  genenates full FOND resources: including width table, PS font name
1359   info and kern table if applicable.
1360-  added cmap format 4 support. Extra: dumps Unicode char names as XML
1361   comments!
1362-  added cmap format 6 support
1363-  now accepts true type files starting with "true" (instead of just
1364   0x00010000 and "OTTO")
1365-  'glyf' table support is now complete: I added support for composite
1366   scale, xy-scale and two-by-two for the 'glyf' table. For now,
1367   component offset scale behaviour defaults to Apple-style. This only
1368   affects the (re)calculation of the glyph bounding box.
1369-  changed "Euro" to "Euro_or_currency" in the Standard Apple Glyph
1370   order list, since we cannot tell from the 'post' table which is
1371   meant. I should probably doublecheck with a Unicode encoding if
1372   available. (This does not affect the output!)
1373
1374Fixed bugs: - 'hhea' table is now recalculated correctly - fixed wrong
1375assumption about sfnt resource names
1376
13771.0a1 (released 1999-04-27)
1378---------------------------
1379
1380-  initial binary release for MacOS
1381