List of typographic features

State-of-the-art 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

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, 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.

The following tables list the features defined in version 1.6 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)
Long name tag type Description
Above-base Formsabvf S1 Replaces the diacritic part of a vowel sign in Khmer etc., e.g. ä to
Above-base Mark Positioningabvm P4,5 Positions a diacritic mark on top of the base glyph
Above-base Substitutionsabvs S4 Replaces a pair of base and top diacritic mark by a ligature, e.g. ä to æ
Below-base Formsblwf S4 Replaces the subscript part of a consonant compound in Khmer etc., e.g. ş to ș
Below-base Mark Positioningblwm P4,5 Positions a diacritic mark on top of the base glyph
Below-base Substitutionsblws S4 Replaces a pair of base and bottom diacritic mark by a ligature, e.g. ç to cz
Pre-base Formspref S4 Khmer and other similar scripts: Myanmar, Malayalam, Telugu
Pre-base Substitutionspres S4,5 Indic
Post-base Substitutionspsts S4 Indic (any alphabetic?)
Post-base Formspstf S4 Khmer and Gurmukhi, Malayalam
Distancedist P2 Adjusts horizontal positioning between glyphs
Akhandakhn S4 Hindi for unbreakable, forms CCV ligatures from two consecutive CV glyphs
Halant Formshaln S4 Uses halant forms of CV glyphs, indicating that it is read C, may include virama
Half Formhalf S4 Uses half-forms of CV glyphs, indicating that it is read as just C
Nukta Formsnukt S4 Add nukta (dot mark) to glyph, although this is available through Unicode characters
Rakar Formsrkrf S4 Indic rakar
Reph Formrphf S4 The reph diacritic changes a CV glyph to its respective rCV glyph
Vattu Variantsvatu S4 Indic vattu
Conjunct Formscjct S4
Conjunct Form After Rocfar S1 Khmer
Features primarily intended for or exclusively required by East-Asian tetragrams (Chinese, Japanese, Korean, Vietnamese)
Long name tag type Description
Simplified Formssmpl S1 Replaces sinograms with their simplified versions, may be language dependent
Traditional Formstrad S1,3 Replaces Chinese characters with their traditional versions
Traditional Name Formstnam S1 Japanese alternates for proper names
Expert Formsexpt S1 Typographic alternatives for some Japanese tetragrams
Hojo Kanji Formshojo Hojo alternates for Japanese tetragrams
NLC Kanji Formsnlck NLC alternates for Japanese tetragrams
JIS 78 Formsjp78 S1,3 JIS C 6226-1978 alternates for Japanese tetragrams, not accessible per Unicode
JIS 83 Formsjp83 S1 JIS X 0208-1983 alternates for Japanese tetragrams, not accessible per Unicode
JIS 90 Formsjp90 S1 JIS X 0208-1990 alternates for Japanese tetragrams, not accessible per Unicode
JIS 04 Formsjp04 JIS 2004 alternates for Japanese tetragrams, not accessible per Unicode
Hangulhngl S1,3 Transliterates Chinese-style characters with Korean Hangul
Leading Jamo Formsljmo S4 Initial group of consonants for a synthesized Korean Hangul tetragram
Trailing Jamo Formstjmo S4 Final group of consonants for a synthesized Korean Hangul tetragram
Vowel Jamo Formsvjmo S4 Medial group of vowels for a synthesized Korean Hangul tetragram
Full Widthsfwid S1 Substitutes proportionally spaced character with full-width versions (esp. for Latin letters within Chinese)
Half Widthshwid S1,P1 Substitutes uniformly-spaced characters with half-width version
Alternate Half Widthshalt P1 Re-positions full-width glyphs on half-width spaces
Third Widthstwid S1,P1 Substitutes uniformly-spaced character with a version of 1/3 width (punctuation, etc.)
Quarter Widthsqwid S1 Replaces uniformly-spaced glyphs with quarter-width ones (punctuation etc.)
Proportional Widthspwid S1 Replaces uniformly-spaced glyphs with proportional ones
Proportional Alternatespalt P1 Re-positions otherwise monospace characters according to glyph width
Proportional Kanapkna S1 Kana for use alongside alphabets, without grid typography
Ruby Notation Formsruby S1 Ruby characters, small print
Horizontal Kana Alternateshkna S1 Alternate forms for horizontal kana text, e.g. ー for chōonpu instead of |, cf. vkna
Vertical Kanavkna S1 Alternate Japanese kana forms for horizontal text, e.g. | for chōonpu instead of ー, cf. hkna
Centered CJK Punctuationcpct P1 Positions punctuation marks vertically and horizontally
Features primarily intended for or exclusively required by West-Asian (Semitic, Arabic) and other cursive scripts or fonts
Long name tag type Description
Cursive Positioningcurs P3 Precise positioning of a letter's connection to an adjacent one
Justification Alternatesjalt S3 User selectable wider and narrower alternates
Mark Positioning via Substitutionmset S5 Used in Windows 95 for positioning of Arabic marks
Required Ligaturesrlig S3 Ligatures required for correct text display (any script, but in cursive)
Isolated Formsisol S1 Substitutes a special form of a letter occurring outside a word (required by Arabic and Syriac)
Initial Formsinit S1 Substitutes a special form of a letter occurring at the beginning of a word (required by Arabic and Syriac)
Medial Formsmedi S1 Substitutes a special form of letters between other letters in words (required by Arabic and Syriac)
Medial Form #2med2 S5 Syriac
Terminal Formsfina S1 Substitutes a special form of a letter at end of words (required by Arabic and Syriac)
Terminal Form #2fin2 S5 Syriac
Terminal Form #3fin3 S5 Syriac
Final Glyph on Line Alternatesfalt S3 Replaces final glyph on the line with an alternate.
Features intended for bicameral alphabets (Roman, Greek, Cyrillic etc.)
Long name tag type Description
Small Capssmcp S1 Substitutes lower-case letters with small caps versions
Capitals to Small Capsc2sc S1 Substitutes capital letters with small caps
Petite Capspcap S1 Substitute lower-case letters with their petite caps analogs
Capitals to Petite Capsc2pc S1 Substitutes capital letters with petite caps
Unicaseunic S1 Replaces lowercase and uppercase letters with a set of single case glyphs
Capital Spacingcpsp P1 Adjusts spacing between letters in all-capitals text
Case Sensitive Formscase P1 Replace characters, especially punctuation, with forms better suited for all-capital text, cf. titl
Italicsital S1 Replaces letter with corresponding italic glyph
Ordinalsordn S6,4 Replaces characters with ordinal forms for use after numbers
Features depending on writing direction
Long name tag type Description
Alternative Vertical Metricsvalt P1 Positions shorter characters to be centered vertically with full-height characters
Alternative Vertical Half Metricsvhal P1 Positions characters to be centered vertically with half-height characters
Proportional Alternate Vertical Metricsvpal P1 Re-positions glyphs vertically to be centered on proportional full-height characters
Vertical Alternatesvert S1 A subset of vrt2: prefer the latter feature
Vertical Alternates and Rotationvrt2 S1 Replaces characters with forms suitable for vertical writing, possibly by rotating 90°
Vertical Kerningvkrn P2,8 Fine vertical positioning of characters based on shape
Left-to-right glyph alternatesltra S1 Replaces characters with forms befitting left-to-right presentation (except mirrored forms)
Left-to-right mirrored formsltrm S1 Replaces characters with possibly mirrored forms befitting left-to-right presentation
Right-to-left glyph alternatesrtla S1 Replaces characters with forms befitting right-to-left presentation (except mirrored forms)
Right-to-left mirrored formsrtlm S1 Replaces characters with possibly mirrored forms befitting right-to-left presentation
Features intended for digits and math
Long name tag type Description
Lining Figureslnum S1 Replaces numerals with glyphs meant to fit better in all-capitals text, often also tnum
Oldstyle Figuresonum S1 Replaces numerals with cased old-style numerals, often also pnum
Proportional Figurespnum S1 Replaces numerals with glyphs of proportional width, often also onum
Tabular Figurestnum S1 Replaces numerals with glyphs of uniform width, often also lnum
Fractionsfrac S4 Converts figures separated by slash with diagonal fraction
Alternative Fractionsafrc S4 Converts figures separated by slash with alternative stacked fraction form
Denominatordnom S1 Converts to appropriate fraction denominator form, invoked by frac
Numeratornumr S1 Converts to appropriate fraction numerator form, invoked by frac
Scientific Inferiorssinf S1 as in "H2O", "SOx" or "YCbCr"
Slashed Zerozero S1 Replaces 0 figure with slashed 0
Mathematical Greekmgrk S1 Replaces Greek characters with special forms for use in mathematics
Ligation and alternate forms features intended for all scripts
Long name tag type Description
Access All Alternatesaalt S1,3 Special feature: used to present user with choice all alternate forms of the character
Swashswsh S1,3 Either replaces character with or displays multiple swashed versions
Contextual Swashcswh S8 Converts letter to a swashed version based on characters around the letter
Contextual Alternatescalt S6 Applies a second substitution feature based on a match of a character pattern within a context of surrounding patterns
Historical Formshist S1 Obsolete forms of characters to be applied at the user's discretion, cf. hlig
Localized Formslocl S1 Substitutes character with the preferred form based on script language
Randomizerand S3 Replaces character with random forms (meant to simulate handwriting)
Alternate Annotation Formsnalt S1,3 Provides user access to circled digits, inverse letters etc.
Character Variant 1–99cv01–
cv99
S3 Multiple variants of a single character, which may not apply to many other characters, see references for voluminous documentation
Stylistic Alternatessalt S1,3 Either replaces with, or displays list of, stylistic alternatives for a character
Stylistic Set 1 – 20ss01-
ss20
S1 Replaces character with one from a font-specific set of stylistic alternatives
Subscriptsubs S1 Replaces character with subscript version, cf. numr
Superscriptsups S1 Replaces character with superscript version, cf. dnom
Titling Alternatestitl S1 Replaces characters with forms suited for large type, as in titles
Contextual Ligaturesclig S8 Applies a second ligature feature based on a match of a character pattern within a context of surrounding patterns
Discretionary Ligaturesdlig S4 Ligatures to be applied at the user's discretion
Historical Ligatureshlig S1 Obsolete ligatures to be applied at the user's discretion
Standard Ligaturesliga S4 Replaces (by default) sequence of characters with a single ligature glyph
Positioning features intended for all scripts
Long name tag type Description
Glyph Composition/Decompositionccmp S4,2 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.
Kerningkern P2,8 Fine horizontal positioning of one glyph to the next, based on the shapes of the glyphs
Mark Positioningmark P4,5 Fine positioning of a mark glyph to a base character
Mark-to-mark Positioningmkmk P6 Fine positioning of a mark glyph to another mark character
Optical Boundsopbd P1 Re-positions glyphs at beginning and end of line, for precise justification of text.
Left Boundslfbd P1 Re-positions glyphs at end of line. Called by opbd.
Right Boundsrtbd P1 Re-positions glyphs at beginning of line. Called by opbd.
Special features intended for all scripts
Long name tag type Description
Optical sizesize Not a lookup: feature's table provides to applications information about the appearance and intent of the font, to aid in font selection.
Ornamentsornm S3,1 Decorative alternates for the bullet character •

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.

Legend of substitution and positioning codes
abbrev. type description
S1 GSUB 1 simple substitution of one glyph with another
S2 GSUB 2 multiple substitution of one character by several glyphs
S3 GSUB 3 variant selection
S4 GSUB 4 ligatures
S5 GSUB 5 contextual substitution
S6 GSUB 6 chained contextual substitution
S7 GSUB 7 extension for GSUB tables past 64kB
S8 GSUB 8 reverse chained contextual substitution
P1 GPOS 1 positioning of single glyph
P2 GPOS 2 positioning of pair of glyphs
P3 GPOS 3 cursive attachment
P4 GPOS 4 positioning of mark glyphs relative to base
P5 GPOS 5 positioning of mark glyphs relative to ligature
P6 GPOS 6 positioning of mark glyphs relative to another mark glyph
P7 GPOS 7 contextual positioning
P8 GPOS 8 extended contextual positioning
P9 GPOS 9 extension for GPOS tables past 64kB

AAT typographic features

Features that take one value, mutual exclusive from the rest:

Features that take a number of values:

Binary features that can only be turned on:

External links