Font Feature Registry
Introduction
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.
- All Typographic Features
- Alternate Kana
- Annotation
- Case Sensitive Layout
- Character Alternatives
- Character Shape
- CJK Roman Spacing
- CJK Symbol Alternatives
- CJK Vertical Roman Placement
- Contextual Alternates
- Cursive Connection
- Design Complexity
- Diacritics
- Fractions
- Ideographic Alternatives
- Ideographic Spacing
- Italic CJK Roman
- Kana Spacing
- Language Tag
- Letter Case
- Ligatures
- Linguistic Rearrangement
- Lower Case
- Mathematical Extras
- Number Case
- Number Spacing
- Ornament Sets
- Overlapping Characters
- Ruby Kana
- Smart Swash
- Style Options
- Stylistic Alternatives
- Text Spacing
- Transliteration
- Typographic Extras
- Unicode Decomposition
- Upper Case
- Vertical Position
- Vertical Substitution
All Typographic Features
Feature Constant | Feature Value | Feature Type |
---|---|---|
kAllTypographicFeatures | 0 | Nonexclusive |
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.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
All Typographic Features | kAllTypeFeaturesOnSelector kAllTypeFeaturesOffSelector |
0 | Turns on or off all other features. This feature/selector pair is required and will be added to a 'morx' table automatically by ftxenhancer. |
Ligatures
Feature Constant | Feature Value | Feature Type |
---|---|---|
kLigatures | 1 | Nonexclusive |
The Ligatures feature type permits selection from different kinds of ligatures. It is a non-exclusive feature type.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Required Ligatures | kRequiredLigaturesOnSelector kRequiredLigaturesOffSelector |
0 | Those ligatures that are linguistically required, such as occur in Arabic or Hindi. This should generally not be visible in the UI. |
Common Ligatures | kCommonLigaturesOnSelector kCommonLigaturesOffSelector |
2 | 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.) |
Rare Ligatures | kRareLigaturesOnSelector kRareLigaturesOffSelector |
4 | 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. |
Rebus Pictures | kRebusPicturesOnSelector kRebusPicturesOffSelector |
8 | Ligatures that are pictures representing words or syllables. |
Diphthong Ligatures | kDiphthongLigaturesOnSelector kDiphthongLigaturesOffSelector |
10 | Ligatures like Æ and æ. The use of this selector is strongly discouraged. |
Squared Ligatures | kSquaredLigaturesOnSelector kSquaredLigaturesOffSelector |
12 | 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 | kAbbrevSquaredLigaturesOnSelector kAbbrevSquaredLigaturesOffSelector |
14 | These are similar to the previously described ligatures, but in abbreviated form. |
Symbol Ligatures | kSymbolLigaturesOnSelector kSymbolLigaturesOffSelector |
16 | Ligatures displayed using a graphic (e.g., emoji) |
Contextual Ligatures | kContextualLigaturesOnSelector kContextualLigaturesOffSelector |
18 | Ligatures which appear in some context and not in others. |
Historical Ligatures | kHistoricalLigaturesOnSelector kHistoricalLigaturesOffSelector |
20 | Ligatures which are generally not in current use. |
Cursive Connection
Feature Constant | Feature Value | Feature Type |
---|---|---|
kCursiveConnection | 2 | Exclusive |
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.
There is only one selector for this feature:
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Vertical Substitution | kSubstituteVerticalFormsOnSelector kSubstituteVerticalFormsOffSelector |
0 | Turns on the feature. |
Linguistic Rearrangement
Feature Constant | Feature Value | Feature Type |
---|---|---|
kLinguisticRearrangement | 5 | Nonexclusive |
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.
There is only one selector for this feature:
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Linguistic Rearrangement | kLinguisticRearrangementOnSelector kLinguisticRearrangementOffSelector |
0 | Turns on the feature. |
Number Spacing
Feature Constant | Feature Value | Feature Type |
---|---|---|
kNumberSpacing | 6 | Exclusive |
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.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Word Initial Swashes | kWordInitialSwashesOnSelector kWordInitialSwashesOffSelector |
0 | Special forms that can appear at the start of a word (or a line). |
Word Final Swashes | kWordFinalSwashesOnSelector kWordFinalSwashesOffSelector |
2 | Special forms that can appear at the end of a word (or a line). |
Line Initial Swashes | kLineInitialSwashesOnSelector kLineInitialSwashesOffSelector |
4 | Special forms that can appear only at the start of a line. This is unsupported in CoreText. |
Line Final Swashes | kLineFinalSwashesOnSelector kLineFinalSwashesOffSelector |
6 | Special forms that can appear only at the end of a line. This is unsupported in CoreText. |
Non-Final Swashes | kNonFinalSwashesOnSelector kNonFinalSwashesOffSelector |
8 | 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.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Overlap Prevention | kPreventOverlapOnSelector kPreventOverlapOffSelector |
0 | Turns overlap prevention on or off. |
Typographic Extras
Feature Constant | Feature Value | Feature Type |
---|---|---|
kTypographicExtras | 14 | Nonexclusive |
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.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Hyphens to Em Dash | kHyphensToEmDashOnSelector kHyphensToEmDashOffSelector |
0 | Causes two adjacent hyphens to change into a single em dash. Use of this selector is discouraged. |
Hyphen to En Dash | kHyphenToEnDashOnSelector kHyphenToEnDashOffSelector |
2 | 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. |
Form Interrobang | kFormInterrobangOnSelector kFormInterrobangOffSelector |
6 | Maps the strings '?!' or '!?' to the interrobang (if present in the font). Use of this selector is discouraged. |
Smart Quotes | kSmartQuotesOnSelector kSmartQuotesOffSelector |
8 | Contextually replaces straight quotes with curly quotes. Use of this selector is discouraged. |
Periods to Ellipsis | kPeriodsToEllipsisOnSelector kPeriodsToEllipsisOffSelector |
10 | Replaces a sequence of three periods with the ellipsis. Use of this selector is discouraged. |
Mathematical Extras
Feature Constant | Feature Value | Feature Type |
---|---|---|
kMathematicalExtras | 15 | Nonexclusive |
The Mathematical Extras feature type represents a collection of effects useful in setting figures and mathematics. It is a non-exclusive feature type.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Hyphen To Minus | kHyphenToMinusOnSelector kHyphenToMinusOffSelector |
0 | Changes the hyphen in a space-hyphen-space or digit-hyphen-digit group into a minus. Use of this selector is discouraged. |
Asterisk to Multiply | kAsteriskToMultiplyOnSelector kAsteriskToMultiplyOffSelector |
2 | Changes the "*" in a space-*-space group into a multiplication sign (×). Use of this selector is discouraged. |
Slash to Divide | kSlashToDivideOnSelector kSlashToDivideOffSelector |
4 | Changes the "/" in a space-/-space group into a division sign (÷). Use of this selector is discouraged. |
Inequality Ligatures | kInequalityLigaturesOnSelector kInequalityLigaturesOffSelector |
6 | Changes the >= sequence into a greater-than-or-equal glyph and the <= sequence into a less-than-or-equal glyph. Use of this selector is discouraged. |
Exponents | kExponentsOnSelector kExponentsOffSelector |
8 | Takes digits immediately following a "^" and changes them into their superior forms. Use of this selector is discouraged. |
Mathematical Greek | kMathematicalGreekOnSelector kMathematicalGreekOffSelector |
10 | 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. |
International Symbols | kInternationalSymbolsSelector | 5 | Chooses glyphs representing standard, internationally-recognizable icons. |
Math Symbols | kMathSymbolsSelector | 6 | 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.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Canonical Composition | kCanonicalCompositionOnSelector kCanonicalCompositionOffSelector |
0 | Displays decomposed Unicode as fully composed. This selector should generally not appear in the UI. |
Compatibility Composition | kCompatibilityCompositionOnSelector kCompatibilityCompositionOffSelector |
2 | Displays decomposed compatibility Unicode as fully composed. This selector should generally not appear in the UI. |
Transcoding Composition | kTranscodingCompositionOnSelector kTranscodingCompositionOffSelector |
4 | 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.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
No CJK Italic Roman | kNoCJKItalicRomanSelector | 0 | Do not use italic glyphs for romaji |
CJK Italic Roman | kCJKItalicRomanSelector | 1 | Use italic glyphs for romaji |
CJK Italic Roman | kCJKItalicRomanOnSelector CJKItalicRomanOffSelector |
2 | Turns the use of italics for romaji on and off |
Case Sensitive Layout
Feature Constant | Feature Value | Feature Type |
---|---|---|
kCaseSensitiveLayout | 33 | Nonexclusive |
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.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Case Sensitive Layout | kCaseSensitiveLayoutOnSelector CaseSensitiveLayoutOffSelector |
0 | Turn case-sensitive casing on or off |
Case Sensitive Spacing | kCaseSensitiveSpacingOnSelector CaseSensitiveSpacingOffSelector |
2 | Turn case-sensitive spacing on or off |
Alternate Kana
Feature Constant | Feature Value | Feature Type |
---|---|---|
kAlternateKana | 34 | Nonexclusive |
This allows different forms for kana to be used in horizontal or vertical text.
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Alternate Horiz Kana | kAlternateHorizKanaOnSelector AlternateHorizKanaOffSelector |
0 | Indicates that alternate forms for hiragana and katakana should be used in horizontal text. |
Alternate Vert Kana | kAlternateVertKanaOnSelector AlternateVertKanaOffSelector |
2 | 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') |
Stylistic Alt One | kStylisticAltOneOnSelector StylisticAltOneOffSelector |
2 | Turns the first set of alternates on or off |
Stylistic Alt Two | kStylisticAltTwoOnSelector StylisticAltTwoOffSelector |
4 | Turns the second set of alternates on or off |
Stylistic Alt Three | kStylisticAltThreeOnSelector StylisticAltThreeOffSelector |
6 | Turns the third set of alternates on or off |
Stylistic Alt Four | kStylisticAltFourOnSelector StylisticAltFourOffSelector |
8 | Turns the fourth set of alternates on or off |
Stylistic Alt Five | kStylisticAltFiveOnSelector StylisticAltFiveOffSelector |
10 | Turns the fifth set of alternates on or off |
Stylistic Alt Six | kStylisticAltSixOnSelector StylisticAltSixOffSelector |
12 | Turns the sixth set of alternates on or off |
Stylistic Alt Seven | kStylisticAltSevenOnSelector StylisticAltSevenOffSelector |
14 | Turns the seventh set of alternates on or off |
Stylistic Alt Eight | kStylisticAltEightOnSelector StylisticAltEightOffSelector |
16 | Turns the eighth set of alternates on or off |
Stylistic Alt Nine | kStylisticAltNineOnSelector StylisticAltNineOffSelector |
18 | Turns the ninth set of alternates on or off |
Stylistic Alt Ten | kStylisticAltTenOnSelector StylisticAltTenOffSelector |
20 | Turns the tenth set of alternates on or off |
Stylistic Alt Eleven | kStylisticAltElevenOnSelector StylisticAltElevenOffSelector |
22 | Turns the eleventh set of alternates on or off |
Stylistic Alt Twelve | kStylisticAltTwelveOnSelector StylisticAltTwelveOffSelector |
24 | Turns the twelfth set of alternates on or off |
Stylistic Alt Thirteen | kStylisticAltThirteenOnSelector StylisticAltThirteenOffSelector |
26 | Turns the thirteenth set of alternates on or off |
Stylistic Alt Fourteen | kStylisticAltFourteenOnSelector StylisticAltFourteenOffSelector |
28 | Turns the fourteenth set of alternates on or off |
Stylistic Alt Fifteen | kStylisticAltFifteenOnSelector StylisticAltFifteenOffSelector |
30 | Turns the fifteenth set of alternates on or off |
Stylistic Alt Sixteen | kStylisticAltSixteenOnSelector StylisticAltSixteenOffSelector |
32 | Turns the sixteenth set of alternates on or off |
Stylistic Alt Seventeen | kStylisticAltSeventeenOnSelector StylisticAltSeventeenOffSelector |
34 | Turns the seventeenth set of alternates on or off |
Stylistic Alt Eighteen | kStylisticAltEighteenOnSelector StylisticAltEighteenOffSelector |
36 | Turns the eighteenth set of alternates on or off |
Stylistic Alt Nineteen | kStylisticAltNineteenOnSelector StylisticAltNineteenOffSelector |
38 | Turns the nineteenth set of alternates on or off |
Stylistic Alt Twenty | kStylisticAltTwentyOnSelector StylisticAltTwentyOffSelector |
40 | Turns the twentieth set of alternates on or off |
Contextual Alternates
Feature Constant | Feature Value | Feature Type |
---|---|---|
kContextualAlternates | 36 | Nonexclusive |
This feature is used to support alternate shapes for context-dependent glyphs and swashes
Selector Name | Selector Constant(s) | Selector Value | Selector Function |
---|---|---|---|
Contextual Alternates | kContextualAlternatesOnSelector ContextualAlternatesOffSelector |
0 | Turn alternates on or off for context-dependent glyphs |
Swash Alternates | kSwashAlternatesOnSelector SwashAlternatesOffSelector |
2 | Turn alternates on or off for context-dependent swashes |
Contextual Swash Alternates | kContextualSwashAlternatesOnSelector ContextualSwashAlternatesOffSelector |
4 | 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
.
enum { kAllTypographicFeaturesType = 0, kLigaturesType = 1, kCursiveConnectionType = 2, kLetterCaseType = 3, /* deprecated - use kLowerCaseType or kUpperCaseType instead */ kVerticalSubstitutionType = 4, kLinguisticRearrangementType = 5, kNumberSpacingType = 6, kSmartSwashType = 8, kDiacriticsType = 9, kVerticalPositionType = 10, kFractionsType = 11, kOverlappingCharactersType = 13, kTypographicExtrasType = 14, kMathematicalExtrasType = 15, kOrnamentSetsType = 16, kCharacterAlternativesType = 17, kDesignComplexityType = 18, kStyleOptionsType = 19, kCharacterShapeType = 20, kNumberCaseType = 21, kTextSpacingType = 22, kTransliterationType = 23, kAnnotationType = 24, kKanaSpacingType = 25, kIdeographicSpacingType = 26, kUnicodeDecompositionType = 27, kRubyKanaType = 28, kCJKSymbolAlternativesType = 29, kIdeographicAlternativesType = 30, kCJKVerticalRomanPlacementType = 31, kItalicCJKRomanType = 32, kCaseSensitiveLayoutType = 33, kAlternateKanaType = 34, kStylisticAlternativesType = 35, kContextualAlternatesType = 36, kLowerCaseType = 37, kUpperCaseType = 38, kLanguageTagType = 39, kCJKRomanSpacingType = 103, kLastFeatureType = -1 }; /* * Summary: * Selectors for feature type kAllTypographicFeaturesType */ enum { kAllTypeFeaturesOnSelector = 0, kAllTypeFeaturesOffSelector = 1 }; /* * Summary: * Selectors for feature type kLigaturesType */ enum { kRequiredLigaturesOnSelector = 0, kRequiredLigaturesOffSelector = 1, kCommonLigaturesOnSelector = 2, kCommonLigaturesOffSelector = 3, kRareLigaturesOnSelector = 4, kRareLigaturesOffSelector = 5, kLogosOnSelector = 6, kLogosOffSelector = 7, kRebusPicturesOnSelector = 8, kRebusPicturesOffSelector = 9, kDiphthongLigaturesOnSelector = 10, kDiphthongLigaturesOffSelector = 11, kSquaredLigaturesOnSelector = 12, kSquaredLigaturesOffSelector = 13, kAbbrevSquaredLigaturesOnSelector = 14, kAbbrevSquaredLigaturesOffSelector = 15, kSymbolLigaturesOnSelector = 16, kSymbolLigaturesOffSelector = 17, kContextualLigaturesOnSelector = 18, kContextualLigaturesOffSelector = 19, kHistoricalLigaturesOnSelector = 20, kHistoricalLigaturesOffSelector = 21 }; /* * Summary: * Selectors for feature type kCursiveConnectionType */ enum { kUnconnectedSelector = 0, kPartiallyConnectedSelector = 1, kCursiveSelector = 2 }; /* * Summary: * Selectors for feature type kLetterCaseType */ enum { kUpperAndLowerCaseSelector = 0, /* deprecated */ kAllCapsSelector = 1, /* deprecated */ kAllLowerCaseSelector = 2, /* deprecated */ kSmallCapsSelector = 3, /* deprecated */ kInitialCapsSelector = 4, /* deprecated */ kInitialCapsAndSmallCapsSelector = 5 /* deprecated */ }; /* * Summary: * Selectors for feature type kVerticalSubstitutionType */ enum { kSubstituteVerticalFormsOnSelector = 0, kSubstituteVerticalFormsOffSelector = 1 }; /* * Summary: * Selectors for feature type kLinguisticRearrangementType */ enum { kLinguisticRearrangementOnSelector = 0, kLinguisticRearrangementOffSelector = 1 }; /* * Summary: * Selectors for feature type kNumberSpacingType */ enum { kMonospacedNumbersSelector = 0, kProportionalNumbersSelector = 1, kThirdWidthNumbersSelector = 2, kQuarterWidthNumbersSelector = 3 }; /* * Summary: * Selectors for feature type kSmartSwashType */ enum { kWordInitialSwashesOnSelector = 0, kWordInitialSwashesOffSelector = 1, kWordFinalSwashesOnSelector = 2, kWordFinalSwashesOffSelector = 3, kLineInitialSwashesOnSelector = 4, kLineInitialSwashesOffSelector = 5, kLineFinalSwashesOnSelector = 6, kLineFinalSwashesOffSelector = 7, kNonFinalSwashesOnSelector = 8, kNonFinalSwashesOffSelector = 9 }; /* * Summary: * Selectors for feature type kDiacriticsType */ enum { kShowDiacriticsSelector = 0, kHideDiacriticsSelector = 1, kDecomposeDiacriticsSelector = 2 }; /* * Summary: * Selectors for feature type kVerticalPositionType */ enum { kNormalPositionSelector = 0, kSuperiorsSelector = 1, kInferiorsSelector = 2, kOrdinalsSelector = 3, kScientificInferiorsSelector = 4 }; /* * Summary: * Selectors for feature type kFractionsType */ enum { kNoFractionsSelector = 0, kVerticalFractionsSelector = 1, kDiagonalFractionsSelector = 2 }; /* * Summary: * Selectors for feature type kOverlappingCharactersType */ enum { kPreventOverlapOnSelector = 0, kPreventOverlapOffSelector = 1 }; /* * Summary: * Selectors for feature type kTypographicExtrasType */ enum { kHyphensToEmDashOnSelector = 0, kHyphensToEmDashOffSelector = 1, kHyphenToEnDashOnSelector = 2, kHyphenToEnDashOffSelector = 3, kSlashedZeroOnSelector = 4, kSlashedZeroOffSelector = 5, kFormInterrobangOnSelector = 6, kFormInterrobangOffSelector = 7, kSmartQuotesOnSelector = 8, kSmartQuotesOffSelector = 9, kPeriodsToEllipsisOnSelector = 10, kPeriodsToEllipsisOffSelector = 11 }; /* * Summary: * Selectors for feature type kMathematicalExtrasType */ enum { kHyphenToMinusOnSelector = 0, kHyphenToMinusOffSelector = 1, kAsteriskToMultiplyOnSelector = 2, kAsteriskToMultiplyOffSelector = 3, kSlashToDivideOnSelector = 4, kSlashToDivideOffSelector = 5, kInequalityLigaturesOnSelector = 6, kInequalityLigaturesOffSelector = 7, kExponentsOnSelector = 8, kExponentsOffSelector = 9, kMathematicalGreekOnSelector = 10, kMathematicalGreekOffSelector = 11 }; /* * Summary: * Selectors for feature type kOrnamentSetsType */ enum { kNoOrnamentsSelector = 0, kDingbatsSelector = 1, kPiCharactersSelector = 2, kFleuronsSelector = 3, kDecorativeBordersSelector = 4, kInternationalSymbolsSelector = 5, kMathSymbolsSelector = 6 }; /* * Summary: * Selectors for feature type kCharacterAlternativesType */ enum { kNoAlternatesSelector = 0 }; /* * Summary: * Selectors for feature type kDesignComplexityType */ enum { kDesignLevel1Selector = 0, kDesignLevel2Selector = 1, kDesignLevel3Selector = 2, kDesignLevel4Selector = 3, kDesignLevel5Selector = 4 }; /* * Summary: * Selectors for feature type kStyleOptionsType */ enum { kNoStyleOptionsSelector = 0, kDisplayTextSelector = 1, kEngravedTextSelector = 2, kIlluminatedCapsSelector = 3, kTitlingCapsSelector = 4, kTallCapsSelector = 5 }; /* * Summary: * Selectors for feature type kCharacterShapeType */ enum { kTraditionalCharactersSelector = 0, kSimplifiedCharactersSelector = 1, kJIS1978CharactersSelector = 2, kJIS1983CharactersSelector = 3, kJIS1990CharactersSelector = 4, kTraditionalAltOneSelector = 5, kTraditionalAltTwoSelector = 6, kTraditionalAltThreeSelector = 7, kTraditionalAltFourSelector = 8, kTraditionalAltFiveSelector = 9, kExpertCharactersSelector = 10, kJIS2004CharactersSelector = 11, kHojoCharactersSelector = 12, kNLCCharactersSelector = 13, kTraditionalNamesCharactersSelector = 14 }; /* * Summary: * Selectors for feature type kNumberCaseType */ enum { kLowerCaseNumbersSelector = 0, kUpperCaseNumbersSelector = 1 }; /* * Summary: * Selectors for feature type kTextSpacingType */ enum { kProportionalTextSelector = 0, kMonospacedTextSelector = 1, kHalfWidthTextSelector = 2, kThirdWidthTextSelector = 3, kQuarterWidthTextSelector = 4, kAltProportionalTextSelector = 5, kAltHalfWidthTextSelector = 6 }; /* * Summary: * Selectors for feature type kTransliterationType */ enum { kNoTransliterationSelector = 0, kHanjaToHangulSelector = 1, kHiraganaToKatakanaSelector = 2, kKatakanaToHiraganaSelector = 3, kKanaToRomanizationSelector = 4, kRomanizationToHiraganaSelector = 5, kRomanizationToKatakanaSelector = 6, kHanjaToHangulAltOneSelector = 7, kHanjaToHangulAltTwoSelector = 8, kHanjaToHangulAltThreeSelector = 9 }; /* * Summary: * Selectors for feature type kAnnotationType */ enum { kNoAnnotationSelector = 0, kBoxAnnotationSelector = 1, kRoundedBoxAnnotationSelector = 2, kCircleAnnotationSelector = 3, kInvertedCircleAnnotationSelector = 4, kParenthesisAnnotationSelector = 5, kPeriodAnnotationSelector = 6, kRomanNumeralAnnotationSelector = 7, kDiamondAnnotationSelector = 8, kInvertedBoxAnnotationSelector = 9, kInvertedRoundedBoxAnnotationSelector = 10 }; /* * Summary: * Selectors for feature type kKanaSpacingType */ enum { kFullWidthKanaSelector = 0, kProportionalKanaSelector = 1 }; /* * Summary: * Selectors for feature type kIdeographicSpacingType */ enum { kFullWidthIdeographsSelector = 0, kProportionalIdeographsSelector = 1, kHalfWidthIdeographsSelector = 2 }; /* * Summary: * Selectors for feature type kUnicodeDecompositionType */ enum { kCanonicalCompositionOnSelector = 0, kCanonicalCompositionOffSelector = 1, kCompatibilityCompositionOnSelector = 2, kCompatibilityCompositionOffSelector = 3, kTranscodingCompositionOnSelector = 4, kTranscodingCompositionOffSelector = 5 }; /* * Summary: * Selectors for feature type kRubyKanaType */ enum { kNoRubyKanaSelector = 0, /* deprecated - use kRubyKanaOffSelector instead */ kRubyKanaSelector = 1, /* deprecated - use kRubyKanaOnSelector instead */ kRubyKanaOnSelector = 2, kRubyKanaOffSelector = 3 }; /* * Summary: * Selectors for feature type kCJKSymbolAlternativesType */ enum { kNoCJKSymbolAlternativesSelector = 0, kCJKSymbolAltOneSelector = 1, kCJKSymbolAltTwoSelector = 2, kCJKSymbolAltThreeSelector = 3, kCJKSymbolAltFourSelector = 4, kCJKSymbolAltFiveSelector = 5 }; /* * Summary: * Selectors for feature type kIdeographicAlternativesType */ enum { kNoIdeographicAlternativesSelector = 0, kIdeographicAltOneSelector = 1, kIdeographicAltTwoSelector = 2, kIdeographicAltThreeSelector = 3, kIdeographicAltFourSelector = 4, kIdeographicAltFiveSelector = 5 }; /* * Summary: * Selectors for feature type kCJKVerticalRomanPlacementType */ enum { kCJKVerticalRomanCenteredSelector = 0, kCJKVerticalRomanHBaselineSelector = 1 }; /* * Summary: * Selectors for feature type kItalicCJKRomanType */ enum { kNoCJKItalicRomanSelector = 0, /* deprecated - use kCJKItalicRomanOffSelector instead */ kCJKItalicRomanSelector = 1, /* deprecated - use kCJKItalicRomanOnSelector instead */ kCJKItalicRomanOnSelector = 2, kCJKItalicRomanOffSelector = 3 }; /* * Summary: * Selectors for feature type kCaseSensitiveLayoutType */ enum { kCaseSensitiveLayoutOnSelector = 0, kCaseSensitiveLayoutOffSelector = 1, kCaseSensitiveSpacingOnSelector = 2, kCaseSensitiveSpacingOffSelector = 3 }; /* * Summary: * Selectors for feature type kAlternateKanaType */ enum { kAlternateHorizKanaOnSelector = 0, kAlternateHorizKanaOffSelector = 1, kAlternateVertKanaOnSelector = 2, kAlternateVertKanaOffSelector = 3 }; /* * Summary: * Selectors for feature type kStylisticAlternativesType */ enum { kNoStylisticAlternatesSelector = 0, kStylisticAltOneOnSelector = 2, kStylisticAltOneOffSelector = 3, kStylisticAltTwoOnSelector = 4, kStylisticAltTwoOffSelector = 5, kStylisticAltThreeOnSelector = 6, kStylisticAltThreeOffSelector = 7, kStylisticAltFourOnSelector = 8, kStylisticAltFourOffSelector = 9, kStylisticAltFiveOnSelector = 10, kStylisticAltFiveOffSelector = 11, kStylisticAltSixOnSelector = 12, kStylisticAltSixOffSelector = 13, kStylisticAltSevenOnSelector = 14, kStylisticAltSevenOffSelector = 15, kStylisticAltEightOnSelector = 16, kStylisticAltEightOffSelector = 17, kStylisticAltNineOnSelector = 18, kStylisticAltNineOffSelector = 19, kStylisticAltTenOnSelector = 20, kStylisticAltTenOffSelector = 21, kStylisticAltElevenOnSelector = 22, kStylisticAltElevenOffSelector = 23, kStylisticAltTwelveOnSelector = 24, kStylisticAltTwelveOffSelector = 25, kStylisticAltThirteenOnSelector = 26, kStylisticAltThirteenOffSelector = 27, kStylisticAltFourteenOnSelector = 28, kStylisticAltFourteenOffSelector = 29, kStylisticAltFifteenOnSelector = 30, kStylisticAltFifteenOffSelector = 31, kStylisticAltSixteenOnSelector = 32, kStylisticAltSixteenOffSelector = 33, kStylisticAltSeventeenOnSelector = 34, kStylisticAltSeventeenOffSelector = 35, kStylisticAltEighteenOnSelector = 36, kStylisticAltEighteenOffSelector = 37, kStylisticAltNineteenOnSelector = 38, kStylisticAltNineteenOffSelector = 39, kStylisticAltTwentyOnSelector = 40, kStylisticAltTwentyOffSelector = 41 }; /* * Summary: * Selectors for feature type kContextualAlternatesType */ enum { kContextualAlternatesOnSelector = 0, kContextualAlternatesOffSelector = 1, kSwashAlternatesOnSelector = 2, kSwashAlternatesOffSelector = 3, kContextualSwashAlternatesOnSelector = 4, kContextualSwashAlternatesOffSelector = 5 }; /* * Summary: * Selectors for feature type kLowerCaseType */ enum { kDefaultLowerCaseSelector = 0, kLowerCaseSmallCapsSelector = 1, kLowerCasePetiteCapsSelector = 2 }; /* * Summary: * Selectors for feature type kUpperCaseType */ enum { kDefaultUpperCaseSelector = 0, kUpperCaseSmallCapsSelector = 1, kUpperCasePetiteCapsSelector = 2 }; /* * Summary: * Selectors for feature type kCJKRomanSpacingType */ enum { kHalfWidthCJKRomanSelector = 0, kProportionalCJKRomanSelector = 1, kDefaultCJKRomanSelector = 2, kFullWidthCJKRomanSelector = 3 };