Ligature Caret List Table

The Ligature Caret List table (LigCaretList) defines caret positions for all the ligatures in a font. The table consists of an offset to a Coverage table that lists all the ligature glyphs (Coverage), a count of the defined ligatures (LigGlyphCount), and an array of offsets to LigGlyph tables (LigGlyph). The array lists the LigGlyph tables, one for each ligature in the Coverage table, in the same order as the Coverage Index.

Example 4 at the end of this chapter shows a LigCaretList table.

LigCaretList table

Type

Name

Description

Offset

Coverage

Offset to Coverage table

  

—from beginning of LigCaretList table

uint16

LigGlyphCount

Number of ligature glyphs

Offset

LigGlyph

Array of offsets to LigGlyph tables

 

[LigGlyphCount]

—from beginning of LigCaretList table

  

—in Coverage Index order


Ligature Glyph Table

A Ligature Glyph table (LigGlyph) contains the caret coordinates for a single ligature glyph. The number of coordinate values, each defined in a separate CaretValue table, equals the number of components in the ligature minus one (1).

The LigGlyph table consists of a count of the number of CaretValue tables defined for the ligature (CaretCount) and an array of offsets to CaretValue tables (CaretValue).

Example 4 at the end of the chapter shows a LigGlyph table.

LigGlyph table

Type

Name

Description

uint16

CaretCount

Number of CaretValues for this ligature (components - 1)

Offset

CaretValue

Array of offsets to CaretValue tables

 

[CaretCount]

—from beginning of LigGlyph table

  

—in increasing coordinate order


Caret Values Table

A Caret Values table (CaretValues), which defines caret positions for a ligature, can be any of three possible formats. One format uses design units to define the caret position. The other two formats use a contour point or Device table to fine-tune a caret's position at specific font sizes and device resolutions. Caret coordinates are either X or Y values, depending upon the text direction.

CaretValue Format 1

The first format (CaretValueFormat1) consists of a format identifier (CaretValueFormat), followed by a single coordinate for the caret position (Coordinate). The Coordinate is in design units.

This format has the benefits of small size and simplicity, but the Coordinate value cannot be hinted for fine adjustments at different device resolutions.

Exampel 4 at the end of this chapter shows a CaretValueFormat1 table.

CaretValueFormat1 table: Design units only

Type

Name

Description

uint16

CaretValueFormat

Format identifier

  

—format = 1

int16

Coordinate

X or Y value, in design units


CaretValue Format 2

The second format (CaretValueFormat2) specifies the caret coordinate in terms of a contour point index on a specific glyph. During font hinting, the contour point on the glyph outline may move. The point's final position after hinting provides the final value for rendering a given font size.

The table contains a format identifier (CaretValueFormat) and a contour point index (CaretValuePoint).

Example 5 at the end of this chapter demonstrates a CaretValueFormat2 table.

CaretValueFormat2 table: Contour point

Type

Name

Description

uint16

CaretValueFormat

Format identifier

  

—format = 2

uint16

CaretValuePoint

Contour point index on glyph


CaretValue Format 3

The third format (CaretValueFormat3) also specifies the value in design units, but it uses a Device table rather than a contour point to adjust the value. This format offers the advantage of fine-tuning the Coordinate value for any device resolution. (For more information about Device tables, see the chapter, Common Table Formats.)

The format consists of a format identifier (CaretValueFormat), an X or Y value (Coordinate), and an offset to a Device table (DeviceTable).

Example 6 at the end of this chapter shows a CaretValueFormat3 table.

CaretValueFormat3 table: Design units plus Device table

Type

Name

Description

uint16

CaretValueFormat

Format identifier

  

—format = 3

int16

Coordinate

X or Y value, in design units

Offset

DeviceTable

Offset to Device table for X or Y value

  

—from beginning of CaretValue table