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
|