single |
|CI Build Status| |Coverage Status| |PyPI| |Gitter Chat|
What is this?
~~~~~~~~~~~~~
| fontTools is a library for manipulating fonts, written in Python. The
project includes the TTX tool, that can convert TrueType and OpenType
fonts to and from an XML text format, which is also called TTX. It
supports TrueType, OpenType, AFM and to an extent Type 1 and some
Mac-specific formats. The project has an `MIT open-source
license `__.
| Among other things this means you can use it free of charge.
[User documentation] and
[developer documentation]
are available at [Read the Docs].
Installation
~~~~~~~~~~~~
FontTools requires [Python] 3.9
or later. We try to follow the same schedule of minimum Python version
support as
NumPy (see [NEP 29]).
The package is listed in the Python Package Index (PyPI), so you can
install it with [pip]:
Changelog
~~~~~~~~~
4.58.0 (released 2025-05-10)
----------------------------
- Drop Python 3.8, require 3.9+ (#3819)
- [HVAR, VVAR] Prune unused regions when using a direct mapping (#3797)
- [Docs] Improvements to ufoLib documentation (#3721)
- [Docs] Improvements to varLib documentation (#3727)
- [Docs] Improvements to Pens and pen-module documentation (#3724)
- [Docs] Miscellany updates to docs (misc modules and smaller modules)
(#3730)
- [subset] Close codepoints over BiDi mirror variants. (#3801)
- [feaLib] Fix serializing ChainContextPosStatement and
ChainContextSubstStatement in some rare cases (#3788)
- [designspaceLib] Clarify user expectations for getStatNames (#2892)
- [GVAR] Add support for new `GVAR` table (#3728)
- [TSI0, TSI5] Derive number of entries to decompile from data length
(#2477)
- [ttLib] Fix `AttributeError` when reporting table overflow (#3808)
- [ttLib] Apply rounding more often in getCoordinates (#3798)
- [ttLib] Ignore component bounds if empty (#3799)
- [ttLib] Change the separator for duplicate glyph names from "#" to "."
(#3809)
- [feaLib] Support subtable breaks in CursivePos, MarkBasePos, MarkToLigPos
and
MarkToMarkPos lookups (#3800, #3807)
- [feaLib] If the same lookup has single substitutions and ligature
substitutions, upgrade single substitutions to ligature substitutions
with
one input glyph (#3805)
- [feaLib] Correctly handle in single pos lookups (#3803)
- [feaLib] Remove duplicates from class pair pos classes instead of raising
an
error (#3804)
- [feaLib] Support creating extension lookups using useExtenion lookup flag
instead of silently ignoring it (#3811)
- [STAT] Add typing for the simpler STAT arguments (#3812)
- [otlLib.builder] Add future import for annotations (#3814)
- [cffLib] Fix reading supplement encoding (#3813)
- [voltLib] Add some missing functionality and fixes to voltLib and
VoltToFea,
making the conversion to feature files more robust. Add also `fonttools
voltLib` command line tool to compile VOLT sources directly (doing an
intermediate fea conversion internally) (#3818)
- [pens] Add some PointPen annotations (#3820)
4.57.0 (released 2025-04-03)
----------------------------
- [ttLib.__main__] Add `--no-recalc-timestamp` flag (#3771)
- [ttLib.__main__] Add `-b` (recalcBBoxes=False) flag (#3772)
- [cmap] Speed up glyphOrder loading from cmap (#3774)
- [ttLib.__main__] Improvements around the `-t` flag (#3776)
- [Debg] Fix parsing from XML; add roundtrip tests (#3781)
- [fealib] Support \*Base.MinMax tables (#3783, #3786)
- [config] Add OPTIMIZE_FONT_SPEED (#3784)
- [varLib.hvar] New module to add HVAR table to the font (#3780)
- [otlLib.optimize] Fix crash when the provided TTF does not contain a
`GPOS` (#3794)
4.56.0 (released 2025-02-07)
----------------------------
- [varStore] Sort the input todo list with the same sorting key used for
the opimizer's output (#3767).
- [otData] Fix DeviceTable's DeltaValue repeat value which caused a crash
after importing from XML and then compiling a GPOS containing Device tables
(#3758).
- [feaLib] Make FeatureLibError pickleable, so client can e.g. use feaLib
to can compile features in parallel with multiprocessing (#3762).
|