ttFont: Read and write font contents

Overview

ttLib.ttFont is the primary fontTools interface for inspecting, constructing, or deconstructing TrueType and OpenType fonts.

The fontTools.ttLib.ttFont.TTFont class provides access to font-level data, including font metrics, substitution and positioning features, and metadata, through a set of table converters. A TTFont may be instantiated from a single font file, or it may be a member of a TTCollection. TTFont objects can also be constructed from scratch.

glyphSets and ttGlyphs

In addition to font-wide data, ttLib.ttFont provides access to individual glyphs through a TTFont instance’s .glyphSet[] attribute. A .glyphSet is a dict-like object that is indexed by glyph names. Users can use the glyphSet to interact with each glyph’s contours, components, points, and glyph metrics.

Informally, some fontTools code or documentation will make reference to the individual glyphs in a .glyphSet as a “ttGlyph” or the like. This is convenient terminology, particularly for discussion. However, it is important to note that there is not a “ttGlyph” class. Instead, the .glyphSet attribute of a TTFont serves as an abstraction layer that provides a uniform interface to the glyphs, regardless of whether the TTFont instance in use comes from a font file with TrueType-flavored glyphs (and, therefore, has a glyf table containing glyph contours) or a font with PostScript-flavored outlines (and, therefore, with a CFF or CFF2 table containing the glyph contours).

Regardless of the flavor, each “ttGlyph” entry in the .glyphSet includes the corresponding Bezier outlines and components from the glyf or CFF/CFF2 table and the glyph’s metrics. Horizontal metrics are drawn from the font’s hmtx table, and vertical metrics (if any) are drawn from the vmtx table. These attributes are:

width

The advance width of the glyph

lsb

The left sidebearing of the glyph

height

(For vertical-layout fonts) The advance height of the glyph

tsb

(for vertical-layout fonts) The top sidebearing of the glyph

Note that these attributes do not describe the bounding box of the glyph filled shape, because the filled area might include negative coordinate values or extend beyond the advance width due to overhang.

The bounds of the glyph are accessible as xMin, xMax, yMin, and yMax attributes.

For implementation details regarding the different flavors of “ttGlyph”, see the ttGlyphSet documentation.

These glyph objects also implement the Pen Protocol by providing .draw() and .drawPoints() methods. See the pens package documenation for more.

Package contents