|
Developing fonts > Specifications
Developing OpenType Fonts for Thai Script (3 of 3): Features
The features listed below have been defined to create the basic forms for the languages that are supported on Thai systems. Regardless of the model an application chooses for supporting layout of complex 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 the Encoding section of the OpenType Font Development document.
The standard order for applying Thai features encoded in OpenType fonts:
Not all of the features listed below apply to all Thai script languages.
| Feature |
Feature function |
Layout operation |
Required |
| Language based forms: |
|
|
| ccmp |
Character composition/decomposition 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] |
Feature examples
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; Use the 'ccmp' feature to decompose the Sara Am for correct mark positioning.
Example: the 'ccmp' feature used to decompose (or remove) the below mark on the Yo Ying character, when the Yo Ying is followed by a below combining vowel mark like the Sara U or Saru UU. The 'mark' feature could then be used for correct positioning of the below vowel mark.
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.
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 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
|