Skip to content

Tables panel»

The Tables panel allows you to store, edit and export OpenType table definitions for arbitrary OpenType tables using the popular TTX format.

Each OpenType font file consists of a collection of tables — binary data structures identified by four-character names such as head, name, GSUB, GPOS, or glyf. TTX is a notation that expresses the OpenType tables using XML. The TTX format is a human-readable notation that closely follows the OpenType and TrueType specifications.

Previously, if you wanted to customize or modify portions of an OpenType font which were not exposed by the FontLab user interface, you could export the font from FontLab, then use the ttx command-line tool to convert an OpenType font into an .ttx file, perform some modifications, and convert the .ttx file back into a font. This was somewhat laborious if you rebuild your fonts often during development, and required keeping track of what modifications you wanted to make.

The Tables panel simplifies this process by providing an environment where you can edit TTX table definitions directly in FontLab and save them with your source font, so they will always add to, or override, the regular FontLab data when you generate a font from FontLab.

The Tables panel allows you to override the tables that FontLab exports by default, and allows you to add tables to your font that FontLab does not “understand” and does not have any user interface for, for example MATH, BASE, meta, VVAR, MERG, many AAT tables such as trak, feat or morx, as well as custom tables used by VTT, VOLT and other apps.

Opening OpenType fonts»

When you import an OpenType font (.otf, .ttf, .ttc, .woff or .woff2), FontLab will convert most of its tables into the TTX format and store the resulting TTX definitions in the Tables panel.

By default, FontLab will not import the tables listed in the Preferences > Open Fonts > Do not import these tables to Tables panel text box.

You can add or remove table tags in the text box. But make sure to only import the tables you really need. FontLab avoids importing very common font-wide tables for which it has a UI (cmap, head, OS/2, post), tables which will pretty much be always invalid after re-export (DSIG, FFTM, TTFA), legacy tables which are potentially large and will often conflict with native data (GDEF, GPOS, GSUB, kern, SVG), tables that are highly technical and don’t contribute much as standalone (gvar), TT hinting tables which aren’t much saying to normal users and also change if re-hinted (cvar, cvt, fpgm, prep).

Tables bdat, bhed, bloc, CBDT, CBLC, CFF, CFF2, DSIG, EBDT, EBLC, EBSC, glyf, hmtx, loca, sbix, vmtx are hardcoded as “not importable”.

Adding custom table definitions»

Click the + button to add a definition for a new table. Then, double-click the XXXX table tag and type your desired table tag.

The table definition area is empty. You need to input a valid TTX definition for that table.

If you have a different font that includes such a table, open it and copy-paste the decompiled table definition into the current font and customize.

To decompile all possible tables when opening an OTF or TTF, remove all text from Preferences > Open Fonts > Do not import these tables to Tables panel, open the font, then click Preferences > Open Fonts > Reset tables to restore the standard list of omitted tables.

You can perform the above trick even with the font you’re working on: just export it into OTF or TTF, remove all omitted tables from the preference, then open that font and you’ll see the table definitions that FontLab has written by itself. Copy-paste some of the table definitions to your source font and customize them there.

Editing and removing table definitions»

Click the table definition area to edit the TTX table definition.

To perform a very basic verification of your table, click the Verify button in the top left corner. FontLab will build a small font file in the background, perform a very basic validity check and write some information into the Output panel. This step will not perform any functional or consistency checks, so even though the table definition may be valid by itself, it may still be invalid or illogical in the context of the entire font.

To remove a table definition, use the button.

Enabling, disabling and exporting custom tables»

Each table entry has a checkbox that controls whether that table definition should be included in the exported font. By default, all the checkboxes are disabled, which means that FontLab will store the TTX table definition in the font you save (in VFC or VFJ format), but will not export the definitions into the final font. To include a particular table definition in the exported font, enable the checkbox next to it so it becomes blue.

When you export a font into any OpenType format, FontLab will first build all necessary tables from its internal data (Font Info dialog, graphical glyph descriptions, kerning, hinting, the feature definitions defined in the Features panel). In this step, FontLab performs various consistency checks and takes into account interdependencies between different parts of the font.

As the very last step, FontLab will use the fontTools library to convert the enabled table definitions into binary form and write them into the font. This step is not “smart” in any way, there are no consistency checks.

Currently, custom tables are defined per FontLab source font. If your source font has multiple masters, and you’re exporting masters or instances, the same custom table definition will be written into all masters or instances that you export.

When to use the Tables panel»

Custom OpenType table definitions in the Tables panel are quite low-level and require that you understand the OpenType font format.

For example, if you write a custom name table definition in the Tables panel (where you can add internationalized family or style names, or various custom names), and enable its checkbox, the final font will use only the naming specified there, and will not use any naming specified in the Font Info dialog. Also, FontLab will not coordinate the naming in your custom name table with the inside the CFF table. Similarly, if you export a custom prep table definition, it may have nothing to do with the rest of the font’s hinting, so the final font may yield very unexpected results. Short: “you need to know what you’re doing”.

However, many OpenType (and TrueType) tables are quite self-contained. For example, the gasp table that turns off font smoothing at various ppem sizes, has a simple structure that is independent of other font portions:

<gaspRange rangeMaxPPEM="9" rangeGaspBehavior="10"/>
<gaspRange rangeMaxPPEM="20" rangeGaspBehavior="7"/>
<gaspRange rangeMaxPPEM="65535" rangeGaspBehavior="15"/>

You can follow the gasp table spec and edit your custom gasp table definition easily, enable it — and it will be exported into any TrueType-flavored OpenType font.