1Metadata-Version: 2.1 2Name: fonttools 3Version: 3.39.0 4Summary: Tools to manipulate font files 5Home-page: http://github.com/fonttools/fonttools 6Author: Just van Rossum 7Author-email: just@letterror.com 8Maintainer: Behdad Esfahbod 9Maintainer-email: behdad@behdad.org 10License: MIT 11Description: |Travis Build Status| |Appveyor Build status| |Coverage Status| |PyPI| |Gitter Chat| 12 13 What is this? 14 ~~~~~~~~~~~~~ 15 16 | fontTools is a library for manipulating fonts, written in Python. The 17 project includes the TTX tool, that can convert TrueType and OpenType 18 fonts to and from an XML text format, which is also called TTX. It 19 supports TrueType, OpenType, AFM and to an extent Type 1 and some 20 Mac-specific formats. The project has an `MIT open-source 21 licence <LICENSE>`__. 22 | Among other things this means you can use it free of charge. 23 24 Installation 25 ~~~~~~~~~~~~ 26 27 FontTools requires `Python <http://www.python.org/download/>`__ 2.7, 3.4 28 or later. 29 30 **NOTE** After January 1 2019, until no later than June 30 2019, the support 31 for *Python 2.7* will be limited to only bug fixes, and no new features will 32 be added to the ``py27`` branch. The upcoming FontTools 4.x series will require 33 *Python 3.5* or above. You can read more `here <https://python3statement.org>`__ 34 and `here <https://github.com/fonttools/fonttools/issues/765>`__ for the 35 reasons behind this decision. 36 37 The package is listed in the Python Package Index (PyPI), so you can 38 install it with `pip <https://pip.pypa.io>`__: 39 40 .. code:: sh 41 42 pip install fonttools 43 44 If you would like to contribute to its development, you can clone the 45 repository from GitHub, install the package in 'editable' mode and 46 modify the source code in place. We recommend creating a virtual 47 environment, using `virtualenv <https://virtualenv.pypa.io>`__ or 48 Python 3 `venv <https://docs.python.org/3/library/venv.html>`__ module. 49 50 .. code:: sh 51 52 # download the source code to 'fonttools' folder 53 git clone https://github.com/fonttools/fonttools.git 54 cd fonttools 55 56 # create new virtual environment called e.g. 'fonttools-venv', or anything you like 57 python -m virtualenv fonttools-venv 58 59 # source the `activate` shell script to enter the environment (Un*x); to exit, just type `deactivate` 60 . fonttools-venv/bin/activate 61 62 # to activate the virtual environment in Windows `cmd.exe`, do 63 fonttools-venv\Scripts\activate.bat 64 65 # install in 'editable' mode 66 pip install -e . 67 68 TTX – From OpenType and TrueType to XML and Back 69 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 70 71 Once installed you can use the ``ttx`` command to convert binary font 72 files (``.otf``, ``.ttf``, etc) to the TTX XML format, edit them, and 73 convert them back to binary format. TTX files have a .ttx file 74 extension. 75 76 .. code:: sh 77 78 ttx /path/to/font.otf 79 ttx /path/to/font.ttx 80 81 The TTX application can be used in two ways, depending on what 82 platform you run it on: 83 84 - As a command line tool (Windows/DOS, Unix, macOS) 85 - By dropping files onto the application (Windows, macOS) 86 87 TTX detects what kind of files it is fed: it will output a ``.ttx`` file 88 when it sees a ``.ttf`` or ``.otf``, and it will compile a ``.ttf`` or 89 ``.otf`` when the input file is a ``.ttx`` file. By default, the output 90 file is created in the same folder as the input file, and will have the 91 same name as the input file but with a different extension. TTX will 92 *never* overwrite existing files, but if necessary will append a unique 93 number to the output filename (before the extension) such as 94 ``Arial#1.ttf`` 95 96 When using TTX from the command line there are a bunch of extra options. 97 These are explained in the help text, as displayed when typing 98 ``ttx -h`` at the command prompt. These additional options include: 99 100 - specifying the folder where the output files are created 101 - specifying which tables to dump or which tables to exclude 102 - merging partial ``.ttx`` files with existing ``.ttf`` or ``.otf`` 103 files 104 - listing brief table info instead of dumping to ``.ttx`` 105 - splitting tables to separate ``.ttx`` files 106 - disabling TrueType instruction disassembly 107 108 The TTX file format 109 ------------------- 110 111 The following tables are currently supported: 112 113 .. begin table list 114 .. code:: 115 116 BASE, CBDT, CBLC, CFF, CFF2, COLR, CPAL, DSIG, EBDT, EBLC, FFTM, 117 Feat, GDEF, GMAP, GPKG, GPOS, GSUB, Glat, Gloc, HVAR, JSTF, LTSH, 118 MATH, META, MVAR, OS/2, SING, STAT, SVG, Silf, Sill, TSI0, TSI1, 119 TSI2, TSI3, TSI5, TSIB, TSID, TSIJ, TSIP, TSIS, TSIV, TTFA, VDMX, 120 VORG, VVAR, ankr, avar, bsln, cidg, cmap, cvar, cvt, feat, fpgm, 121 fvar, gasp, gcid, glyf, gvar, hdmx, head, hhea, hmtx, kern, lcar, 122 loca, ltag, maxp, meta, mort, morx, name, opbd, post, prep, prop, 123 sbix, trak, vhea and vmtx 124 .. end table list 125 126 Other tables are dumped as hexadecimal data. 127 128 TrueType fonts use glyph indices (GlyphIDs) to refer to glyphs in most 129 places. While this is fine in binary form, it is really hard to work 130 with for humans. Therefore we use names instead. 131 132 The glyph names are either extracted from the ``CFF`` table or the 133 ``post`` table, or are derived from a Unicode ``cmap`` table. In the 134 latter case the Adobe Glyph List is used to calculate names based on 135 Unicode values. If all of these methods fail, names are invented based 136 on GlyphID (eg ``glyph00142``) 137 138 It is possible that different glyphs use the same name. If this happens, 139 we force the names to be unique by appending ``#n`` to the name (``n`` 140 being an integer number.) The original names are being kept, so this has 141 no influence on a "round tripped" font. 142 143 Because the order in which glyphs are stored inside the binary font is 144 important, we maintain an ordered list of glyph names in the font. 145 146 Other Tools 147 ~~~~~~~~~~~ 148 149 Commands for merging and subsetting fonts are also available: 150 151 .. code:: sh 152 153 pyftmerge 154 pyftsubset 155 156 fontTools Python Module 157 ~~~~~~~~~~~~~~~~~~~~~~~ 158 159 The fontTools Python module provides a convenient way to 160 programmatically edit font files. 161 162 .. code:: py 163 164 >>> from fontTools.ttLib import TTFont 165 >>> font = TTFont('/path/to/font.ttf') 166 >>> font 167 <fontTools.ttLib.TTFont object at 0x10c34ed50> 168 >>> 169 170 A selection of sample Python programs is in the 171 `Snippets <https://github.com/fonttools/fonttools/blob/master/Snippets/>`__ 172 directory. 173 174 Optional Requirements 175 --------------------- 176 177 The ``fontTools`` package currently has no (required) external dependencies 178 besides the modules included in the Python Standard Library. 179 However, a few extra dependencies are required by some of its modules, which 180 are needed to unlock optional features. 181 The ``fonttools`` PyPI distribution also supports so-called "extras", i.e. a 182 set of keywords that describe a group of additional dependencies, which can be 183 used when installing via pip, or when specifying a requirement. 184 For example: 185 186 .. code:: sh 187 188 pip install fonttools[ufo,lxml,woff,unicode] 189 190 This command will install fonttools, as well as the optional dependencies that 191 are required to unlock the extra features named "ufo", etc. 192 193 - ``Lib/fontTools/misc/etree.py`` 194 195 The module exports a ElementTree-like API for reading/writing XML files, and 196 allows to use as the backend either the built-in ``xml.etree`` module or 197 `lxml <https://http://lxml.de>`__. The latter is preferred whenever present, 198 as it is generally faster and more secure. 199 200 *Extra:* ``lxml`` 201 202 - ``Lib/fontTools/ufoLib`` 203 204 Package for reading and writing UFO source files; it requires: 205 206 * `fs <https://pypi.org/pypi/fs>`__: (aka ``pyfilesystem2``) filesystem 207 abstraction layer. 208 209 * `enum34 <https://pypi.org/pypi/enum34>`__: backport for the built-in ``enum`` 210 module (only required on Python < 3.4). 211 212 *Extra:* ``ufo`` 213 214 - ``Lib/fontTools/ttLib/woff2.py`` 215 216 Module to compress/decompress WOFF 2.0 web fonts; it requires: 217 218 * `brotli <https://pypi.python.org/pypi/Brotli>`__: Python bindings of 219 the Brotli compression library. 220 221 *Extra:* ``woff`` 222 223 - ``Lib/fontTools/ttLib/sfnt.py`` 224 225 To better compress WOFF 1.0 web fonts, the following module can be used 226 instead of the built-in ``zlib`` library: 227 228 * `zopfli <https://pypi.python.org/pypi/zopfli>`__: Python bindings of 229 the Zopfli compression library. 230 231 *Extra:* ``woff`` 232 233 - ``Lib/fontTools/unicode.py`` 234 235 To display the Unicode character names when dumping the ``cmap`` table 236 with ``ttx`` we use the ``unicodedata`` module in the Standard Library. 237 The version included in there varies between different Python versions. 238 To use the latest available data, you can install: 239 240 * `unicodedata2 <https://pypi.python.org/pypi/unicodedata2>`__: 241 ``unicodedata`` backport for Python 2.7 and 3.5 updated to the latest 242 Unicode version 9.0. Note this is not necessary if you use Python 3.6 243 as the latter already comes with an up-to-date ``unicodedata``. 244 245 *Extra:* ``unicode`` 246 247 - ``Lib/fontTools/varLib/interpolatable.py`` 248 249 Module for finding wrong contour/component order between different masters. 250 It requires one of the following packages in order to solve the so-called 251 "minimum weight perfect matching problem in bipartite graphs", or 252 the Assignment problem: 253 254 * `scipy <https://pypi.python.org/pypi/scipy>`__: the Scientific Library 255 for Python, which internally uses `NumPy <https://pypi.python.org/pypi/numpy>`__ 256 arrays and hence is very fast; 257 * `munkres <https://pypi.python.org/pypi/munkres>`__: a pure-Python 258 module that implements the Hungarian or Kuhn-Munkres algorithm. 259 260 *Extra:* ``interpolatable`` 261 262 - ``Lib/fontTools/varLib/plot.py`` 263 264 Module for visualizing DesignSpaceDocument and resulting VariationModel. 265 266 * `matplotlib <https://pypi.org/pypi/matplotlib>`__: 2D plotting library. 267 268 *Extra:* ``plot`` 269 270 - ``Lib/fontTools/misc/symfont.py`` 271 272 Advanced module for symbolic font statistics analysis; it requires: 273 274 * `sympy <https://pypi.python.org/pypi/sympy>`__: the Python library for 275 symbolic mathematics. 276 277 *Extra:* ``symfont`` 278 279 - ``Lib/fontTools/t1Lib.py`` 280 281 To get the file creator and type of Macintosh PostScript Type 1 fonts 282 on Python 3 you need to install the following module, as the old ``MacOS`` 283 module is no longer included in Mac Python: 284 285 * `xattr <https://pypi.python.org/pypi/xattr>`__: Python wrapper for 286 extended filesystem attributes (macOS platform only). 287 288 *Extra:* ``type1`` 289 290 - ``Lib/fontTools/pens/cocoaPen.py`` 291 292 Pen for drawing glyphs with Cocoa ``NSBezierPath``, requires: 293 294 * `PyObjC <https://pypi.python.org/pypi/pyobjc>`__: the bridge between 295 Python and the Objective-C runtime (macOS platform only). 296 297 - ``Lib/fontTools/pens/qtPen.py`` 298 299 Pen for drawing glyphs with Qt's ``QPainterPath``, requires: 300 301 * `PyQt5 <https://pypi.python.org/pypi/PyQt5>`__: Python bindings for 302 the Qt cross platform UI and application toolkit. 303 304 - ``Lib/fontTools/pens/reportLabPen.py`` 305 306 Pen to drawing glyphs as PNG images, requires: 307 308 * `reportlab <https://pypi.python.org/pypi/reportlab>`__: Python toolkit 309 for generating PDFs and graphics. 310 311 Testing 312 ~~~~~~~ 313 314 To run the test suite, you need to install `pytest <http://docs.pytest.org/en/latest/>`__. 315 When you run the ``pytest`` command, the tests will run against the 316 installed ``fontTools`` package, or the first one found in the 317 ``PYTHONPATH``. 318 319 You can also use `tox <https://tox.readthedocs.io/en/latest/>`__ to 320 automatically run tests on different Python versions in isolated virtual 321 environments. 322 323 .. code:: sh 324 325 pip install tox 326 tox 327 328 Note that when you run ``tox`` without arguments, the tests are executed 329 for all the environments listed in tox.ini's ``envlist``. In our case, 330 this includes Python 2.7 and 3.7, so for this to work the ``python2.7`` 331 and ``python3.7`` executables must be available in your ``PATH``. 332 333 You can specify an alternative environment list via the ``-e`` option, 334 or the ``TOXENV`` environment variable: 335 336 .. code:: sh 337 338 tox -e py27 339 TOXENV="py36-cov,htmlcov" tox 340 341 Development Community 342 ~~~~~~~~~~~~~~~~~~~~~ 343 344 TTX/FontTools development is ongoing in an active community of 345 developers, that includes professional developers employed at major 346 software corporations and type foundries as well as hobbyists. 347 348 Feature requests and bug reports are always welcome at 349 https://github.com/fonttools/fonttools/issues/ 350 351 The best place for discussions about TTX from an end-user perspective as 352 well as TTX/FontTools development is the 353 https://groups.google.com/d/forum/fonttools mailing list. There is also 354 a development https://groups.google.com/d/forum/fonttools-dev mailing 355 list for continuous integration notifications. You can also email Behdad 356 privately at behdad@behdad.org 357 358 History 359 ~~~~~~~ 360 361 The fontTools project was started by Just van Rossum in 1999, and was 362 maintained as an open source project at 363 http://sourceforge.net/projects/fonttools/. In 2008, Paul Wise (pabs3) 364 began helping Just with stability maintenance. In 2013 Behdad Esfahbod 365 began a friendly fork, thoroughly reviewing the codebase and making 366 changes at https://github.com/behdad/fonttools to add new features and 367 support for new font formats. 368 369 Acknowledgements 370 ~~~~~~~~~~~~~~~~ 371 372 In alphabetical order: 373 374 Olivier Berten, Samyak Bhuta, Erik van Blokland, Petr van Blokland, 375 Jelle Bosma, Sascha Brawer, Tom Byrer, Frédéric Coiffier, Vincent 376 Connare, Dave Crossland, Simon Daniels, Behdad Esfahbod, Behnam 377 Esfahbod, Hannes Famira, Sam Fishman, Matt Fontaine, Yannis Haralambous, 378 Greg Hitchcock, Jeremie Hornus, Khaled Hosny, John Hudson, Denis Moyogo 379 Jacquerye, Jack Jansen, Tom Kacvinsky, Jens Kutilek, Antoine Leca, 380 Werner Lemberg, Tal Leming, Peter Lofting, Cosimo Lupo, Masaya Nakamura, 381 Dave Opstad, Laurence Penney, Roozbeh Pournader, Garret Rieger, Read 382 Roberts, Guido van Rossum, Just van Rossum, Andreas Seidel, Georg 383 Seifert, Miguel Sousa, Adam Twardoch, Adrien Tétar, Vitaly Volkov, Paul 384 Wise. 385 386 Copyrights 387 ~~~~~~~~~~ 388 389 | Copyright (c) 1999-2004 Just van Rossum, LettError 390 (just@letterror.com) 391 | See `LICENSE <LICENSE>`__ for the full license. 392 393 Copyright (c) 2000 BeOpen.com. All Rights Reserved. 394 395 Copyright (c) 1995-2001 Corporation for National Research Initiatives. 396 All Rights Reserved. 397 398 Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All 399 Rights Reserved. 400 401 Have fun! 402 403 .. |Travis Build Status| image:: https://travis-ci.org/fonttools/fonttools.svg 404 :target: https://travis-ci.org/fonttools/fonttools 405 .. |Appveyor Build status| image:: https://ci.appveyor.com/api/projects/status/0f7fmee9as744sl7/branch/master?svg=true 406 :target: https://ci.appveyor.com/project/fonttools/fonttools/branch/master 407 .. |Coverage Status| image:: https://codecov.io/gh/fonttools/fonttools/branch/master/graph/badge.svg 408 :target: https://codecov.io/gh/fonttools/fonttools 409 .. |PyPI| image:: https://img.shields.io/pypi/v/fonttools.svg 410 :target: https://pypi.org/project/FontTools 411 .. |Gitter Chat| image:: https://badges.gitter.im/fonttools-dev/Lobby.svg 412 :alt: Join the chat at https://gitter.im/fonttools-dev/Lobby 413 :target: https://gitter.im/fonttools-dev/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge 414 415 Changelog 416 ~~~~~~~~~ 417 418 3.39.0 (released 2019-03-19) 419 ---------------------------- 420 421 - [ttLib/glyf] Raise more specific error when encountering recursive 422 component references (#1545, #1546). 423 - [Doc/designspaceLib] Defined new ``public.skipExportGlyphs`` lib key (#1534, 424 unified-font-object/ufo-spec#84). 425 - [varLib] Use ``vmtx`` to compute vertical phantom points; or ``hhea.ascent`` 426 and ``head.unitsPerEM`` if ``vmtx`` is missing (#1528). 427 - [gvar/cvar] Sort XML element's min/value/max attributes in TupleVariation 428 toXML to improve readability of TTX dump (#1527). 429 - [varLib.plot] Added support for 2D plots with only 1 variation axis (#1522). 430 - [designspaceLib] Use axes maps when normalizing locations in 431 DesignSpaceDocument (#1226, #1521), and when finding default source (#1535). 432 - [mutator] Set ``OVERLAP_SIMPLE`` and ``OVERLAP_COMPOUND`` glyf flags by 433 default in ``instantiateVariableFont``. Added ``--no-overlap`` cli option 434 to disable this (#1518). 435 - [subset] Fixed subsetting ``VVAR`` table (#1516, #1517). 436 Fixed subsetting an ``HVAR`` table that has an ``AdvanceWidthMap`` when the 437 option ``--retain-gids`` is used. 438 - [feaLib] Added ``forceChained`` in MultipleSubstStatement (#1511). 439 Fixed double indentation of ``subtable`` statement (#1512). 440 Added support for ``subtable`` statement in more places than just PairPos 441 lookups (#1520). 442 Handle lookupflag 0 and lookupflag without a value (#1540). 443 - [varLib] In ``load_designspace``, provide a default English name for the 444 ``ital`` axis tag. 445 - Remove pyftinspect because it is unmaintained and bitrotted. 446 447 3.38.0 (released 2019-02-18) 448 ---------------------------- 449 450 - [cffLib] Fixed RecursionError when unpickling or deepcopying TTFont with 451 CFF table (#1488, 649dc49). 452 - [subset] Fixed AttributeError when using --desubroutinize option (#1490). 453 Also, fixed desubroutinizing bug when subrs contain hints (#1499). 454 - [CPAL] Make Color a subclass of namedtuple (173a0f5). 455 - [feaLib] Allow hyphen in glyph class names. 456 - [feaLib] Added 'tables' option to __main__.py (#1497). 457 - [feaLib] Add support for special-case contextual positioning formatting 458 (#1501). 459 - [svgLib] Support converting SVG basic shapes (rect, circle, etc.) into 460 equivalent SVG paths (#1500, #1508). 461 - [Snippets] Added name-viewer.ipynb Jupyter notebook. 462 463 464 3.37.3 (released 2019-02-05) 465 ---------------------------- 466 467 - The previous release accidentally changed several files from Unix to DOS 468 line-endings. Fix that. 469 470 3.37.2 (released 2019-02-05) 471 ---------------------------- 472 473 - [varLib] Temporarily revert the fix to ``load_masters()``, which caused a 474 crash in ``interpolate_layout()`` when ``deepcopy``-ing OTFs. 475 476 3.37.1 (released 2019-02-05) 477 ---------------------------- 478 479 - [varLib] ``load_masters()`` now actually assigns the fonts it loads to the 480 source.font attributes. 481 - [varLib] Fixed an MVAR table generation crash when sparse masters were 482 involved. 483 - [voltLib] ``parse_coverage_()`` returns a tuple instead of an ast.Enum. 484 - [feaLib] A MarkClassDefinition inside a block is no longer doubly indented 485 compared to the rest of the block. 486 487 3.37.0 (released 2019-01-28) 488 ---------------------------- 489 490 - [svgLib] Added support for converting elliptical arcs to cubic bezier curves 491 (#1464). 492 - [py23] Added backport for ``math.isfinite``. 493 - [varLib] Apply HIDDEN flag to fvar axis if designspace axis has attribute 494 ``hidden=1``. 495 - Fixed "DeprecationWarning: invalid escape sequence" in Python 3.7. 496 - [voltLib] Fixed parsing glyph groups. Distinguish different PROCESS_MARKS. 497 Accept COMPONENT glyph type. 498 - [feaLib] Distinguish missing value and explicit ``<NULL>`` for PairPos2 499 format A (#1459). Round-trip ``useExtension`` keyword. Implemented 500 ``ValueRecord.asFea`` method. 501 - [subset] Insert empty widths into hdmx when retaining gids (#1458). 502 503 3.36.0 (released 2019-01-17) 504 ---------------------------- 505 506 - [ttx] Added ``--no-recalc-timestamp`` option to keep the original font's 507 ``head.modified`` timestamp (#1455, #46). 508 - [ttx/psCharStrings] Fixed issues while dumping and round-tripping CFF2 table 509 with ttx (#1451, #1452, #1456). 510 - [voltLib] Fixed check for duplicate anchors (#1450). Don't try to read past 511 the ``END`` operator in .vtp file (#1453). 512 - [varLib] Use sentinel value -0x8000 (-32768) to ignore post.underlineThickness 513 and post.underlinePosition when generating MVAR deltas (#1449, 514 googlei18n/ufo2ft#308). 515 - [subset] Added ``--retain-gids`` option to subset font without modifying the 516 current glyph indices (#1443, #1447). 517 - [ufoLib] Replace deprecated calls to ``getbytes`` and ``setbytes`` with new 518 equivalent ``readbytes`` and ``writebytes`` calls. ``fs`` >= 2.2 no required. 519 - [varLib] Allow loading masters from TTX files as well (#1441). 520 521 3.35.2 (released 2019-01-14) 522 ---------------------------- 523 524 - [hmtx/vmtx]: Allow to compile/decompile ``hmtx`` and ``vmtx`` tables even 525 without the corresponding (required) metrics header tables, ``hhea`` and 526 ``vhea`` (#1439). 527 - [varLib] Added support for localized axes' ``labelname`` and named instances' 528 ``stylename`` (#1438). 529 530 3.35.1 (released 2019-01-09) 531 ---------------------------- 532 533 - [_m_a_x_p] Include ``maxComponentElements`` in ``maxp`` table's recalculation. 534 535 3.35.0 (released 2019-01-07) 536 ---------------------------- 537 538 - [psCharStrings] In ``encodeFloat`` function, use float's "general format" with 539 8 digits of precision (i.e. ``%8g``) instead of ``str()``. This works around 540 a macOS rendering issue when real numbers in CFF table are too long, and 541 also makes sure that floats are encoded with the same precision in python 2.7 542 and 3.x (#1430, googlei18n/ufo2ft#306). 543 - [_n_a_m_e/fontBuilder] Make ``_n_a_m_e_table.addMultilingualName`` also add 544 Macintosh (platformID=1) names by default. Added options to ``FontBuilder`` 545 ``setupNameTable`` method to optionally disable Macintosh or Windows names. 546 (#1359, #1431). 547 - [varLib] Make ``build`` optionally accept a ``DesignSpaceDocument`` object, 548 instead of a designspace file path. The caller can now set the ``font`` 549 attribute of designspace's sources to a TTFont object, thus allowing to 550 skip filenames manipulation altogether (#1416, #1425). 551 - [sfnt] Allow SFNTReader objects to be deep-copied. 552 - Require typing>=3.6.4 on py27 to fix issue with singledispatch (#1423). 553 - [designspaceLib/t1Lib/macRes] Fixed some cases where pathlib.Path objects were 554 not accepted (#1421). 555 - [varLib] Fixed merging of multiple PairPosFormat2 subtables (#1411). 556 - [varLib] The default STAT table version is now set to 1.1, to improve 557 compatibility with legacy applications (#1413). 558 559 3.34.2 (released 2018-12-17) 560 ---------------------------- 561 562 - [merge] Fixed AssertionError when none of the script tables in GPOS/GSUB have 563 a DefaultLangSys record (#1408, 135a4a1). 564 565 3.34.1 (released 2018-12-17) 566 ---------------------------- 567 568 - [varLib] Work around macOS rendering issue for composites without gvar entry (#1381). 569 570 3.34.0 (released 2018-12-14) 571 ---------------------------- 572 573 - [varLib] Support generation of CFF2 variable fonts. ``model.reorderMasters()`` 574 now supports arbitrary mapping. Fix handling of overlapping ranges for feature 575 variations (#1400). 576 - [cffLib, subset] Code clean-up and fixing related to CFF2 support. 577 - [ttLib.tables.ttProgram] Use raw strings for regex patterns (#1389). 578 - [fontbuilder] Initial support for building CFF2 fonts. Set CFF's 579 ``FontMatrix`` automatically from unitsPerEm. 580 - [plistLib] Accept the more general ``collections.Mapping`` instead of the 581 specific ``dict`` class to support custom data classes that should serialize 582 to dictionaries. 583 584 3.33.0 (released 2018-11-30) 585 ---------------------------- 586 - [subset] subsetter bug fix with variable fonts. 587 - [varLib.featureVar] Improve FeatureVariations generation with many rules. 588 - [varLib] Enable sparse masters when building variable fonts: 589 https://github.com/fonttools/fonttools/pull/1368#issuecomment-437257368 590 - [varLib.mutator] Add IDEF for GETVARIATION opcode, for handling hints in an 591 instance. 592 - [ttLib] Ignore the length of kern table subtable format 0 593 594 3.32.0 (released 2018-11-01) 595 ---------------------------- 596 597 - [ufoLib] Make ``UFOWriter`` a subclass of ``UFOReader``, and use mixins 598 for shared methods (#1344). 599 - [featureVars] Fixed normalization error when a condition's minimum/maximum 600 attributes are missing in designspace ``<rule>`` (#1366). 601 - [setup.py] Added ``[plot]`` to extras, to optionally install ``matplotlib``, 602 needed to use the ``fonTools.varLib.plot`` module. 603 - [varLib] Take total bounding box into account when resolving model (7ee81c8). 604 If multiple axes have the same range ratio, cut across both (62003f4). 605 - [subset] Don't error if ``STAT`` has no ``AxisValue`` tables. 606 - [fontBuilder] Added a new submodule which contains a ``FontBuilder`` wrapper 607 class around ``TTFont`` that makes it easier to create a working TTF or OTF 608 font from scratch with code. NOTE: the API is still experimental and may 609 change in future versions. 610 611 3.31.0 (released 2018-10-21) 612 ---------------------------- 613 614 - [ufoLib] Merged the `ufoLib <https://github.com/unified-font-objects/ufoLib>`__ 615 master branch into a new ``fontTools.ufoLib`` package (#1335, #1095). 616 Moved ``ufoLib.pointPen`` module to ``fontTools.pens.pointPen``. 617 Moved ``ufoLib.etree`` module to ``fontTools.misc.etree``. 618 Moved ``ufoLib.plistlib`` module to ``fontTools.misc.plistlib``. 619 To use the new ``fontTools.ufoLib`` module you need to install fonttools 620 with the ``[ufo]`` extra, or you can manually install the required additional 621 dependencies (cf. README.rst). 622 - [morx] Support AAT action type to insert glyphs and clean up compilation 623 of AAT action tables (4a1871f, 2011ccf). 624 - [subset] The ``--no-hinting`` on a CFF font now also drops the optional 625 hinting keys in Private dict: ``ForceBold``, ``LanguageGroup``, and 626 ``ExpansionFactor`` (#1322). 627 - [subset] Include nameIDs referenced by STAT table (#1327). 628 - [loggingTools] Added ``msg=None`` argument to 629 ``CapturingLogHandler.assertRegex`` (0245f2c). 630 - [varLib.mutator] Implemented ``FeatureVariations`` instantiation (#1244). 631 - [g_l_y_f] Added PointPen support to ``_TTGlyph`` objects (#1334). 632 633 3.30.0 (released 2018-09-18) 634 ---------------------------- 635 636 - [feaLib] Skip building noop class PairPos subtables when Coverage is NULL 637 (#1318). 638 - [ttx] Expose the previously reserved bit flag ``OVERLAP_SIMPLE`` of 639 glyf table's contour points in the TTX dump. This is used in some 640 implementations to specify a non-zero fill with overlapping contours (#1316). 641 - [ttLib] Added support for decompiling/compiling ``TS1C`` tables containing 642 VTT sources for ``cvar`` variation table (#1310). 643 - [varLib] Use ``fontTools.designspaceLib`` to read DesignSpaceDocument. The 644 ``fontTools.varLib.designspace`` module is now deprecated and will be removed 645 in future versions. The presence of an explicit ``axes`` element is now 646 required in order to build a variable font (#1224, #1313). 647 - [varLib] Implemented building GSUB FeatureVariations table from the ``rules`` 648 element of DesignSpace document (#1240, #713, #1314). 649 - [subset] Added ``--no-layout-closure`` option to not expand the subset with 650 the glyphs produced by OpenType layout features. Instead, OpenType features 651 will be subset to only rules that are relevant to the otherwise-specified 652 glyph set (#43, #1121). 653 654 3.29.1 (released 2018-09-10) 655 ---------------------------- 656 657 - [feaLib] Fixed issue whereby lookups from DFLT/dflt were not included in the 658 DFLT/non-dflt language systems (#1307). 659 - [graphite] Fixed issue on big-endian architectures (e.g. ppc64) (#1311). 660 - [subset] Added ``--layout-scripts`` option to add/exclude set of OpenType 661 layout scripts that will be preserved. By default all scripts are retained 662 (``'*'``) (#1303). 663 664 3.29.0 (released 2018-07-26) 665 ---------------------------- 666 667 - [feaLib] In the OTL table builder, when the ``name`` table is excluded 668 from the list of tables to be build, skip compiling ``featureNames`` blocks, 669 as the records referenced in ``FeatureParams`` table don't exist (68951b7). 670 - [otBase] Try ``ExtensionLookup`` if other offset-overflow methods fail 671 (05f95f0). 672 - [feaLib] Added support for explicit ``subtable;`` break statements in 673 PairPos lookups; previously these were ignored (#1279, #1300, #1302). 674 - [cffLib.specializer] Make sure the stack depth does not exceed maxstack - 1, 675 so that a subroutinizer can insert subroutine calls (#1301, 676 https://github.com/googlei18n/ufo2ft/issues/266). 677 - [otTables] Added support for fixing offset overflow errors occurring inside 678 ``MarkBasePos`` subtables (#1297). 679 - [subset] Write the default output file extension based on ``--flavor`` option, 680 or the value of ``TTFont.sfntVersion`` (d7ac0ad). 681 - [unicodedata] Updated Blocks, Scripts and ScriptExtensions for Unicode 11 682 (452c85e). 683 - [xmlWriter] Added context manager to XMLWriter class to autoclose file 684 descriptor on exit (#1290). 685 - [psCharStrings] Optimize the charstring's bytecode by encoding as integers 686 all float values that have no decimal portion (8d7774a). 687 - [ttFont] Fixed missing import of ``TTLibError`` exception (#1285). 688 - [feaLib] Allow any languages other than ``dflt`` under ``DFLT`` script 689 (#1278, #1292). 690 691 3.28.0 (released 2018-06-19) 692 ---------------------------- 693 694 - [featureVars] Added experimental module to build ``FeatureVariations`` 695 tables. Still needs to be hooked up to ``varLib.build`` (#1240). 696 - [fixedTools] Added ``otRound`` to round floats to nearest integer towards 697 positive Infinity. This is now used where we deal with visual data like X/Y 698 coordinates, advance widths/heights, variation deltas, and similar (#1274, 699 #1248). 700 - [subset] Improved GSUB closure memoize algorithm. 701 - [varLib.models] Fixed regression in model resolution (180124, #1269). 702 - [feaLib.ast] Fixed error when converting ``SubtableStatement`` to string 703 (#1275). 704 - [varLib.mutator] Set ``OS/2.usWeightClass`` and ``usWidthClass``, and 705 ``post.italicAngle`` based on the 'wght', 'wdth' and 'slnt' axis values 706 (#1276, #1264). 707 - [py23/loggingTools] Don't automatically set ``logging.lastResort`` handler 708 on py27. Moved ``LastResortLogger`` to the ``loggingTools`` module (#1277). 709 710 3.27.1 (released 2018-06-11) 711 ---------------------------- 712 713 - [ttGlyphPen] Issue a warning and skip building non-existing components 714 (https://github.com/googlei18n/fontmake/issues/411). 715 - [tests] Fixed issue running ttx_test.py from a tagged commit. 716 717 3.27.0 (released 2018-06-11) 718 ---------------------------- 719 720 - [designspaceLib] Added new ``conditionSet`` element to ``rule`` element in 721 designspace document. Bumped ``format`` attribute to ``4.0`` (previously, 722 it was formatted as an integer). Removed ``checkDefault``, ``checkAxes`` 723 methods, and any kind of guessing about the axes when the ``<axes>`` element 724 is missing. The default master is expected at the intersection of all default 725 values for each axis (#1254, #1255, #1267). 726 - [cffLib] Fixed issues when compiling CFF2 or converting from CFF when the 727 font has an FDArray (#1211, #1271). 728 - [varLib] Avoid attempting to build ``cvar`` table when ``glyf`` table is not 729 present, as is the case for CFF2 fonts. 730 - [subset] Handle None coverages in MarkGlyphSets; revert commit 02616ab that 731 sets empty Coverage tables in MarkGlyphSets to None, to make OTS happy. 732 - [ttFont] Allow to build glyph order from ``maxp.numGlyphs`` when ``post`` or 733 ``cmap`` are missing. 734 - [ttFont] Added ``__len__`` method to ``_TTGlyphSet``. 735 - [glyf] Ensure ``GlyphCoordinates`` never overflow signed shorts (#1230). 736 - [py23] Added alias for ``itertools.izip`` shadowing the built-in ``zip``. 737 - [loggingTools] Memoize ``log`` property of ``LogMixin`` class (fbab12). 738 - [ttx] Impoved test coverage (#1261). 739 - [Snippets] Addded script to append a suffix to all family names in a font. 740 - [varLib.plot] Make it work with matplotlib >= 2.1 (b38e2b). 741 742 3.26.0 (released 2018-05-03) 743 ---------------------------- 744 745 - [designspace] Added a new optional ``layer`` attribute to the source element, 746 and a corresponding ``layerName`` attribute to the ``SourceDescriptor`` 747 object (#1253). 748 Added ``conditionset`` element to the ``rule`` element to the spec, but not 749 implemented in designspace reader/writer yet (#1254). 750 - [varLib.models] Refine modeling one last time (0ecf5c5). 751 - [otBase] Fixed sharing of tables referred to by different offset sizes 752 (795f2f9). 753 - [subset] Don't drop a GDEF that only has VarStore (fc819d6). Set to None 754 empty Coverage tables in MarkGlyphSets (02616ab). 755 - [varLib]: Added ``--master-finder`` command-line option (#1249). 756 - [varLib.mutator] Prune fvar nameIDs from instance's name table (#1245). 757 - [otTables] Allow decompiling bad ClassDef tables with invalid format, with 758 warning (#1236). 759 - [varLib] Make STAT v1.2 and reuse nameIDs from fvar table (#1242). 760 - [varLib.plot] Show master locations. Set axis limits to -1, +1. 761 - [subset] Handle HVAR direct mapping. Passthrough 'cvar'. 762 Added ``--font-number`` command-line option for collections. 763 - [t1Lib] Allow a text encoding to be specified when parsing a Type 1 font 764 (#1234). Added ``kind`` argument to T1Font constructor (c5c161c). 765 - [ttLib] Added context manager API to ``TTFont`` class, so it can be used in 766 ``with`` statements to auto-close the file when exiting the context (#1232). 767 768 3.25.0 (released 2018-04-03) 769 ---------------------------- 770 771 - [varLib] Improved support-resolution algorithm. Previously, the on-axis 772 masters would always cut the space. They don't anymore. That's more 773 consistent, and fixes the main issue Erik showed at TYPO Labs 2017. 774 Any varfont built that had an unusual master configuration will change 775 when rebuilt (42bef17, a523a697, 776 https://github.com/googlei18n/fontmake/issues/264). 777 - [varLib.models] Added a ``main()`` entry point, that takes positions and 778 prints model results. 779 - [varLib.plot] Added new module to plot a designspace's 780 VariationModel. Requires ``matplotlib``. 781 - [varLib.mutator] Added -o option to specify output file path (2ef60fa). 782 - [otTables] Fixed IndexError while pruning of HVAR pre-write (6b6c34a). 783 - [varLib.models] Convert delta array to floats if values overflows signed 784 short integer (0055f94). 785 786 3.24.2 (released 2018-03-26) 787 ---------------------------- 788 789 - [otBase] Don't fail during ``ValueRecord`` copy if src has more items. 790 We drop hinting in the subsetter by simply changing ValueFormat, without 791 cleaning up the actual ValueRecords. This was causing assertion error if 792 a variable font was subsetted without hinting and then passed directly to 793 the mutator for instantiation without first it saving to disk. 794 795 3.24.1 (released 2018-03-06) 796 ---------------------------- 797 798 - [varLib] Don't remap the same ``DeviceTable`` twice in VarStore optimizer 799 (#1206). 800 - [varLib] Add ``--disable-iup`` option to ``fonttools varLib`` script, 801 and a ``optimize=True`` keyword argument to ``varLib.build`` function, 802 to optionally disable IUP optimization while building varfonts. 803 - [ttCollection] Fixed issue while decompiling ttc with python3 (#1207). 804 805 3.24.0 (released 2018-03-01) 806 ---------------------------- 807 808 - [ttGlyphPen] Decompose composite glyphs if any components' transform is too 809 large to fit a ``F2Dot14`` value, or clamp transform values that are 810 (almost) equal to +2.0 to make them fit and avoid decomposing (#1200, 811 #1204, #1205). 812 - [ttx] Added new ``-g`` option to dump glyphs from the ``glyf`` table 813 splitted as individual ttx files (#153, #1035, #1132, #1202). 814 - Copied ``ufoLib.filenames`` module to ``fontTools.misc.filenames``, used 815 for the ttx split-glyphs option (#1202). 816 - [feaLib] Added support for ``cvParameters`` blocks in Character Variant 817 feautures ``cv01-cv99`` (#860, #1169). 818 - [Snippets] Added ``checksum.py`` script to generate/check SHA1 hash of 819 ttx files (#1197). 820 - [varLib.mutator] Fixed issue while instantiating some variable fonts 821 whereby the horizontal advance width computed from ``gvar`` phantom points 822 could turn up to be negative (#1198). 823 - [varLib/subset] Fixed issue with subsetting GPOS variation data not 824 picking up ``ValueRecord`` ``Device`` objects (54fd71f). 825 - [feaLib/voltLib] In all AST elements, the ``location`` is no longer a 826 required positional argument, but an optional kewyord argument (defaults 827 to ``None``). This will make it easier to construct feature AST from 828 code (#1201). 829 830 831 3.23.0 (released 2018-02-26) 832 ---------------------------- 833 834 - [designspaceLib] Added an optional ``lib`` element to the designspace as a 835 whole, as well as to the instance elements, to store arbitrary data in a 836 property list dictionary, similar to the UFO's ``lib``. Added an optional 837 ``font`` attribute to the ``SourceDescriptor``, to allow operating on 838 in-memory font objects (#1175). 839 - [cffLib] Fixed issue with lazy-loading of attributes when attempting to 840 set the CFF TopDict.Encoding (#1177, #1187). 841 - [ttx] Fixed regression introduced in 3.22.0 that affected the split tables 842 ``-s`` option (#1188). 843 - [feaLib] Added ``IncludedFeaNotFound`` custom exception subclass, raised 844 when an included feature file cannot be found (#1186). 845 - [otTables] Changed ``VarIdxMap`` to use glyph names internally instead of 846 glyph indexes. The old ttx dumps of HVAR/VVAR tables that contain indexes 847 can still be imported (21cbab8, 38a0ffb). 848 - [varLib] Implemented VarStore optimizer (#1184). 849 - [subset] Implemented pruning of GDEF VarStore, HVAR and MVAR (#1179). 850 - [sfnt] Restore backward compatiblity with ``numFonts`` attribute of 851 ``SFNTReader`` object (#1181). 852 - [merge] Initial support for merging ``LangSysRecords`` (#1180). 853 - [ttCollection] don't seek(0) when writing to possibly unseekable strems. 854 - [subset] Keep all ``--name-IDs`` from 0 to 6 by default (#1170, #605, #114). 855 - [cffLib] Added ``width`` module to calculate optimal CFF default and 856 nominal glyph widths. 857 - [varLib] Don’t fail if STAT already in the master fonts (#1166). 858 859 3.22.0 (released 2018-02-04) 860 ---------------------------- 861 862 - [subset] Support subsetting ``endchar`` acting as ``seac``-like components 863 in ``CFF`` (fixes #1162). 864 - [feaLib] Allow to build from pre-parsed ``ast.FeatureFile`` object. 865 Added ``tables`` argument to only build some tables instead of all (#1159, 866 #1163). 867 - [textTools] Replaced ``safeEval`` with ``ast.literal_eval`` (#1139). 868 - [feaLib] Added option to the parser to not resolve ``include`` statements 869 (#1154). 870 - [ttLib] Added new ``ttCollection`` module to read/write TrueType and 871 OpenType Collections. Exports a ``TTCollection`` class with a ``fonts`` 872 attribute containing a list of ``TTFont`` instances, the methods ``save`` 873 and ``saveXML``, plus some list-like methods. The ``importXML`` method is 874 not implemented yet (#17). 875 - [unicodeadata] Added ``ot_tag_to_script`` function that converts from 876 OpenType script tag to Unicode script code. 877 - Added new ``designspaceLib`` subpackage, originally from Erik Van Blokland's 878 ``designSpaceDocument``: https://github.com/LettError/designSpaceDocument 879 NOTE: this is not yet used internally by varLib, and the API may be subject 880 to changes (#911, #1110, LettError/designSpaceDocument#28). 881 - Added new FontTools icon images (8ee7c32). 882 - [unicodedata] Added ``script_horizontal_direction`` function that returns 883 either "LTR" or "RTL" given a unicode script code. 884 - [otConverters] Don't write descriptive name string as XML comment if the 885 NameID value is 0 (== NULL) (#1151, #1152). 886 - [unicodedata] Add ``ot_tags_from_script`` function to get the list of 887 OpenType script tags associated with unicode script code (#1150). 888 - [feaLib] Don't error when "enumerated" kern pairs conflict with preceding 889 single pairs; emit warning and chose the first value (#1147, #1148). 890 - [loggingTools] In ``CapturingLogHandler.assertRegex`` method, match the 891 fully formatted log message. 892 - [sbix] Fixed TypeError when concatenating str and bytes (#1154). 893 - [bezierTools] Implemented cusp support and removed ``approximate_fallback`` 894 arg in ``calcQuadraticArcLength``. Added ``calcCubicArcLength`` (#1142). 895 896 3.21.2 (released 2018-01-08) 897 ---------------------------- 898 899 - [varLib] Fixed merging PairPos Format1/2 with missing subtables (#1125). 900 901 3.21.1 (released 2018-01-03) 902 ---------------------------- 903 904 - [feaLib] Allow mixed single/multiple substitutions (#612) 905 - Added missing ``*.afm`` test assets to MAINFEST.in (#1137). 906 - Fixed dumping ``SVG`` tables containing color palettes (#1124). 907 908 3.21.0 (released 2017-12-18) 909 ---------------------------- 910 911 - [cmap] when compiling format6 subtable, don't assume gid0 is always called 912 '.notdef' (1e42224). 913 - [ot] Allow decompiling fonts with bad Coverage format number (1aafae8). 914 - Change FontTools licence to MIT (#1127). 915 - [post] Prune extra names already in standard Mac set (df1e8c7). 916 - [subset] Delete empty SubrsIndex after subsetting (#994, #1118). 917 - [varLib] Don't share points in cvar by default, as it currently fails on 918 some browsers (#1113). 919 - [afmLib] Make poor old afmLib work on python3. 920 921 3.20.1 (released 2017-11-22) 922 ---------------------------- 923 924 - [unicodedata] Fixed issue with ``script`` and ``script_extension`` functions 925 returning inconsistent short vs long names. They both return the short four- 926 letter script codes now. Added ``script_name`` and ``script_code`` functions 927 to look up the long human-readable script name from the script code, and 928 viceversa (#1109, #1111). 929 930 3.20.0 (released 2017-11-21) 931 ---------------------------- 932 933 - [unicodedata] Addded new module ``fontTools.unicodedata`` which exports the 934 same interface as the built-in ``unicodedata`` module, with the addition of 935 a few functions that are missing from the latter, such as ``script``, 936 ``script_extension`` and ``block``. Added a ``MetaTools/buildUCD.py`` script 937 to download and parse data files from the Unicode Character Database and 938 generate python modules containing lists of ranges and property values. 939 - [feaLib] Added ``__str__`` method to all ``ast`` elements (delegates to the 940 ``asFea`` method). 941 - [feaLib] ``Parser`` constructor now accepts a ``glyphNames`` iterable 942 instead of ``glyphMap`` dict. The latter still works but with a pending 943 deprecation warning (#1104). 944 - [bezierTools] Added arc length calculation functions originally from 945 ``pens.perimeterPen`` module (#1101). 946 - [varLib] Started generating STAT table (8af4309). Right now it just reflects 947 the axes, and even that with certain limitations: 948 * AxisOrdering is set to the order axes are defined, 949 * Name-table entries are not shared with fvar. 950 - [py23] Added backports for ``redirect_stdout`` and ``redirect_stderr`` 951 context managers (#1097). 952 - [Graphite] Fixed some round-trip bugs (#1093). 953 954 3.19.0 (released 2017-11-06) 955 ---------------------------- 956 957 - [varLib] Try set of used points instead of all points when testing whether to 958 share points between tuples (#1090). 959 - [CFF2] Fixed issue with reading/writing PrivateDict BlueValues to TTX file. 960 Read the commit message 8b02b5a and issue #1030 for more details. 961 NOTE: this change invalidates all the TTX files containing CFF2 tables 962 that where dumped with previous verisons of fonttools. 963 CFF2 Subr items can have values on the stack after the last operator, thus 964 a ``CFF2Subr`` class was added to accommodate this (#1091). 965 - [_k_e_r_n] Fixed compilation of AAT kern version=1.0 tables (#1089, #1094) 966 - [ttLib] Added getBestCmap() convenience method to TTFont class and cmap table 967 class that returns a preferred Unicode cmap subtable given a list of options 968 (#1092). 969 - [morx] Emit more meaningful subtable flags. Implement InsertionMorphAction 970 971 3.18.0 (released 2017-10-30) 972 ---------------------------- 973 974 - [feaLib] Fixed writing back nested glyph classes (#1086). 975 - [TupleVariation] Reactivated shared points logic, bugfixes (#1009). 976 - [AAT] Implemented ``morx`` ligature subtables (#1082). 977 - [reverseContourPen] Keep duplicate lineTo following a moveTo (#1080, 978 https://github.com/googlei18n/cu2qu/issues/51). 979 - [varLib.mutator] Suport instantiation of GPOS, GDEF and MVAR (#1079). 980 - [sstruct] Fixed issue with ``unicode_literals`` and ``struct`` module in 981 old versions of python 2.7 (#993). 982 983 3.17.0 (released 2017-10-16) 984 ---------------------------- 985 986 - [svgPathPen] Added an ``SVGPathPen`` that translates segment pen commands 987 into SVG path descriptions. Copied from Tal Leming's ``ufo2svg.svgPathPen`` 988 https://github.com/typesupply/ufo2svg/blob/d69f992/Lib/ufo2svg/svgPathPen.py 989 - [reverseContourPen] Added ``ReverseContourPen``, a filter pen that draws 990 contours with the winding direction reversed, while keeping the starting 991 point (#1071). 992 - [filterPen] Added ``ContourFilterPen`` to manipulate contours as a whole 993 rather than segment by segment. 994 - [arrayTools] Added ``Vector`` class to apply math operations on an array 995 of numbers, and ``pairwise`` function to loop over pairs of items in an 996 iterable. 997 - [varLib] Added support for building and interpolation of ``cvar`` table 998 (f874cf6, a25a401). 999 1000 3.16.0 (released 2017-10-03) 1001 ---------------------------- 1002 1003 - [head] Try using ``SOURCE_DATE_EPOCH`` environment variable when setting 1004 the ``head`` modified timestamp to ensure reproducible builds (#1063). 1005 See https://reproducible-builds.org/specs/source-date-epoch/ 1006 - [VTT] Decode VTT's ``TSI*`` tables text as UTF-8 (#1060). 1007 - Added support for Graphite font tables: Feat, Glat, Gloc, Silf and Sill. 1008 Thanks @mhosken! (#1054). 1009 - [varLib] Default to using axis "name" attribute if "labelname" element 1010 is missing (588f524). 1011 - [merge] Added support for merging Script records. Remove unused features 1012 and lookups after merge (d802580, 556508b). 1013 - Added ``fontTools.svgLib`` package. Includes a parser for SVG Paths that 1014 supports the Pen protocol (#1051). Also, added a snippet to convert SVG 1015 outlines to UFO GLIF (#1053). 1016 - [AAT] Added support for ``ankr``, ``bsln``, ``mort``, ``morx``, ``gcid``, 1017 and ``cidg``. 1018 - [subset] Implemented subsetting of ``prop``, ``opbd``, ``bsln``, ``lcar``. 1019 1020 3.15.1 (released 2017-08-18) 1021 ---------------------------- 1022 1023 - [otConverters] Implemented ``__add__`` and ``__radd__`` methods on 1024 ``otConverters._LazyList`` that decompile a lazy list before adding 1025 it to another list or ``_LazyList`` instance. Fixes an ``AttributeError`` 1026 in the ``subset`` module when attempting to sum ``_LazyList`` objects 1027 (6ef48bd2, 1aef1683). 1028 - [AAT] Support the `opbd` table with optical bounds (a47f6588). 1029 - [AAT] Support `prop` table with glyph properties (d05617b4). 1030 1031 1032 3.15.0 (released 2017-08-17) 1033 ---------------------------- 1034 1035 - [AAT] Added support for AAT lookups. The ``lcar`` table can be decompiled 1036 and recompiled; futher work needed to handle ``morx`` table (#1025). 1037 - [subset] Keep (empty) DefaultLangSys for Script 'DFLT' (6eb807b5). 1038 - [subset] Support GSUB/GPOS.FeatureVariations (fe01d87b). 1039 - [varLib] In ``models.supportScalars``, ignore an axis when its peak value 1040 is 0 (fixes #1020). 1041 - [varLib] Add default mappings to all axes in avar to fix rendering issue 1042 in some rasterizers (19c4b377, 04eacf13). 1043 - [varLib] Flatten multiple tail PairPosFormat2 subtables before merging 1044 (c55ef525). 1045 - [ttLib] Added support for recalculating font bounding box in ``CFF`` and 1046 ``head`` tables, and min/max values in ``hhea`` and ``vhea`` tables (#970). 1047 1048 3.14.0 (released 2017-07-31) 1049 ---------------------------- 1050 1051 - [varLib.merger] Remove Extensions subtables before merging (f7c20cf8). 1052 - [varLib] Initialize the avar segment map with required default entries 1053 (#1014). 1054 - [varLib] Implemented optimal IUP optmiziation (#1019). 1055 - [otData] Add ``AxisValueFormat4`` for STAT table v1.2 from OT v1.8.2 1056 (#1015). 1057 - [name] Fixed BCP46 language tag for Mac langID=9: 'si' -> 'sl'. 1058 - [subset] Return value from ``_DehintingT2Decompiler.op_hintmask`` 1059 (c0d672ba). 1060 - [cffLib] Allow to get TopDict by index as well as by name (dca96c9c). 1061 - [cffLib] Removed global ``isCFF2`` state; use one set of classes for 1062 both CFF and CFF2, maintaining backward compatibility existing code (#1007). 1063 - [cffLib] Deprecated maxstack operator, per OpenType spec update 1.8.1. 1064 - [cffLib] Added missing default (-100) for UnderlinePosition (#983). 1065 - [feaLib] Enable setting nameIDs greater than 255 (#1003). 1066 - [varLib] Recalculate ValueFormat when merging SinglePos (#996). 1067 - [varLib] Do not emit MVAR if there are no entries in the variation store 1068 (#987). 1069 - [ttx] For ``-x`` option, pad with space if table tag length is < 4. 1070 1071 3.13.1 (released 2017-05-30) 1072 ---------------------------- 1073 1074 - [feaLib.builder] Removed duplicate lookups optimization. The original 1075 lookup order and semantics of the feature file are preserved (#976). 1076 1077 3.13.0 (released 2017-05-24) 1078 ---------------------------- 1079 1080 - [varLib.mutator] Implement IUP optimization (#969). 1081 - [_g_l_y_f.GlyphCoordinates] Changed ``__bool__()`` semantics to match those 1082 of other iterables (e46f949). Removed ``__abs__()`` (3db5be2). 1083 - [varLib.interpolate_layout] Added ``mapped`` keyword argument to 1084 ``interpolate_layout`` to allow disabling avar mapping: if False (default), 1085 the location is mapped using the map element of the axes in designspace file; 1086 if True, it is assumed that location is in designspace's internal space and 1087 no mapping is performed (#950, #975). 1088 - [varLib.interpolate_layout] Import designspace-loading logic from varLib. 1089 - [varLib] Fixed bug with recombining PairPosClass2 subtables (81498e5, #914). 1090 - [cffLib.specializer] When copying iterables, cast to list (462b7f86). 1091 1092 3.12.1 (released 2017-05-18) 1093 ---------------------------- 1094 1095 - [pens.t2CharStringPen] Fixed AttributeError when calling addComponent in 1096 T2CharStringPen (#965). 1097 1098 3.12.0 (released 2017-05-17) 1099 ---------------------------- 1100 1101 - [cffLib.specializer] Added new ``specializer`` module to optimize CFF 1102 charstrings, used by the T2CharStringPen (#948). 1103 - [varLib.mutator] Sort glyphs by component depth before calculating composite 1104 glyphs' bounding boxes to ensure deltas are correctly caclulated (#945). 1105 - [_g_l_y_f] Fixed loss of precision in GlyphCoordinates by using 'd' (double) 1106 instead of 'f' (float) as ``array.array`` typecode (#963, #964). 1107 1108 3.11.0 (released 2017-05-03) 1109 ---------------------------- 1110 1111 - [t2CharStringPen] Initial support for specialized Type2 path operators: 1112 vmoveto, hmoveto, vlineto, hlineto, vvcurveto, hhcurveto, vhcurveto and 1113 hvcurveto. This should produce more compact charstrings (#940, #403). 1114 - [Doc] Added Sphinx sources for the documentation. Thanks @gferreira (#935). 1115 - [fvar] Expose flags in XML (#932) 1116 - [name] Add helper function for building multi-lingual names (#921) 1117 - [varLib] Fixed kern merging when a PairPosFormat2 has ClassDef1 with glyphs 1118 that are NOT present in the Coverage (1b5e1c4, #939). 1119 - [varLib] Fixed non-deterministic ClassDef order with PY3 (f056c12, #927). 1120 - [feLib] Throw an error when the same glyph is defined in multiple mark 1121 classes within the same lookup (3e3ff00, #453). 1122 1123 3.10.0 (released 2017-04-14) 1124 ---------------------------- 1125 1126 - [varLib] Added support for building ``avar`` table, using the designspace 1127 ``<map>`` elements. 1128 - [varLib] Removed unused ``build(..., axisMap)`` argument. Axis map should 1129 be specified in designspace file now. We do not accept nonstandard axes 1130 if ``<axes>`` element is not present. 1131 - [varLib] Removed "custom" axis from the ``standard_axis_map``. This was 1132 added before when glyphsLib was always exporting the (unused) custom axis. 1133 - [varLib] Added partial support for building ``MVAR`` table; does not 1134 implement ``gasp`` table variations yet. 1135 - [pens] Added FilterPen base class, for pens that control another pen; 1136 factored out ``addComponent`` method from BasePen into a separate abstract 1137 DecomposingPen class; added DecomposingRecordingPen, which records 1138 components decomposed as regular contours. 1139 - [TSI1] Fixed computation of the textLength of VTT private tables (#913). 1140 - [loggingTools] Added ``LogMixin`` class providing a ``log`` property to 1141 subclasses, which returns a ``logging.Logger`` named after the latter. 1142 - [loggingTools] Added ``assertRegex`` method to ``CapturingLogHandler``. 1143 - [py23] Added backport for python 3's ``types.SimpleNamespace`` class. 1144 - [EBLC] Fixed issue with python 3 ``zip`` iterator. 1145 1146 3.9.2 (released 2017-04-08) 1147 --------------------------- 1148 1149 - [pens] Added pen to draw glyphs using WxPython ``GraphicsPath`` class: 1150 https://wxpython.org/docs/api/wx.GraphicsPath-class.html 1151 - [varLib.merger] Fixed issue with recombining multiple PairPosFormat2 1152 subtables (#888) 1153 - [varLib] Do not encode gvar deltas that are all zeroes, or if all values 1154 are smaller than tolerance. 1155 - [ttLib] _TTGlyphSet glyphs now also have ``height`` and ``tsb`` (top 1156 side bearing) attributes from the ``vmtx`` table, if present. 1157 - [glyf] In ``GlyphCoordintes`` class, added ``__bool__`` / ``__nonzero__`` 1158 methods, and ``array`` property to get raw array. 1159 - [ttx] Support reading TTX files with BOM (#896) 1160 - [CFF2] Fixed the reporting of the number of regions in the font. 1161 1162 3.9.1 (released 2017-03-20) 1163 --------------------------- 1164 1165 - [varLib.merger] Fixed issue while recombining multiple PairPosFormat2 1166 subtables if they were split because of offset overflows (9798c30). 1167 - [varLib.merger] Only merge multiple PairPosFormat1 subtables if there is 1168 at least one of the fonts with a non-empty Format1 subtable (0f5a46b). 1169 - [varLib.merger] Fixed IndexError with empty ClassDef1 in PairPosFormat2 1170 (aad0d46). 1171 - [varLib.merger] Avoid reusing Class2Record (mutable) objects (e6125b3). 1172 - [varLib.merger] Calculate ClassDef1 and ClassDef2's Format when merging 1173 PairPosFormat2 (23511fd). 1174 - [macUtils] Added missing ttLib import (b05f203). 1175 1176 3.9.0 (released 2017-03-13) 1177 --------------------------- 1178 1179 - [feaLib] Added (partial) support for parsing feature file comments ``# ...`` 1180 appearing in between statements (#879). 1181 - [feaLib] Cleaned up syntax tree for FeatureNames. 1182 - [ttLib] Added support for reading/writing ``CFF2`` table (thanks to 1183 @readroberts at Adobe), and ``TTFA`` (ttfautohint) table. 1184 - [varLib] Fixed regression introduced with 3.8.0 in the calculation of 1185 ``NumShorts``, i.e. the number of deltas in ItemVariationData's delta sets 1186 that use a 16-bit representation (b2825ff). 1187 1188 3.8.0 (released 2017-03-05) 1189 --------------------------- 1190 1191 - New pens: MomentsPen, StatisticsPen, RecordingPen, and TeePen. 1192 - [misc] Added new ``fontTools.misc.symfont`` module, for symbolic font 1193 statistical analysis; requires ``sympy`` (http://www.sympy.org/en/index.html) 1194 - [varLib] Added experimental ``fontTools.varLib.interpolatable`` module for 1195 finding wrong contour order between different masters 1196 - [varLib] designspace.load() now returns a dictionary, instead of a tuple, 1197 and supports <axes> element (#864); the 'masters' item was renamed 'sources', 1198 like the <sources> element in the designspace document 1199 - [ttLib] Fixed issue with recalculating ``head`` modified timestamp when 1200 saving CFF fonts 1201 - [ttLib] In TupleVariation, round deltas before compiling (#861, fixed #592) 1202 - [feaLib] Ignore duplicate glyphs in classes used as MarkFilteringSet and 1203 MarkAttachmentType (#863) 1204 - [merge] Changed the ``gasp`` table merge logic so that only the one from 1205 the first font is retained, similar to other hinting tables (#862) 1206 - [Tests] Added tests for the ``varLib`` package, as well as test fonts 1207 from the "Annotated OpenType Specification" (AOTS) to exercise ``ttLib``'s 1208 table readers/writers (<https://github.com/adobe-type-tools/aots>) 1209 1210 3.7.2 (released 2017-02-17) 1211 --------------------------- 1212 1213 - [subset] Keep advance widths when stripping ".notdef" glyph outline in 1214 CID-keyed CFF fonts (#845) 1215 - [feaLib] Zero values now produce the same results as makeotf (#633, #848) 1216 - [feaLib] More compact encoding for “Contextual positioning with in-line 1217 single positioning rules” (#514) 1218 1219 3.7.1 (released 2017-02-15) 1220 --------------------------- 1221 1222 - [subset] Fixed issue with ``--no-hinting`` option whereby advance widths in 1223 Type 2 charstrings were also being stripped (#709, #343) 1224 - [feaLib] include statements now resolve relative paths like makeotf (#838) 1225 - [feaLib] table ``name`` now handles Unicode codepoints beyond the Basic 1226 Multilingual Plane, also supports old-style MacOS platform encodings (#842) 1227 - [feaLib] correctly escape string literals when emitting feature syntax (#780) 1228 1229 3.7.0 (released 2017-02-11) 1230 --------------------------- 1231 1232 - [ttx, mtiLib] Preserve ordering of glyph alternates in GSUB type 3 (#833). 1233 - [feaLib] Glyph names can have dashes, as per new AFDKO syntax v1.20 (#559). 1234 - [feaLib] feaLib.Parser now needs the font's glyph map for parsing. 1235 - [varLib] Fix regression where GPOS values were stored as 0. 1236 - [varLib] Allow merging of class-based kerning when ClassDefs are different 1237 1238 3.6.3 (released 2017-02-06) 1239 --------------------------- 1240 1241 - [varLib] Fix building variation of PairPosFormat2 (b5c34ce). 1242 - Populate defaults even for otTables that have postRead (e45297b). 1243 - Fix compiling of MultipleSubstFormat1 with zero 'out' glyphs (b887860). 1244 1245 3.6.2 (released 2017-01-30) 1246 --------------------------- 1247 1248 - [varLib.merger] Fixed "TypeError: reduce() of empty sequence with no 1249 initial value" (3717dc6). 1250 1251 3.6.1 (released 2017-01-28) 1252 --------------------------- 1253 1254 - [py23] Fixed unhandled exception occurring at interpreter shutdown in 1255 the "last resort" logging handler (972b3e6). 1256 - [agl] Ensure all glyph names are of native 'str' type; avoid mixing 1257 'str' and 'unicode' in TTFont.glyphOrder (d8c4058). 1258 - Fixed inconsistent title levels in README.rst that caused PyPI to 1259 incorrectly render the reStructuredText page. 1260 1261 3.6.0 (released 2017-01-26) 1262 --------------------------- 1263 1264 - [varLib] Refactored and improved the variation-font-building process. 1265 - Assembly code in the fpgm, prep, and glyf tables is now indented in 1266 XML output for improved readability. The ``instruction`` element is 1267 written as a simple tag if empty (#819). 1268 - [ttx] Fixed 'I/O operation on closed file' error when dumping 1269 multiple TTXs to standard output with the '-o -' option. 1270 - The unit test modules (``*_test.py``) have been moved outside of the 1271 fontTools package to the Tests folder, thus they are no longer 1272 installed (#811). 1273 1274 3.5.0 (released 2017-01-14) 1275 --------------------------- 1276 1277 - Font tables read from XML can now be written back to XML with no 1278 loss. 1279 - GSUB/GPOS LookupType is written out in XML as an element, not 1280 comment. (#792) 1281 - When parsing cmap table, do not store items mapped to glyph id 0. 1282 (#790) 1283 - [otlLib] Make ClassDef sorting deterministic. Fixes #766 (7d1ddb2) 1284 - [mtiLib] Added unit tests (#787) 1285 - [cvar] Implemented cvar table 1286 - [gvar] Renamed GlyphVariation to TupleVariation to match OpenType 1287 terminology. 1288 - [otTables] Handle gracefully empty VarData.Item array when compiling 1289 XML. (#797) 1290 - [varLib] Re-enabled generation of ``HVAR`` table for fonts with 1291 TrueType outlines; removed ``--build-HVAR`` command-line option. 1292 - [feaLib] The parser can now be extended to support non-standard 1293 statements in FEA code by using a customized Abstract Syntax Tree. 1294 See, for example, ``feaLib.builder_test.test_extensions`` and 1295 baseClass.feax (#794, fixes #773). 1296 - [feaLib] Added ``feaLib`` command to the 'fonttools' command-line 1297 tool; applies a feature file to a font. ``fonttools feaLib -h`` for 1298 help. 1299 - [pens] The ``T2CharStringPen`` now takes an optional 1300 ``roundTolerance`` argument to control the rounding of coordinates 1301 (#804, fixes #769). 1302 - [ci] Measure test coverage on all supported python versions and OSes, 1303 combine coverage data and upload to 1304 https://codecov.io/gh/fonttools/fonttools (#786) 1305 - [ci] Configured Travis and Appveyor for running tests on Python 3.6 1306 (#785, 55c03bc) 1307 - The manual pages installation directory can be customized through 1308 ``FONTTOOLS_MANPATH`` environment variable (#799, fixes #84). 1309 - [Snippets] Added otf2ttf.py, for converting fonts from CFF to 1310 TrueType using the googlei18n/cu2qu module (#802) 1311 1312 3.4.0 (released 2016-12-21) 1313 --------------------------- 1314 1315 - [feaLib] Added support for generating FEA text from abstract syntax 1316 tree (AST) objects (#776). Thanks @mhosken 1317 - Added ``agl.toUnicode`` function to convert AGL-compliant glyph names 1318 to Unicode strings (#774) 1319 - Implemented MVAR table (b4d5381) 1320 1321 3.3.1 (released 2016-12-15) 1322 --------------------------- 1323 1324 - [setup] We no longer use versioneer.py to compute fonttools version 1325 from git metadata, as this has caused issues for some users (#767). 1326 Now we bump the version strings manually with a custom ``release`` 1327 command of setup.py script. 1328 1329 3.3.0 (released 2016-12-06) 1330 --------------------------- 1331 1332 - [ttLib] Implemented STAT table from OpenType 1.8 (#758) 1333 - [cffLib] Fixed decompilation of CFF fonts containing non-standard 1334 key/value pairs in FontDict (issue #740; PR #744) 1335 - [py23] minor: in ``round3`` function, allow the second argument to be 1336 ``None`` (#757) 1337 - The standalone ``sstruct`` and ``xmlWriter`` modules, deprecated 1338 since vesion 3.2.0, have been removed. They can be imported from the 1339 ``fontTools.misc`` package. 1340 1341 3.2.3 (released 2016-12-02) 1342 --------------------------- 1343 1344 - [py23] optimized performance of round3 function; added backport for 1345 py35 math.isclose() (9d8dacb) 1346 - [subset] fixed issue with 'narrow' (UCS-2) Python 2 builds and 1347 ``--text``/``--text-file`` options containing non-BMP chararcters 1348 (16d0e5e) 1349 - [varLib] fixed issuewhen normalizing location values (8fa2ee1, #749) 1350 - [inspect] Made it compatible with both python2 and python3 (167ee60, 1351 #748). Thanks @pnemade 1352 1353 3.2.2 (released 2016-11-24) 1354 --------------------------- 1355 1356 - [varLib] Do not emit null axes in fvar (1bebcec). Thanks @robmck-ms 1357 - [varLib] Handle fonts without GPOS (7915a45) 1358 - [merge] Ignore LangSys if None (a11bc56) 1359 - [subset] Fix subsetting MathVariants (78d3cbe) 1360 - [OS/2] Fix "Private Use (plane 15)" range (08a0d55). Thanks @mashabow 1361 1362 3.2.1 (released 2016-11-03) 1363 --------------------------- 1364 1365 - [OS/2] fix checking ``fsSelection`` bits matching ``head.macStyle`` 1366 bits 1367 - [varLib] added ``--build-HVAR`` option to generate ``HVAR`` table for 1368 fonts with TrueType outlines. For ``CFF2``, it is enabled by default. 1369 1370 3.2.0 (released 2016-11-02) 1371 --------------------------- 1372 1373 - [varLib] Improve support for OpenType 1.8 Variable Fonts: 1374 - Implement GDEF's VariationStore 1375 - Implement HVAR/VVAR tables 1376 - Partial support for loading MutatorMath .designspace files with 1377 varLib.designspace module 1378 - Add varLib.models with Variation fonts interpolation models 1379 - Implement GSUB/GPOS FeatureVariations 1380 - Initial support for interpolating and merging OpenType Layout tables 1381 (see ``varLib.interpolate_layout`` and ``varLib.merger`` modules) 1382 - [API change] Change version to be an integer instead of a float in 1383 XML output for GSUB, GPOS, GDEF, MATH, BASE, JSTF, HVAR, VVAR, feat, 1384 hhea and vhea tables. Scripts that set the Version for those to 1.0 1385 or other float values also need fixing. A warning is emitted when 1386 code or XML needs fix. 1387 - several bug fixes to the cffLib module, contributed by Adobe's 1388 @readroberts 1389 - The XML output for CFF table now has a 'major' and 'minor' elements 1390 for specifying whether it's version 1.0 or 2.0 (support for CFF2 is 1391 coming soon) 1392 - [setup.py] remove undocumented/deprecated ``extra_path`` Distutils 1393 argument. This means that we no longer create a "FontTools" subfolder 1394 in site-packages containing the actual fontTools package, as well as 1395 the standalone xmlWriter and sstruct modules. The latter modules are 1396 also deprecated, and scheduled for removal in upcoming releases. 1397 Please change your import statements to point to from fontTools.misc 1398 import xmlWriter and from fontTools.misc import sstruct. 1399 - [scripts] Add a 'fonttools' command-line tool that simply runs 1400 ``fontTools.*`` sub-modules: e.g. ``fonttools ttx``, 1401 ``fonttools subset``, etc. 1402 - [hmtx/vmts] Read advance width/heights as unsigned short (uint16); 1403 automatically round float values to integers. 1404 - [ttLib/xmlWriter] add 'newlinestr=None' keyword argument to 1405 ``TTFont.saveXML`` for overriding os-specific line endings (passed on 1406 to ``XMLWriter`` instances). 1407 - [versioning] Use versioneer instead of ``setuptools_scm`` to 1408 dynamically load version info from a git checkout at import time. 1409 - [feaLib] Support backslash-prefixed glyph names. 1410 1411 3.1.2 (released 2016-09-27) 1412 --------------------------- 1413 1414 - restore Makefile as an alternative way to build/check/install 1415 - README.md: update instructions for installing package from source, 1416 and for running test suite 1417 - NEWS: Change log was out of sync with tagged release 1418 1419 3.1.1 (released 2016-09-27) 1420 --------------------------- 1421 1422 - Fix ``ttLibVersion`` attribute in TTX files still showing '3.0' 1423 instead of '3.1'. 1424 - Use ``setuptools_scm`` to manage package versions. 1425 1426 3.1.0 (released 2016-09-26) 1427 --------------------------- 1428 1429 - [feaLib] New library to parse and compile Adobe FDK OpenType Feature 1430 files. 1431 - [mtiLib] New library to parse and compile Monotype 'FontDame' 1432 OpenType Layout Tables files. 1433 - [voltLib] New library to parse Microsoft VOLT project files. 1434 - [otlLib] New library to work with OpenType Layout tables. 1435 - [varLib] New library to work with OpenType Font Variations. 1436 - [pens] Add ttGlyphPen to draw to TrueType glyphs, and t2CharStringPen 1437 to draw to Type 2 Charstrings (CFF); add areaPen and perimeterPen. 1438 - [ttLib.tables] Implement 'meta' and 'trak' tables. 1439 - [ttx] Add --flavor option for compiling to 'woff' or 'woff2'; add 1440 ``--with-zopfli`` option to use Zopfli to compress WOFF 1.0 fonts. 1441 - [subset] Support subsetting 'COLR'/'CPAL' and 'CBDT'/'CBLC' color 1442 fonts tables, and 'gvar' table for variation fonts. 1443 - [Snippets] Add ``symfont.py``, for symbolic font statistics analysis; 1444 interpolatable.py, a preliminary script for detecting interpolation 1445 errors; ``{merge,dump}_woff_metadata.py``. 1446 - [classifyTools] Helpers to classify things into classes. 1447 - [CI] Run tests on Windows, Linux and macOS using Appveyor and Travis 1448 CI; check unit test coverage with Coverage.py/Coveralls; automatic 1449 deployment to PyPI on tags. 1450 - [loggingTools] Use Python built-in logging module to print messages. 1451 - [py23] Make round() behave like Python 3 built-in round(); define 1452 round2() and round3(). 1453 1454 3.0 (released 2015-09-01) 1455 ------------------------- 1456 1457 - Add Snippet scripts for cmap subtable format conversion, printing 1458 GSUB/GPOS features, building a GX font from two masters 1459 - TTX WOFF2 support and a ``-f`` option to overwrite output file(s) 1460 - Support GX tables: ``avar``, ``gvar``, ``fvar``, ``meta`` 1461 - Support ``feat`` and gzip-compressed SVG tables 1462 - Upgrade Mac East Asian encodings to native implementation if 1463 available 1464 - Add Roman Croatian and Romanian encodings, codecs for mac-extended 1465 East Asian encodings 1466 - Implement optimal GLYF glyph outline packing; disabled by default 1467 1468 2.5 (released 2014-09-24) 1469 ------------------------- 1470 1471 - Add a Qt pen 1472 - Add VDMX table converter 1473 - Load all OpenType sub-structures lazily 1474 - Add support for cmap format 13. 1475 - Add pyftmerge tool 1476 - Update to Unicode 6.3.0d3 1477 - Add pyftinspect tool 1478 - Add support for Google CBLC/CBDT color bitmaps, standard EBLC/EBDT 1479 embedded bitmaps, and ``SVG`` table (thanks to Read Roberts at Adobe) 1480 - Add support for loading, saving and ttx'ing WOFF file format 1481 - Add support for Microsoft COLR/CPAL layered color glyphs 1482 - Support PyPy 1483 - Support Jython, by replacing numpy with array/lists modules and 1484 removed it, pure-Python StringIO, not cStringIO 1485 - Add pyftsubset and Subsetter object, supporting CFF and TTF 1486 - Add to ttx args for -q for quiet mode, -z to choose a bitmap dump 1487 format 1488 1489 2.4 (released 2013-06-22) 1490 ------------------------- 1491 1492 - Option to write to arbitrary files 1493 - Better dump format for DSIG 1494 - Better detection of OTF XML 1495 - Fix issue with Apple's kern table format 1496 - Fix mangling of TT glyph programs 1497 - Fix issues related to mona.ttf 1498 - Fix Windows Installer instructions 1499 - Fix some modern MacOS issues 1500 - Fix minor issues and typos 1501 1502 2.3 (released 2009-11-08) 1503 ------------------------- 1504 1505 - TrueType Collection (TTC) support 1506 - Python 2.6 support 1507 - Update Unicode data to 5.2.0 1508 - Couple of bug fixes 1509 1510 2.2 (released 2008-05-18) 1511 ------------------------- 1512 1513 - ClearType support 1514 - cmap format 1 support 1515 - PFA font support 1516 - Switched from Numeric to numpy 1517 - Update Unicode data to 5.1.0 1518 - Update AGLFN data to 1.6 1519 - Many bug fixes 1520 1521 2.1 (released 2008-01-28) 1522 ------------------------- 1523 1524 - Many years worth of fixes and features 1525 1526 2.0b2 (released 2002-??-??) 1527 --------------------------- 1528 1529 - Be "forgiving" when interpreting the maxp table version field: 1530 interpret any value as 1.0 if it's not 0.5. Fixes dumping of these 1531 GPL fonts: http://www.freebsd.org/cgi/pds.cgi?ports/chinese/wangttf 1532 - Fixed ttx -l: it turned out this part of the code didn't work with 1533 Python 2.2.1 and earlier. My bad to do most of my testing with a 1534 different version than I shipped TTX with :-( 1535 - Fixed bug in ClassDef format 1 subtable (Andreas Seidel bumped into 1536 this one). 1537 1538 2.0b1 (released 2002-09-10) 1539 --------------------------- 1540 1541 - Fixed embarrassing bug: the master checksum in the head table is now 1542 calculated correctly even on little-endian platforms (such as Intel). 1543 - Made the cmap format 4 compiler smarter: the binary data it creates 1544 is now more or less as compact as possible. TTX now makes more 1545 compact data than in any shipping font I've tested it with. 1546 - Dump glyph names as a separate "GlyphOrder" pseudo table as opposed 1547 to as part of the glyf table (obviously needed for CFF-OTF's). 1548 - Added proper support for the CFF table. 1549 - Don't barf on empty tables (questionable, but "there are font out 1550 there...") 1551 - When writing TT glyf data, align glyphs on 4-byte boundaries. This 1552 seems to be the current recommendation by MS. Also: don't barf on 1553 fonts which are already 4-byte aligned. 1554 - Windows installer contributed bu Adam Twardoch! Yay! 1555 - Changed the command line interface again, now by creating one new 1556 tool replacing the old ones: ttx It dumps and compiles, depending on 1557 input file types. The options have changed somewhat. 1558 - The -d option is back (output dir) 1559 - ttcompile's -i options is now called -m (as in "merge"), to avoid 1560 clash with dump's -i. 1561 - The -s option ("split tables") no longer creates a directory, but 1562 instead outputs a small .ttx file containing references to the 1563 individual table files. This is not a true link, it's a simple file 1564 name, and the referenced file should be in the same directory so 1565 ttcompile can find them. 1566 - compile no longer accepts a directory as input argument. Instead it 1567 can parse the new "mini-ttx" format as output by "ttx -s". 1568 - all arguments are input files 1569 - Renamed the command line programs and moved them to the Tools 1570 subdirectory. They are now installed by the setup.py install script. 1571 - Added OpenType support. BASE, GDEF, GPOS, GSUB and JSTF are (almost) 1572 fully supported. The XML output is not yet final, as I'm still 1573 considering to output certain subtables in a more human-friendly 1574 manner. 1575 - Fixed 'kern' table to correctly accept subtables it doesn't know 1576 about, as well as interpreting Apple's definition of the 'kern' table 1577 headers correctly. 1578 - Fixed bug where glyphnames were not calculated from 'cmap' if it was 1579 (one of the) first tables to be decompiled. More specifically: it 1580 cmap was the first to ask for a glyphID -> glyphName mapping. 1581 - Switched XML parsers: use expat instead of xmlproc. Should be faster. 1582 - Removed my UnicodeString object: I now require Python 2.0 or up, 1583 which has unicode support built in. 1584 - Removed assert in glyf table: redundant data at the end of the table 1585 is now ignored instead of raising an error. Should become a warning. 1586 - Fixed bug in hmtx/vmtx code that only occured if all advances were 1587 equal. 1588 - Fixed subtle bug in TT instruction disassembler. 1589 - Couple of fixes to the 'post' table. 1590 - Updated OS/2 table to latest spec. 1591 1592 1.0b1 (released 2001-08-10) 1593 --------------------------- 1594 1595 - Reorganized the command line interface for ttDump.py and 1596 ttCompile.py, they now behave more like "normal" command line tool, 1597 in that they accept multiple input files for batch processing. 1598 - ttDump.py and ttCompile.py don't silently override files anymore, but 1599 ask before doing so. Can be overridden by -f. 1600 - Added -d option to both ttDump.py and ttCompile.py. 1601 - Installation is now done with distutils. (Needs work for environments 1602 without compilers.) 1603 - Updated installation instructions. 1604 - Added some workarounds so as to handle certain buggy fonts more 1605 gracefully. 1606 - Updated Unicode table to Unicode 3.0 (Thanks Antoine!) 1607 - Included a Python script by Adam Twardoch that adds some useful stuff 1608 to the Windows registry. 1609 - Moved the project to SourceForge. 1610 1611 1.0a6 (released 2000-03-15) 1612 --------------------------- 1613 1614 - Big reorganization: made ttLib a subpackage of the new fontTools 1615 package, changed several module names. Called the entire suite 1616 "FontTools" 1617 - Added several submodules to fontTools, some new, some older. 1618 - Added experimental CFF/GPOS/GSUB support to ttLib, read-only (but XML 1619 dumping of GPOS/GSUB is for now disabled) 1620 - Fixed hdmx endian bug 1621 - Added -b option to ttCompile.py, it disables recalculation of 1622 bounding boxes, as requested by Werner Lemberg. 1623 - Renamed tt2xml.pt to ttDump.py and xml2tt.py to ttCompile.py 1624 - Use ".ttx" as file extension instead of ".xml". 1625 - TTX is now the name of the XML-based *format* for TT fonts, and not 1626 just an application. 1627 1628 1.0a5 1629 ----- 1630 1631 Never released 1632 1633 - More tables supported: hdmx, vhea, vmtx 1634 1635 1.0a3 & 1.0a4 1636 ------------- 1637 1638 Never released 1639 1640 - fixed most portability issues 1641 - retracted the "Euro_or_currency" change from 1.0a2: it was 1642 nonsense! 1643 1644 1.0a2 (released 1999-05-02) 1645 --------------------------- 1646 1647 - binary release for MacOS 1648 - genenates full FOND resources: including width table, PS font name 1649 info and kern table if applicable. 1650 - added cmap format 4 support. Extra: dumps Unicode char names as XML 1651 comments! 1652 - added cmap format 6 support 1653 - now accepts true type files starting with "true" (instead of just 1654 0x00010000 and "OTTO") 1655 - 'glyf' table support is now complete: I added support for composite 1656 scale, xy-scale and two-by-two for the 'glyf' table. For now, 1657 component offset scale behaviour defaults to Apple-style. This only 1658 affects the (re)calculation of the glyph bounding box. 1659 - changed "Euro" to "Euro_or_currency" in the Standard Apple Glyph 1660 order list, since we cannot tell from the 'post' table which is 1661 meant. I should probably doublecheck with a Unicode encoding if 1662 available. (This does not affect the output!) 1663 1664 Fixed bugs: - 'hhea' table is now recalculated correctly - fixed wrong 1665 assumption about sfnt resource names 1666 1667 1.0a1 (released 1999-04-27) 1668 --------------------------- 1669 1670 - initial binary release for MacOS 1671 1672Platform: Any 1673Classifier: Development Status :: 5 - Production/Stable 1674Classifier: Environment :: Console 1675Classifier: Environment :: Other Environment 1676Classifier: Intended Audience :: Developers 1677Classifier: Intended Audience :: End Users/Desktop 1678Classifier: License :: OSI Approved :: MIT License 1679Classifier: Natural Language :: English 1680Classifier: Operating System :: OS Independent 1681Classifier: Programming Language :: Python 1682Classifier: Programming Language :: Python :: 2 1683Classifier: Programming Language :: Python :: 3 1684Classifier: Topic :: Text Processing :: Fonts 1685Classifier: Topic :: Multimedia :: Graphics 1686Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion 1687Provides-Extra: symfont 1688Provides-Extra: type1 1689Provides-Extra: lxml 1690Provides-Extra: ufo 1691Provides-Extra: interpolatable 1692Provides-Extra: all 1693Provides-Extra: woff 1694Provides-Extra: plot 1695Provides-Extra: unicode 1696Provides-Extra: graphite 1697