Fonts
Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Support

Introduction

This document describes the set of currently defined typographic and layout features available from applications using AAT. It describes these features from several points of view, including that of the font designer, the user, and the application developer. This is a dynamic list - the AAT architecture allows new kinds of features to be defined without requiring a revision to either the application or the ATSUI software itself. You can submit new features to the Registry here.


The designer/user model

In the descriptions that follow, you'll see the terms "exclusive" or "non-exclusive" referring to selectors. This indicates whether several different selectors within a given feature type may be selected at once.

Here is a list of the feature types with links to their descriptions:


All Typographic Features

The All Typographic Features feature type allows the user to specify whether or not any effects should occur. It is an all or nothing bit -- if off, all other specifications are ignored. This feature might be turned off by a user who receives a non-AAT document and wants to ensure that the document does not reflow.

There is only one selector for this feature:

    All Typographic Features
    Turns on or off all other features. Fonts must always be set up so that this feature has the ability to turn off all the others.


Ligatures

The Ligatures feature type permits selection from different kinds of ligatures. It is a non-exclusive feature type.

Currently defined selectors for this feature are:

    Required Ligatures
    Those ligatures that are linguistically required, such as occur in Arabic or Hindi.
    Common Ligatures
    The ligatures that usually appear in well-set text, for instance the "fi" and "fl" ligatures in English.
    Rare Ligatures
    Ligatures in a font that are less common than those included in the Common category, for instance an "fj" ligature.
    Logos
    Ligatures representing logos (e.g. trademarks). For instance, typing the word "Apple" and seeing the Apple logo.
    Rebus Pictures
    Ligatures that are pictures representing words or syllables.
    Diphthong Ligatures
    Ligatures like Æ and æ.
    Squared Ligatures
    These are ligatures where the component letters are arranged in a lattice, such that the ligature fits into the space of a single letter. For examples, see Unicodes U+3300 through U+3357 and U+337B through U+337F.
    Squared Ligatures, Abbreviated
    These are similar to the previously described ligatures, but in abbreviated form.


Cursive Connection

The Cursive Connection feature type is used for cursively-connected scripts. It is an exclusive feature type. It is required for Arabic, but may be used for other scripts as well.

Currently defined selectors for this feature are:

    Unconnected
    Disables cursive connection altogether. Note that selecting this for some scripts will result in incorrect liguistic appearance.
    Partially Connected
    Selects pre-drawn letterforms that connect in a non-contextual manner (see the "Swing" font example below).
    Cursive
    Selects full, contextual connection of letterforms. This setting must always be the default in fonts for scripts that require this behavior.


Letter Case

The Letter Case feature type is used to specify changes to the case of letters (in scripts where case has meaning), in either a contextual or a non-contextual manner. It is an exclusive feature type.

Currently defined selectors for this feature are:

    Upper & Lower Case
    The default setting; it leaves letters in whichever case the user has specified.
    All Caps
    Converts all letters non-contextually to upper-case. Remember that this effect (like all others described in this document) happens only to the appearance of the letters; even though a lower-case letter may have an upper-case appearance through the use of this feature, the string the user typed remains invariant (i.e. still lower-case).
    All Lower Case
    Converts all letters non-contextually to lower-case.
    Small Caps
    Converts lower-case letters non-contextually into true small caps forms.
    Initial Caps
    Contextually converts the first letter of a word into upper-case and the remaining letters into lower-case.
    Initial Caps and Small Caps
    Contextually converts the first letter of a word into upper-case and the remaining letters into small caps.


Vertical Substitution

The Vertical Substitution feature type can be used to specify that glyphs need to change their appearance in vertical runs of text.

There is only one selector for this feature:

    Vertical Substitution
    Turns on the feature.


Linguistic Rearrangement

The Linguistic Rearrangement feature type specifies whether linguistic rearrangement of glyphs (such as happens in South Asian scripts) should happen. It is on by default for fonts representing these scripts.

It is important to note that this feature is different than the notion of linguistic reordering, which happens when text from predominantly left-to-right scripts (such as Latin) is mixed with text from predominantly right-to-left scripts (such as Hebrew).

There is only one selector for this feature:

    Linguistic Rearrangement
    Turns on the feature.


Number Spacing

The Number Spacing feature type specifies a choice for the appearance of digits. It is an exclusive feature type.

Currently defined selectors for this feature are:

    Monospaced Numbers
    Uniform width numbers, useful for displaying in columns. Sometimes known as "columnating" numbers.
    Proportional Numbers
    Numbers whose widths vary.


Smart Swashes

The Smart Swashes feature type controls contextual swash substitution. These are swashes that appear based on an analysis of context, rather than via simple substitution. This is a non-exclusive feature type.

Currently defined selectors for this feature are:

    Word Initial Swashes
    Special forms that can appear at the start of a word (or a line).
    Word Final Swashes
    Special forms that can appear at the end of a word (or a line).
    Line Initial Swashes
    Special forms that can appear only at the start of a line.
    Line Final Swashes
    Special forms that can appear only at the end of a line.
    Non-Final Swashes
    Forms that are used at the beginning or middle of words. An example of this is the archaic long "s".


Diacritics

The Diacritics feature type allows control over how diacritics (i.e. accent marks or applied vowels) appear in text. This is an exclusive feature type.

Currently defined selectors for this feature are:

    Show Diacritics
    This is the default. It means to display the diacritics normally (that is, attached to their baseforms in the right place).
    Hide Diacritics
    Don't show the diacritics. This is useful in Arabic children's book text, where the same text can be shown with vowels for one reading audience and without vowels for another.
    Decompose Diacritics
    Show the diacritics, but rather than attaching them to their baseforms, show them inline with the rest of the text.


Vertical Position

The Vertical Position feature type controls things like superscripts and subscripts. It is an exclusive feature type.

Currently defined selectors for this feature are:

    No Vertical Position
    This is the default. It means to display the text with no vertical displacement.
    Superiors
    Changes any characters having superior forms in the font into those forms.
    Inferiors
    Changes any characters having inferior forms in the font into those forms.
    Ordinals
    Contextually changes certain letters into their superior forms, like in Spanish changing from 1a to 1ª.


Fractions

The Fractions feature type controls the selection and/or generation of fractions. It is an exclusive feature type.

Currently defined selectors for this feature are:

    No Fractions
    This means fractions should not be formed automatically.
    Vertical Fractions
    Form vertical (pre-drawn) fractions present in the font.
    Diagonal Fractions
    Acts like the Vertical Fractions selector, but fractions will be synthesized using superiors and inferiors (or special-purpose numerator and denominator forms, if present in the font).


Overlapping Characters

The Overlapping Characters feature type permits the user to prevent the collision of long tails on characters with other characters.

There is only one selector for this feature:

    Overlap Prevention
    Turns on the feature.


Typographic Extras

The Typographic Extras feature type represents a collection of effects that are associated with fine typography. It is a non-exclusive feature type.

Currently defined selectors for this feature are:

    Hyphens to Em Dash
    Causes two adjacent hyphens to change into a single em dash.
    Hyphen to En Dash
    Changes the hyphen in a space-hyphen-space or digit-hyphen-digit group into an en dash.
    Unslashed Zero
    Makes sure the unslashed zero is always used (even if the font designates the slashed zero as default), of course assuming the unslashed zero actually exists in the font.
    Form Interrobang
    Maps the strings '?!' or '!?' to the interrobang (if present in the font).
    Smart Quotes
    Contextually replaces straight quotes with curly quotes.
    Periods to Ellipsis
    Replaces a sequence of three periods with the ellipsis.


Mathematical Extras

The Mathematical Extras feature type represents a collection of effects useful in setting figures and mathematics. It is a non-exclusive feature type.

Currently defined selectors for this feature are:

    Hyphen To Minus
    Changes the hyphen in a space-hyphen-space or digit-hyphen-digit group into a minus (note this overrides the effect of the Hyphen to En Dash selector in the Typographic Extras feature type).
    Asterisk to Multiply
    Changes the "*" in a space-*-space group into a multiplication sign (×).
    Slash to Divide
    Changes the "/" in a space-/-space group into a division sign (÷).
    Inequality Ligatures
    Changes the >= sequence into a greater-than-or-equal glyph and the <= sequence into a less-than-or-equal glyph.
    Exponents
    Takes digits immediately following a "^" and changes them into their superior forms.


Ornament Sets

The Ornament Sets feature type specifies non-letter ornament sets of glyphs. For example, fleurons or decorative borders could be represented by this feature type. This is an exclusive feature type.

Currently defined selectors for this feature are:

    None
    Do not select any ornaments.
    Dingbats
    Chooses miscellaneous symbols such as arrows, stars, and pointing hands used for occasional emphasis in display.
    Pi Characters
    Chooses a set of related symbols designed for a particular purpose (e.g. cartography or musical notation) which do not make up a formal alphabet.
    Fleurons
    Chooses ornaments in the shape of flowers, vine leaves, and so on.
    Decorative Borders
    Chooses glyphs designed to be used in interlocking or repeating patterns as borders for text.
    International Symbols
    Chooses glyphs representing standard, internationally-recognizable icons (for example, the circle with the bar through it representing "no...").
    Math Symbols
    Chooses special symbols used in setting mathematics or logic text.


Character Alternatives

The radio button selectors for this type simply select different sets of glyphs in a font. For example, a font with twenty ampersands could place them in twenty selectors under this feature type. Use of the Style Options feature type is, however, preferred when feasible. The first setting for this feature should be "No Alternates". This is an exclusive feature type.


Design Complexity

The Design Complexity feature type controls the overall appearance of the font. It can be used to allow a single font to contain plain glyphs, italic glyphs, calligraphic chancery glyphs, etc. Design Level 1 should be available for any font which utilizes this feature type, and it should generally be the default setting. The remaining design levels progress from simplest to most complex. This is an exclusive feature type.


Style Options

The Style Options feature type allows the font designer to group together collections of non-contextual substitutions into named sets. This is an exclusive feature type.

Currently defined selectors for this feature are:

    No Style Options
    Use plain text.
    Display Text
    Chooses glyphs designed to emphasize the unique appearance of the design at display sizes, typically above 24 point.
    Engraved Text
    Chooses glyphs with contrasting strokes parallel to the main strokes, particularly those designed to look like they're engraved in stone.
    Illuminated Caps
    Chooses capital letter glyphs with decoration filling the white space surrounding the glyph, in the manner used by medieval scribes.
    Titling Caps
    Specifies conversion of capital letters to a special titling form.
    Tall Caps
    Specifies conversion of certain capital letters into taller forms.


Character Shape

The Character Shape feature type is useful when a single font contains different appearances for the same character which are not traditionally treated as swashes. This is an exclusive feature type.

Note that for a Simplified Chinese to Traditional Chinese mapping, there are often several possible choices. Use the traditional characters alternative sets for these.

Currently defined selectors for this feature are:

    Traditional Characters
    Use traditional forms for characters.
    Simplified Characters
    Use simplified forms for characters.
    JIS 1978 Characters
    Use character shapes for Japanese characters as defined by the JIS (Japanese Industrial Standard) C 6226-1978 document.
    JIS 1983 Characters
    Use character shapes for Japanese characters as defined by the JIS X 0208-1983 document.
    JIS 1990 Characters
    Use character shapes for Japanese characters as defined by the JIS X 0208-1990 document.
    Traditional Characters, Alternative Set 1
    Use alternate set 1 of traditional forms for characters.
    Traditional Characters, Alternative Set 2
    Use alternate set 2 of traditional forms for characters.
    Traditional Characters, Alternative Set 3
    Use alternate set 3 of traditional forms for characters.
    Traditional Characters, Alternative Set 4
    Use alternate set 4 of traditional forms for characters.
    Traditional Characters, Alternative Set 5
    Use alternate set 5 of traditional forms for characters.
    Expert Characters
    Use "expert" forms of ideographs, such as are defined in the Fujitsu FMR character set.


Number Case

Number Case is independent of Letter Case. Lower Case Numbers (also called "traditional" or "old style") are digits which may descend below the baseline, as opposed to Upper Case Numbers (also called "lining"), which do not descend below the baseline.

Currently defined selectors for this feature are:

    Lower Case Numbers
    These forms of numbers may descend below the baseline. They are sometimes known as "traditional" or "old-style" numbers.
    Upper Case Numbers
    These forms of numbers do not descend below the baseline. They are sometimes known as "lining" numbers.


Text Spacing

The Text Spacing feature type is used to select between the proportional, monospaced and half-width forms of characters in a font. Use of this feature type is optional; for more precise control see the Kana Spacing and Ideographic Spacing feature types.

Currently defined selectors for this feature are:

    Proportional
    Selects the proportional forms of letters.
    Monospace
    Selects the monospace forms of letters.
    Half-width
    Selects the half-width forms of letters.
    Normal
    Selects the default forms of letters.


Transliteration

The Transliteration feature types allows text is one format to be displayed using another format. An example is taking a hiragana string and displaying it as katakana. This is an exclusive feature type.

Currently defined selectors for this feature are:

    • No Transliteration
    • Hanja to Hangul
    • Hiragana to Katakana
    • Katakana to Hiragana
    • Kana to Romanization
    • Romanization to Hiragana
    • Romanization to Katakana
    • Hanja to Hangul, Alternative Set 1
    • Hanja to Hangul, Alternative Set 2
    • Hanja to Hangul, Alternative Set 3


Annotation

The Annotation feature type specifies annotations (or adornments) to basic lettershapes. For instance, most Japanese fonts include versions of numbers that are circled, parenthesized, have periods after them, and so on. This is an exclusive feature type.

Currently defined selectors for this feature are:

    No Annotation
    Indicates that characters should appear without annotation.
    Box Annotation
    Use the forms of characters surrounded by a box cartouche.
    Rounded Box Annotation
    Use the forms of characters surrounded by a box cartouche with rounded corners.
    Circle Annotation
    Use the forms of characters surrounded by a circle. For instance, see Unicodes U+3260 through U+326F.
    Inverted Circle Annotation
    Same as Circle Annotation, but with white and black reversed. For instance, see Unicodes U+2776 through U+277F.
    Parenthesis Annotation
    Use the forms of characters surrounded by parentheses. For instance, see Unicodes U+2474 through U+2487.
    Period Annotation
    Use the forms of characters followed by a period. For instance, see Unicodes U+2488 through U+249B.
    Roman Numeral Annotation
    Display the given characters in their Roman Numeral form.
    Diamond Annotation
    Display the text surrounded by a diamond.


Kana Spacing

The Kana Spacing feature type is used to select widths specifically for Japanese hiragana and katakana characters.

Currently defined selectors for this feature are:

    Full Width
    Selects the full width forms of kana.
    Proportional
    Selects the proportional forms of kana.


Ideographic Spacing

The Ideographic Spacing feature type is used to select between full-width and proportional forms of ideographs (i.e. Han-derived characters).

Currently defined selectors for this feature are:

    Full Width
    Selects the full width forms of ideographs.
    Proportional
    Selects the proportional forms of ideographs.


CJK Roman Spacing

The CJK Roman Spacing feature type is used to select between the proportional and half-width forms of Roman characters in a CJK font.

Currently defined selectors for this feature are:

    Half-width
    Selects the half-width forms of letters.
    Proportional
    Selects the proportional forms of letters.
    Default Roman
    Selects the default Roman forms of letters.
    Full-width Roman
    Selects the full-width Roman forms of letters.


The application interface

This section gives the C language interface that applications use to support the feature types and selectors listed above.

 

enum {

   allTypographicFeaturesType = 0,

      allTypeFeaturesOnSelector            = 0,
      allTypeFeaturesOffSelector           = 1,

   ligaturesType = 1,

      requiredLigaturesOnSelector          = 0,
      requiredLigaturesOffSelector         = 1,
      commonLigaturesOnSelector            = 2,
      commonLigaturesOffSelector           = 3,
      rareLigaturesOnSelector              = 4,
      rareLigaturesOffSelector             = 5,
      logosOnSelector                      = 6,
      logosOffSelector                     = 7,
      rebusPicturesOnSelector              = 8,
      rebusPicturesOffSelector             = 9,
      diphthongLigaturesOnSelector         = 10,
      diphthongLigaturesOffSelector        = 11,
      squaredLigaturesOnSelector           = 12,
      squaredLigaturesOffSelector          = 13,
      abbrevSquaredLigaturesOnSelector     = 14,
      abbrevSquaredLigaturesOffSelector    = 15,

   cursiveConnectionType = 2,

      unconnectedSelector                  = 0,
      partiallyConnectedSelector           = 1,
      cursiveSelector                      = 2,

   letterCaseType = 3,

      upperAndLowerCaseSelector            = 0,
      allCapsSelector                      = 1,
      allLowerCaseSelector                 = 2,
      smallCapsSelector                    = 3,
      initialCapsSelector                  = 4,
      initialCapsAndSmallCapsSelector      = 5,

   verticalSubstitutionType = 4,

      substituteVerticalFormsOnSelector    = 0,
      substituteVerticalFormsOffSelector   = 1,

   linguisticRearrangementType = 5,

      linguisticRearrangementOnSelector    = 0,
      linguisticRearrangementOffSelector   = 1,

   numberSpacingType = 6,

      monospacedNumbersSelector            = 0,
      proportionalNumbersSelector          = 1,

   /*
   appleReserved1Type = 7,
   */

   smartSwashType = 8,

      wordInitialSwashesOnSelector         = 0,
      wordInitialSwashesOffSelector        = 1,
      wordFinalSwashesOnSelector           = 2,
      wordFinalSwashesOffSelector          = 3,
      lineInitialSwashesOnSelector         = 4,
      lineInitialSwashesOffSelector        = 5,
      lineFinalSwashesOnSelector           = 6,
      lineFinalSwashesOffSelector          = 7,
      nonFinalSwashesOnSelector            = 8,
      nonFinalSwashesOffSelector           = 9,

   diacriticsType = 9,

      showDiacriticsSelector               = 0,
      hideDiacriticsSelector               = 1,
      decomposeDiacriticsSelector          = 2,

   verticalPositionType = 10,

      normalPositionSelector               = 0,
      superiorsSelector                    = 1,
      inferiorsSelector                    = 2,
      ordinalsSelector                     = 3,

   fractionsType = 11,

      noFractionsSelector                  = 0,
      verticalFractionsSelector            = 1,
      diagonalFractionsSelector            = 2,

   /*
   appleReserved2Type = 12,
   */

   overlappingCharactersType = 13,

      preventOverlapOnSelector             = 0,
      preventOverlapOffSelector            = 1,

   typographicExtrasType = 14,

      hyphensToEmDashOnSelector            = 0,
      hyphensToEmDashOffSelector           = 1,
      hyphenToEnDashOnSelector             = 2,
      hyphenToEnDashOffSelector            = 3,
      unslashedZeroOnSelector              = 4,
      unslashedZeroOffSelector             = 5,
      formInterrobangOnSelector            = 6,
      formInterrobangOffSelector           = 7,
      smartQuotesOnSelector                = 8,
      smartQuotesOffSelector               = 9,
      periodsToEllipsisOnSelector          = 10,
      periodsToEllipsisOffSelector         = 11,

   mathematicalExtrasType = 15,

      hyphenToMinusOnSelector              = 0,
      hyphenToMinusOffSelector             = 1,
      asteriskToMultiplyOnSelector         = 2,
      asteriskToMultiplyOffSelector        = 3,
      slashToDivideOnSelector              = 4,
      slashToDivideOffSelector             = 5,
      inequalityLigaturesOnSelector        = 6,
      inequalityLigaturesOffSelector       = 7,
      exponentsOnSelector                  = 8,
      exponentsOffSelector                 = 9,

   ornamentSetsType = 16,

      noOrnamentsSelector                  = 0,
      dingbatsSelector                     = 1,
      piCharactersSelector                 = 2,
      fleuronsSelector                     = 3,
      decorativeBordersSelector            = 4,
      internationalSymbolsSelector         = 5,
      mathSymbolsSelector                  = 6,

   characterAlternativesType = 17,

      noAlternatesSelector                 = 0,

   designComplexityType = 18,

      designLevel1Selector                 = 0,
      designLevel2Selector                 = 1,
      designLevel3Selector                 = 2,
      designLevel4Selector                 = 3,
      designLevel5Selector                 = 4,

   styleOptionsType = 19,

      noStyleOptionsSelector               = 0,
      displayTextSelector                  = 1,
      engravedTextSelector                 = 2,
      illuminatedCapsSelector              = 3,
      titlingCapsSelector                  = 4,
      tallCapsSelector                     = 5,

   characterShapeType = 20,

      traditionalCharactersSelector        = 0,
      simplifiedCharactersSelector         = 1,
      jis1978CharactersSelector            = 2,
      jis1983CharactersSelector            = 3,
      jis1990CharactersSelector            = 4,
      traditionalAltOneSelector            = 5,
      traditionalAltTwoSelector            = 6,
      traditionalAltThreeSelector          = 7,
      traditionalAltFourSelector           = 8,
      traditionalAltFiveSelector           = 9,
      expertCharactersSelector             = 10,

   numberCaseType = 21,

      lowerCaseNumbersSelector             = 0,
      upperCaseNumbersSelector             = 1,

   textSpacingType = 22,

      proportionalTextSelector             = 0,
      monospacedTextSelector               = 1,
      halfWidthTextSelector                = 2,
      normallySpacedTextSelector           = 3,

   transliterationType = 23,

      noTransliterationSelector            = 0,
      hanjaToHangulSelector                = 1,
      hiraganaToKatakanaSelector           = 2,
      katakanaToHiraganaSelector           = 3,
      kanaToRomanizationSelector           = 4,
      romanizationToHiraganaSelector       = 5,
      romanizationToKatakanaSelector       = 6,
      hanjaToHangulAltOneSelector          = 7,
      hanjaToHangulAltTwoSelector          = 8,
      hanjaToHangulAltThreeSelector        = 9,

   annotationType = 24,

      noAnnotationSelector                 = 0,
      boxAnnotationSelector                = 1,
      roundedBoxAnnotationSelector         = 2,
      circleAnnotationSelector             = 3,
      invertedCircleAnnotationSelector     = 4,
      parenthesisAnnotationSelector        = 5,
      periodAnnotationSelector             = 6,
      romanNumeralAnnotationSelector       = 7,
      diamondAnnotationSelector            = 8,

   kanaSpacingType = 25,

      fullWidthKanaSelector                = 0,
      proportionalKanaSelector             = 1,

   ideographicSpacingType = 26,

      fullWidthIdeographsSelector          = 0,
      proportionalIdeographsSelector       = 1,

   cjkRomanSpacingType = 103,

      halfWidthCJKRomanSelector            = 0,
      proportionalCJKRomanSelector         = 1,
      defaultCJKRomanSelector              = 2,
      fullWidthCJKRomanSelector            = 3,

/* The following types are provided for compatibility; note that
   their use is deprecated. */

   adobeCharacterSpacingType = 100,        /* prefer 22 */
   adobeKanaSpacingType = 101,             /* prefer 25 */
   adobeKanjiSpacingType = 102,            /* prefer 26 */
   adobeSquareLigatures = 104,             /* prefer 1 */

   lastFeatureType = -1
};


Change log

    25 April 1996
    Added diamondAnnotationSelector.
    11 April 1996
    Added selectors 2 and 3 to feature type 103. Added hanja to hangul alternative sets 1 through 3.
    14 March 1996
    Added traditional alternates to character shape. Added abbreviated forms for squared ligatures. Added JIS Roman spacing type. Added deprecated compatibility types for Adobe.
    25 October 1995
    Added periods to ellipsis under typographic extras.
    10 October 1995
    Added default selector for text spacing type.
    16 September 1995
    Added new selectors for ideographic scripts, and general cleanup.
    25 April 1995
    Added 3 new JIS selectors to Character Shape type.


The Apple Fonts Group

Copyright©1997 by Apple Computer, Inc.
Updated 2/5/98