The ScriptList and FeatureList of the GSUB and GPOS tables name each script, language system and feature with a four-byte tag. Software recognises a feature only by its tag, so the tags are registered: Microsoft keeps the registry as part of the OpenType specification. This page lists every registered feature tag and script tag, and the three feature parameter tables. The language system tags have their own page, and the baseline tags are on the BASE page.
How tags are written
- A
Tagis four bytes, each a printable ASCII character (0x20 to 0x7E). A shorter name is padded on the right with spaces: the script tag for Lao is the bytes6C 61 6F 20(lao). - Registered feature tags and script tags are four lower-case letters (with a few
padded or numbered exceptions, such as
yi,dev2andcv01). - Registered language system tags are three or four capital letters, padded with a space when there are three.
- Tags of four capital letters A to Z, with no digits, spaces or punctuation, are
left free for font vendors’ private features (for example a vendor’s own
PKRN). They are not registered and need not work the same way in other software. DFLTis the script tag for features that do not depend on the script. As language system tags,dfltandDFLTare reserved and must not appear in a LangSysRecord: the default language system is the Script table’s owndefaultLangSysOffset.
Registered feature tags
Each feature is applied by running the lookups its Feature table lists. The lookup types below are the ones the registry recommends; a font may use others. “GSUB 1” means GSUB lookup type 1 (single substitution) and so on: the types are listed on the GSUB and GPOS pages. Which features an application turns on, and in what order, is up to the application and the shaping rules for the script; the feature tag only says what the lookups are for.
| Tag | Name | Lookups | What it does |
|---|---|---|---|
aalt | Access All Alternates | GSUB 3, 1 | Gives the user every alternate form of a character in one place, such as a glyph palette. |
abvf | Above-base Forms | GSUB 1 | Uses the above-base part of a split vowel (Khmer and other Brahmi-derived scripts). |
abvm | Above-base Mark Positioning | GPOS 4, 5 | Places marks above base glyphs. |
abvs | Above-base Substitutions | GSUB 4 | Replaces a base and the mark above it with a ligature. |
afrc | Alternative Fractions | GSUB 4 | Forms vertical (nut) fractions from digits separated by a slash. |
akhn | Akhand | GSUB 4 | Forms the akhand ligatures of Indic scripts, whatever surrounds them. |
apkn | Kerning for Alternate Proportional Widths | GPOS 2 | Kerns glyphs that are fixed-width by default but have been made proportional by palt. |
blwf | Below-base Forms | GSUB 4 | Uses the below-base form of a consonant in Indic conjuncts. |
blwm | Below-base Mark Positioning | GPOS 4, 5 | Places marks below base glyphs. |
blws | Below-base Substitutions | GSUB 4 | Replaces a base and a below-base form with a ligature. |
calt | Contextual Alternates | GSUB 6 | Swaps glyphs for alternates that join or fit better with their neighbours. |
case | Case-sensitive Forms | GSUB 1 or GPOS 1 | Moves punctuation up to suit capitals and lining figures, and changes oldstyle figures to lining. |
ccmp | Glyph Composition / Decomposition | GSUB 4, 2 | Composes several characters into one glyph or splits one glyph into several before other features run. |
cfar | Conjunct Form After Ro | GSUB 1 | Khmer: uses alternate below-base or post-base forms after a subscript Ro. |
chws | Contextual Half-width Spacing | GPOS 2, 8 | Halves the spacing of full-width CJK punctuation according to its neighbours. |
cjct | Conjunct Forms | GSUB 4 | Forms Indic consonant conjuncts, later in shaping than akhn. |
clig | Contextual Ligatures | GSUB chained context | Forms ligatures only where the surrounding glyphs call for them. |
cpct | Centered CJK Punctuation | GPOS 1 | Centres certain punctuation in fonts without separate centred forms. |
cpsp | Capital Spacing | GPOS 1 | Adds space between capitals for all-capital text. |
cswh | Contextual Swash | GSUB chained context, 3 | Uses swash forms where the context suits them. |
curs | Cursive Positioning | GPOS 3 | Joins cursive glyphs by their entry and exit points. |
cv01–cv99 | Character Variant 1 to 99 | GSUB 3 (or 1) | Selects variants of one character, or a few closely related ones; may carry feature parameters. |
c2pc | Petite Capitals From Capitals | GSUB 1 | Turns capitals into petite capitals. |
c2sc | Small Capitals From Capitals | GSUB 1 | Turns capitals into small capitals. |
dist | Distances | GPOS 1, 2, contextual | Required spacing between glyphs that the user should not switch off (unlike kern). |
dlig | Discretionary Ligatures | GSUB 4 | Decorative ligatures the user may choose. |
dnom | Denominators | GSUB 1 | Uses denominator figures after a slash; applied with frac. |
dtls | Dotless Forms | GSUB 1 | Gives dotless forms of mathematical i and j for placing accents (math layout). |
expt | Expert Forms | GSUB 1 | Japanese forms preferred by typographers, extending the JIS78 set. |
falt | Final Glyph on Line Alternates | GSUB 1 | Swaps the last glyph on a line for a wider or narrower form to help justification. |
fin2 | Terminal Forms #2 | GSUB 1 | Syriac: final Alaph after a non-joining letter other than Dalath and Rish. |
fin3 | Terminal Forms #3 | GSUB 5 | Syriac: final Alaph after Dalath, Rish or dotless Dalath-Rish. |
fina | Terminal Forms | GSUB 1 (5, 6, 8) | Uses final forms of joining letters, chosen by Unicode joining type. |
flac | Flattened Accent Forms | GSUB 1 | Flatter accents over tall bases in mathematics. |
frac | Fractions | GSUB 1, 4 | Turns digits separated by a slash into a diagonal fraction. |
fwid | Full Widths | GSUB 1 or GPOS 1 | Sets glyphs on full (usually em) widths. |
half | Half Forms | GSUB 4 | Uses the half forms of Indic consonants. |
haln | Halant Forms | GSUB 4 | Uses the precomposed halant forms of Indic consonants. |
halt | Alternate Half Widths | GPOS 1 | Fits full-width glyphs into half-em widths without changing the glyph. |
hist | Historical Forms | GSUB 1 | Uses historical letter forms, such as long s. |
hkna | Horizontal Kana Alternates | GSUB 1 | Kana designed for horizontal setting only. |
hlig | Historical Ligatures | GSUB 4 | Uses historical ligatures. |
hngl | Hangul | GSUB 1, 3 | Deprecated. Replaced hanja with hangul. |
hojo | Hojo Kanji Forms | GSUB 1 | Uses the JIS X 0212-1990 forms where the JIS X 0213:2004 form is the default. |
hwid | Half Widths | GSUB 1 or GPOS 1 | Sets glyphs on half-em widths. |
init | Initial Forms | GSUB 1 (5, 6, 8) | Uses initial forms of joining letters. |
isol | Isolated Forms | GSUB 1 (5, 6, 8) | Uses isolated forms of joining letters. |
ital | Italics | GSUB 1 | Uses the italic glyphs held in the same font (mostly Latin in CJK fonts). |
jalt | Justification Alternates | GSUB 1 | Wider or narrower alternates to help justification. |
jp78 | JIS78 Forms | GSUB 1, 3 | Uses the glyph forms of JIS C 6226-1978. |
jp83 | JIS83 Forms | GSUB 1 | Uses the glyph forms of JIS X 0208-1983. |
jp90 | JIS90 Forms | GSUB 1 | Uses the glyph forms of JIS X 0208-1990. |
jp04 | JIS2004 Forms | GSUB 1 | Uses the glyph forms of JIS X 0213:2004. |
kern | Kerning | GPOS 2, 8 | Adjusts the space between glyph pairs in horizontal text. |
lfbd | Left Bounds | GPOS 1 | Aligns line starts by the glyphs’ visible left edge. |
liga | Standard Ligatures | GSUB 4 | Ligatures for normal text, such as fi and fl; usually on by default. |
ljmo | Leading Jamo Forms | GSUB 1 | Hangul: the form of a leading consonant jamo inside a syllable. |
lnum | Lining Figures | GSUB 1 | Uses lining figures. |
locl | Localized Forms | GSUB 1 | Uses the forms preferred for the text’s language, such as Bulgarian Cyrillic. |
ltra | Left-to-right Alternates | GSUB 1 | Variants for left-to-right runs, other than mirrored forms. |
ltrm | Left-to-right Mirrored Forms | GSUB 1 | Mirrored forms for left-to-right runs. |
mark | Mark Positioning | GPOS 4, 5 | Places marks on base glyphs and ligatures. |
med2 | Medial Forms #2 | GSUB 1 | Syriac: medial Alaph after a joining letter. |
medi | Medial Forms | GSUB 1 (5, 6, 8) | Uses medial forms of dual-joining letters. |
mgrk | Mathematical Greek | GSUB 1 | Uses the mathematical forms of Greek letters. |
mkmk | Mark to Mark Positioning | GPOS 6 | Places marks on other marks. |
mset | Mark Positioning via Substitution | GSUB 5 | Old Arabic fonts for Windows 95: positions marks by swapping glyphs. Not for new fonts. |
nalt | Alternate Annotation Forms | GSUB 1, 3 | Circled, boxed, bracketed and similar forms. |
nlck | NLC Kanji Forms | GSUB 1 | Uses the kanji forms defined by Japan’s National Language Council in 2000. |
nukt | Nukta Forms | GSUB 4 | Forms Indic consonants with nukta. |
numr | Numerators | GSUB 1 | Uses numerator figures before a slash, and a fraction slash; applied with frac. |
onum | Oldstyle Figures | GSUB 1 | Uses oldstyle figures. |
opbd | Optical Bounds | GPOS 1 | Deprecated. Aligned lines by visible edges, through lfbd and rtbd. |
ordn | Ordinals | GSUB 6, 4 | Uses ordinal letters after figures, and the numero sign for “No”. |
ornm | Ornaments | GSUB 3, 1 | Gives ornaments, either as alternates of the bullet or in place of plain letters. |
palt | Proportional Alternate Widths | GPOS 1 | Fits full-width glyphs onto proportional widths without changing the glyph. |
pcap | Petite Capitals | GSUB 1 | Turns lower-case letters into petite capitals. |
pkna | Proportional Kana | GSUB 1 | Uses proportional-width kana. |
pnum | Proportional Figures | GSUB 1 | Uses figures of individual widths. |
pref | Pre-base Forms | GSUB 4 | Uses the pre-base form of a consonant. |
pres | Pre-base Substitutions | GSUB 4, 5 | Ligatures and vowel variants before the base. |
pstf | Post-base Forms | GSUB 4 | Uses the post-base form of a consonant. |
psts | Post-base Substitutions | GSUB 4 | Replaces a base and a post-base form with a ligature. |
pwid | Proportional Widths | GSUB 1 | Uses proportional glyphs in place of fixed-width ones. |
qwid | Quarter Widths | GSUB 1 or GPOS 1 | Sets glyphs on quarter-em widths. |
rand | Randomize | GSUB 3 | Chooses among alternates at random, to imitate handwriting. |
rclt | Required Contextual Alternates | GSUB 6 | Contextual alternates that the script needs and the user cannot turn off. |
rkrf | Rakar Forms | GSUB 4 | Devanagari and Gujarati: consonant with rakar. |
rlig | Required Ligatures | GSUB 4 | Ligatures the script needs, such as Arabic lam-alef. |
rphf | Reph Form | GSUB 4 | Uses the reph form of Ra plus virama. |
rtbd | Right Bounds | GPOS 1 | Aligns line ends by the glyphs’ visible right edge. |
rtla | Right-to-left Alternates | GSUB 1 | Variants for right-to-left runs, other than mirrored forms. |
rtlm | Right-to-left Mirrored Forms | GSUB 1 | Mirrored forms for right-to-left runs beyond Unicode character mirroring. |
ruby | Ruby Notation Forms | GSUB 1 | Small kana designed for ruby annotations. |
rvrn | Required Variation Alternates | GSUB 1 | In variable fonts, swaps glyphs for some instances through a FeatureVariations table; always applied. |
salt | Stylistic Alternates | GSUB 1, 3 | Purely decorative alternate designs. |
sinf | Scientific Inferiors | GSUB 1 | Small figures below the baseline, as in chemical formulae. |
size | Optical size | none (GPOS) | Holds the design size and size range as feature parameters; no lookups. Superseded by the STAT table. |
smcp | Small Capitals | GSUB 1 | Turns lower-case letters into small capitals. |
smpl | Simplified Forms | GSUB 1 | Uses simplified Chinese or Japanese forms. |
ss01–ss20 | Stylistic Set 1 to 20 | GSUB 1 (GPOS possible) | Turns on a designed set of alternates; may carry feature parameters. |
ssty | Math Script-style Alternates | GSUB 3 (or 1) | Forms for subscripts and superscripts in mathematics; alternate 1 or 2 for the script level. |
stch | Stretching Glyph Decomposition | GSUB 2 | Splits an enclosing mark, such as the Syriac abbreviation mark, into an odd number of pieces that can stretch. |
subs | Subscript | GSUB 1, then GPOS 1 or 2 | Uses subscript forms. |
sups | Superscript | GSUB 1 | Uses superior figures and letters. |
swsh | Swash | GSUB 1, 3 | Uses swash forms. |
titl | Titling | GSUB 1 | Uses forms designed for titles at large sizes. |
tjmo | Trailing Jamo Forms | GSUB 1 | Hangul: the form of a trailing consonant jamo inside a syllable. |
tnam | Traditional Name Forms | GSUB 1 | Traditional kanji forms used in personal names. |
tnum | Tabular Figures | GSUB 1 | Uses figures that all have the same width. |
trad | Traditional Forms | GSUB 1, 3 | Uses traditional Chinese or Japanese forms. |
twid | Third Widths | GSUB 1 or GPOS 1 | Sets glyphs on third-em widths. |
unic | Unicase | GSUB 1 | Maps both cases to a single-case alphabet. |
valt | Alternate Vertical Metrics | GPOS 1 | Centres full-width Latin, Greek and Cyrillic glyphs for vertical setting. Not needed in fonts with vmtx or VORG. |
vapk | Kerning for Alternate Proportional Vertical Metrics | GPOS 2 | Vertical kerning of glyphs made proportional by vpal. |
vatu | Vattu Variants | GSUB 4 | Ligatures of a consonant or half form with a following vattu form. |
vchw | Vertical Contextual Half-width Spacing | GPOS 2, 8 | Vertical counterpart of chws. |
vert | Vertical Alternates | GSUB 1 | Forms for upright glyphs in vertical writing, such as rotated brackets. |
vhal | Alternate Vertical Half Metrics | GPOS 1 | Fits full-height glyphs into half-em heights. |
vjmo | Vowel Jamo Forms | GSUB 1 | Hangul: the form of a vowel jamo inside a syllable. |
vkna | Vertical Kana Alternates | GSUB 1 | Kana designed for vertical setting only. |
vkrn | Vertical Kerning | GPOS 2, 8 | Adjusts the space between glyph pairs in vertical text. |
vpal | Proportional Alternate Vertical Metrics | GPOS 1 | Fits full-height glyphs onto proportional heights. |
vrt2 | Vertical Alternates and Rotation | GSUB 1 | Pre-rotated glyphs for vertical writing; a superset of vert. |
vrtr | Vertical Alternates for Rotation | GSUB 1 | Forms for glyphs that the layout engine will turn sideways in vertical writing. |
zero | Slashed Zero | GSUB 1 | Uses a zero with a slash. |
Feature parameter tables
A Feature table’s featureParamsOffset is NULL except for three kinds of
feature, which may point to a parameter table. The offset counts from the start of the
Feature table. All values are big-endian.
size
The size feature lives in GPOS, lists no lookups, and must have
parameters: five uint16 values. Every font of a family that uses it must
have it.
| Offset | Type | Name | Meaning |
|---|---|---|---|
0 | uint16 | Design size | The point size the font is designed for, in decipoints (720 to the inch, so 100 is 10 points). Never 0. If there is no size range, the other four values are 0. |
2 | uint16 | Subfamily identifier | An arbitrary number shared by the fonts of one family that differ only in size range. 0 means the rest is to be ignored. |
4 | uint16 | Subfamily name ID | A name table ID, 256 to 32767, holding the menu name for the subfamily (in English for Windows and Macintosh, and optionally other languages). |
6 | uint16 | Range start | The small end of the recommended size range, in decipoints, exclusive. |
8 | uint16 | Range end | The large end of the range, in decipoints, inclusive. Ranges in a subfamily must not overlap. |
The registry’s example is Minion Pro Semibold Condensed Subhead, with the values 180, 3, 257, 139, 240: designed for 18 points, subfamily 3 named by name ID 257, and the recommended choice above 13.9 points up to 24 points. Given a requested size, software picks the subfamily member whose range holds it, else the one with the closest range; a size exactly between two ranges takes the larger.
ss01 to ss20
| Offset | Type | Name | Meaning |
|---|---|---|---|
0 | uint16 | version | 0. Later minor versions may add data at the end. |
2 | uint16 | uiLabelNameID | name table ID of the label to show for this stylistic set (expected in 256 to 32767). |
cv01 to cv99
| Offset | Type | Name | Meaning |
|---|---|---|---|
0 | uint16 | format | 0. |
2 | uint16 | featUiLabelNameId | name ID of the feature’s label, or 0 for none. |
4 | uint16 | featUiTooltipTextNameId | name ID of tooltip text, or 0. |
6 | uint16 | sampleTextNameId | name ID of sample text showing the effect, or 0. |
8 | uint16 | numNamedParameters | How many variants have their own label (may be 0). |
10 | uint16 | firstParamUiLabelNameId | name ID of the first variant’s label; the labels use consecutive IDs. 0 if there are none. |
12 | uint16 | charCount | Number of characters listed next (may be 0). |
14 | uint24 × count | character | Unicode scalar values of the characters this feature gives variants for; for information only. |
Variant n (counting from 1, the index into the type 3 alternate set) is
labelled by name ID firstParamUiLabelNameId + n − 1. The registry
recommends labels of at most 25 characters and tooltips of at most 250.
Registered script tags
Script tags mostly follow Unicode scripts, but they are not the same as ISO 15924
codes, and some scripts have two tags. The Indic scripts each have a second tag ending
in 2 (dev2, bng2 and so on): a font with that
ScriptRecord is shaped with the newer Indic model, which reorders the syllable
differently, and a font may hold both. Hiragana and Katakana share
kana.
| Tag | Script | Tag | Script |
|---|---|---|---|
adlm | Adlam | ahom | Ahom |
hluw | Anatolian Hieroglyphs | arab | Arabic |
armn | Armenian | avst | Avestan |
bali | Balinese | bamu | Bamum |
bass | Bassa Vah | batk | Batak |
beng | Bangla | bng2 | Bangla v.2 |
berf | Beria Erfe | bhks | Bhaiksuki |
bopo | Bopomofo | brah | Brahmi |
brai | Braille | bugi | Buginese |
buhd | Buhid | byzm | Byzantine Music |
cans | Canadian Syllabics | cari | Carian |
aghb | Caucasian Albanian | cakm | Chakma |
cham | Cham | cher | Cherokee |
chrs | Chorasmian | hani | CJK Ideographic |
copt | Coptic | cprt | Cypriot Syllabary |
cpmn | Cypro-Minoan | cyrl | Cyrillic |
DFLT | Default (no particular script) | dsrt | Deseret |
deva | Devanagari | dev2 | Devanagari v.2 |
diak | Dives Akuru | dogr | Dogra |
dupl | Duployan | egyp | Egyptian Hieroglyphs |
elba | Elbasan | elym | Elymaic |
ethi | Ethiopic | gara | Garay |
geor | Georgian | glag | Glagolitic |
goth | Gothic | gran | Grantha |
grek | Greek | gujr | Gujarati |
gjr2 | Gujarati v.2 | gong | Gunjala Gondi |
guru | Gurmukhi | gur2 | Gurmukhi v.2 |
gukh | Gurung Khema | hang | Hangul |
jamo | Hangul Jamo (not recommended; use hang) | rohg | Hanifi Rohingya |
hano | Hanunoo | hatr | Hatran |
hebr | Hebrew | kana | Hiragana and Katakana |
armi | Imperial Aramaic | phli | Inscriptional Pahlavi |
prti | Inscriptional Parthian | java | Javanese |
jurc | Jurchen | kthi | Kaithi |
knda | Kannada | knd2 | Kannada v.2 |
kawi | Kawi | kali | Kayah Li |
khar | Kharosthi | kits | Khitan Small Script |
khmr | Khmer | khoj | Khojki |
sind | Khudawadi | krai | Kirat Rai |
lao | Lao | latn | Latin |
lepc | Lepcha | limb | Limbu |
lina | Linear A | linb | Linear B |
lisu | Lisu (Fraser) | lyci | Lycian |
lydi | Lydian | mahj | Mahajani |
maka | Makasar | mlym | Malayalam |
mlm2 | Malayalam v.2 | mand | Mandaic |
mani | Manichaean | marc | Marchen |
gonm | Masaram Gondi | math | Mathematical text layout (for math layout engines and the MATH table) |
medf | Medefaidrin | mtei | Meitei Mayek |
mend | Mende Kikakui | merc | Meroitic Cursive |
mero | Meroitic Hieroglyphs | plrd | Miao |
modi | Modi | mong | Mongolian |
mroo | Mro | mult | Multani |
musc | Musical Symbols | mymr | Myanmar (not recommended; use mym2) |
mym2 | Myanmar v.2 | nbat | Nabataean |
nagm | Nag Mundari | nand | Nandinagari |
newa | Newa | talu | New Tai Lue |
nko | N’Ko | nshu | Nüshu |
hmnp | Nyiakeng Puachue Hmong | orya | Odia |
ory2 | Odia v.2 | ogam | Ogham |
olck | Ol Chiki | onao | Ol Onal |
ital | Old Italic | hung | Old Hungarian |
narb | Old North Arabian | perm | Old Permic |
xpeo | Old Persian Cuneiform | sogo | Old Sogdian |
sarb | Old South Arabian | orkh | Old Turkic (Orkhon Runic) |
ougr | Old Uyghur | osge | Osage |
osma | Osmanya | hmng | Pahawh Hmong |
palm | Palmyrene | pauc | Pau Cin Hau |
phag | Phags-pa | phnx | Phoenician |
pcun | Proto-Cuneiform | phlp | Psalter Pahlavi |
rjng | Rejang | runr | Runic |
samr | Samaritan | saur | Saurashtra |
seal | Seal (Small Seal) | shrd | Sharada |
shaw | Shavian | sidd | Siddham |
sidt | Sidetic | sgnw | Sign Writing |
sinh | Sinhala | sogd | Sogdian |
sora | Sora Sompeng | soyo | Soyombo |
xsux | Sumero-Akkadian Cuneiform | sund | Sundanese |
sunu | Sunuwar | sylo | Syloti Nagri |
syrc | Syriac | tglg | Tagalog |
tagb | Tagbanwa | tale | Tai Le |
lana | Tai Tham (Lanna) | tavt | Tai Viet |
tayo | Tai Yo | takr | Takri |
taml | Tamil | tml2 | Tamil v.2 |
tnsa | Tangsa | tang | Tangut |
telu | Telugu | tel2 | Telugu v.2 |
thaa | Thaana | thai | Thai |
tibt | Tibetan | tfng | Tifinagh |
tirh | Tirhuta | todr | Todhri |
tols | Tolong Siki | toto | Toto |
tutg | Tulu-Tigalari | ugar | Ugaritic Cuneiform |
vai | Vai | vith | Vithkuqi |
wcho | Wancho | wara | Warang Citi |
yezi | Yezidi | yi | Yi (bytes 79 69 20 20) |
zanb | Zanabazar Square |