Single vs Multiple Substitution in FontForge
This article explains the fundamental differences between single substitution and multiple substitution in FontForge's OpenType layout tables. While both mechanisms modify how glyphs are displayed during text layout, they serve opposite structural purposes. You will learn how each substitution type works, their underlying OpenType specifications, and the practical font development scenarios where each should be used.
What is Single Substitution?
Single substitution (OpenType Glyph Substitution lookup type 1, or
GSUB Type 1) replaces an individual glyph with another
single glyph. It is a strict one-to-one mapping mechanism.
In FontForge, single substitutions are configured in the Lookups
section of the Font Info dialog (Element >
Font Info > Lookups). This lookup type does
not change the total number of characters on the line; it merely alters
the visual design of the specific character.
Common use cases for single substitution include:
- Small Capitals (
smcp): Replacing standard lowercase glyphs with small capital forms (e.g.,a→a.sc). - Number Variants (
tnum,onum): Swapping proportional figures for tabular figures, or lining figures for oldstyle figures. - Stylistic Alternates (
salt/ss01-ss20): Swapping standard letterforms with decorative swashes or alternate character designs.
What is Multiple Substitution?
Multiple substitution (OpenType Glyph Substitution lookup type 2, or
GSUB Type 2) replaces a single glyph with an ordered
sequence of two or more glyphs. It is a one-to-many mapping
mechanism.
In FontForge, setting up a multiple substitution involves mapping one source glyph to a space-separated list of target glyphs. The rendering engine decomposes the single glyph and renders the defined components sequentially, increasing the total glyph count in the text run.
Common use cases for multiple substitution include:
- Ligature Decomposition: Breaking down a
pre-composed ligature glyph into its constituent single glyphs (e.g.,
ffi→f+f+i). - Typographic Expansions: Expanding certain abbreviations, symbols, or phonetic signs into distinct structural components.
- Complex Scripts: Rendering individual base characters that must display as a multi-component visual sequence in scripts such as Arabic, Devanagari, or Thai.
Key Differences
- Mapping Ratio: Single substitution strictly maps one glyph to one glyph (1:1). Multiple substitution maps one glyph to a sequence of multiple glyphs (1:N).
- Glyph Count: Single substitutions preserve the total glyph count and horizontal string length of the original text. Multiple substitutions increase the glyph count.
- OpenType Lookup Types: Single substitution maps to
GSUBType 1, whereas multiple substitution maps toGSUBType 2. - Application Scope: Single substitution is the most widely supported and commonly used feature for stylistic variants. Multiple substitution is specialized, primarily used for linguistic decomposition, fallback scenarios, or complex non-Latin scripts.