# List of typographic features

Typographic features made possible using digital typographic systems have solved many of the demands placed on computer systems to replicate 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 computer 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, LibreOffice/OpenOffice, 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)

| Long name | tag | type | Description |
| Above-base Forms | abvf | S1 | Replaces the above-base part of a vowel sign. For Khmer and similar scripts. |
| Above-base Mark Positioning | abvm | P4,5 | Positions a mark glyph above a base glyph. |
| Above-base Substitutions | abvs | S4 | Ligates a consonant with an above-mark. |
| Below-base Forms | blwf | S4 | Replaces halant+consonant combination with a subscript form. |
| Below-base Mark Positioning | blwm | P4,5 | Positions a mark glyph below a base glyph |
| Below-base Substitutions | blws | S4 | Ligates a consonant with a below-mark. |
| Pre-base Forms | pref | S4 | Replaces halant+consonant at the end of a consonant cluster with a glyph at the beginning. Khmer, Myanmar, Malayalam, Telugu |
| Pre-base Substitutions | pres | S4,5 | Ligates consonant combinations. |
| Post-base Substitutions | psts | S4 | Ligates a final consonant+consonant. |
| Post-base Forms | pstf | S4 | Substitutes final halant+consonant with special form. Khmer and Gurmukhi, Malayalam |
| Distance | dist | P2 | Adjusts horizontal positioning between glyphs. (Always enabled, as opposed to 'kern'.) |
| Akhand | akhn | S4 | Hindi for unbreakable. Ligates consonant+halant+consonant, usually only for k-ss and j-ny combinations. |
| Halant Forms | haln | S4 | Replaces a glyph for final consonant+halant. |
| Half Form | half | S4 | Replaces consonant+halant with a half form, indicating it is part of a conjunct. |
| Nukta Forms | nukt | S4 | Replace consonant+nukta (dot mark) with single glyph. |
| Rakar Forms | rkrf | S4 | Replaces halant+ra with a rakar glyph, indicating it is part of a conjunct. |
| Reph Form | rphf | S4 | Replaces initial ra+halant with a final reph mark, indicating part of a conjunct. |
| Vattu Variants | vatu | S4 | Replaces consonant+rakar combinations with a vattu variant ligature. |
| Conjunct Forms | cjct | S4 | Ligates consonant+halant+consonant, indicates part of a conjunct. |
| Conjunct Form After Ro | cfar | S1 | Khmer |

### Features primarily intended for or exclusively required by East-Asian tetragrams (Chinese, Japanese, Korean)

| Long name | tag | type | Description |
| Simplified Forms | smpl | S1 | Replaces sinograms with their simplified versions, may be language dependent |
| Traditional Forms | trad | S1,3 | Replaces Chinese characters with their traditional versions |
| Traditional Name Forms | tnam | S1 | Japanese alternates for proper names |
| Expert Forms | expt | S1 | Typographic alternatives for some Japanese tetragrams |
| Hojo Kanji Forms | hojo | | Hojo alternates for Japanese tetragrams |
| NLC Kanji Forms | nlck | | NLC alternates for Japanese tetragrams |
| JIS 78 Forms | jp78 | S1,3 | JIS C 6226-1978 alternates for Japanese tetragrams, not accessible per Unicode |
| JIS 83 Forms | jp83 | S1 | JIS X 0208-1983 alternates for Japanese tetragrams, not accessible per Unicode |
| JIS 90 Forms | jp90 | S1 | JIS X 0208-1990 alternates for Japanese tetragrams, not accessible per Unicode |
| JIS 04 Forms | jp04 | | JIS 2004 alternates for Japanese tetragrams, not accessible per Unicode |
| Hangul | hngl | S1,3 | Transliterates Chinese-style characters with Korean Hangul |
| Leading Jamo Forms | ljmo | S4 | Initial group of consonants for a synthesized Korean Hangul tetragram |
| Trailing Jamo Forms | tjmo | S4 | Final group of consonants for a synthesized Korean Hangul tetragram |
| Vowel Jamo Forms | vjmo | S4 | Medial group of vowels for a synthesized Korean Hangul tetragram |
| Full Widths | fwid | S1 | Substitutes proportionally spaced character with full-width versions (esp. for Latin letters within Chinese) |
| Half Widths | hwid | S1,P1 | Substitutes uniformly-spaced characters with half-width version |
| Alternate Half Widths | halt | P1 | Re-positions full-width glyphs on half-width spaces |
| Third Widths | twid | S1,P1 | Substitutes uniformly-spaced character with a version of 1/3 width (punctuation, etc.) |
| Quarter Widths | qwid | S1 | Replaces uniformly-spaced glyphs with quarter-width ones (punctuation etc.) |
| Proportional Widths | pwid | S1 | Replaces uniformly-spaced glyphs with proportional ones |
| Proportional Alternates | palt | P1 | Re-positions otherwise monospace characters according to glyph width |
| Proportional Kana | pkna | S1 | Kana for use alongside alphabets, without grid typography |
| Ruby Notation Forms | ruby | S1 | Ruby characters, small print |
| Horizontal Kana Alternates | hkna | S1 | Alternate forms for horizontal kana text, e.g. ー for chōonpu instead of ｜, cf. vkna |
| Vertical Kana | vkna | S1 | Alternate Japanese kana forms for vertical text, e.g. ｜ for chōonpu instead of ー, cf. hkna |
| Centered CJK Punctuation | cpct | 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 Positioning | curs | P3 | Precise positioning of a letter's connection to an adjacent one |
| Justification Alternates | jalt | S3 | User selectable wider and narrower alternates, used especially for justifying |
| Mark Positioning via Substitution | mset | S5 | Used in Windows 95 for positioning of Arabic marks |
| Required Contextual Alternates | rclt | S6 | Contextual alternates required for correct text display which differs from the default join for other letters, required especially important by Arabic |
| Required Ligatures | rlig | S3 | Ligatures required for correct text display (any script, but in cursive) |
| Isolated Forms | isol | S1 | Substitutes a special form of a letter occurring outside a word (required by Arabic and Syriac) |
| Initial Forms | init | S1 | Substitutes a special form of a letter occurring at the beginning of a word (required by Arabic and Syriac) |
| Medial Forms | medi | S1 | Substitutes a special form of letters between other letters in words (required by Arabic and Syriac) |
| Medial Form #2 | med2 | S5 | Syriac |
| Terminal Forms | fina | S1 | Substitutes a special form of a letter at end of words (required by Arabic and Syriac) |
| Terminal Form #2 | fin2 | S5 | Syriac |
| Terminal Form #3 | fin3 | S5 | Syriac |
| Final Glyph on Line Alternates | falt | S3 | Replaces final glyph on the line with an alternate |
| Stretching Glyph Decomposition | stch | S2 | 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.)

| Long name | tag | type | Description |
| Small Caps | smcp | S1 | Substitutes lower-case letters with small caps versions |
| Capitals to Small Caps | c2sc | S1 | Substitutes capital letters with small caps |
| Petite Caps | pcap | S1 | Substitute lower-case letters with their petite caps analogs |
| Capitals to Petite Caps | c2pc | S1 | Substitutes capital letters with petite caps |
| Unicase | unic | S1 | Replaces lowercase and uppercase letters with a set of single case glyphs |
| Capital Spacing | cpsp | P1 | Adjusts spacing between letters in all-capitals text |
| Case Sensitive Forms | case | P1 | Replace characters, especially punctuation, with forms better suited for all-capital text, cf. titl |
| Italics | ital | S1 | Replaces letter with corresponding italic glyph |
| Ordinals | ordn | S6,4 | Replaces characters with ordinal forms for use after numbers |

### Features depending on writing direction

| Long name | tag | type | Description |
| Alternative Vertical Metrics | valt | P1 | Positions shorter characters to be centered vertically with full-height characters |
| Alternative Vertical Half Metrics | vhal | P1 | Positions characters to be centered vertically with half-height characters |
| Proportional Alternate Vertical Metrics | vpal | P1 | Re-positions glyphs vertically to be centered on proportional full-height characters |
| Vertical Alternates | vert | S1 | A subset of vrt2: prefer the latter feature |
| Vertical Alternates and Rotation | vrt2 | S1 | Replaces characters with forms suitable for vertical writing, possibly by rotating 90° |
| Vertical Alternates for Rotation | vrtr | S1 | Replaces characters with forms suitable for vertical writing, possibly by shifting or shape |
| Vertical Kerning | vkrn | P2,8 | Fine vertical positioning of characters based on shape |
| Left-to-right glyph alternates | ltra | S1 | Replaces characters with forms befitting left-to-right presentation (except mirrored forms) |
| Left-to-right mirrored forms | ltrm | S1 | Replaces characters with possibly mirrored forms befitting left-to-right presentation |
| Right-to-left glyph alternates | rtla | S1 | Replaces characters with forms befitting right-to-left presentation (except mirrored forms) |
| Right-to-left mirrored forms | rtlm | S1 | Replaces characters with possibly mirrored forms befitting right-to-left presentation |

### Features intended for digits and math

| Long name | tag | type | Description |
| Lining Figures | lnum | S1 | Replaces numerals with glyphs meant to fit better in all-capitals text, often also tnum |
| Oldstyle Figures | onum | S1 | Replaces numerals with cased old-style numerals, often also pnum |
| Proportional Figures | pnum | S1 | Replaces numerals with glyphs of proportional width, often also onum |
| Tabular Figures | tnum | S1 | Replaces numerals with glyphs of uniform width, often also lnum |
| Fractions | frac | S4 | Converts figures separated by slash with diagonal fraction |
| Alternative Fractions | afrc | S4 | Converts figures separated by slash with alternative stacked fraction form |
| Denominator | dnom | S1 | Converts to appropriate fraction denominator form, invoked by frac |
| Numerator | numr | S1 | Converts to appropriate fraction numerator form, invoked by frac |
| Scientific Inferiors | sinf | S1 | as in "H$_2$O", "SO$_x$" or "YC$_b$C$_r$" (but using the same font weight and predefined position in contrast these plain HTML subs and sups) |
| Slashed Zero | zero | S1 | Replaces 0 figure with slashed 0 |
| Mathematical Greek | mgrk | S1 | Replaces Greek characters with special forms for use in mathematics |
| Flattened accent forms | flac | | This feature is applied to individual glyphs during layout of math formula. |
| Dotless Forms | dtls | | The dotless forms are to be used as base forms for placing mathematical accents over them. |
| Math script style alternates | ssty | | This feature can have a parameter indicating the script level: 1 for simple subscripts and superscripts, 2 for second level subscripts and superscripts (that is, scripts on scripts), and so on. (Currently, only the first two alternates are used). For glyphs that are not covered by this feature, the original glyph is used in subscripts and superscripts. |

### Ligation and alternate forms features intended for all scripts

| Long name | tag | type | Description |
| Access All Alternates | aalt | S1,3 | Special feature: used to present user with choice all alternate forms of the character |
| Swash | swsh | S1,3 | Either replaces character with or displays multiple swashed versions |
| Contextual Swash | cswh | S8 | Converts letter to a swashed version based on characters around the letter |
| Contextual Alternates | calt | S6 | Applies a second substitution feature based on a match of a character pattern within a context of surrounding patterns |
| Historical Forms | hist | S1 | Obsolete forms of characters to be applied at the user's discretion, cf. hlig |
| Localized Forms | locl | S1 | Substitutes character with the preferred form based on script language |
| Randomize | rand | S3 | Replaces character with random forms (meant to simulate handwriting) |
| Alternate Annotation Forms | nalt | S1,3 | Provides user access to circled digits, inverse letters etc. |
| Character Variant 1–99 | cv01– cv99 | S3 | Multiple variants of a single character, which may not apply to many other characters, see references for voluminous documentation |
| Stylistic Alternates | salt | S1,3 | Either replaces with, or displays list of, stylistic alternatives for a character |
| Stylistic Set 1 – 20 | ss01- ss20 | S1 | Replaces character with one from a font-specific set of stylistic alternatives |
| Subscript | subs | S1 | Replaces character with subscript version, cf. numr |
| Superscript | sups | S1 | Replaces character with superscript version, cf. dnom |
| Titling Alternates | titl | S1 | Replaces characters with forms suited for large type, as in titles |
| Required Variation Alternates | rvrn | S1 | Special variants of a single character, which need apply to specific font variation, required by variable fonts |
| Contextual Ligatures | clig | S8 | Applies a second ligature feature based on a match of a character pattern within a context of surrounding patterns |
| Discretionary Ligatures | dlig | S4 | Ligatures to be applied at the user's discretion |
| Historical Ligatures | hlig | S1 | Obsolete ligatures to be applied at the user's discretion |
| Standard Ligatures | liga | 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/Decomposition | ccmp | 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. |
| Kerning | kern | P2,8 | Fine horizontal positioning of one glyph to the next, based on the shapes of the glyphs |
| Mark Positioning | mark | P4,5 | Fine positioning of a mark glyph to a base character |
| Mark-to-mark Positioning | mkmk | P6 | Fine positioning of a mark glyph to another mark character |
| Optical Bounds | opbd | P1 | Re-positions glyphs at beginning and end of line, for precise justification of text. |
| Left Bounds | lfbd | P1 | Re-positions glyphs at end of line. Called by opbd. |
| Right Bounds | rtbd | P1 | Re-positions glyphs at beginning of line. Called by opbd. |

### Special features intended for all scripts

| Long name | tag | type | Description |
| Optical size | size | | Not a lookup: feature's table provides to applications information about the appearance and intent of the font, to aid in font selection. |
| Ornaments | ornm | S3,1 | Decorative alternates for the bullet character • |

### Legend of substitution and positioning codes

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.
| 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:
* Annotation nalt
** No Annotation
** Box Annotation
** Rounded Box Annotation
** Circle Annotation
** Inverted Circle Annotation
** Parenthesis Annotation
** Period Annotation
** Roman Numeral Annotation
** Diamond Annotation
* Character Alternatives
** No Alternates
** … rand; aalt, calt, falt, jalt, salt, ssXX, hkna/vkna, rtla, vrt2
* Character Shape half, ruby; ljmo, vjmo, tjmo
** Traditional Characters trad
** Simplified Characters smpl
** JIS 1978 Characters jp78
** JIS 1983 Characters jp83
** JIS 1990 Characters jp90
** Traditional Characters, Alternative Set 1…5 tnam, hojo, nlck
** Expert Characters expt, locl
* CJK Latin Spacing
** Half-width hwid, halt
** Proportional pwid, palt
** Default Latin
** Full-width Latin fwid
* Cursive Connection init, medi/med2, fina/fin2/fin3; haln, nukt, vatu, rphf, pres, pstf/psts
** Unconnected isol
** Partially Connected calt, clig
** Cursive curs
* Design Complexity
** Design Level 1
** Design Level …
* Diacritics
** Show Diacritics
** Hide Diacritics
** Decompose Diacritics ccmp
* Fractions
** No Fractions
** Vertical Fractions afrc
** Diagonal Fractions frac, dnom, numr
* Ideographic Spacing
** Full Width fwid
** Proportional pwid, palt
* Kana Spacing
** Full Width fwid
** Proportional pwid, palt
* Letter Case case
** Upper & Lower Case
** All Caps
** All Lower Case
** Small Caps smcp, pcap
** Initial Caps c2sc, c2pc
** Initial Caps and Small Caps
* Number Case
** Lower Case Numbers onum
** Upper Case Numbers lnum
* Number Spacing
** Monospaced Numbers tnum
** Proportional Numbers pnum
* Ornament Sets ornm
** None
** Dingbats
** Pi Characters
** Fleurons
** Decorative Borders
** International Symbols
** Math Symbols mgrk
* Text Spacing
** Proportional pwid, palt
** Monospace fwid
** Half-width hwid, halt
** Normal
* Vertical Position
** No Vertical Position
** Superiors supr
** Inferiors subs, sinf
** Ordinals ordn
Features that take a number of values:
* Ligatures
** Required Ligatures rlig, clig
** Common Ligatures liga
** Rare Ligatures hlig, dlig
** Logos
** Rebus Pictures
** Diphthong Ligatures
** Squared Ligatures
** Squared Ligatures, Abbreviated
* Mathematical Extras
** Hyphen to Minus (‘-’ → ‘−’)
** Asterisk to Multiply (‘*’ → ‘×’)
** Slash to Divide (‘/’ → ‘÷’)
** Inequality Ligatures
** Exponents
* Smart Swashes swsh, cswh
** Word Initial Swashes
** Word Final Swashes
** Line Initial Swashes
** Line Final Swashes falt
** Non-Final Swashes jalt
* Style Options
** No Style Options
** Display Text size
** Engraved Text
** Illuminated Caps
** Titling Caps titl
** Tall Caps
* Transliteration locl
** No Transliteration
** Hanja to Hangul
** Hanja to Hangul, Alternative Set 1…3
** Hiragana to Katakana
** Katakana to Hiragana
** Kana to Romanization
** Romanization to Hiragana
** Romanization to Katakana
* Typographic Extras
** Hyphens to Em Dash (‘--’ → ‘—’)
** Hyphen to En Dash (‘-’ → ‘–’)
** Unslashed Zero zero
** Form Interrobang (‘!?’/‘?!’ → ‘‽’)
** Smart Quotes (‘"'"’ → ‘“’”’)
** Periods to Ellipsis (‘...’ → ‘…’)
Binary features that can only be turned on:
* All Typographic Features
* Linguistic Rearrangement
* Overlapping Characters
* Vertical Substitution