| Microsoft Typography | Developer information | Specifications | OpenType font development | ||||||
| Telugu OpenType Specification | Terms | Shaping | Features | Other | Appendix | ||||||
|
The Telugu shaping engine of Uniscribe processes text in stages. The stages are:
The descriptions which follow will help font developers understand the rationale for the Telugu feature encoding model, and help application developers better understand how layout clients can divide responsibilities with operating system functions.
The syllable unit that the shaping engine receives for the purpose of shaping is a string of Unicode characters, in a sequence. These are not necessarily positioned within the sequence as they appear when composed into a syllable. Also a few of these units could have a priority in combining within the syllable to form another graphically distinct unit (e.g. akhand KSSA). First, the shaping engine determines syllable boundaries and isolates certain parts and properties of a syllable. To be able to place syllable elements in required positions and find out the possibility of them combining to form graphically distinct units, the shaping engine analyzes the syllable and gets answers to questions like:
Next, the base (full-form) consonant of the syllable is identified. All other elements are classified by their position relative to the base: pre-base, below-base, above-base and post-base. Then the Telugu shaping engine splits matras that have components appearing on more than one side of the base glyph into the corresponding parts (pre-base, below-base, above-base or post-base parts).
Uniscribe creates and manages a buffer of appropriately reordered character codes, delineated as "clusters." Uniscribe reorders character codes within clusters according to several rules (described below). Then, Uniscribe obtains the corresponding glyph string by passing the reordered character string to the glyph substitution function of the OTL Services. Because glyph strings are obtained from reordered character strings, the features in an Telugu font must be encoded to map reordered characters (and combinations of characters) to their corresponding glyphs. Consequently, font developers are relieved of several layers of complexity in defining features - allowing Uniscribe to perform standard character reordering operations. The character reordering rules of the Uniscribe Telugu shaping engine are described below. None of the rules need to be encoded in an OpenType font, as long as the font is to be used with Uniscribe (or another client that follows the Unicode Standard for character reordering). In fact, if a font developer attempted to encode such reordering information in an OpenType font, they would need to add a huge number of many-to-many glyph mappings to cover the very simple algorithms that Uniscribe uses. Uniscribe always performs reordering operations in a specified order, as described below.
After performing the character reordering steps, the sequence of characters will have one of the following forms:
The first step Uniscribe takes in shaping the character string is to map all characters to their nominal form glyphs. Then, Uniscribe applies contextual shape features to the glyph string. Next, Uniscribe calls the OTL Services Library to shape the Telugu syllable. All OTL processing is divided into a set of predefined features (described and illustrated in the Feature 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. Shaping features:
Uniscribe next applies features concerned with positioning, calling functions of OTLS to position glyphs. Positioning features:
|
||||||
| Telugu OpenType Specification | Terms | Shaping | Features | Other | Appendix | ||||||
| Microsoft Typography | Developer information | Specifications | OpenType font development | ||||||