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