Typography Home Typography Home

Developing fonts > Specifications

Developing OpenType Fonts
for Standard Scripts (2 of 3):
Shaping Engine

The Uniscribe standard shaping engine processes text in stages. The stages are:

  1. Shaping (substituting) glyphs with OTLS (OpenType Library Services)
  2. Positioning glyphs with OTLS

The descriptions which follow will help font developers understand the rationale for the standard feature encoding model, and help application developers better understand how layout clients can divide responsibilities with operating system functions.

Shaping with OTLS

The first step Uniscribe takes in shaping the character string is to map all characters to their nominal form glyphs.

Next, Uniscribe calls OTLS to apply the features. All OTL processing is divided into a set of predefined features (described and illustrated in the Features section of this document). Each feature is applied, one by one, to the appropriate glyphs in the syllable and OTLS processes them. Uniscribe makes as many calls to the OTL Services as there are features. This ensures that the features are executed in the desired order.

The steps of the shaping process are outlined below. Not all of the features listed apply to all standard script languages, but are features that are 'on' by default. However, you may choose to implement more features based on the script or language system.

Shaping features:

  1. Language forms
    1. Apply feature 'ccmp' to preprocess any glyphs that require composition or decomposition
  2. Typographical forms
    1. Apply feature 'liga' to compose any optional standard ligatures, like fi or fl
    2. Apply feature 'clig' to compose any optional contextual ligatures

Positioning glyphs with OTLS

Uniscribe next applies features concerned with positioning, calling functions of OTLS to position glyphs.

Positioning features:

  1. Kerning
    1. Apply feature 'kern' to provide pair kerning between base glyphs requiring adjustment for better typographical quality
  2. Mark to base
    1. Apply feature 'mark' to position diacritic glyphs to the base glyph
  3. Mark to Mark
    1. Apply feature 'mkmk' to position diacritic glyphs to other diacritic glyphs

Next section:  Features

introduction | shaping engine | features | appendix


Top of page