Apple Advanced Typography

From Wikipedia, the free encyclopedia

Apple Advanced Typography
Developer: Apple Computer
OS: Mac OS X
Use: System Utility
License: Proprietary
Website: developer.apple.com/
textfonts

Apple Advanced Typography (AAT) is Apple Computer's computer software for advanced font rendering, supporting internationalization and complex features for typographers, a successor to Apple's little-used QuickDraw GX font technology of the mid-1990s. It is a set of extensions to the TrueType outline font standard, with similar smartfont features to Adobe and Microsoft's OpenType font format, and the open source Graphite. It also incorporates concepts from Adobe's "multiple master" font format, allowing for axes of traits to be defined and morphing of a glyph independently along each of these axes. AAT font features do not alter the underlying typed text, they only affect the characters' representation during glyph conversion.

Contents

[edit] Features

Example of the extra glyphs and ligatures available in the Zapfino typeface
Example of the extra glyphs and ligatures available in the Zapfino typeface

Significant features of AAT currently include:

  • Several degrees of ligature control
  • Kashida justification and joiners
  • Cross-stream kerning (required for Nasta'liq Urdu, for example)
  • Indic vowel rearrangement
  • Independently controllable substitution of:
    • Old style figures
    • Small caps and drop caps
    • Swash variants
    • Alternative glyphs:
      • Individual alternatives on a per-glyph basis
      • Wholesale alternatives, such as engraved text
    • Anything else the font designer wants to add
  • Glyph variation axes

AAT font features are supported on Mac OS 8.5 and above, including Mac OS X and also on several open-source operating systems such as Linux via IBM's ICU library.

[edit] Processing of AAT rules

  1. The ATSUI text engine examines a sequence of character codes
  2. It then gets the corresponding glyph for each code from the font
  3. ATSUI then looks for OpenType rules within the font, if found:
    • It reads and processes the OpenType rules, sending the glyph list to the rule interpreter.
  4. If there are no OpenType rules, it looks for AAT rules, and if they are found:
    • It reads and processes the AAT rules, sending the glyph list to the rule interpreter.

Firstly, there are no classes. The closest equivalent to OpenType's GSUB table is AAT's "morx" table. This table supports the following abilities: Non-contextual one-to-one and many-to-one substitution, contextual one-to-one substitution, contextual rearrangement of glyphs, and contextual insertion of new glyphs. By 'contextual' I mean that the glyphs that come before or after are important for triggering the action, but may not be affected by it. For example "May 12, 2002" could be changed to "12 May 2002" but "May 12," would not be changed to "12 May" (the year has to be present, but is not altered—this is the context for the rule).

The abilities listed are given in no particular sequence. AAT imposes no ordering requirements on the rule list (unlike OpenType's classes). They can be combined in any sequence to get the desired effect.

AAT also has many features not described here, such as group-based glyph kerning, and the ability to change the shape of a glyph using a morphing-like system, where the end-points are defined and any medial value is valid. With this, the user can then drag a slider in the user interface to make glyphs taller or shorter, drag another one to make them fatter or thinner, another one to increase the size of the serifs, etc. all independently of one another. There is nothing like this in OpenType.

With AAT the user can also have point-size dependent effects, for example at 12 pt the horizontal and vertical strokes can be of similar width, but at 300 pt, the stroke width variation could be quite great.

[edit] AAT for Indic scripts

For Indic scripts, the only features that are necessary are glyph re-ordering and substitution. The feature set of AAT supports both of these.

A road sign in Kannada. In the 3rd line, the first character is an example of post-base substitution or conjunct swaras and the second character is an example of below-base forms or vattus.
A road sign in Kannada. In the 3rd line, the first character is an example of post-base substitution or conjunct swaras and the second character is an example of below-base forms or vattus.

[edit] Rendering Indic fonts: OpenType compared to AAT

On Pango, Uniscribe and Qt, the feature set of OpenType only supports substitution (via the GSUB table). Because of this, on Windows the Uniscribe (applies to other rendering engines like Pango, Qt toolkit and M17N) text engine handles re-ordering. This is the simplied version of what happens:

  1. The text engine examines a sequence of character codes in a document
  2. It re-orders character sequences (e.g. "vyanjana1 virama vyanjana2" to "vyanjana1 vyanjana2 virama")
  3. It then gets the corresponding glyph for each code from the font
  4. It reads and processes the OpenType rules for the font, sending the glyph list to the rule interpreter.

Uniscribe re-orders the sequence of glyphs before sending the glyph list to the OpenType rule interpreter. It has to do this because OpenType rules cannot reorder glyphs.

OpenType's GSUB and GPOS tables are sub-divided into 'classes', for example rules in the GSUB class haln deal with halants at the ends of words. The classes that make up the GSUB and GPOS tables are processed in a strict order defined by Microsoft, whilst the rules within each class processed in order of appearance.

[edit] Reasons for broken OpenType Indic support on a Mac

ATSUI processes only a few of the GSUB and GPOS classes, which are crucial for all the Indian language scripts. The GSUB class liga (abbreviation of ligature) for example is processed, this swaps f + i for fi, for example. liga is a Roman-script (and some others) ligature substitution. The classes within GSUB that are used for Indic language processing, such as blwf (below-base forms; vattus), and psts (post-base substitution; conjunct swaras) are completely ignored. In summary, some of the GSUB and GPOS classes are supported, but not many, and not the ones used for Indic scripts.

[edit] See also

[edit] External links

In other languages