Represents a font, with one or more masters.

Font._formatspecific

  • Python type: dict

Each object in Babelfont has an optional attached dictionary to allow the storage of format-specific information. Font creation software may store any additional information that they wish to have preserved on import and export under a namespaced (reverse-domain) key in this dictionary. For example, information specific to the Glyphs software should be stored under the key com.glyphsapp. The value stored under this key may be any data serializable in JSON; typically it will be a dict.

Note that there is an important distinction between the Python object format of this field and the Babelfont-JSON representation. When stored to JSON, this key is exported not as _formatspecific but as a simple underscore (_).

Font.upm

  • Python type: int

The font’s units per em. If not provided, defaults to 1000.

Font.version

  • Python type: (int, int)

  • Babelfont-JSON type: [int,int]

Font version number as a tuple of integers (major, minor). If not provided, defaults to (1, 0).

Font.axes

  • Python type: [Axis]

  • When writing to Babelfont-JSON, each item in the list must be placed on a separate line.

A list of axes, in the case of variable/multiple master font. May be empty.

Font.instances

  • Python type: [Instance]

  • When writing to Babelfont-JSON, each item in the list must be placed on a separate line.

A list of named/static instances.

Font.masters

  • Python type: [Master]

  • When writing to Babelfont-JSON, each item in the list must be placed on a separate line.

A list of the font’s masters.

Font.glyphs

  • Python type: GlyphList

  • Babelfont-JSON type: [dict]

  • When writing to Babelfont-JSON, this structure is stored under the separate file glyphs.json.

  • When writing to Babelfont-JSON, each item in the list must be placed on a separate line.

A list of all glyphs supported in the font.

The GlyphList structure in the Python object is a dictionary with array-like properties (or you might think of it as an array with dictionary-like properties) containing Glyph objects. The GlyphList may be iterated directly, and may be appended to, but may also be used to index a Glyph by its name. This is generally what you want:


for g in font.glyphs:
    assert isinstance(g, Glyph)

font.glyphs.append(newglyph)

glyph_ampersand = font.glyphs["ampersand"]

Font.note

  • Python type: str

Any user-defined textual note about this font. If not provided, defaults to None.

Font.date

  • Python type: datetime

  • Babelfont-JSON type: str

The font’s date. When writing to Babelfont-JSON, this should be stored in the format %Y-%m-%d %H:%M:%S. If not provided, defaults to the current date/time.

Font.names

Font.customOpenTypeValues

Any values to be placed in OpenType tables on export to override defaults

Font.features

  • Python type: FontFeatures

A representation of the font’s OpenType features