This document describes the set of currently defined typographic and layout features available from applications using CoreText. 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 system software itself. You can submit new features to the Registry here.
The designer/user model
Typographic effects are achieved in AAT through the use of two sixteen-bit numbers called a feature and selector. (Selectors are often called “settings.”) The feature code indicates a general class of effect (e.g., ligatures) and the selector code the specific effect (e.g., rare ligatures).
Features are classified as "exclusive" and "nonexclusive." This indicates whether several different selectors within a given feature type may be selected at once. Thus, it is possible to have both common and rare ligatures turned on, whereas it is impossible to display a given fraction as simultaneously vertical and diagonal.
For nonexclusive features, selectors come in pairs consisting of an even number (0, 2, 4,…) and the odd number following it (1, 3, 5,…). The even number indicates that the selector is on, and the odd number that it is explicitly off.
For example, the ligature feature has selectors for common ligatures. A selector of 2 means that they are to be turned on and a selector of 3 forces them to be off. Now, Unicode includes a pre-defined fi ligature, fi U+FB01 LATIN SMALL LIGATURE FI. It is included in Unicode for compatibility reasons and ordinarily should not be inserted into text by the user. If for any reason it is, then the feature/selector pair 1/3 could be used to display the ligature as separate f and i glyphs.
In the tables below, the value shown for such paired selectors is always the even one, turning the feature on.
Defined Features
A list of the main features types follows, with links to their descriptions. This is not an exhaustive list of possible feature/selector pairs. In particular, font designers may use custom feature/selector pairs as required. Such custom feature/selector pairs will appear in the UI if the 'feat', 'morx', and 'name' tables are properly set up. Feature types greater than 255 are reserved for custom features.
Early versions of the AAT Font Feature Registry included a number of feature/selector pairs whose use is now discouraged. As a rule, font features should not be used to change the appearance of text when the same effect can be achieved by changing the character stream.
For example, the feature/selector pair kMathematicalExtrasType/kAsteriskToMultiplyOnSelector is used to give an asterisk (*) the appearance of a multiplication sign (×). Both are encoded in Unicode (the asterisk as U+002A and multiplication sign as U+00D7). Changes such as these are generally confusing to users because they can't tell whether the text itself has changed or just its appearance. Such feature/selector pairs were generally defined before all text could be assumed to be Unicode. Since that all text on OS X and iOS is now represented as Unicode, such feature/selector pairs should generally not be used.
The exception would be cases where a character is in Unicode only for compatibility reasons, such as the fi ligature.
Discouraged and deprecated selectors are shown like this.
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.
Note that this feature should be present in the UI only for debugging purposes. It should not be shown to general users, as it will disable features required to make the text legible.
The ligatures that usually appear in well-set text, for instance the "fi" and "fl" ligatures in English. (Note that such ligatures may be serpately encoded within Unicode, but only as compatibility characters.)
Ligatures in a font that are less common than those included in the Common category, for instance an "fj" ligature. (Note that such ligatures may be serpately encoded within Unicode, but only as compatibility characters.)
Logos
kLogosOnSelector kLogosOffSelector
6
Ligatures representing logos (e.g. trademarks). For instance, typing the word "Taligent" and seeing the Taligent logo. This feature/selector pair should not be used; rather, appropriate graphics should be inserted into the text.
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.
The Cursive Connection feature type is used for cursively-connected scripts. It is required for Arabic, but may be used for other scripts as well.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Unconnected
kUnconnectedSelector
0
Disables cursive connection altogether. Note that selecting this for some scripts will result in incorrect liguistic appearance.
Partially Connected
kPartiallyConnectedSelector
1
Selects pre-drawn letterforms that connect in a non-contextual manner.
Cursive
kCursiveSelector
2
Selects full, contextual connection of letterforms. This setting must always be the default in fonts for scripts that require this behavior.
Letter Case
Feature Constant
Feature Value
Feature Type
kLetterCase
3
Exclusive
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.
The Letter Case feature is deprecated. Use the Lower Case and Upper Case features instead.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Upper & Lower Case
kUpperAndLowerCaseSelector
0
The default setting; it leaves letters in whichever case the user has specified.
All Caps
kAllCapsSelector
1
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
kAllLowerCaseSelector
2
Converts all letters non-contextually to lower-case.
Small Caps
kSmallCapsSelector
3
Converts lower-case letters non-contextually into true small caps forms.
Initial Caps
kInitialCapsSelector
4
Contextually converts the first letter of a word into upper-case and the remaining letters into lower-case.
Initial Caps and Small Caps
kInitialCapsAndSmallCapsSelector
5
Contextually converts the first letter of a word into upper-case and the remaining letters into small caps.
Vertical Substitution
Feature Constant
Feature Value
Feature Type
kVerticalSubstitution
4
Nonexclusive
The Vertical Substitution feature type can be used to specify that glyphs need to change their appearance in vertical runs of text.
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).
As a rule, this feature should not be visible in the UI.
The Number Spacing feature type specifies a choice for the appearance of digits.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Monospaced Numbers
kMonospacedNumbersSelector
0
Uniform width numbers, useful for displaying in columns. Sometimes known as "columnating" numbers.
Proportional Numbers
kProportionalNumbersSelector
1
Numbers whose widths vary.
Third-width Numerals
kThirdWidthNumbersSelector
2
Thin numerals.
Quarter-width Numerals
kQuarterWidthNumbersSelector
3
Very thin numerals.
Smart Swash
Feature Constant
Feature Value
Feature Type
kSmartSwash
8
Nonexclusive
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.
Forms that are used at the beginning or middle of words. An example of this is the archaic use of the long-s (ſ) for a medial s.
Diacritics
Feature Constant
Feature Value
Feature Type
kDiacritics
9
Exclusive
The Diacritics feature type allows control over how diacritics (i.e. accent marks or applied vowels) appear in text.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Show Diacritics
kShowDiacriticsSelector
0
This is the default. It means to display the diacritics normally (that is, attached to their baseforms in the right place).
Hide Diacritics
kHideDiacriticsSelector
1
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
kDecomposeDiacriticsSelector
2
Show the diacritics, but rather than attaching them to their baseforms, show them inline with the rest of the text.
Vertical Position
Feature Constant
Feature Value
Feature Type
kVerticalPosition
10
Exclusive
The Vertical Position feature type controls things like superscripts and subscripts.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No Vertical Position
kNormalPositionSelector
0
This is the default. It means to display the text with no vertical displacement.
Superiors
kSuperiorsSelector
1
Changes any characters having superior forms in the font into those forms.
Inferiors
kInferiorsSelector
2
Changes any characters having inferior forms in the font into those forms.
Ordinals
kOrdinalsSelector
3
Contextually changes certain letters into their superior forms, like in Spanish changing from 1a to 1ª.
Scientific Inferiors
kScientificInferiorsSelector
4
Changes any characters having them into inferior forms designed for a technical context (as in H2O).
Fractions
Feature Constant
Feature Value
Feature Type
kFractions
11
Exclusive
The Fractions feature type controls the selection and/or generation of fractions.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No Fractions
kNoFractionsSelector
0
This means fractions should not be formed automatically.
Vertical Fractions
kVerticalFractionsSelector
1
Form vertical (pre-drawn) fractions present in the font.
Diagonal Fractions
kDiagonalFractionsSelector
2
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
Feature Constant
Feature Value
Feature Type
kOverlappingCharacters
13
Nonexclusive
The Overlapping Characters feature type permits the user to prevent the collision of long tails on characters with other characters.
The Typographic Extras feature type represents a collection of effects that are associated with fine typography. It is a non-exclusive feature type.
Except for the slashed/unslashed selector, the use of this feature is discouraged. Font features should not be used to mimic possible changes in the underlying text, as it confuses users.
Changes the hyphen in a space-hyphen-space or digit-hyphen-digit group into an en dash. Use of this selector is discouraged.
Unslashed Zero
kSlashedZeroOnSelector kSlashedZeroOffSelector
4
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.
Special forms of Greek glyphs designed for use in mathematics (as opposed to writing Greek).
Ornament Sets
Feature Constant
Feature Value
Feature Type
kOrnamentSets
16
Exclusive
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 feature is useful to allow a single pi font to stand in for several.
As a rule, this feature should only be used for characters in one of Unicode's private use areas.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
None
kNoOrnamentsSelector
0
Do not select any ornaments.
Dingbats
kDingbatsSelector
1
Chooses miscellaneous symbols such as arrows, stars, and pointing hands used for occasional emphasis in display.
Pi Characters
kPiCharactersSelector
2
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
kFleuronsSelector
3
Chooses ornaments in the shape of flowers, vine leaves, and so on.
Decorative Borders
kDecorativeBordersSelector
4
Chooses glyphs designed to be used in interlocking or repeating patterns as borders for text.
Chooses special symbols used in setting mathematics or logic text. This should only be used for forms which are not already included in Unicode.
Character Alternatives
Feature Constant
Feature Value
Feature Type
kCharacterAlternatives
17
Exclusive
The selectors for this feature 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 (selector 0) should be "No Alternates".
The selectors are not ennumerated.
Design Complexity
Feature Constant
Feature Value
Feature Type
kDesignComplexity
18
Exclusive
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.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Design Level 1
kDesignLevel1Selector
0
Normal glyphs (first design level)
Design Level 2
kDesignLevel2Selector
1
Second design level
Design Level 3
kDesignLevel3Selector
2
Third design level
Design Level 4
kDesignLevel4Selector
3
Fourth design level
Design Level 5
kDesignLevel5Selector
4
Fifth design level
Style Options
Feature Constant
Feature Value
Feature Type
kStyleOptions
19
Exclusive
The Style Options feature type allows the font designer to group together collections of non-contextual substitutions into named sets.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No Style Options
kNoStyleOptionsSelector
0
Use plain text.
Display Text
kDisplayTextSelector
1
Chooses glyphs designed to emphasize the unique appearance of the design at display sizes, typically above 24 point.
Engraved Text
kEngravedTextSelector
2
Chooses glyphs with contrasting strokes parallel to the main strokes, particularly those designed to look like they're engraved in stone.
Illuminated Caps
kIlluminatedCapsSelector
3
Chooses capital letter glyphs with decoration filling the white space surrounding the glyph, in the manner used by medieval scribes.
Titling Caps
kTitlingCapsSelector
4
Specifies conversion of capital letters to a special titling form.
Tall Caps
kTallCapsSelector
5
Specifies conversion of certain capital letters into taller forms.
Character Shape
Feature Constant
Feature Value
Feature Type
kCharacterShape
20
Exclusive
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.
Note that for a Simplified Chinese to Traditional Chinese mapping, there are often several possible choices. Use the traditional characters alternative sets for these.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Traditional Glyphs
kTraditionalCharactersSelector
0
Use traditional forms for characters.
Simplified Glyphs
kSimplifiedCharactersSelector
1
Use simplified forms for characters. The use of this selector for simplified glyphs sperately encoded within Unicode (e.g., 说 for 説).
JIS 1978 Glyphs
kJIS1978CharactersSelector
2
Use character shapes for Japanese characters as defined by the JIS (Japanese Industrial Standard) C 6226-1978 document.
JIS 1983 Glyphs
kJIS1983CharactersSelector
3
Use character shapes for Japanese characters as defined by the JIS X 0208-1983 document.
JIS 1990 Glyphs
kJIS1990CharactersSelector
4
Use character shapes for Japanese characters as defined by the JIS X 0208-1990 document.
Traditional Glyphs, Alternative Set 1
kTraditionalAltOneSelector
5
Use alternate set 1 of traditional forms for characters.
Traditional Glyphs, Alternative Set 2
kTraditionalAltTwoSelector
6
Use alternate set 2 of traditional forms for characters.
Traditional Glyphs, Alternative Set 3
kTraditionalAltThreeSelector
7
Use alternate set 3 of traditional forms for characters.
Traditional Glyphs, Alternative Set 4
kTraditionalAltFourSelector
8
Use alternate set 4 of traditional forms for characters.
Traditional Glyphs, Alternative Set 5
kTraditionalAltFiveSelector
9
Use alternate set 5 of traditional forms for characters.
Expert Glyphs
kExpertCharactersSelector
10
Use "expert" forms of ideographs, such as are defined in the Fujitsu FMR character set.
JIS 2004 Glyphs
kJIS2004CharactersSelector
11
Use character shapes for Japanese characters as defined by the JIS X 0208-2004 document.
Hojo Glyphs
kHojoCharactersSelector
12
The JIS X 0212-1990 (aka, “Hojo Kanji”) and JIS X 0213:2004 character sets overlap significantly. In some cases their prototypical glyphs differ. When building fonts that support both JIS X 0212-1990 and JIS X 0213:2004 (such as those supporting the Adobe-Japan 1-6 character collection), it is recommended that JIS X 0213:2004 forms be preferred as the encoded form. The 'hojo' feature is used to access the JIS X 0212-1990 glyphs for the cases when the JIS X 0213:2004 form is encoded.
NLC Glyphs
kNLCCharactersSelector
13
The National Language Council (NLC) of Japan has defined new glyph shapes for a number of JIS characters in 2000. This selector is used to access those glyphs.
Traditional Names
kTraditionalNamesCharactersSelector
14
Maps simplified forms in a font to corresponding traditional forms which can be used in personal names.
Number Case
Feature Constant
Feature Value
Feature Type
kNumberCase
21
Exclusive
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.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Lower Case Numbers
kLowerCaseNumbersSelector
0
These forms of numbers may descend below the baseline. They are sometimes known as "traditional" or "old-style" numbers.
Upper Case Numbers
kUpperCaseNumbersSelector
1
These forms of numbers do not descend below the baseline. They are sometimes known as "lining" numbers.
Text Spacing
Feature Constant
Feature Value
Feature Type
kTextSpacing
22
Exclusive
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.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Proportional
kProportionalTextSelector
0
Selects the proportional forms of letters.
Monospace
kMonospacedTextSelector
1
Selects the monospace forms of letters.
Half-width
kHalfWidthTextSelector
2
Selects the half-width forms of letters.
Third-width
kThirdWidthTextSelector
3
Selects the third-width forms of letters.
Quarter-width
kQuarterWidthTextSelector
4
Selects the quarter-width forms of letters.
Alternate Proportional
kAltProportionalTextSelector
5
Selects alternate proportional forms of letters.
Alternate Half-width
kAltHalfWidthTextSelector
6
Selects alternate half-width forms of letters.
Transliteration
Feature Constant
Feature Value
Feature Type
kTransliteration
23
Exclusive
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. As transliteration is usually done in character space, its use is strongly discouraged.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No Transliteration
kNoTransliterationSelector
0
Indicates that no transliteration should take place.
Hanja to Hangul
kHanjaToHangulSelector
1
Indicates hanja should be transliterated to hangul.
Hiragana To Katakana
kHiraganaToKatakanaSelector
2
Indicates hiragana should be transliterated to katakana.
Katakana To Hiragana
kKatakanaToHiraganaSelector
3
Indicates katakana should be transliterated to hiragana.
Kana To Romanization
kKanaToRomanizationSelector
4
Indicates hiragana and katakana should be transliterated to romaji.
Romanization To Hiragana
kRomanizationToHiraganaSelector
5
Indicates romaji should be transliterated to hiragana.
Romanization To Katakana
kRomanizationToKatakanaSelector
6
Indicates romaji should be transliterated to katakana.
Hanja To Hangul Alt One
kHanjaToHangulAltOneSelector
7
This indicates that hanja with multiple readings should be translirated into hangul for their second reading.
Hanja To Hangul Alt Two
kHanjaToHangulAltTwoSelector
8
This indicates that hanja with multiple readings should be translirated into hangul for their third reading.
Hanja To Hangul Alt Three
kHanjaToHangulAltThreeSelector
9
This indicates that hanja with multiple readings should be translirated into hangul for their fourth reading.
Annotation
Feature Constant
Feature Value
Feature Type
kAnnotation
24
Exclusive
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. Many of these are separately encoded in Unicode for compatibility reasons, but the use of this feature allows for a more extensive set of annotated numerals to be available.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No Annotation
kNoAnnotationSelector
0
Indicates that characters should appear without annotation.
Box Annotation
kBoxAnnotationSelector
1
Use the forms of characters surrounded by a box cartouche.
Rounded Box Annotation
kRoundedBoxAnnotationSelector
2
Use the forms of characters surrounded by a box cartouche with rounded corners.
Circle Annotation
kCircleAnnotationSelector
3
Use the forms of characters surrounded by a circle. For instance, see Unicodes U+3260 through U+326F.
Inverted Circle Annotation
kInvertedCircleAnnotationSelector
4
Same as Circle Annotation, but with white and black reversed. For instance, see Unicodes U+2776 through U+277F.
Parenthesis Annotation
kParenthesisAnnotationSelector
5
Use the forms of characters surrounded by parentheses. For instance, see Unicodes U+2474 through U+2487.
Period Annotation
kPeriodAnnotationSelector
6
Use the forms of characters followed by a period. For instance, see Unicodes U+2488 through U+249B.
Roman Numeral Annotation
kRomanNumeralAnnotationSelector
7
Display the given characters in their Roman Numeral form.
Diamond Annotation
kDiamondAnnotationSelector
8
Display the text surrounded by a diamond.
Inverted Box Annotation
kInvertedBoxAnnotationSelector
9
Same as Box Annotation, but with white and black reversed.
Inverted Rounded Box Annotation
kInvertedRoundedBoxAnnotationSelector
10
Same as Rounded Box Annotation, but with white and black reversed.
Kana Spacing
Feature Constant
Feature Value
Feature Type
kKanaSpacing
25
Exclusive
The Kana Spacing feature type is used to select widths specifically for Japanese hiragana and katakana characters.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Full Width
kFullWidthKanaSelector
0
Selects the full width forms of kana.
Proportional
kProportionalKanaSelector
1
Selects the proportional forms of kana.
Ideographic Spacing
Feature Constant
Feature Value
Feature Type
kIdeographicSpacing
26
Exclusive
The Ideographic Spacing feature type is used to select between full-width and proportional forms of ideographs (i.e. Han-derived characters).
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Full Width
kFullWidthIdeographsSelector
0
Selects the full width forms of ideographs.
Proportional
kProportionalIdeographsSelector
1
Selects the proportional forms of ideographs.
Half Width
kHalfWidthIdeographsSelector
2
Selects the half-width forms of ideographs.
Unicode Decomposition
Feature Constant
Feature Value
Feature Type
kUnicodeDecomposition
27
Nonexclusive
This feature is used to make various forms of Unicode composition/decomposition visible to the user.
Some of the old Macintosh text encodings used with QuickDraw included characters not encoded in Unicode. To provide round-trip compatibility between the two, Apple includes in its implementation of Unicode's Private Use area characters that interact with others to control the transcoding process. This feature/selector pair is used to control whether or not these transcoding controls are used.
Ruby Kana
Feature Constant
Feature Value
Feature Type
kRubyKana
28
Nonexclusive
Japanese typesetting often uses smaller kana glyphs, generally in superscripted form, to clarify the meaning of kanji which may be unfamiliar to the reader. These are called ruby, from the old typesetting term for four-point-sized type. This feature identifies glyphs in the font which have been designed for this use, substituting them for the default designs.
A layout engine will need to do scaling and repositioning of glyphs in order to generate proper ruby. This feature by itself is insufficient.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No Ruby Kana
kNoRubyKanaSelector
0
Do not use ruby shapes
Ruby Kana
kRubyKanaSelector
1
Use ruby shapes
Ruby Kana
kRubyKanaOnSelector RubyKanaOffSelector
2
Turns ruby shapes on or off
CJK Symbol Alternatives
Feature Constant
Feature Value
Feature Type
kCJKSymbolAlternatives
29
Exclusive
This feature allows the selection of various alternate forms specific to East Asian symbol characters (e.g., 〠 U+3020 POSTAL MARK FACE).
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No CJK Symbol Alternatives
kNoCJKSymbolAlternativesSelector
0
Use standard forms (that is, the ones characters are mapped to by the 'cmap')
CJK Symbol Alt One
kCJKSymbolAltOneSelector
1
Use the first set of alternate forms
CJK Symbol Alt Two
kCJKSymbolAltTwoSelector
2
Use the second set of alternate forms
CJK Symbol Alt Three
kCJKSymbolAltThreeSelector
3
Use the third set of alternate forms
CJK Symbol Alt Four
kCJKSymbolAltFourSelector
4
Use the fourth set of alternate forms
CJK Symbol Alt Five
kCJKSymbolAltFiveSelector
5
Use the fifth set of alternate forms
Ideographic Alternatives
Feature Constant
Feature Value
Feature Type
kIdeographicAlternatives
30
Exclusive
This feature allows the selection of various alternate forms specific to East Asian ideographs (e.g., 誠 U+8AA0 vs. 説 U+8AAC, although these two have been separately encoded).
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No Ideographic Alternatives
kNoIdeographicAlternativesSelector
0
Use standard forms (that is, the ones characters are mapped to by the 'cmap')
Ideographic Alt One
kIdeographicAltOneSelector
1
Use the first set of alternate forms
Ideographic Alt Two
kIdeographicAltTwoSelector
2
Use the second set of alternate forms
Ideographic Alt Three
kIdeographicAltThreeSelector
3
Use the third set of alternate forms
Ideographic Alt Four
kIdeographicAltFourSelector
4
Use the fourth set of alternate forms
Ideographic Alt Five
kIdeographicAltFiveSelector
5
Use the fifth set of alternate forms
CJK Vertical Roman Placement
Feature Constant
Feature Value
Feature Type
kCJKVerticalRomanPlacement
31
Exclusive
This feature controls how romaji are positioned relative to kanji. The same effect can be achieved by setting the baseline.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
CJK Vertical Roman Centered
kCJKVerticalRomanCenteredSelector
0
Center Roman glyphs vertically so that their centers and the centers of ideographs are the same
CJK Vertical Roman H Baseline
kCJKVerticalRomanHBaselineSelector
1
Use a standard Roman baseline for Roman glyphs
Italic CJK Roman
Feature Constant
Feature Value
Feature Type
kItalicCJKRoman
32
Nonexclusive
Determines whether romaji are written using italic glyphs when mixed with kanji.
This feature allows for alternate forms of punctuation when found in lower-case-only text. For example, an em-dash looks best if its position when surrounded by lower-case letters is lower than its position when surrounded by numerals or upper-case letters.
Indicates that alternate forms for hiragana and katakana should be used in vertical text.
Stylistic Alternatives
Feature Constant
Feature Value
Feature Type
kStylisticAlternatives
35
Nonexclusive
This feature allows for different stylistic alternatives for glyphs and is largely equivalent to a nonexclusive version of the Character Alternatives feature. It is intended specifically to be used as the AAT equivalent of the OpenType 'ss01' through 'ss20' features.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
No Stylistic Alternates
kNoStylisticAlternatesSelector
0
Use standard forms (that is, the ones characters are mapped to by the 'cmap')
Turn alternates on or off for context-dependent glyphs and swashes
Lower Case
Feature Constant
Feature Value
Feature Type
kLowerCase
37
Exclusive
This feature replaces some of the functionality of the Letter Case feature. It is used to alter the appearance of lower-case text to that either of small caps or petite caps. [Some fonts contain an additional size of capital letters, shorter than the regular smallcaps and whimsically referred to as petite caps. Such forms are most likely to be found in designs with a small lowercase x-height, where they better harmonise with lowercase text than the taller smallcaps [for examples of petite caps, see the Emigre type families Mrs Eaves and Filosofia].) The display of actual upper-case glyphs for lower-case letters is discouraged.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Default Lower Case
kDefaultLowerCaseSelector
0
Use standard lower-case glyphs
Lower Case Small Caps
kLowerCaseSmallCapsSelector
1
Display lower-case glyphs as small caps. (This is the most common way of displaying small caps.)
Lower Case Petite Caps
kLowerCasePetiteCapsSelector
2
Display lower-case glyphs as petite caps
Upper Case
Feature Constant
Feature Value
Feature Type
kUpperCase
38
Exclusive
This feature replaces some of the functionality of the Letter Case feature. It is used to alter the appearance of upper-case text to that either of small caps or petite caps. [Some fonts contain an additional size of capital letters, shorter than the regular smallcaps and whimsically referred to as petite caps. Such forms are most likely to be found in designs with a small lowercase x-height, where they better harmonise with lowercase text than the taller smallcaps [for examples of petite caps, see the Emigre type families Mrs Eaves and Filosofia].) The display of actual lower-case glyphs for upper-case letters is discouraged.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Default Upper Case
kDefaultUpperCaseSelector
0
Use standard upper-case glyphs
Upper Case Small Caps
kUpperCaseSmallCapsSelector
1
Display upper-case glyphs as small caps (used commonly with acronyms).
Upper Case Petite Caps
kUpperCasePetiteCapsSelector
2
Display upper-case glyphs as petite caps
Language Tag
Feature Constant
Feature Value
Feature Type
kLanguageTag
39
Exclusive
This feature allows the use of language-specific glyphs. The selectors, other than 0, are one more than indices within the 'ltag' table, which then maps them to a standard IETF language tag.
For example, if the language tag at index 0 of the 'ltag' table is "sr" (for Serbian), then a feature/selector combination of 39/1 would change glyphs into any Serbian-specific shapes.
CJK Roman Spacing
Feature Constant
Feature Value
Feature Type
kCJKRomanSpacing
103
Exclusive
The CJK Roman Spacing feature type is used to select between the proportional and half-width forms of Roman characters in a CJK font.
Selector Name
Selector Constant(s)
Selector Value
Selector Function
Half-width
kHalfWidthCJKRomanSelector
0
Selects the half-width forms of letters.
Proportional
kProportionalCJKRomanSelector
1
Selects the proportional forms of letters.
Default Roman
kDefaultCJKRomanSelector
2
Selects the default Roman forms of letters.
Full-width Roman
kFullWidthCJKRomanSelector
3
Selects the full-width Roman forms of letters.
The application interface
For convenience, this section gives the C language interface that applications use to support the feature types and selectors listed above.
The most current version of this interface is available in the header SFNTTypes.h.