Developing fonts > Specifications

Developing OpenType Fonts
for Standard Scripts (3 of 3):
Features

The features listed below have been defined to create the basic forms for standard scripts and languages. Regardless of the model an application chooses for supporting layout of standard scripts, Uniscribe requires a fixed order for executing features within a run of text to consistently obtain the proper basic form. This is achieved by calling features one-by-one in the standard order listed below.

The order of the lookups within each feature is also very important. For more information on lookups and defining features in OpenType fonts, see Encoding feature information in the OpenType font development section.

While none of the features listed below are required in OpenType fonts, they are 'on' or activated by default. Note; there are many more features (that can be activated at the user's discretion) which can be included in a font. You can see a complete list of features in the OpenType Spec.

The order for applying standard features encoded in OpenType fonts:

Feature Feature function Layout operation Required
Language based forms:
ccmp Character composition/decomposition substitution GSUB
Typographical forms:
liga Standard ligature substitution GSUB
clig Contextual ligature substitution GSUB
Positioning features:
kern Pair kerning GPOS
mark Mark to base positioning GPOS X
mkmk Mark to mark positioning GPOS X
       
[GSUB = glyph substitution, GPOS = glyph positioning]


Descriptions and examples of above features


Character composition (and decomposition)

Feature Tag: "ccmp"

The 'ccmp' feature is used to compose a number of glyphs into one glyph, or decompose one glyph into a number of glyphs. This feature is implemented before any other features because there may be times when a font vender wants to control certain shaping of glyphs. An example of using this table is seen below. The 'ccmp' table maps default alphabetic forms to both a composed form (essentially a ligature, GSUB lookup type 4), and decomposed forms (GSUB lookup type 2).

Example: The 'ccmp' feature is used to form the dotless i (used when the 'i' is followed by an above diacritic mark).


Standard ligatures

Feature Tag: "liga"

The 'liga' feature is used to map glyphs to their optional ligated form. Font developers should use this table for all ligatures that they want the user to be able to control by user preference. Uniscribe has a flag that will allow this type of feature to be deactivated. The 'liga' feature maps sequences of glyphs to corresponding ligatures (GSUB lookup type 4). Ligatures with more components must be stored ahead of those with fewer components in order to be found. See Ordering ligatures in the Encoding Feature Information section. The set of optional ligatures will vary by typeface design and script.

Example: a standard fi ligature.


Contextual ligatures

Feature Tag: "clig"

The 'clig' feature is used to map glyphs to their contextual ligated form which may be preferred for typographic purposes. Unlike other ligature features, 'clig' specifies the context in which the ligature is recommended. This capability is important in some script designs and for swash ligatures. The 'clig' table maps sequences of glyphs to corresponding ligatures in a chained context (GSUB lookup type 8). Ligatures with more components must be stored ahead of those with fewer components in order to be found. See Ordering ligatures in the Encoding Feature Information section. The set of optional contextual ligatures will vary by typeface design and script.

Example: The ligature glyph 'ft' replaces the sequence f t, except when preceded by an ascending letter.


Kerning

Feature Tag: "kern"

The 'kern' feature is used to adjust amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in either horizontal or vertical direction, this feature can supply size-dependent kerning data via device tables, "cross-stream" kerning in the Y text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature would not be used in monospaced fonts.

The font stores a set of adjustments for pairs of glyphs (GPOS lookup type 2 or 8). These may be stored as one or more tables matching left and right classes, and/or as individual pairs. If both forms are used, the classes should be listed last, so as to provide a means to replace any non-ideal values that may result from the class tables. Additional adjustments may be provided for larger sets of glyphs (e.g., triplets, quadruplets, etc.) to overwrite the results of pair kerns in particular combinations. These should precede the pairs.

Creating a kerning pair using Microsoft VOLT


Mark to base positioning

Feature Tag: "mark"

The 'mark' feature positions mark glyphs in relation to a base glyph, or a ligature glyph. This feature may be implemented as a MarkToBase Attachment lookup (GPOS LookupType = 4) or a MarkToLigature Attachment lookup (GPOS LookupType = 5).

Positioning mark to base using Microsoft VOLT


Mark to mark positioning

Feature Tag: "mkmk"

The 'mkmk' feature positions mark glyphs in relation to another mark glyph. This feature may be implemented as a MarkToMark Attachment lookup (GPOS LookupType = 6).

Positioning mark to mark using Microsoft VOLT

introduction | shaping engine | features | appendix

Top of page