digital typographic systems have solved virtually all the demands of traditional typography and have expanded the possibilities with many new features. Three systems are in common use: OpenType, devised by Microsoft and Adobe, Apple's Apple Advanced Typography (AAT), and SIL's Graphite. The lists below provide information about OpenType and AAT features. Graphite does not have a fixed set of features; instead it provides a way for fonts to define their own features.
OpenType typographic features [ edit ]
The OpenType format defines a number of typographic features that a particular font may support. Some software, such as
Adobe InDesign or recent versions of Lua/ XeTeX, gives users control of these features, for example to enable fancy stylistic capital letters (swash caps) or to choose between ranging (full-height) and non-ranging (old-style, or lower-case) digits. Some web browsers also support OpenType features in accordance with the CSS Fonts Module Level 3 specification, which allows OpenType features to be set directly via the
font-feature-settings property, or indirectly by means of higher-level mechanisms.
The following tables list the features defined in version 1.8.1 of the OpenType specification. The codes in the "type" column are explained after the tables.
OpenType features may be applicable only to certain language scripts or specific languages, or in certain writing modes. The features are split into several tables accordingly.
Features primarily intended for or exclusively required by South-Asian alphasyllabaries (Indic/Brahmic) [ edit ]
Replaces the above-base part of a vowel sign. For Khmer and similar scripts.
Above-base Mark Positioning
Positions a mark glyph above a base glyph.
Ligates a consonant with an above-mark.
Replaces halant+consonant combination with a subscript form.
Below-base Mark Positioning
Positions a mark glyph below a base glyph
Ligates a consonant with a below-mark.
Replaces halant+consonant at the end of a consonant cluster with a glyph at the beginning. Khmer, Myanmar, Malayalam, Telugu
Ligates consonant combinations.
Ligates a final consonant+consonant.
Substitutes final halant+consonant with special form. Khmer and Gurmukhi, Malayalam
Adjusts horizontal positioning between glyphs. (Always enabled, as opposed to 'kern'.)
Hindi for unbreakable. Ligates consonant+halant+consonant, usually only for k-ss and j-ny combinations.
Replaces a glyph for final consonant+ halant.
Replaces consonant+halant with a half form, indicating it is part of a conjunct.
Replace consonant+ nukta (dot mark) with single glyph.
Replaces halant+ra with a rakar glyph, indicating it is part of a conjunct.
Replaces initial ra+halant with a final reph mark, indicating part of a conjunct.
Replaces consonant+rakar combinations with a vattu variant ligature.
Ligates consonant+halant+consonant, indicates part of a conjunct.
Conjunct Form After Ro
Features primarily intended for or exclusively required by East-Asian tetragrams (Chinese, Japanese, Korean) [ edit ]
Replaces sinograms with their simplified versions, may be language dependent
Replaces Chinese characters with their traditional versions
Traditional Name Forms
Japanese alternates for proper names
Typographic alternatives for some Japanese tetragrams
Hojo Kanji Forms
Hojo alternates for Japanese tetragrams
NLC Kanji Forms
NLC alternates for Japanese tetragrams
JIS 78 Forms
JIS C 6226-1978 alternates for Japanese tetragrams, not accessible per Unicode
JIS 83 Forms
JIS X 0208-1983 alternates for Japanese tetragrams, not accessible per Unicode
JIS 90 Forms
JIS X 0208-1990 alternates for Japanese tetragrams, not accessible per Unicode
JIS 04 Forms
JIS 2004 alternates for Japanese tetragrams, not accessible per Unicode
Transliterates Chinese-style characters with Korean Hangul
Leading Jamo Forms
Initial group of consonants for a synthesized Korean Hangul tetragram
Trailing Jamo Forms
Final group of consonants for a synthesized Korean Hangul tetragram
Vowel Jamo Forms
Medial group of vowels for a synthesized Korean Hangul tetragram
Substitutes proportionally spaced character with full-width versions (esp. for Latin letters within Chinese)
Substitutes uniformly-spaced characters with half-width version
Alternate Half Widths
Re-positions full-width glyphs on half-width spaces
Substitutes uniformly-spaced character with a version of 1/3 width (punctuation, etc.)
Replaces uniformly-spaced glyphs with quarter-width ones (punctuation etc.)
Replaces uniformly-spaced glyphs with proportional ones
Re-positions otherwise monospace characters according to glyph width
Kana for use alongside alphabets, without grid typography
Ruby Notation Forms
Ruby characters, small print
Horizontal Kana Alternates
Alternate forms for horizontal kana text, e.g. ー for chōonpu instead of ｜, cf.
Alternate Japanese kana forms for vertical text, e.g. ｜ for chōonpu instead of ー, cf.
Centered CJK Punctuation
Positions punctuation marks vertically and horizontally
Features primarily intended for or exclusively required by West-Asian (Semitic, Arabic) and other cursive scripts or fonts [ edit ]
Precise positioning of a letter's connection to an adjacent one
User selectable wider and narrower alternates, used especially for justifying
Mark Positioning via Substitution
Used in Windows 95 for positioning of Arabic marks
Required Contextual Alternates
Contextual alternates required for correct text display which differs from the default join for other letters, required especially important by Arabic
Ligatures required for correct text display (any script, but in cursive)
Substitutes a special form of a letter occurring outside a word (required by Arabic and Syriac)
Substitutes a special form of a letter occurring at the beginning of a word (required by Arabic and Syriac)
Substitutes a special form of letters between other letters in words (required by Arabic and Syriac)
Medial Form #2
Substitutes a special form of a letter at end of words (required by Arabic and Syriac)
Terminal Form #2
Terminal Form #3
Final Glyph on Line Alternates
Replaces final glyph on the line with an alternate
Stretching Glyph Decomposition
Substitutes a special form of a stretchy glyph onto one or more letters (required by Syriac)
Features intended for bicameral [cased] alphabets (Latin, Greek, Cyrillic, etc.) [ edit ]
Substitutes lower-case letters with small caps versions
Capitals to Small Caps
Substitutes capital letters with small caps
Substitute lower-case letters with their petite caps analogs
Capitals to Petite Caps
Substitutes capital letters with petite caps
Replaces lowercase and uppercase letters with a set of single case glyphs
Adjusts spacing between letters in all-capitals text
Case Sensitive Forms
Replace characters, especially punctuation, with forms better suited for all-capital text, cf.
Replaces letter with corresponding italic glyph
Replaces characters with ordinal forms for use after numbers
Features depending on writing direction [ edit ]
Alternative Vertical Metrics
Positions shorter characters to be centered vertically with full-height characters
Alternative Vertical Half Metrics
Positions characters to be centered vertically with half-height characters
Proportional Alternate Vertical Metrics
Re-positions glyphs vertically to be centered on proportional full-height characters
A subset of
vrt2: prefer the latter feature
Vertical Alternates and Rotation
Replaces characters with forms suitable for vertical writing, possibly by rotating 90°
Vertical Alternates for Rotation
Replaces characters with forms suitable for vertical writing, possibly by shifting or shape
Fine vertical positioning of characters based on shape
Left-to-right glyph alternates
Replaces characters with forms befitting left-to-right presentation (except mirrored forms)
Left-to-right mirrored forms
Replaces characters with possibly mirrored forms befitting left-to-right presentation
Right-to-left glyph alternates
Replaces characters with forms befitting right-to-left presentation (except mirrored forms)
Right-to-left mirrored forms
Replaces characters with possibly mirrored forms befitting right-to-left presentation
Features intended for digits and math [ edit ]
Replaces numerals with glyphs meant to fit better in all-capitals text, often also
Replaces numerals with cased old-style numerals, often also
Replaces numerals with glyphs of proportional width, often also
Replaces numerals with glyphs of uniform width, often also
Converts figures separated by slash with diagonal fraction
Converts figures separated by slash with alternative stacked fraction form
Converts to appropriate fraction denominator form, invoked by
Converts to appropriate fraction numerator form, invoked by
as in "H 2O", "SO x" or "YC bC r"
Replaces 0 figure with slashed 0
Replaces Greek characters with special forms for use in mathematics
Flattened accent forms
Math script style alternates
Ligation and alternate forms features intended for all scripts [ edit ]
Access All Alternates
Special feature: used to present user with choice all alternate forms of the character
Either replaces character with or displays multiple swashed versions
Converts letter to a swashed version based on characters around the letter
Applies a second substitution feature based on a match of a character pattern within a context of surrounding patterns
Obsolete forms of characters to be applied at the user's discretion, cf.
Substitutes character with the preferred form based on script language
Replaces character with random forms (meant to simulate handwriting)
Alternate Annotation Forms
Provides user access to circled digits, inverse letters etc.
Character Variant 1–99
Multiple variants of a single character, which may not apply to many other characters, see references for voluminous documentation
Either replaces with, or displays list of, stylistic alternatives for a character
Stylistic Set 1 – 20
Replaces character with one from a font-specific set of stylistic alternatives
Replaces character with subscript version, cf.
Replaces character with superscript version, cf.
Replaces characters with forms suited for large type, as in titles
Required Variation Alternates
Special variants of a single character, which need apply to specific font variation, required by variable fonts
Applies a second ligature feature based on a match of a character pattern within a context of surrounding patterns
Ligatures to be applied at the user's discretion
Obsolete ligatures to be applied at the user's discretion
Replaces (by default) sequence of characters with a single ligature glyph
Positioning features intended for all scripts [ edit ]
Either calls a ligature replacement on a sequence of characters or replaces a character with a sequence of glyphs. Provides logic that can for example effectively alter the order of input characters.
Fine horizontal positioning of one glyph to the next, based on the shapes of the glyphs
Fine positioning of a mark glyph to a base character
Fine positioning of a mark glyph to another mark character
Re-positions glyphs at beginning and end of line, for precise justification of text.
Re-positions glyphs at end of line. Called by
Re-positions glyphs at beginning of line. Called by
Special features intended for all scripts [ edit ]
Not a lookup: feature's table provides to applications information about the appearance and intent of the font, to aid in font selection.
Decorative alternates for the bullet character •
Legend of substitution and positioning codes [ edit ]
Below are listed the OpenType lookup table types, as used in the "type" column in the above tables.
S stands for substitution, and P stands for positioning. Note that often a feature can be implemented by more than one type of table, and that sometimes the specification fails to explicitly indicate the table type.
simple substitution of one glyph with another
multiple substitution of one character by several glyphs
chained contextual substitution
extension for GSUB tables past 64kB
reverse chained contextual substitution
positioning of single glyph
positioning of pair of glyphs
positioning of mark glyphs relative to base
positioning of mark glyphs relative to ligature
positioning of mark glyphs relative to another mark glyph
extended contextual positioning
extension for GPOS tables past 64kB
AAT typographic features [ edit ]
Features that take one value, mutual exclusive from the rest:
Rounded Box Annotation
Inverted Circle Annotation
Roman Numeral Annotation
Diamond Annotation Character Alternatives
No Alternates …
rand; aalt, calt, falt, jalt, salt, ssXX, hkna/vkna, rtla, vrt2
half, ruby; ljmo, vjmo, tjmo
JIS 1978 Characters
JIS 1983 Characters
JIS 1990 Characters
Traditional Characters, Alternative Set 1…5
tnam, hojo, nlck
CJK Latin Spacing
init, medi/med2, fina/fin2/fin3; haln, nukt, vatu, rphf, pres, pstf/psts
Design Level 1 Design Level … Diacritics
Show Diacritics Hide Diacritics
frac, dnom, numr
Upper & Lower Case All Caps
All Lower Case
Initial Caps and Small Caps Number Case
Lower Case Numbers
Upper Case Numbers
Normal Vertical Position
No Vertical Position Superiors
Features that take a number of values:
Squared Ligatures, Abbreviated Mathematical Extras
Hyphen to Minus (‘-’ → ‘−’)
Asterisk to Multiply (‘*’ → ‘×’)
Slash to Divide (‘/’ → ‘÷’)
Word Initial Swashes
Word Final Swashes
Line Initial Swashes
Line Final Swashes
No Style Options Display Text
Tall Caps Transliteration
Hyphens to Em Dash (‘--’ → ‘—’) Hyphen to En Dash (‘-’ → ‘–’)
Interrobang (‘!?’/‘?!’ → ‘‽’) Smart Quotes (‘"'"’ → ‘“’”’)
Periods to Ellipsis (‘...’ → ‘…’)
Binary features that can only be turned on:
All Typographic Features
External links [ edit ]