OpenType Feature Database

Features are listed in alphabetical order. Select a script to list features in order of processing.

aalt: Access All Alternates

toggle_off
smart_toy
starstarstarstar
public
A

Allows the end user to access glyphs which are either not available, or not easily available, via other feature applications. The expectation is that this feature will allow substituting a glyph with all possible "alternative" forms of the glyph provided in the font: for example, for the glyph a, it will provide a substitution to small capital forms, swash alternates, superior forms, and so on. This is normally achieved through one-from-many (GSUB3) substitutions, but where only a single alternate is provided, the use of a one-to-one (GSUB1) substitution may be appropriate.

A layout application will not apply this feature in the ordinary course of layout, but may use it to implement a "glyph picker" interface allowing the end user to choose the desired substitution, or to cycle through the alternates available for a glyph. Because of way that the layout application will apply this feature, it is undefined what would happen to lookup types other than GSUB1 and GSUB3 if placed inside an aalt feature.

Note: AFDKO feature syntax offers special handling of the aalt feature. Within the context an aalt feature block, the feature keyword can be used to reference the lookups of other features, arrange any GSUB1 or GSUB3 rules within those lookups by glyph, and combine them into one-from-many rules. This allows the engineer to more easily generate an aalt feature by combining the effects of other features.

For example, given a feature smcp which contains the rule sub b by B.sc; and a feature salt which contains the rule sub b by b.alt;, the effect of

feature aalt {
  feature salt;
  feature smcp;
} aalt;

would be to create the rule sub b from [b.alt B.sc];.

Example Feature Code Implementation
feature aalt {
  feature salt;
  feature smcp;
  feature swsh;
  sub quoteleft by quoteleft.fr;
  sub quoteright by quoteright.fr;
} aalt;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Glyph Variants".

abvf: Above-base Forms

check_circle
starstar
window

Replaces above-base forms with special forms. This feature is applied by Indic, Khmer and USE complex shapers as part of the orthographic unit shaping phase. The context of application is restricted to a syllabic cluster.

This feature was originally intended for a specific use case in Khmer, the OE vowel sign (U+17BE, ◌ើ), which has pre-base and above-base components. The shaping engine decomposes U+17BE into a pair of characters, U+17C1 (េ) and U+17BE (again). It then reorders the syllable to put the pre-base vowel part before the base consonant, leaving the U+17BE after the base. The font is responsible for turning the remaining ◌ើ glyph into the above-base part (ី), hence the example implementation below.

However, more generally, this feature is a good home for above-base substitutions such as choosing alternate widths of an above-base vowel mark.

See also abvs which applies to the whole run, rather than per-cluster.

Example
Off: យល់ឃើញ
On: យល់ឃើញ
Example Feature Code Implementation
feature abvf {
  sub uni17BE by uni17B8;
} abvf;
Group:
Orthographic

abvm: Above-base Mark Positioning

check_circle
smart_toy
starstar
public
window

This feature allows for mark positioning, similar to the mark feature; it was intended for positioning marks which are placed over a base consonant in a syllabic script, but while the OpenType Specification describes this feature as being used for Indic scripts, Harfbuzz applies the abvm feature as part of common feature processing for all scripts.

The only distinction between this feature and the mark feature is a subtle one: in abvm processing, any ZWJ characters are skipped when matching input and any ZWNJ characters are skipped when matching context, whereas in mark processing, ZWJ/ZWNJ characters are not skipped. Other than that, the choice of abvm versus mark is a matter of notational convenience for the engineer.

See also blwm.

Example
Off: कंसं
On: कंसं
Group:
Common

abvs: Above-base Substitutions

check_circle
starstar
window

This feature is intended for substituting base glyphs and above marks with ligature forms, but may be used for any standard typographic substitutions; engineers may wish to restrict its use to substitutions concerning above-base marks for organisational purposes. As a typographic substitution, it will be applied after the abvf feature.

This feature is applied by the shaper as part of the standard typographic presentation phase for Indic scripts, Khmer, Myanmar, and scripts using the Universal Shaping Engine. It is applied with a per-syllable context for Indic scripts, but applied across the whole run in other scripts.

Example
Off: रृ
On: रृ
Example Feature Code Implementation
feature abvs {
  sub eCandraMatra-gujarati candraBindu-gujarati by eCandraMatraCandraBindu-gujarati;
  sub eMatra-gujarati candraBindu-gujarati by eMatraCandraBindu-gujarati;
  sub aiMatra-gujarati candraBindu-gujarati by aiMatraCandraBindu-gujarati;
  # ...
} abvs;
Group:
Typographic

afrc: Alternative Fractions

toggle_off
star
public
window

This feature is intended to provide alternative forms of a fraction; the feature should match numerals surrounded by a slash, and substitute them with a nut fraction.

Example
Off: 1/2
On: 1/2
Example Feature Code Implementation
feature afrc {
  sub one slash two by onehalf.nut;
} afrc;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Contextual Fractional Forms -> Vertical."

akhn: Akhand

check_circle
starstar
window

This feature is intended to process ligatures of base characters in Indic scripts and scripts using the Universal Shaping Engine. It was designed for the processing of "Akhand" (unbreakable) character sequences in Devanagari, but may also be used for any substitutions which need to be applied early in the shaping process.

Example
Off: क्ष
On: क्ष
Example Feature Code Implementation
feature akhn {
  sub ka-deva halant-deva ssa-deva by kssa-deva;
  sub ja-deva halant-deva nya-deva by jnya-deva;

  sub ra-deva' halant-deva' zerowidthjoiner by eyelash-deva;
} akhn;
Group:
Preprocessing

blwf: Below-base Forms

check_circle
starstar
window

Replaces below-base forms with special forms. This feature is applied by Indic, Khmer, Myanmar and USE complex shapers as part of the orthographic unit shaping phase. The context of application is restricted to a syllabic cluster.

This is intended to be used for halant conjuncts, where consonant-virama-consonant sequences cause the second consonant to be displayed below the first.

Note that in the Indic shaper, this feature is used as a "signal" to the shaping engine for reordering purposes: that is, if a virama-consonant pair would be substituted by this feature, then that consonant is placed in the below-base position when the syllable is reordered.

See also blws which applies to the whole run, rather than per-cluster.

Example Feature Code Implementation
feature blwf {
  sub virama-myanmar @consonant by @conjunct_consonant;
} blwf;
Group:
Orthographic

blwm: Below-base Mark Positioning

check_circle
smart_toy
starstar
public
window

This feature allows for mark positioning, similar to the mark feature; it was intended for positioning marks which are placed below a base consonant in a syllabic script, but while the OpenType Specification describes this feature as being used for Indic scripts, Harfbuzz applies the blwm feature as part of common feature processing for all scripts.

The only distinction between this feature and the mark feature is a subtle one: in blwm processing, any ZWJ characters are skipped when matching input and any ZWNJ characters are skipped when matching context, whereas in mark processing, ZWJ/ZWNJ characters are not skipped. Other than that, the choice of blwm versus mark is a matter of notational convenience for the engineer.

See also abvm.

Group:
Common

blws: Below-base Substitutions

check_circle
starstar
window

This feature is intended for substituting base glyphs and below marks with ligature forms, but may be used for any standard typographic substitutions; engineers may wish to restrict its use to substitutions concerning below-base marks for organisational purposes. As a typographic substitution, it will be applied after the blwf feature.

This feature is applied by the shaper as part of the standard typographic presentation phase for Indic scripts, Khmer, Myanmar, and scripts using the Universal Shaping Engine. It is applied with a per-syllable context for Indic scripts, but applied across the whole run in other scripts.

Example Feature Code Implementation
feature blws {
    sub dvRA dvmU  by dvRA_mU;
    sub dvRA dvmUU by dvRA_mUU;
    sub dvHA dvmU  by dvHA_mU;
    sub dvHA dvmUU by dvHA_mUU;
    sub dvDA  dvmvR by dvDA_mvR;
    sub dvSHA dvmvR by dvSHA_mvR;
    sub dvHA  dvmvR by dvHA_mvR;
} blws;
Group:
Typographic

c2pc: Petite Capitals From Capitals

toggle_off
starstar
public
T

Substitutes capital characters for petite capitals. See the pcap feature for a description of petite capitals. See also c2sc.

Example
Off: NASA and the FBI
On: NASA and the FBI
Example Feature Code Implementation
feature c2pc {
  sub A by A.pc;
  sub B by B.pc;
  # ...
} c2pc;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Uppercase -> Petite Capitals."

In CSS, this feature can be set with font-variant-caps: all-petite-caps; (although this also turns on pcap.)

c2sc: Small Capitals From Capitals

toggle_off
smart_toy
starstar
public
A

Substitutes capital characters for small capitals. Small capitals are often used to set acronyms. Compare with smcp, which substitutes lowercase letters for small capitals.

Example
Off: NASA and the FBI
On: NASA and the FBI
Example Feature Code Implementation
feature c2sc {
  sub A by A.sc;
  sub B by B.sc;
  # ...
} c2sc;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Uppercase -> Small Capitals." In Adobe applications, this feature is accessed via "All Small Caps" in the OpenType panel (although this also turns on smcp).

In CSS, this feature can be set with font-variant-caps: all-small-caps; (although this also turns on smcp).

calt: Contextual Alternates

toggle_on
starstar
public
A

This feature is used to substitute glyphs with alternate forms, generally on a contextual basis. For example, a script font may wish to use joining forms of the letter o when followed by another letter starting at the x-height.

This feature is processed as part of the standard typographic presentation group; in the Indic and Arabic complex shapers, it is processed as part of the language form group.

Example
Off: Two hoots!
On: Two hoots!
Example Feature Code Implementation
feature calt {
  sub T' @letter by T.wide;
  sub o' space by o.swash;
  sub o' [i k m n o] by o.join;
  sub [f o t v w] s' by s.noinstroke;
} calt;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Contextual Alternates -> Contextual Alternates." In Adobe applications, this feature is accessed via "Contextual Alternates" in the OpenType panel.

Group:
Typographic

case: Case-Sensitive Forms

toggle_off
smart_toy
starstarstar
public
A

This features is intended to reposition glyphs (either by substitution or positioning), particularly punctuation glyphs, so that they are better aligned within all-capital sequences or sequences of lining numerals. It should also change oldstyle numerals to lining numerals.

Note that while it was hoped that layout engines would automatically apply this feature within all-capital sequences, this is not currently known to be automatically applied, and must be applied manually by the typesetter.

Example
Off: «A-Za-z»
On: «A-Za-z»
Example Feature Code Implementation
feature case {
  sub [guillemotleft guillemotright hyphen] by [guillemotleft.cap guillemotright.cap hyphen.cap];
} case;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Case-Sensitive Layout -> Capital Forms."

Group:
Typographic

ccmp: Glyph Composition/Decomposition

check_circle
starstarstarstar
public
window

After OpenType normalization but before the processing of other features, it may be useful to decompose single glyphs into sequences, or combine sequences into a single glyph. For example:

  • In Arabic fonts, treating the rasm letters and the nukta dots separately allows for more flexible positioning and reduces the number of glyphs which need to be drawn. Using rules such as sub beh-ar by behDotless-ar dotbelow; in the ccmp feature decomposes the dots into separate glyphs.

  • The i acute character (í, U+00ED) is normalized to U+0069 U+0301 (i acutecomb). However, as the acute replaces the tittle on the i, it is useful to substitute this for a dotless form: sub i' acutecomb by idotless;.

  • Conversely, multiple glyphs may be combined into one. In Tibetan, stacked letters such as གྷ (U+0F43) have their own Unicode codepoints, but can alternatively be encoded in documents using the decomposed form U+0F42 (ག) ◌ྷ (U+0FB7). These two encodings can be unified in the font with a rule such as sub uni0F42 uni0FB7 by uni0F43;.

Example Feature Code Implementation
feature ccmp {
  sub alefHamzaabove-ar by alef-ar hamzaabove-ar;
  sub alefHamzabelow-ar by alef-ar hamzabelow-ar;
  sub beh-ar by behDotless-ar dotbelow-ar;
  sub teh-ar by behDotless-ar twodotsabove-ar;
  sub theh-ar by behDotless-ar threedotsabove-ar;
  sub jeem-ar by hah-ar dotbelow-ar;
  sub khah-ar by hah-ar dotabove-ar;
  ...
} ccmp;
Group:
Common

cfar: Conjunct Form After Ro

check_circle
star_outline
sentiment_dissatisfied
window

This feature is only applied during orthographic unit shaping in the Khmer complex shaper. In Khmer, the conjunct form of the letter ro (after a coeng) is reordered to the left of the base consonant and displayed as a deep letterform which can interact with below-base glyphs. This feature was intended as offering an opportunity to fix up below-base glyphs to avoid clashing with the coeng ro.

No examples of the use of this feature have been found. Consider using blws instead.

Group:
Orthographic

chws: Contextual Half-width Spacing

toggle_off
star_outline
public
W

Layout engines which correctly support advanced typographic layout for CJK (see JLREQ, CLREQ, KLREQ) will contain code to adjust the spacing of glyphs in certain circumstances. For example, punctuation sequences such as 。」 should be set with the full-stop taking up a half-em width instead of a full em.

This feature is intended to improve the appearance of text set with software which does not implement these spacing adjustments, by moving the spacing logic into the font.

This feature is relatively new as of 2021, and no implementations have been identified.

Example Feature Code Implementation
feature chws {
  pos [comma-han period-han] -500 @closing_bracket;
  pos @closing_bracket -500 [comma-han period_han];
  pos [comma-han period-han @closing_bracket] 500 @opening_bracket;
  pos @opening_bracket <500 0 0 0> @opening_bracket;
  pos @closing_bracket @closing_bracket <-500 0 0 0>;
} chws;

cjct: Conjunct Forms

check_circle
starstar
window

This feature is applied to Indic scripts and scripts using the Universal Shaping Engine as the final feature in the orthographic unit shaping phase, before final reordering. It was intended for use in creating consonant conjunct groups. (Consonant + Virama + Consonant.) The context of application is restricted to a syllabic cluster.

The difference between this feature and blwf is that the blwf feature is intended for substituting the "tail" (virama + consonant) for a below-base form, while this feature is intended for substituting the entire sequence with a ligature.

Example
Off: ङ्म
On: ङ्म
Example Feature Code Implementation
feature cjct {
    # Actual implementation will depend on conjunct glyphs provided in your font.
    sub nga-deva virama-deva ga-deva by ngga-deva;
    sub nga-deva virama-deva ma-deva by ngma-deva;
    sub nga-deva virama-deva ya-deva by ngya-deva;
    sub tta-deva virama-deva tta-deva by tttta-deva;
    sub tta-deva virama-deva ya-deva by ttya-deva;
    # ...
} cjct;
Group:
Orthographic

clig: Contextual Ligatures

toggle_on
starstar
A

This feature has two distinct uses.

It was originally intended for ligature forms which are contextual in nature, for example, for Latin script fonts, and typically made up of GSUB lookup 8 rules. However, these rules may also be placed in other discretionary ligature features, such as rlig or liga, and these should be used instead. As such this use is relatively rare.

Separately, in the Khmer complex shaper, this is a mandatory feature used for "ligatures that are desired for typographical correctness". It is therefore used widely in Khmer fonts for general typographic shaping.

Example Feature Code Implementation
feature clig {
  sub kho-khmer.conjunct aaSign-khmer by kho-khmer.conjunct.aa;
  sub kho-khmer.conjunct auSign-khmer by kho-khmer.conjunct.au;
  # ...
  sub nyo-khmer' @conjuncts by nyo-khmer.alt;
  sub nyo-khmer.alt nyo-khmer.conjunct' by nyo-khmer.conjunct.alt;
  # ...
}
Group:
Typographic

cpct: Centered CJK Punctuation

star_outline
public
A

This feature is intended to center punctuation (typically the ideographic comma 、 and ideographic full stop 。) in Chinese fonts. Where presented, it is often implemented as GPOS lookup 1 positioning rules to place these glyphs within the center of the em square.

Example
Off: か、か
On: か、か
Example Feature Code Implementation
feature cpct {
   pos comma-han <328 350 0 0>;
   pos period-han <359 350 0 0>;
} cpct;

cpsp: Capital Spacing

toggle_off
starstar
public
A

This feature inserts a small around of space (order of 5-10 units for a typical font) around capital letters to improve the setting of all-capital runs.

Example
Off: AAWW
On: AAWW
Example Feature Code Implementation
feature cpsp {
  pos @capitals <5 0 10 0>;
} cpsp;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Case-Sensitive Layout > Capital Spacing".

cswh: Contextual Swash

toggle_off
starstar
public
A

This feature is similar to the swsh (Swash) feature, but is intended to be used for contextual (conditional) swash substitutions. For example, while Adobe Garamond Pro Italic uses the swsh feature to substitute all capitals for swash forms, it uses the cswh feature to conditionally change only capitals preceding a lowercase into swash forms.

Example
Off: WOWSERS!
On: WOWSERS!
Example Feature Code Implementation
feature cswh {
  sub @capitals' @lowercase by @capitals.swsh;
} cswh;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Contextual Alternates > Contextual Swash Alternates".

curs: Cursive Positioning

check_circle
smart_toy
starstar
public
window

This feature is used to position glyphs with cursive connections.

Certain scripts, in particular Arabic, are "connected" scripts, where the start of a character has its position adjusted relative to the end of the previous character. In font editors, this is normally defined by setting "exit" and "entry" anchor points. These are then converted to GPOS 3 cursive positioning rules.

While this feature is not mandatory for designers - some styles of Arabic are aligned along the baseline, and so glyphs do not need to be repositioned

  • it is applied by default if present, and is not specific to Arabic script. It is not impossible, but exceptionally uncommon, to use this feature for connected "cursive" Latin fonts, and is often unnecessary because of the presence of a fixed baseline in Latin.
Example
Off: سمر
On: سمر
Example Feature Code Implementation
feature curs {
  pos cursive uni066F.medi <anchor 606 35> <anchor 0 35>;
  pos cursive uni0640 <anchor 250 35> <anchor 0 35>;
  pos cursive uni06A1.medi <anchor 606 35> <anchor 0 35>;
  # ...
} curs;
Group:
Positioning

cv01: Character Variant 1 – Character Variant 99

toggle_off
smart_toy
starstar
public
window

These features - ranging from cv01 to cv99 - allow for stylistic variations of individual characters.

They are similar to the Stylistic Set (ss01--ss20) features, but (as their) name implies, stylistic sets are intended to allow a set of glyphs to vary in a common way (for example, straightening the "leg" of glyphs such as hnm, or overlining MCXLVI characters to form Roman numerals). Character variant features, on the other hand, do not imply any common variations across a range of glyphs.

When this feature is coded manually, character variant features may be given identifying names to be displayed in the user interface. See the Adobe feature file specification for the format of these names.

Example
Off: Java
On: Java
Example Feature Code Implementation
feature cv01 {
  cvParameters {
      FeatUILabelNameID {
          name 3 1 0x0409 "single-storey a";
          name 1 0 0 "single-storey a";
      };
      Character 0x61;
  }
  sub a by a.cv01;
} cv01;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Glyph Variants". In CSS, this feature is accessed through the font-variant-alternates property.

dist: Distances

check_circle
starstar
public
window

This feature provides positional adjustments between glyphs. It is largely equivalent to the kern feature, but should be considered as "required" kerning in that no user interface is provided to disable it.

Example
Off: दॗकॗ
On: दॗकॗ
Group:
Positioning

dlig: Discretionary Ligatures

toggle_off
starstarstar
public
A

This feature is used for additional typographic ligatures which are selectable by the end-user.

Example
Off: coppersmith
On: coppersmith
Example Feature Code Implementation
sub dlig {
  sub t h by t_h;
  sub p p by p_p;
} dlig;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Ligatures -> Rare Ligatures." (Not to be confused with the rlig feature, which is for required ligatures...) In Adobe applications, this feature is accessed via "Discretionary Ligatures" in the OpenType panel.

In CSS, this feature can be accessed through the font-variant-ligatures property.

dnom: Denominators

toggle_off
smart_toy
starstarstar
public
sick
A

This deprecated feature replaces numeric glyphs with denominator forms. See also numr.

Note that, despite the description of this feature in the OpenType specification, the application of the frac feature is independent of this feature. It was originally intended that applying the frac feature would "trigger" the application of the numr feature for glyphs before the division slash and the dnom feature for glyphs after it. This behavior was never implemented in OpenType shaping, and instead contextual rules are used within the frac feature to choose appropriate glyphs for numerator and denominator.

New fonts should use the frac feature in preference to this feature.

dtls: Dotless Forms

star
window

This feature is used by a math layout handler to substitute glyphs by dotless forms when accents are to be added to the base character.

Example
Off: i ^
On: i ^
The above example contains MathML, which currently only renders reliably using Firefox.
Example Feature Code Implementation
feature dtls {
  sub i by i.dotless;
  sub j by j.dotless;
  sub uni2148 by uni2148.dotless;
  sub uni2149 by uni2149.dotless;
  sub u1D422 by u1D422.dotless;
  sub u1D423 by u1D423.dotless;
  # ...
} dtls;

expt: Expert Forms

starstar
public
A

This feature is used to substitute Japanese kanji for alternative forms which are considered more "typographical". This includes the use of JIS78 forms (see jp78), but also a wide range of other substitutions.

The expected substitutions of the expt feature are defined in terms of the Adobe-Japan1 glyphset. Engineers creating Japanese fonts according to that glyphset should read the information at the Adobe-Japan1 repository, and use the latest version of the feature code provided there to implement this feature.

(Thanks to Ken Lunde for the information about implementing this feature.)

Example
Off: 曁堙僊
On: 曁堙僊

falt: Final Glyph on Line Alternates

star_outline
public
sick
window

This feature was intended to allow a justification system to substitute a glyph for another form when the glyph is the final one on a line of text, to improve the fitting of the line. (See also jalt.) No known layout engine supports activating this and it is unclear whether any fonts implemented the feature.

fin2: Terminal Form #2

check_circle
star
ܫ
window

This feature is used by the Arabic complex shaper when processing the Syriac script. The Syriac letter alaph (U+0710) has multiple final forms: the first final form, used when the preceding character is a joining character, is selected using the fina feature, similar to an Arabic alif.

However, when the preceding character is a non-joining character, the selection of the final form of alaph depends on whether the preceding character has joining group Dalath_Rish. If the preceding character (skipping all characters with a transparent joining group) is either U+0715 (dalath), U+0716 (dotless dalath rish) or U+072A (rish), the fin3 feature is applied. Otherwise, this feature is applied.

Example
Off: ܒܐ
On: ܒܐ
Example Feature Code Implementation
feature fin2 {
  lookupflag RightToLeft IgnoreMarks;
  sub uni0710 by uni0710.Fina2;
  } fin2;
Group:
Topographical

fin3: Terminal Form #3

check_circle
star
ܫ
window

This feature is used by the Arabic complex shaper when processing the Syriac script. The Syriac letter alaph (U+0710) has multiple final forms: the first final form, used when the preceding character is a joining character, is selected using the fina feature, similar to an Arabic alif.

However, when the preceding character is a non-joining character, the selection of the final form of alaph depends on whether the preceding character has joining group Dalath_Rish. If the preceding character (skipping all characters with a transparent joining group) is either U+0715 (dalath), U+0716 (dotless dalath rish) or U+072A (rish), this feature is applied. Otherwise, the fin2 feature is applied.

Example
Off: ܕܐ
On: ܕܐ
Example Feature Code Implementation
feature fin3 {
  lookupflag RightToLeft IgnoreMarks;
  sub uni0710 by uni0710.Fina3;
  } fin2;
Group:
Orthographic

fina: Terminal Forms

check_circle
smart_toy
starstar
ن
ܫ

This feature is used by the Arabic and USE complex shapers as part of topographic shaping. It is not appropriate for general end-of-word detection, but is designed to replace joining characters with final forms. This means characters which have the Unicode joining type Right_Joining or Dual_Joining in a right-to-left script, and characters which have the Unicode joining type Left_Joining or Dual_Joining in a left-to-right script. These joining type properties can be found in ArabicShaping.txt in the Unicode Character Database.

Example
Off: جر
On: جر
Example Feature Code Implementation
feature fina {
  lookupflag RightToLeft IgnoreMarks;
  sub alef-ar by alef-ar.fina;
  sub beh-ar by beh-ar.fina;
  # ...
}
Group:
Topographical

flac: Flattened accent forms

star
window

This feature replaces accents with flatter forms allowing them to fit within the line when placed over a tall base character. This feature is automatically applied by the math layout engine when an accent is placed over a base character at a height of more than MATH.MathConstants.FlattenedAccentBaseHeight.

Example
Off: x́ X́
On: x́ X́
The above example contains MathML, which currently only renders reliably using Firefox.
Example Feature Code Implementation
feature flac {
  sub uni0300 by uni0300.mathcap;
  sub uni0301 by uni0301.mathcap;
  sub uni0302 by uni0302.mathcap;
  sub uni0303 by uni0303.mathcap;
  sub uni0304 by uni0304.mathcap;
  sub uni0306 by uni0306.mathcap;
  sub uni0307 by uni0307.mathcap;
  sub uni0308 by uni0308.mathcap;
  sub uni030A by uni030A.mathcap;
  sub uni030C by uni030C.mathcap;
} flac;

frac: Fractions

toggle_off
starstarstarstar
public

The feature is used to set fractions, both those fractions for which there is a precomposed glyph in the font (for example, sub three slash four by threequarters;) and those made up of numerator and denominator forms of numerals.

Example
Off: 3/4 cup (145/793g)
On: 3/4 cup (145/793g)
Example Feature Code Implementation
feature frac {
  sub one slash four by onequarter;
  sub three slash four by threequarters;
  # ...

  # This implementation due to Tal Leming and Ben Kiel
  lookup FractionBar {
      ignore sub slash @figures @figures @figures @figures @figures @figures @figures @figures @figures @figures slash';
      ignore sub slash' @figures @figures @figures @figures @figures @figures @figures @figures @figures @figures slash;
      ignore sub slash @figures @figures @figures @figures @figures @figures @figures @figures @figures slash';
      ignore sub slash' @figures @figures @figures @figures @figures @figures @figures @figures @figures slash;
      ignore sub slash @figures @figures @figures @figures @figures @figures @figures @figures slash';
      ignore sub slash' @figures @figures @figures @figures @figures @figures @figures @figures slash;
      ignore sub slash @figures @figures @figures @figures @figures @figures @figures slash';
      ignore sub slash' @figures @figures @figures @figures @figures @figures @figures slash;
      ignore sub slash @figures @figures @figures @figures @figures @figures slash';
      ignore sub slash' @figures @figures @figures @figures @figures @figures slash;
      ignore sub slash @figures @figures @figures @figures @figures slash';
      ignore sub slash' @figures @figures @figures @figures @figures slash;
      ignore sub slash @figures @figures @figures @figures slash';
      ignore sub slash' @figures @figures @figures @figures slash;
      ignore sub slash @figures @figures @figures slash';
      ignore sub slash' @figures @figures @figures slash;
      ignore sub slash @figures @figures slash';
      ignore sub slash' @figures @figures slash;
      ignore sub slash @figures slash';
      ignore sub slash' @figures slash;
      ignore sub slash slash';
      ignore sub slash' slash;
      sub @figures slash' @figures by fraction;
  } FractionBar;

  lookup Numerator1 {
      sub @figures' fraction by @figuresNumerator;
  } Numerator1;

  lookup Numerator2 {
      sub @figures' @figuresNumerator fraction by @figuresNumerator;
  } Numerator2;

  lookup Numerator3 {
      sub @figures' @figuresNumerator @figuresNumerator fraction by @figuresNumerator;
  } Numerator3;

  lookup Numerator4 {
      sub @figures' @figuresNumerator @figuresNumerator @figuresNumerator fraction by @figuresNumerator;
  } Numerator4;

  lookup Numerator5 {
      sub @figures' @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator fraction by @figuresNumerator;
  } Numerator5;

  lookup Numerator6 {
      sub @figures' @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator fraction by @figuresNumerator;
  } Numerator6;

  lookup Numerator7 {
      sub @figures' @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator fraction by @figuresNumerator;
  } Numerator7;

  lookup Numerator8 {
      sub @figures' @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator fraction by @figuresNumerator;
  } Numerator8;

  lookup Numerator9 {
      sub @figures' @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator fraction by @figuresNumerator;
  } Numerator9;

  lookup Numerator10 {
      sub @figures' @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator @figuresNumerator fraction by @figuresNumerator;
  } Numerator10;

  lookup Denominator {
      sub [fraction @figuresDenominator] @figures' by @figuresDenominator;
  } Denominator;

  sub @figures space' @figuresNumerator by space.frac;
} frac;
User-Interface expectations

In the OS X Typography panel, this feature is accessed via "Contextual Fraction Forms -> Diagonal."

In Adobe applications, this feature is accessed via "Fractions" in the OpenType panel.

fwid: Full Widths

toggle_off
smart_toy
starstar
public
A

This feature replaces glyphs with variants which fill the em square. This is generally used with CJK fonts for setting text within an em-square grid (hanmen).

Example
Off: か12かab
On: か12かab
Example Feature Code Implementation
feature qwid {
  sub one by uniFF11;
  sub two by uniFF12;
  # ...
  sub a by uniFF41;
  sub b by uniFF42;
}
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Text spacing > Full Width".

half: Half Forms

check_circle
starstar
window

This feature produces half forms of conjuncts. It is processed in the Indic and USE complex shapers as part of the orthographic shaping group.

Half forms are used in scripts such as Devanagari to display dead (unvoiced) consonants after a virama in conjuncts which do not have a predetermined conjunct form. Half forms should be provided for all base consonants. These half forms can then be substituted into conjuncts later using the pres feature. For example:

feature half {
  sub ka-deva halant-deva by k-deva;
  ...
} half;
feature pres {
  sub k-deva sa-deva by ksa-deva;
  ...
} pres;
Example
Off: ग्त
On: ग्त
Example Feature Code Implementation
feature half {
  sub ka-deva halant-deva by k-deva;
  sub kha-deva halant-deva by kh-deva;
  sub ga-deva halant-deva by g-deva;
  sub gha-deva halant-deva by gh-deva;
  ...
} half;
Group:
Orthographic

haln: Halant Forms

check_circle
starstar
window

This feature is applied by the Indic shaper during the typographic presentation phase, and is intended to "clean up" dead consonant sequences which have not been formed into conjuncts, by replacing them with correct dead consonant forms.

For example, consider the two sequences "tta nukta virama ra" and "tta nukta virama" without the final ra. In Noto Sans Devanagari, the "tta nukta virama" sequence is first composed into ttanuktadeva by the nukt feature, leaving ttanuktadeva viramadeva radeva and ttanuktadeva viramadeva respectively.

When the final ra is present, the rkrf feature creates a conjunct form ttanuktaradeva. But without the final ra, we are left with ttanuktadeva viramadeva. In this case, the default positioning of the nukta underneath the tta is incorrect, as it needs to move to the left to accommodate the virama. A precomposed glyph ttanuktaprehalfdeva is substituted in the haln feature to tidy up this dead consonant sequence.

Example
Off: ट़्र ट़्
On: ट़्र ट़्
Group:
Typographic

halt: Alternate Half Widths

toggle_off
smart_toy
starstar
public
A

This feature is similar to the hwid feature, but instead of replacing half-width glyphs with proportional equivalents, it re-spaces the glyphs using positioning rules.

Example
Off: か、が。さ
On: か、が。さ
Example Feature Code Implementation
feature halt {
  pos [degree.full minute.full quotedblright.full quoteright.full second.full uni3001 uni3002 uni3009 uni300B uni300D uni300F uni3011 uni3015 uni301F uniFF09 uniFF0C uniFF0E uniFF3D uniFF5D] -500;
  pos [quotedblleft.full quoteleft.full uni3008 uni300A uni300C uni300E uni3010 uni3014 uni301D uniFF08 uniFF3B uniFF5B] <-500 0 -500 0>;
  pos [uni30FB uniFF01 uniFF1A uniFF1B] <-250 0 -500 0>;
} halt;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Text spacing > Alternative Half Width".

hist: Historical Forms

toggle_off
starstar
public
window

Substitutes forms of letters which are no longer commonly used, or which give the text a "historical" feel. See also the hlig feature.

Example
Off: Justice
On: Justice
Example Feature Code Implementation
feature hist {
  sub J by J.hist;
  sub s by longs;
} hist;

hkna: Horizontal Kana Alternates

toggle_off
star_outline
public
A

This feature replaces standard kana forms with glyphs which are designed specifically for horizontal layout. For example, while "generic" kana may have curving crossbars for characters such as さ and た, horizontal variants may use straight crossbars.

Example
Off: か12か
On: か12か
Example Feature Code Implementation
feature hkna {
  sub ka-hira by ka-hira.vkna;
  sub sa-hira by sa-hira.vkna;
  sub ta-hira by ta-hira.vkna;
  # ...
} hkna;
User-Interface expectations

In the Mac OS X typography panel, this feature is accessed via "Optimized Kana Alternatives -> Horizontal Alternatives".

hlig: Historical Ligatures

toggle_off
starstar
public
window

Substitutes ligature forms which are no longer commonly used, or which give the text a "historical" feel: for example, the "st" ligature. See also the hist feature.

Example
Off: aſſiſt
On: aſſiſt
Example Feature Code Implementation
feature hlig {
  sub s t by s_t;
} hlig;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Ligatures -> Historical Ligatures."

hngl: Hangul

star_outline
public
sick
A

This feature is deprecated and should not be used. The idea of this feature was to replace hanja (Chinese Han characters) with hangul syllables. But such semantic behavior should be processed at the input method environment level, not at the font level, meaning this feature was never a good idea.

hojo: Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms)

star
public
A

The expected form of Japanese kanji characters in an OpenType font are the forms specified in JIS X 0213 (which replaces the older standard, JIS X 0208). As well as JIS X 0208, an additional standard, JIS X 0212, defined supplementary characters, including 5,801 kanji characters. 2,743 of those characters were included in the JIS X 0213 standard, but in some cases, the representative forms are different between the 1990 revision of JIS X 0212 and the current revision (2004) of JIS X 0213. This feature is used to select the JIS X 0212-1990 representative forms of these characters.

The best source of information about which glyph forms differ, and how this feature should be implemented, is the Adobe-Japan1 repository.

Example
Off: 瑢瘦
On: 瑢瘦
Example Feature Code Implementation
feature hojo {
  sub uni7462 by uni7462.hojo;
  sub uni7626 by uni7626.hojo;
  # ...
} jp83;
User-Interface expectations

In the Mac OS X typography panel, this feature is accessed via the "character shape" radio buttons.

In Adobe InDesign with CJK functionality, this feature can be accessed via the "Alternate Glyphs" dropdown in the Advanced Character Formats panel of the character style options dialog.

hwid: Half Widths

toggle_off
smart_toy
starstar
public
A

This feature replaces glyphs (normally figures and punctuation) with variants which are one-half of the em square. This is generally used with CJK fonts and in the context of vertical typesetting. (For placing a sequence of two numbers horizontally across an em-width vertical column.)

See also fwid, qwid, twid.

Example
Off: か12か
On: か12か
Example Feature Code Implementation
feature hwid {
  sub one by one.hwid;
  sub two by two.hwid;
  # ...
}
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Text spacing > Half Width".

init: Initial Forms

check_circle
smart_toy
starstar
ن
ܫ

This feature is used by the Arabic, Indic, and USE complex shapers as part of topographic shaping. It is not appropriate for general start-of-word detection, but is designed to replace joining characters with initial forms. This means characters which have the Unicode joining type Right_Joining or Dual_Joining in a right-to-left script, and characters which have the Unicode joining type Left_Joining or Dual_Joining in a left-to-right script. These joining type properties can be found in ArabicShaping.txt in the Unicode Character Database.

In the Indic shaper, the feature is expected to apply in word-initial context as identified by the shaping engine.

Example
Off: جر
On: جر
Example Feature Code Implementation
feature init {
  lookupflag RightToLeft IgnoreMarks;
  sub beh-ar by beh-ar.init;
  sub jeem-ar by jeem-ar.init;
  # ...
}
Group:
Topographical

isol: Isolated Forms

check_circle
smart_toy
starstar
ن
ܫ

This feature is used by the Arabic and USE complex shapers as part of topographic shaping. It is designed to replace joining characters with isolated forms. This means characters which have the Unicode joining type Right_Joining or Dual_Joining in a right-to-left script, and characters which have the Unicode joining type Left_Joining or Dual_Joining in a left-to-right script. These joining type properties can be found in ArabicShaping.txt in the Unicode Character Database.

Example
Off: یڽہ
On: یڽہ
Example Feature Code Implementation
feature isol {
  sub yehHamzaabove-ar by CH_YEu1 HAMZA_ABOVE;
  sub tehMarbutagoal-ar by HAYCu1 dda;
  sub hah-ar by JIMu1;
  sub noon-ar by NUNu1 sdi;
} isol;
Group:
Topographical

ital: Italics

toggle_off
star_outline
public
A

This feature is used in very particular circumstances. Despite its name, it is not a general mechanism for activating italic glyphs.

Historically CJK fonts, particular Japanese fonts, shipped with a glyphset which contained the Latin alphabet (usually full-width but sometimes proportional). As will as upright forms, these fonts also included Latin italic glyphs.

CJK fonts with both upright and italic Latin glyphs in the same font should use this feature to select the italic forms

Example
Off: か123か
On: か123か
Example Feature Code Implementation
feature ital {
  sub a by a.ital;
  sub b by b.ital;
  # ...
} ital;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Italics -> On". In Adobe applications, this feature is accessed via "Roman Italics" in the OpenType panel. Note that in neither case can the italic feature be accessed from the "Italicise" button or the "Font Style" menu.

jalt: Justification Alternates

toggle_off
star
public
window

This feature is intended to allow text layout engines to improve line justification by selecting alternate glyphs. A layout engine can set a line of text, and then try applying the jalt feature to the line to see if the resulting glyphs have a better fit. It is rarely implemented in layout engines, with Adobe InDesign and Photoshop being the only known implementations.

Example
Off: سارق الغنم
On: سارق الغنم
Example Feature Code Implementation
feature jalt {
  sub qaf-ar by qaf-ar.jalt;
  sub seen-ar by seen-ar.jalt;
  # ...
} jalt;
User-Interface expectations

In Adobe InDesign, this can be automatically applied at the paragraph level by choosing "Justification" from the paragraph panel menu and selecting "Justification Alternates (Naskh)" in the Justification dropdown. It can also be manually applied at the character level by choosing the Justification Alternate option from the character panel menu. In Adobe Photoshop, it can be manually applied at the character level by choosing "Justification Alternates" from the character panel.

jp04: JIS04 Forms

star
public
A

The expected form of Japanese kanji characters in an OpenType font are the forms specified in JIS X 0213 (which replaces the older standard, JIS X 0208). In the course of revision of this standard, the expected forms of a number of kanji characters have changed over time.

Fonts should target the most recent revision of the standard (currently the 2004 revision). However, features may be used to access forms specified in earlier revisions. If the jp04 feature is applied, kanji should be replaced by variant forms representing those specified in the 2004 revision of the standard. As 2004 is the current revision, this feature should only be implemented when providing updates to older fonts or to provide remappings for glyphs where both older and newer forms are encoded in Unicode and provided in the font (for example, sub uni5516 by uni555E;).

A historical comparison between different character forms in JIS revisions can be found at this site.

User-Interface expectations

In the Mac OS X typography panel, this feature is accessed via the "character shape" radio buttons.

In Adobe InDesign with CJK functionality, this feature can be accessed via the "Alternate Glyphs" dropdown in the Advanced Character Formats panel of the character style options dialog.

jp78: JIS78 Forms

starstar
public
A

The expected form of Japanese kanji characters in an OpenType font are the forms specified in JIS X 0213 (which replaces the older standard, JIS X 0208). In the course of revision of this standard, the expected forms of a number of kanji characters have changed over time. For example, between the 1978 and 1983 revisions, the "road" radical (shinnyō) changed form in some characters, moving from two initial dots to one dot. (This change was reversed in the 2004 revision.)

Fonts should target the most recent revision of the standard (currently the 2004 revision). However, features may be used to access forms specified in earlier revisions.

A historical comparison between different character forms in JIS revisions can be found at this site.

If the jp78 feature is applied, kanji should be replaced by variant forms representing those specified in the 1978 revision of the standard.

Example
Off: 偉茨創
On: 偉茨創
Example Feature Code Implementation
feature jp78 {
  sub uni5049 by uni5049.jp78;
  sub uni5275 by uni5275.jp78;
  sub uni8328 by uni8328.jp78;
  # ...
} jp83;
User-Interface expectations

In the Mac OS X typography panel, this feature is accessed via the "character shape" radio buttons.

In Adobe InDesign with CJK functionality, this feature can be accessed via the "Alternate Glyphs" dropdown in the Advanced Character Formats panel of the character style options dialog.

jp83: JIS83 Forms

starstar
public
A

The expected form of Japanese kanji characters in an OpenType font are the forms specified in JIS X 0213 (which replaces the older standard, JIS X 0208). In the course of revision of this standard, the expected forms of a number of kanji characters have changed over time. For example, between the 1983 and 1990 revisions, the "eight" radical (hachigashira) changed form, losing its top horizontal line.

Fonts should target the most recent revision of the standard (currently the 2004 revision). However, features may be used to access forms specified in earlier revisions.

A historical comparison between different character forms in JIS revisions can be found at this site.

If the jp83 feature is applied, kanji should be replaced by variant forms representing those specified in the 1983 revision of the standard.

Example
Off: 逢芦晦
On: 逢芦晦
Example Feature Code Implementation
feature jp83 {
  sub uni82A6 by uni82A6.jp83;
  sub uni9022 by uni9022.jp83;
  # ...
} jp83;
User-Interface expectations

In the Mac OS X typography panel, this feature is accessed via the "character shape" radio buttons.

In Adobe InDesign with CJK functionality, this feature can be accessed via the "Alternate Glyphs" dropdown in the Advanced Character Formats panel of the character style options dialog.

jp90: JIS90 Forms

star
public
A

The expected form of Japanese kanji characters in an OpenType font are the forms specified in JIS X 0213 (which replaces the older standard, JIS X 0208). In the course of revision of this standard, the expected forms of a number of kanji characters have changed over time. For example, between the 1983 and 1990 revisions, the "long stride" radical (innyō) changed form in some characters, losing the upstroke on the third stroke.

Fonts should target the most recent revision of the standard (currently the 2004 revision). However, features may be used to access forms specified in earlier revisions.

A historical comparison between different character forms in JIS revisions can be found at this site.

If the jp90 feature is applied, kanji should be replaced by variant forms representing those specified in the 1990 revision of the standard.

Example
Off: 餌誹蔽
On: 餌誹蔽
Example Feature Code Implementation
feature jp90 {
  sub uni853D by uni853D.jp90;
  sub uni8AB9 by uni8AB9.jp90;
  sub uni990C by uni990C.jp90;
  # ...
} jp90;
User-Interface expectations

In the Mac OS X typography panel, this feature is accessed via the "character shape" radio buttons.

In Adobe InDesign with CJK functionality, this feature can be accessed via the "Alternate Glyphs" dropdown in the Advanced Character Formats panel of the character style options dialog.

kern: Kerning

toggle_on
smart_toy
starstarstarstarstar
public

This feature is one of the two facilities for kerning within OpenType. The original TrueType kern table in the font implements simple, non-contextual pair-based and class-based kerning, and a pair-based (format 0) kern table was historically required for kerning to function in applications such as Microsoft PowerPoint.

However, modern fonts tend to implement kerning through the use of this feature instead (see discussion). The standard implementation is to use GPOS 2 pair positioning rules to adjustment the X advance of the first glyph in the pair, although note that when generating a kern feature for right-to-left text, the adjustment is generally made to both advance and placement:

pos period parentheses <-30 0 -30 0>;

See also the vkrn feature for kerning in vertical settings. Kerning may be disabled based on user preference; for mandatory adjustments, use the dist feature instead.

Example
Off: AVATAR
On: AVATAR
User-Interface expectations

In the OS X typography panel, this feature is disabled via "Text Spacing > No Kerning".

Group:
Positioning

liga: Standard Ligatures

toggle_on
smart_toy
starstarstarstar
public

Ligatures provide typographic refinement by replacing multiple glyphs with a single, ligated form. This feature is used for standard ligatures, which are to be applied by default; in Latin text, this is generally sequences such as f f, f f l, f f, f i, and f f i.

Ligature code is often automatically generated by the font editor based on detecting sequences of glyph names combined with underscores; note, however, that the common ligature glyph fi does not contain an underscore.

Example
Off: Official
On: Official
Example Feature Code Implementation
feature liga {
  sub f f i by f_f_i;
  sub f f l by f_f_l;
  sub f f by f_f;
  sub f i by fi;
  sub f l by f_l;
}
User-Interface expectations

In the OS X typography panel, this feature is disabled via "Ligatures > Common Ligatures".

ljmo: Leading Jamo Forms

check_circle
star_outline
window

The Korean Hangul script is encoded in Unicode in two ways: first, as a series of precomposed syllable graphemes (encoded from U+AC00 to U+D7AF); second, as a series of indivdual, conjoining jamo. Korean syllables form a LVT? (leading consonant, vowel, optional trailing consonant) pattern; the leading consonant (choseong) jamo are encoded between U+1100 and U+115F, the vowel (jungseong) jamo are encoded between U+1160 and U+11A7, and the optional trailing consonant (jongseong) jamo between U+11A8 and U+11FF. (At least in the primary Hangul Jamo Unicode block; other jamo are encoded in extension blocks.)

The Hangul shaper will first attempt to compose any sequences of conjoining jamo into an encoded form in the precomposed syllable block. But where this is not successful - for example, in an Old Korean form which is not encoded in Unicode as a precomposed syllable - then the shaper will instead decompose any LV syllables to break the syllable into separate L, V, and T? characters, and then apply the Korean shaping features (ljmo, vjmo, tjmo) to select forms of the jamo which are appropriately positioned and sized to combine into the correct grapheme-image.

For example, the Old Korean syllable ᄒᆞᆯ is not encoded in Unicode as a precomposed syllable, and so must be encoded with the three individual jamo. The Hangul shaper applies the ljmo feature to the choseong, the vjmo feature to the jungseong and the tjmo feature to the jongseong. The resulting sequence produces a glyph which renders the syllable correctly, with the vjmo and tjmo generally producing zero-width mark glyphs positioned appropriately. An alternative to this technique is to use the ccmp feature to turn decomposed jamo into a precomposed glyph.

For further information, see sections 3.12 and 18.6 of the Unicode Standard.

Group:
Topographical

lnum: Lining Figures

toggle_off
smart_toy
starstar
public
A

This feature substitutes digits for lining forms. Lining figures are designed to fit in all-capital settings.

In theory, this feature should not just substitute the default form of figures (e.g. one, two) for lining forms, but also any alternate non-lining forms (such as oldstyle figures) for lining forms. Where lining forms are the default, implementing a substitution from oldstyle figures to lining figures is not typographically necessary but will cause the UI of layout programs to display lining figures as an option.

See also onum, pnum, tnum.

Example
Off: ABC1234
On: ABC1234
Example Feature Code Implementation
feature lnum {
  sub one by one.lf;
  sub two by two.lf;
  # ...
} lnum;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Number Case > Lining Figures". In Adobe applications, selecting "Tabular lining" from the OpenType panel will apply this feature and the tnum feature, while selecting "Proportional lining" will apply this feature and the pnum feature.

In CSS, this feature can be accessed through the font-variant-numeric: lining-nums property.

locl: Localized Forms

check_circle
starstarstarstar
public
T

This feature allows for localization of glyph forms by making substitutions conditional on the script and language selected by the user. Typical uses of this feature include:

  • Substituting Cyrillic glyphs with Bulgarian and Serbian variants.

  • In Turkish, Azeri, Kazakh, Tatar and Crimean Tartar, substituting the i by an idotaccent glyph so that when uppercased through case conversion features such as smcp, the dot can be preserved. (See this tutorial.)

  • In Romanian and Moldovan, substituting the scedilla (U+015E) with scommaaccent.

  • Repositioning the ogonek to the center of the glyph in Navajo.

  • In Dutch, substituting the j in an íj pair with íj́ (see thread.)

  • Substituting the Catalan "punt volat" for ldot (tutorial)

  • In a font which has multiple scripts with different spacing conventions, such as Latin and Urdu, conditionally resizing the advance width of the space character to meet the expectations of the script in use.

Example Feature Code Implementation
feature locl {
  script latn;
  language ROM;
  sub Scedilla by Scommaaccent;
  sub scedilla by scommaaccent;
  language MOL;
  sub Scedilla by Scommaaccent;
  sub scedilla by scommaaccent;
  language CAT;
  sub l' periodcentered' l by ldot;
  sub L' periodcentered' L by Ldot;
} locl;
Group:
Common

ltra: Left-to-right alternate forms

star_outline
public
A

This feature - by analogy with the rtla feature - is intended for right-to-left scripts which can also be expressed in a left-to-right line layout, but which require glyph transformations such as mirroring when written left-to-right. As detailed in the ltrm feature, such scripts are extremely rare, and no implementations have been found.

Group:
Preprocessing

ltrm: Left-to-right mirrored forms

star
public
A

This feature - by analogy with the rtlm feature - was intended for right-to-left scripts which can also be expressed in a left-to-right line layout, but which require glyph transformations such as mirroring when written left-to-right.

Such scripts are exceptionally rare. Noto Sans Old Hungarian uses this feature to horizontally mirror the glyphs when laying out Old Hungarian left-to-right, although it is disputed that Old Hungarian was ever written left-to-right. The Old South Arabian script is usually written RTL but can also be laid out LTR; but Noto Sans Old South Arabian does not include mirroring substitutions. Oh well.

Group:
Preprocessing

mark: Mark Positioning

check_circle
smart_toy
starstarstarstar
public
window

This feature is used to position mark glyphs with respect to their base glyphs.

Generally speaking, this is automatically generated by font editing software based on the positions of anchors in the base and mark glyphs. The editor will emit mark-to-base (GPOS4) and mark-to-ligature (GPOS5) rules for this feature.

Example
Off: تَشْكِيل
On: تَشْكِيل
Group:
Positioning

med2: Medial Forms #2

check_circle
star
ܫ
window

This feature is used by the Arabic complex shaper when processing the Syriac script. The Syriac letter alaph (U+0710) is not normally a joining character but can join to the right in the middle of a word if the preceding character is right-joining.

Example
Off: ܒܐܬܪܐ
On: ܒܐܬܪܐ
Example Feature Code Implementation
feature fin2 {
  lookupflag RightToLeft IgnoreMarks;
  sub uni0710 by uni0710.Medi2;
  } fin2;
Group:
Topographical

medi: Medial Forms

check_circle
smart_toy
starstar
ن
ܫ

This feature is used by the Arabic and USE complex shapers as part of topographic shaping. It is not appropriate for general middle-of-word detection, but is designed to replace joining characters with medial forms. This means characters which have the Unicode joining type Right_Joining or Dual_Joining in a right-to-left script, and characters which have the Unicode joining type Left_Joining or Dual_Joining in a left-to-right script. These joining type properties can be found in ArabicShaping.txt in the Unicode Character Database.

Example
Off: جسر
On: جسر
Example Feature Code Implementation
feature medi {
  lookupflag RightToLeft IgnoreMarks;
  sub beh-ar by beh-ar.medi;
  sub jeem-ar by jeem-ar.medi;
  # ...
}
Group:
Topographical

mgrk: Mathematical Greek

toggle_off
starstar
public
A

This feature replaces Greek glyphs with mathematical symbols: for example, Sigma is replaced by the summation glyph.

Example
Off: φ(n)=Σ Δn
On: φ(n)=Σ Δn
Example Feature Code Implementation
feature mgrk {
  sub uni0394 by uni2206;
  sub Pi by product;
  sub Sigma by summation;
  sub uni03A9 by uni2126;
  sub uni03BC by uni00B5;
  sub phi by uni03D5;
} mgrk;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Mathematical Extras -> Mathematical Greek Letter Forms".

mkmk: Mark-to-Mark Positioning

check_circle
smart_toy
starstarstarstar
public
window

This feature is used to position mark glyphs with respect to other mark glyphs. This can be used for example to position arbitrary combinations of marks used in scholarly transliteration systems, as well as positioning Arabic secondary marks relative to primary marks, such as fathah over shadda and vice versa.

Generally speaking, this is automatically generated by font editing software based on the positions of anchors in the mark glyphs, if the mark glyphs have both a "mark anchor" (e.g. _bottom) and an "attachment anchor" (bottom). The editor will then emit mark-to-mark (GPOS6) rules for this feature.

Example
Off: é̤̤̱̃̃
On: é̤̤̱̃̃
Group:
Positioning

mset: Mark Positioning via substitution

star_outline
ن
sick
window

This feature is used by the Arabic shaping as the final phase of the typographic shaping group. It was intended for substitutions which combine marks and bases into precomposed forms as an alternative to using positioning rules in the mark feature; however, it is possible to use substitution rules in the mark feature, making the mset feature redundant.

It was used in Microsoft's Windows 95 Arabic fonts, and practically no other font. New fonts should use mark, ccmp, rlig or other features instead.

Group:
Typographic

nalt: Alternate Annotation Forms

toggle_off
starstar
public
A

This feature replaces glyphs with "notational" forms - glyphs in boxes, circles, etc. It is often used in CJK fonts to access characters in the Unicode "Enclosed CJK Letters and Months" block (for example, sub uni3131 by uni3200;), but may also be used to access other enclosed forms (sub one by uni2460;).

Note that although the OT Specification describes this as implementable via alternate substitution lookups, no interface supports this, and single substitutions should be used instead.

Example
Off: 12345
On: 12345
User-Interface expectations

No user interface to this feature has been found.

nlck: NLC Kanji Forms

starstar
public
A

In 2000, the Japanese National Language Council (now the Japanese language division of the Agency for Cultural Affairs) prescribed new glyph forms for Japanese kanji. In particular, the shape of the "father" and "long stride" (innyo) radicals changed to remove a small stroke.

The expected substitutions of the nlck feature are defined in terms of the Adobe-Japan1 glyphset. Engineers creating Japanese fonts according to that glyphset should read the information at the Adobe-Japan1 repository, and use the latest version of the feature code provided there to implement this feature.

Example
Off: 咬廻挺爺
On: 咬廻挺爺

nukt: Nukta Forms

check_circle
starstar

This feature is used to replace consonant + nukta with a precombined nukta form glyph in Indic and USE scripts. It is called during the preprocessing group - after initial reordering in Indic scripts, but before processing in the USE.

While nukta marks may be positioned using the normal mark positioning functionality (mark), the font designer may choose to create specific precomposed nukta glyphs, either for ease of positioning or to facilitate later lookups.

Example Feature Code Implementation
feature nukt {
  sub ka-deva   nukta-deva by ka-deva.nukt;
  sub kha-deva  nukta-deva by kha-deva.nukt;
  sub ga-deva   nukta-deva by ga-deva.nukt;
  sub ja-deva   nukta-deva by ja-deva.nukt;
  sub dda-deva  nukta-deva by dda-deva.nukt;
  sub ddha-deva nukta-deva by ddha-deva.nukt;
  sub pha-deva  nukta-deva by pha-deva.nukt;
  sub ra-deva   nukta-deva by ra-deva.nukt;
} nukt;
Group:
Preprocessing

numr: Numerators

toggle_off
smart_toy
starstarstar
public
sick
A

This deprecated feature replaces numeric glyphs with numerator forms. See also dnom.

Note that, despite the description of this feature in the OpenType specification, the application of the frac feature is independent of this feature. It was originally intended that applying the frac feature would "trigger" the application of the numr feature for glyphs before the division slash and the dnom feature for glyphs after it. This behavior was never implemented in OpenType shaping, and instead contextual rules are used within the frac feature to choose appropriate glyphs for numerator and denominator.

New fonts should use the frac feature in preference to this feature.

onum: Oldstyle Figures

toggle_off
smart_toy
starstarstar
public
A

This feature substitutes digits for oldstyle forms. Oldstyle figures are designed to fit in mixed case text settings.

In theory, this feature should not just substitute the default form of figures (e.g. one, two) for oldstyle forms, but also any alternate lining forms (such as lining figures) for oldstyle forms. Where oldstyle forms are the default, implementing a substitution from lining figures to oldstyle figures is not typographically necessary but will cause the UI of layout programs to display oldstyle figures as an option.

See also onum, pnum, tnum.

Example
Off: ABC1234
On: ABC1234
Example Feature Code Implementation
feature lnum {
  sub one by one.osf;
  sub two by two.osf;
  # ...
} lnum;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Number Case > Old-Style Figures". In Adobe applications, selecting "Tabular oldstyle" from the OpenType panel will apply this feature and the tnum feature, while selecting "Proportional oldstyle" will apply this feature and the pnum feature.

In CSS, this feature can be accessed through the font-variant-numeric: oldstyle-nums property.

opbd: Optical Bounds

star_outline
public
sick
A

This feature was intended for implementing what TeX users call "character protrusion" or "margin kerning": improving the fit of lines in a paragraph by altering the apparent advance width or positioning of certain characters based on their optical edges rather than bounding boxes.

Consider, for example, a serif letter D appearing at the beginning of a line. By altering the positioning of the glyph, the serifs can be protruded outside the margin so that the stem aligns with the left edge of the text, to give a more visually "tight" justification.

This feature was originally intended to automatically "call" the lfbd and rtbd features to achieve margin kerning; however, the OpenType feature model did not develop as planned, and so this feature was never implemented.

ordn: Ordinals

toggle_off
starstarstarstar
public
A

In some languages, alphabetic glyphs are used to abbreviate ordinal numerals. For example, in Italian, the word for "second" is written 2º when referring to a gramatically masculine noun and 2ª when referring to a gramatically feminine noun. While this can be encoded with the Unicode FEMININE ORDINAL INDICATOR (U+00AA) and MASCULINE ORDINAL INDICATOR (U+00BA) codepoints as in this paragraph, it is more common to use the standard Latin a and o characters and use a font feature to form the ordinal indicators.

Additionally, the numero sign (№, U+2116) is more commonly written with the Latin sequence No.. This feature is applied to convert it to the numero glyph.

Some fonts also use this feature to place other Latin glyphs in "ordinal position".

Example
Off: No. 2a
On: No. 2a
Example Feature Code Implementation
feature ordn {
  sub @numeral [A a] by ordfeminine;
  sub @numeral [o o] by ordmasculine;

  sub N o period by numero;
} ordn;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Vertical Position

Ordinals".

ornm: Ornaments

toggle_off
starstar
public
A

This feature has two uses, both of which are used to select ornament glyphs from within the font's glyphset.

In the first use, all ornamental glyphs (fleurons, manicules, dingbats and so on) are made available through a GSUB3 alternate substitution from the bullet character (U+2022).

In the second use, ASCII characters are substituted for ornamental forms using a GSUB1 substitution.

Example
Off: +×=<>
On: +×=<>
Example Feature Code Implementation
feature ornm {
  sub bullet from @ornaments;


  sub less by arrowleft;
  sub greater by arrowright;
  sub plus by arrowup;
  # ...
} ornm;

palt: Proportional Alternate Widths

toggle_off
smart_toy
starstar
public
A

This feature is similar to the pwid feature, but instead of replaces full-width glyphs with proportional equivalents, it re-spaces the glyphs using positioning rules.

Example
Off: かabcか
On: かabcか
Example Feature Code Implementation
feature palt {
  pos uniFF41 <-186 0 -373 0>;
  pos uniFF42 <-148 0 -346 0>;
  pos uniFF43 <-220 0 -441 0>;
  pos uniFF44 <-176 0 -353 0>;
  # ...
} palt;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Text spacing > Alternative Proportional Widths".

pcap:

toggle_off
smart_toy
starstar
public
A

Substitutes lowercase characters for petite capitals. Petite capitals are an additional set of capital letters found in some founds which are smaller than the "small caps" set, designed to harmonize better with the lowercase letters. (See, for example, Mrs Eaves and Filosophia.)

Compare with c2pc, which substitutes uppercase letters for petite capitals.

Note that as this feature changes the case of the glyph, font engineers should ensure that any language-specific localisations are taken into account during case conversion - for example, when applying this feature to the letter i in Turkish, the returned form should appear with a dot above. (This is often achieved by replacing i with idotless dotaccent or similar in the locl feature.)

Example
Off: This
On: This
Example Feature Code Implementation
feature pcap {
  sub a by A.pc;
  sub b by B.pc;
  # ...
} pcap;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Lowercase -> Petite Capitals."

In CSS, this feature can be set with font-variant-caps: petite-caps;

pkna: Proportional Kana

toggle_off
star_outline
public
A

Japanese characters are usually typeset on a fix-width em square grid. However, for display purposes, it may be preferable to set the glyphs proportionally. This feature either replaces the kana glyphs with alternate glyphs with reduced sidebearings, or uses positioning rules to achieve the same effect. See also pwid.

Example
Off: かりかり
On: かりかり
Example Feature Code Implementation
feature pkna {
  sub ka-hira by ka-hira.pkna;
  sub ki-hira by ki-hira.pkna;
  # ...
} pkna;

# OR

feature pkna {
  pos ka-hira <-75 0 -75 0>;
  pos ki-hira <-15 0 -35 0>;
  # ...
} pkna;

pnum: Proportional Figures

smart_toy
starstarstar
public

This feature replaces tabular (fixed-width) figures by proportional variants. See also the onum, lnum and tnum features. Note that where the default form is proportional, this feature has no effect, although some font editors provide rules for this feature in any case.

Example Feature Code Implementation
feature pnum {
  sub one.tf by one;
  sub two.tf by two;
  sub three.tf by three;
  #...
} pnum;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Number Spacing > Proportional Numbers".

In CSS, this feature can be accessed through the font-variant-numeric: proportional-nums property.

pref: Pre-base Forms

check_circle
starstar
window

This feature is intended to form pre-base ligatures. In the Indic shaper, its application is scoped to the virama-consonant pair ordered before the base consonant. It is most often used in Khmer fonts to replace the coeng ro sequence with a pre-base form of the ra (see also cfar), or as a generic orthographic feature in Myanmar (Burmese).

Note that in the Indic shaper, this feature is also used as a "signal" to the shaping engine for reordering purposes: that is, if a virama-consonant pair would be substituted by this feature, then that consonant is placed in the post-base position when the syllable is reordered. (Note: not the pre-base position, as one might expect!)

Example Feature Code Implementation
feature pref {
  sub coeng-khmer ro-khmer by coeng-ro;

  # This could alternately be in cfar
  sub coeng-ro @consonant @subjoined by coeng-ro.longer;
}
Group:
Orthographic

pres: Pre-base Substitutions

check_circle
starstar
window

This feature is used in Indic, Khmer, Myanmar and USE scripts to form pre-base conjunct ligatures. For example, in Devanagari or Gujarati, the sequence ka + virama + consonant is first substituted by the half form k + consonant in the half feature, but then is further ligated to a conjunct form in this feature.

The feature may also be used for other presentational adjustments concerning pre-base forms, such as selecting the correct width of the i-matra.

Example
Off: त्ति
On: त्ति
Example Feature Code Implementation
feature pres {
    sub k-deva ka-deva by kka-deva;
    sub k-deva kha-deva by kkha-deva;
    # ...
    sub g-deva ga-deva by gga-deva;
    # ...
    sub iMatra-deva' @width1 by iMatra-deva.1;
    sub iMatra-deva' @width2 by iMatra-deva.2;
    # ...
} pres;
Group:
Typographic

pstf: Post-base Forms

check_circle
starstar
window

This feature is intended to replace glyphs by their post-base forms. For example, in Bengali and Gurmukhi, the ya consonant has a post-base form when followed by a virama.

Note that in the Indic shaper, this feature is also used as a "signal" to the shaping engine for reordering purposes: that is, if a virama-consonant pair would be substituted by this feature, then that consonant is placed in the post-base position when the syllable is reordered.

Example
Off: ব্য্
On: ব্য্
Example Feature Code Implementation
feature pstf {
    sub viramabeng yabeng by yabeng_viramabeng.pstf;
} pstf;
Group:
Orthographic

psts: Post-base Substitutions

check_circle
starstar
window

This feature is intended to replace base + post-base sequences with a ligature glyph. It can also be used to perform any contextual post-base substitution required (for example, in Devanagari or Bengali, replacing the ii-matra (ी) with appropriate width glyphs to point to the stem of the consonant).

Example
Off: ꦏꦿꦛꦿ
On: ꦏꦿꦛꦿ
Example Feature Code Implementation
feature psts {
  sub ka-javanese cakra by ka_cakra;
  sub ta-javanese cakra by ta_cakra;
  # ...
} psts;
Group:
Typographic

pwid: Proportional Widths

toggle_off
smart_toy
starstar
public
A

This feature replaces glyphs (normally figures and punctuation) sized to the em-square with variants which are proportionally spaced. This is generally used with CJK fonts. It is the opposite of the fwid feature.

Example
Off: かabcか
On: かabcか
Example Feature Code Implementation
feature pwid {
  sub uniFF11 by one;
  sub uniFF12 by two;
  # ...
  sub uniFF41 by a;
  sub uniFF42 by b;
  # ...
} pwid;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Text spacing > Proportional Widths".

qwid: Quarter Widths

toggle_off
smart_toy
star_outline
public
A

This feature replaces glyphs (normally figures and punctuation) with variants which are one-quarter of the em square. This is generally used with CJK fonts and in the context of vertical typesetting. (For placing a sequence of four numbers horizontally across an em-width vertical column.)

See also fwid, hwid, twid.

Example
Off: か1231か
On: か1231か
Example Feature Code Implementation
feature qwid {
  sub one by one.qwid;
  sub two by two.qwid;
  # ...
}
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Text spacing > Quarter Width".

rand: Randomize

toggle_on
star_outline
public
A

The randomize feature, which is currently only implemented in the Harfbuzz shaping engine, allows font designers to randomly replace glyphs with variants from a selection, using a GSUB3 alternate substitution. This can be useful for handwriting or display style fonts. This feature is applied by default (at least in Harfbuzz), and there is no user interface to disabling it; use tastefully.

Note that because of the limited implementation of this feature, it is still recommended to use one of the other deterministic alternate selection strategies described in the OpenType Cookbook in a calt feature. Also note that to avoid problems with reflowing text, the Harfbuzz shaping engine applies the same random seed to each shaping run. This means that while the glyphs within a run are chosen (pseudo)randomly, the results will be consistent each time the same text is shaped.

Example
Off: AAAA
On: AAAA
Example Feature Code Implementation
feature rand {
  # But you probably want to use one of the OpenType Cookbook recipes
  # in a calt feature instead
  sub A from [A a.rand1 A.rand2 A.rand3];
} rand;

rclt: Required Contextual Alternates

check_circle
starstar
ن
ܫ
window

This feature is intended for required contextual alternates (contextual alternates which should not be subject to user control). Note that in the Arabic shaper it is processed early in the typographic presentation phase; in other shapers, it is processed along with the common feature group.

In the example, Reem Kufi uses the rclt feature to swap repeated beh glyphs for glyphs with raised teeth.

Example
Off: ببببب
On: ببببب
Example Feature Code Implementation
feature rclt {
  lookupflag IgnoreMarks;
    sub [behDotless-ar.init behDotless-ar.medi]
         behDotless-ar.medi'
        [behDotless-ar.medi behDotless-ar.fina]
     by  behDotless-ar.medi.high;
    sub [seen-ar.init seen-ar.medi]
         behDotless-ar.medi'
     by  behDotless-ar.medi.high;
    sub  behDotless-ar.init
         behDotless-ar.medi'
         noonghunna-ar.fina
     by  behDotless-ar.medi.high;
} rclt;
Group:
Typographic

rkrf: Rakar Forms

check_circle
starstar
window

This feature is used in the Indic and USE complex shapers to replace consonant clusters involving "ra" with conjunct forms. For example, in Devanagari, the sequence ka virama ra should be replaced by the conjunct form kra. While this substitution was previously achieved in the v1 shaper by the combination of the bwlf and vatu features, the v2 shaper allows for a simpler way to substitute the entire sequence.

The half feature is processed after this feature, so any conjuncts created in rkrf must also be included in the half-form rules in half.

Example Feature Code Implementation
sub rkrf {
    sub ka-deva   virama-deva ra-deva by   kra-deva;
    sub kha-deva  virama-deva ra-deva by  khra-deva;
    sub ga-deva   virama-deva ra-deva by   gra-deva;
    # ...
} rkrf;
Group:
Orthographic

rlig: Required Ligatures

check_circle
starstar
ن
ܫ
window

This feature is intended for required ligatures (ligatures which should not be subject to user control). Note that in the Arabic shaper it is processed early in the typographic presentation phase; in other shapers, it is processed along with the common feature group.

Example
Off: لا
On: لا
Example Feature Code Implementation
feature rlig {
  lookupflag IgnoreMarks RightToLeft;
  sub lam-ar.init alef-ar.fina by lam_alef-ar;
  sub lam-ar.medi alef-ar.fina by lam_alef-ar.fina;
  sub lam-ar.init alefHamzaabove-ar.fina by lam_alefHamzaabove-ar;
  sub lam-ar.medi alefHamzaabove-ar.fina by lam_alefHamzaabove-ar.fina;
  sub lam-ar.init alefHamzabelow-ar.fina by lam_alefHamzabelow-ar;
  sub lam-ar.medi alefHamzabelow-ar.fina by lam_alefHamzabelow-ar.fina;
  sub lam-ar.init alefMadda-ar.fina by lam_alefMadda-ar;
  sub lam-ar.medi alefMadda-ar.fina by lam_alefMadda-ar.fina;
  sub lam-ar.init alefWasla-ar.fina by lam_alefWasla-ar;
  sub lam-ar.medi alefWasla-ar.fina by lam_alefWasla-ar.fina;
} rlig;
Group:
Typographic

rphf: Reph Form

check_circle
starstar
window

This feature replaces consonant+virama with the reph form of the consonant. In Devanagari, non-final ra+virama should be substituted by reph. The context of application is restricted to a syllabic cluster.

Note that in the Universal Shaping Engine, this feature is also used as a "signal" to the shaping engine for reordering purposes: after this feature has been processed, any glyphs substituted in by this feature are considered to have USE category R.

Example Feature Code Implementation
feature rphf {
  sub ra-deva halant-deva by reph-deva;
} rphf;
Group:
Orthographic

rtbd: Right Bounds

star_outline
public
sick
A

This feature was intended as part of the implementation of character protrusion (see opbd); the idea being that it would be applied to the final character on a line to alter the bounds of that character allowing it to protrude into the right margin. However, this would require an interaction between the line breaking engine and the shaping engine which has only once been implemented, in the LuaTeX layout system.

This feature should therefore be regarded as prematurely specified and hence deprecated.

rtla: Right-to-left alternates

check_circle
star
public
A

This feature is applied to right-to-left texts as part of the glyph preprocessing stage. It is intended for substituting variants which are appropriate for right-to-left text, but which are not mirrored substitutions. (Mirrored forms of glyphs should be handled by the rtlm feature.)

No examples of this feature being used as described have been found; Noto Sans Tifinagh uses the feature to mirror glyphs when Tifinagh is being set right-to-left (e.g. when used to write Tuareg).

Example
Off: ⵎⵉⴷⴷⵏ
On: ⵎⵉⴷⴷⵏ
Group:
Preprocessing

rtlm: Right-to-left mirrored forms

check_circle
starstar
public
A

When a bidirectional text is being laid out, any characters which have the Bidi_Mirrored Unicode property and whose directionality is resolved to RTL will be replaced by their mirrored equivalents. This mirroring is specified by the Unicode Bidirectional Algorithm, and is performed by the layout engine prior to shaping.

However, a font may contain mirrored glyphs for characters which do not have the Bidi_Mirrored property (and thus are not handled by the Unicode bidirectional algorithm), but which are required to be mirrored when displayed in right-to-left settings. For example, mathematical characters such as the square root sign (√) and intergral sign (∫) do not have mirrored forms encoded in Unicode, but should be mirrored in right-to-left text.

Example
Off: ∫√x
On: ∫√x
Group:
Preprocessing

ruby: Ruby Notation Forms

star_outline
public
A

In Japanese typesetting, words written in kanji may be superscripted by the kana transliteration of the words to aid with reading. (In vertical settings, the transliteration is placed to the right.) These subscripted kana, called furigana or ruby, are scaled down to a reduced size relative to the main text. Scaling and positioning is applied by the typesetting engine, but the font may wish to provide alternate forms of the kana when they are being used in a ruby context - for example, slightly bolder forms such that they will maintain the correct weight when scaled down to ruby size, or different forms that are more legible when displayed at a smaller size.

Example Feature Code Implementation
feature ruby {
  sub ka-hira by ka-hira.ruby;
  sub sa-hira by sa-hira.ruby;
  # ...
} ruby;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Ruby Glyphs".

rvrn: Required Variation Alternates

check_circle
starstar
public
window

OpenType Font Variations provides for the ability for different features to apply at different point of the variation space. For example, consider a font with a weight axis - when the weight is greater than 600, the designer wants the dollar glyph to be substituted for a simplified form to avoid crowding the internal counterspace. This facility is called "feature variation", and because it is implemented by substitution, it allows for different portions of the variation space to represent the same character using different glyphs and therefore different outlines; this in turn means that designers can implement variations without being forced to make the outlines compatible between dramatically different forms.

According to the OpenType specification, feature variation can be applied to any feature. However, Microsoft registered the rvrn feature specifically for processing feature variations early in the shaping process. This may not turn out to be the best approach, as future rules now need to take into account not just the original glyph but any substitutions; it may be better to perform design-specific substitutions after all orthographic substitutions have between completed.

Both Harfbuzz and CoreText process feature variations in features other than the rvrn feature. I have not been able to ascertain whether or not the Microsoft shapers process feature variation tables in other features. If they do - and if font creation tools allow for creating feature variation tables in other features - then this feature could be considered technically redundant.

Group:
Preprocessing

salt: Stylistic Alternates

toggle_off
smart_toy
starstarstar
public
sentiment_dissatisfied
A

Prior to the introduction of multiple stylistic sets (see the ss01 feature), this feature was used to select alternate aesthetic forms of glyphs which do not correspond to the descriptions of other features. Currently, this feature is generally implemented by font editors either by replicating the rules of ss01 or by combining all stylistic alternate substitutions.

Stylistic sets (ss01...ss20) should be used in current fonts in preference to this feature, as UI support for the salt feature is not always available.

sinf: Scientific Inferiors

toggle_off
smart_toy
starstarstar
public

This feature replaces glyphs with subscript forms, similar to the subs feature, but in theory for a wider range of glyphs (including Latin letters), generally for chemical or mathematical notation.

Also, in theory, subscript numerals should sit on the baseline, while scientific inferiors should bisect the baseline

In practice, the same substitutions are often made as those in the subs feature.

Example
Off: H2O
On: H2O
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Vertical Position > Scientific Inferiors".

size: Optical size

starstar
public
sick
A

This feature was intended as a way to store information about the optical size of the font and the font's relationship to other optical size variants in the same family. It has been entirely superseded by the STAT table, and should not be used.

smcp: Small Capitals

toggle_off
smart_toy
starstar
public
A

Substitutes lowercase characters for small capitals. Small capitals are often used to set acronyms. Compare with c2sc, which substitutes uppercase letters for small capitals.

Note that as this feature changes the case of the glyph, font engineers should ensure that any language-specific localisations are taken into account during case conversion - for example, when applying this feature to the letter i in Turkish, the returned form should appear with a dot above. (This is often achieved by replacing i with idotless dotaccent or similar in the locl feature.)

Example
Off: This
On: This
Example Feature Code Implementation
feature smcp {
  sub a by A.sc;
  sub b by B.sc;
  # ...
} smcp;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Lowercase -> Small Capitals."

In CSS, this feature can be set with font-variant-caps: small-caps;

smpl: Simplified Forms

star_outline
public
sentiment_dissatisfied
A

This feature was intended for converting Chinese or Japanese glyphs to simplified forms. No fonts implementing this feature have been identified and it is not specified in the Adobe Japan1 glyph set. As with the hngl feature, character semantics should be selected using the input method environment, rather than the font, and hence this feature is discouraged.

ss01: Stylistic Set 1 - Stylistic Set 20

toggle_off
smart_toy
starstarstar
public
T

These features - ranging from ss01 to ss20 - allow for stylistic variations of sets of characters to vary in a common way. This is distinct from the cv01-cv99 features which allow characters to vary arbitrarily with no implication of any common variations across a range of glyphs.

For example, in the font Cormorant, stylistic set 01 changes the terminals of capital letters; stylistic set 02 opens the counters of glyphs with counters; stylistic set 03 replaces double-storey glyphs (g, a) with single-storey forms, and so on.

When this feature is coded manually, stylistic sets may be given identifying names to be displayed in the user interface. See the Adobe feature file specification for the format of these names.

These features are an extension to (and repacement for) the salt feature, which only provides access to a single stylistic set.

Example
Off: QUACK
On: QUACK
Example Feature Code Implementation
feature ss01 {
  featureNames {
    name "Alternate terminals";
  }
  sub A by A.ss01;
  sub B by A.ss01;
} ss01;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Alternative Stylistic Sets".

ssty: Math script style alternates

star
window

This feature is used by the math layout engine to select glyph variants used in subscripts and superscripts. When the engine lays out a glyph as a superscript or subscript, it will first determine the script level: 1 for first-level sub-/superscripts and 2 for higher levels. It will then supply the script level as a parameter to a GSUB3 alternate substitution rule in this feature to obtain the correct glyph variant.

The glyph variant will then be scaled by the math layout engine based on the factor specified in the MATH table (MATH.MathConstants.scriptPercentScaleDown for first-level sub-/superscripts and MATH.MathConstants.scriptScriptPercentScaleDown for higher level scripts). As the scaling will be performed by the layout engine, the form of the glyphs substituted in this feature should not be scaled or repositioned. For example, the STIX Math Two font shown in the example uses slightly bolder script alternates so that the glyph weights appear consistent when scaled down.

Example
Off: x x x
On: x x x
The above example contains MathML, which currently only renders reliably using Firefox.

stch: Stretching Glyph Decomposition

check_circle
star
ن
ܫ
window

Right.

The stch feature is part of the Arabic complex shaper. (It is the first feature processed in the glyph preprocessing phase). It was designed to implement the Syriac Abbreviation Mark (U+070F), which stretches to fill the width of the enclosed text.

The feature should be implemented by the font engineer as a multiple substitution, replacing the glyph mapped to U+070F with an odd number of glyphs. When applying the feature, the shaper performs the following actions:

  • The substitution rules specified in the stch feature are applied, and the sequence of glyphs returned by the rule applications are collected.

  • The first glyph in the returned sequence is placed at the start of the glyph stream.

  • The final glyph in the returned sequence is placed at the end of the glyph stream.

  • At the end of processing, after positioning rules have been applied, the width of the whole glyph stream is calculated.

  • Next, odd-numbered glyphs inside the returned sequence other than the first and final glyph are positioned such that they are distributed evenly across the glyph stream. (For example, if there are five glyphs in the sequence returned from stch, the third glyph is positioned horizontally to appear in the middle of the glyph stream. If there are seven glyphs, the third glyph is positioned to appear one-third of the way along the glyph stream, and the fifth to appear two-thirds of the way along.)

  • Finally, even-numbered glyphs inside the returned sequence are positioned and repeated such that their widths completely fill the spaces between the odd-numbered glyphs.

Further: the first and last glyphs in the returned sequence may be base glyphs or mark glyphs, and should have a non-zero horizontal advance. The remaining glyphs must be set as mark glyphs, but should also have a non-zero horizontal advance.

Note that although the OpenType specification describes this feature as having no "script/language sensitivity", and in theory can be applied to any situation where a glyph is decomposed and repeated to stretch over an enclosed sequence of glyphs (for example, enclosed numbers, Arabic year or end-of-aya marks, etc.), it is only processed as part of the Arabic complex shaper.

Note also that as of macOS 11.4, the CoreText shaper does not apply this feature, and even if the feature is manually applied, the CoreText shaper does not implement the distribution and stretching algorithm required to make the feature operated as expected. This has led some font engineers to create their own, manual implementation inside the font; while this is an interesting engineering exercise, adding in the repeated glyphs manually inside the stch feature leads to erroneous results when such a font is used with a shaping engine which does implement stch as specified, and cannot be recommended.

Example Feature Code Implementation
feature stch {
  sub abbreviation-syriac by
    abbreviation-syriac.start
    abbreviation-syriac.line
    abbreviation-syriac.linedot
    abbreviation-syriac.line
    abbreviation-syriac.end;
} stch;
Group:
Common

subs: Subscript

toggle_off
smart_toy
starstarstar
public

This feature replaces glyphs, typically numerals, with subscript forms.

Example
Off: H2O
On: H2O
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Vertical Position > Inferiors/Subscripts".

sups: Superscript

toggle_off
smart_toy
starstarstarstar
public

This feature replaces glyphs with superscript forms, typically for use as footnote references.

Example
Off: 2 HI. a,b,c
On: 2 HI. a,b,c
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Vertical Position > Superiors/Superscripts".

swsh: Swash

toggle_off
smart_toy
starstar
public

This feature is used to replace glyphs with swash forms - typically, but not exclusively, swash capitals. Although the OpenType standard suggests that multiple swash alternates may be selected by providing a GSUB3 (sub ... from ...) rule for this feature, in reality most implementations expect a single swash alternate, and users may have difficulty accessing glyphs other than the first alternate. For this reason, we recommend using GSUB1 (sub @chars by @chars.swsh) rules for this feature.

See also the cswh feature for contextual swash forms.

Example
Off: Fake It
On: Fake It
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Contextual Alternates > Swash Alternates".

titl: Titling

toggle_off
smart_toy
starstar
public
A

This feature substitutes glyphs for alternate forms designed for titling, typically some or all capital letters.

Example
Off: PÖW
On: PÖW
User-Interface expectations

In the Mac OS X typography panel, this feature is accessed via "Style Options > Titling Capitals".

tjmo: Trailing Jamo Forms

check_circle
star_outline
window

The Korean Hangul script is encoded in Unicode in two ways: first, as a series of precomposed syllable graphemes (encoded from U+AC00 to U+D7AF); second, as a series of indivdual, conjoining jamo. Korean syllables form a LVT? (leading consonant, vowel, optional trailing consonant) pattern; the leading consonant (choseong) jamo are encoded between U+1100 and U+115F, the vowel (jungseong) jamo are encoded between U+1160 and U+11A7, and the optional trailing consonant (jongseong) jamo between U+11A8 and U+11FF. (At least in the primary Hangul Jamo Unicode block; other jamo are encoded in extension blocks.)

The Hangul shaper will first attempt to compose any sequences of conjoining jamo into an encoded form in the precomposed syllable block. But where this is not successful - for example, in an Old Korean form which is not encoded in Unicode as a precomposed syllable - then the shaper will instead decompose any LV syllables to break the syllable into separate L, V, and T? characters, and then apply the Korean shaping features (ljmo, vjmo, tjmo) to select forms of the jamo which are appropriately positioned and sized to combine into the correct grapheme-image.

For example, the Old Korean syllable ᄒᆞᆯ is not encoded in Unicode as a precomposed syllable, and so must be encoded with the three individual jamo. The Hangul shaper applies the ljmo feature to the choseong, the vjmo feature to the jungseong and the tjmo feature to the jongseong. The resulting sequence produces a glyph which renders the syllable correctly, with the vjmo and tjmo generally producing zero-width mark glyphs positioned appropriately. An alternative to this technique is to use the ccmp feature to turn decomposed jamo into a precomposed glyph.

For further information, see sections 3.12 and 18.6 of the Unicode Standard.

Group:
Topographical

tnam: Traditional Name Forms

star_outline
public
sentiment_dissatisfied
A

This feature was intended for selecting traditional forms of kanji used in personal names. No fonts implementing this feature have been identified and it is not specified in the Adobe Japan1 glyph set; font developers should place any such substitutions in the trad feature instead.

tnum: Tabular Figures

smart_toy
starstarstar
public

This feature replaces proportional figures by tabular (fixed-width) variants. See also the onum, lnum and pnum features. Note that where the default form is tabular, this feature has no effect, although some font editors provide rules for this feature in any case.

Example
Off: |1|2|3|4|
On: |1|2|3|4|
Example Feature Code Implementation
feature tnum {
  sub one by one.tf;
  sub two by two.tf;
  sub three by three.tf;
  #...
} tnum;
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Number Spacing > Monospaced Numbers".

In CSS, this feature can be accessed through the font-variant-numeric: tabular-nums property.

trad: Traditional Forms

starstar
public
A

The expected forms of Japanese kanji have evolved and simplified over time. However, in particular situations - often in the display of personal names - older, "traditional" forms (kyujitai) are still preferred. This feature allows a user to enter text as normal (i.e. with the Unicode codepoint for a more common, simplified form) but have it substituted typographically for the traditional glyph. For example, to typeset the name Sakae as 榮 (a variant found in south west Japan), the user would enter the reading さかえ in their input method environment, and have it converted to 栄, the usual kanji for this word. Applying the trad feature would replace 栄 with 榮.

Note that where traditional forms have their own Unicode codepoints, using these codepoints directly is preferred, to avoid ambiguity and to preserve the distinction in the source text. In some cases (for example, the traditional form of 朗), kyujitai were not separately encoded in Unicode due to Han unification, and so the trad feature is necessary to access these glyphs.

The expected substitutions of the trad feature are defined in terms of the Adobe-Japan1 glyphset. Engineers creating Japanese fonts according to that glyphset should read the information at the Adobe-Japan1 repository, and use the latest version of the feature code provided there to implement this feature.

Example
Off: 朗栄圧
On: 朗栄圧
Example Feature Code Implementation
feature trad {
  sub uni4E9C by uni4E9E;
  sub uni60AA by uni60E1;
  sub uni9BF5 by uni9C3A;
  sub uni5727 by uni58D3;
  sub uni56F2 by uni570D;
  sub uni7AC3 by uni7AC3.jp78;
  sub uni6717 by uni6717.trad;
  # ...
} trad;

twid: Third Widths

toggle_off
smart_toy
star
public
A

This feature replaces glyphs (normally figures and punctuation) with variants which are one-third of the em square. This is generally used with CJK fonts and in the context of vertical typesetting. (For placing a sequence of three numbers horizontally across an em-width vertical column.)

See also fwid, hwid, qwid.

Example
Off: か123か
On: か123か
Example Feature Code Implementation
feature twid {
  sub one by one.twid;
  sub two by two.twid;
  # ...
}
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Text spacing > Third Width".

unic: Unicase

star
public
T

This feature was intended for mapping both upper- and lowercase letters to a "unicase" alphabet, a set of glyphs with a common glyph height using a mix of upper- and lowercase glyph forms. (For example, a font may use the lowercase style of a but the uppercase style of B, but both glyphs will have the same height; see Bradbury Thompson's Alphabet 26 or Zuzana Licko's Filosofia Unicase.)

User-Interface expectations

This feature can be activated using the CSS rule font-variant-caps: unicase, subject to browser support.

valt: Alternate Vertical Metrics

star_outline
public
sentiment_dissatisfied
A

The intention behind this feature was to reposition full-width glyphs (e.g. U+FF01-U+FF60) so that they would be visually centered inside the em-square in vertical typesetting context.

However, a more appropriate way to achieve this visual repositioning is to supply alternate metrics for these glyphs in the vmtx and VORG tables. As such, this feature has only been implemented extremely rarely, and, despite the description in the OpenType standard, Harfbuzz does not apply it by default in vertical layout.

vatu: Vattu Variants

check_circle
starstar
window

This feature is intended to replace consonant + below-base (vattu) sequences with ligature forms for fonts supporting the legacy (v1) shaping engine.

For example, in Devanagari, the <virama> <ra> sequence is normally replaced by a below-base Ra by the blwf feature. However, "for certain consonants, the mark RAsub may graphically combine with the consonant to form a conjunct ligature form." (Unicode Standard, section 12.1, "Rendering Rules", R7.) This combination is performed by the vatu feature in the v1 shaping engine (e.g. deva script).

For fonts using the new shaper (dev2), the rkrf feature is used instead to substitute the whole <consonant> <virama> <ra> sequence for a ligature in one rule. Fonts which wish to support both v1 and v2 shapers should provide both rkrf (in the dev2 script) and blwf/vatu (in deva script).

As an orthographic feature, the scope of application of this feature is scoped to each syllabic cluster.

Note that this feature is also used as a "signal" to the shaping engine for reordering purposes: that is, if a virama-consonant pair would be substituted by this feature, then that consonant is placed in the below-base position when the syllable is reordered.

Example Feature Code Implementation
feature vatu {
  script deva;
  sub Ka.dv Vattu.dv by KaRa.dv;
  sub Kha.dv Vattu.dv by KhaRa.dv;
  sub Ga.dv Vattu.dv by GaRa.dv;
  # ...
} vatu;
Group:
Orthographic

vchw: Vertical Contextual Half-width Spacing

toggle_off
star_outline
public
W

This feature is the vertical equivalent of chws; it is intended to improve the appearance of text set with software which does not implement the full JLREQ spacing rules, but does implement vertical typesetting.

This feature is relatively new as of 2021, no implementations have been identified, and to be honest, any layout engine which bothers to support vertical typesetting correctly is probably also going to implement JLREQ spacing as well.

vert: Vertical Alternates

check_circle
starstar
public

This feature is applied automatically by the shaping engine at the end of required processing and before discretionary processing when the script direction is set to vertical; it replaces the horizontal positioning and typographic presentation group (calt/clig/curs/dist/kern/liga/rclt).

It should be used to replace any glyphs with forms which are more appropriate to vertical presentation. For example, punctuation such as ellipses and parenthesis should be replaced with rotated forms, Japanese small kana should be positioned in the upper right quadrant of the em square, and Japanese ligature forms (U+32FF-33FF) should be replaced with versions which preserve reading order when read vertically.

Note that, aside from supporting CJK vertical presentation, this feature should also be used for typographic presentation rules for fonts supporting other vertical writing systems, such as Mongolian.

Not also that if the vrt2 feature is present, this feature will be used instead by Microsoft shaping engines. Indeed, Windows 2000 and NT4.1 require the use of a vrt2 feature for CFF-outline fonts. However, Harfbuzz and Adobe shapers use vert exclusively. See discussion in vrt2.

Example
Off: (㌀)
On: (㌀)
Example Feature Code Implementation
feature vert {
  sub ellipsis by uniFE19;
  sub twodotenleader by twodotenleader.vert;
  sub uniFF08 by uniFE35;
  sub uniFF09 by uniFE36;

  sub uni32FF by uni32FF.vert;
  # ...
} vert;
Group:
Typographic

vhal: Alternate Vertical Half Widths

toggle_off
smart_toy
starstar
public
A

This feature is similar to the halt feature, in that it re-spaces full-width glyphs to fit on a half-em, but vhal is used in vertical typesetting, re-spacing heights instead of widths.

Example Feature Code Implementation
feature vhal {
  pos [degree.full minute.full quotedblright.full quoteright.full second.full uni3001 uni3002 uni3009 uni300B uni300D uni300F uni3011 uni3015 uni301F uniFF09 uniFF0C uniFF0E uniFF3D uniFF5D] <0 -500 0 0>;
  pos [quotedblleft.full quoteleft.full uni3008 uni300A uni300C uni300E uni3010 uni3014 uni301D uniFF08 uniFF3B uniFF5B] <0 -500 0 -500>;
  pos [uni30FB uniFF01 uniFF1A uniFF1B] <0 -250 0 -500>;
} vhal;
User-Interface expectations

Unknown. Contributions welcome.

vjmo: Vowel Jamo Forms

check_circle
star_outline
window

The Korean Hangul script is encoded in Unicode in two ways: first, as a series of precomposed syllable graphemes (encoded from U+AC00 to U+D7AF); second, as a series of indivdual, conjoining jamo. Korean syllables form a LVT? (leading consonant, vowel, optional trailing consonant) pattern; the leading consonant (choseong) jamo are encoded between U+1100 and U+115F, the vowel (jungseong) jamo are encoded between U+1160 and U+11A7, and the optional trailing consonant (jongseong) jamo between U+11A8 and U+11FF. (At least in the primary Hangul Jamo Unicode block; other jamo are encoded in extension blocks.)

The Hangul shaper will first attempt to compose any sequences of conjoining jamo into an encoded form in the precomposed syllable block. But where this is not successful - for example, in an Old Korean form which is not encoded in Unicode as a precomposed syllable - then the shaper will instead decompose any LV syllables to break the syllable into separate L, V, and T? characters, and then apply the Korean shaping features (ljmo, vjmo, tjmo) to select forms of the jamo which are appropriately positioned and sized to combine into the correct grapheme-image.

For example, the Old Korean syllable ᄒᆞᆯ is not encoded in Unicode as a precomposed syllable, and so must be encoded with the three individual jamo. The Hangul shaper applies the ljmo feature to the choseong, the vjmo feature to the jungseong and the tjmo feature to the jongseong. The resulting sequence produces a glyph which renders the syllable correctly, with the vjmo and tjmo generally producing zero-width mark glyphs positioned appropriately. An alternative to this technique is to use the ccmp feature to turn decomposed jamo into a precomposed glyph.

For further information, see sections 3.12 and 18.6 of the Unicode Standard.

Group:
Topographical

vkna: Vertical Kana Alternates

toggle_off
starstar
public
A

This feature replaces standard kana forms with glyphs which are designed specifically for vertical layout. This may take a variety of forms: fonts designed with proportional kana might provide fixed-width em-square kana glyphs; glyphs may be raised from the horizontal baseline and centered within the em-square; or structural changes may be made analogous to the hkna feature. In many fonts, vertical alternates are only provided for the "small" kana.

Example
Off: シャットアップ
On: シャットアップ
Example Feature Code Implementation
feature hkna {
  sub ka-hira by ka-hira.vkna;
  sub sa-hira by sa-hira.vkna;
  sub ta-hira by ta-hira.vkna;
  # ...
} hkna;
User-Interface expectations

In the Mac OS X typography panel, this feature is accessed via "Optimized Kana Alternatives -> Vertical Alternatives".

vkrn: Vertical Kerning

starstar
public
A

This feature is the equivalent to kerning (see kern) for vertical layout, with the exception of the fact that this is not necessarily applied by default. Harfbuzz and Adobe shapers do not apply it by default in vertical settings, and font designers should consider using the vert feature instead for maxium compatibility.

vpal: Proportional Alternate Vertical Metrics

starstar
public
A

This feature is the vertical equivalent of the palt feature; it uses positioning rules to convert full-em glyphs into proportional glyphs by aftering their position and Y-advance.

Example Feature Code Implementation
feature vpal {
  pos uniFF41 <0 -186 0 -373>;
  pos uniFF42 <0 -148 0 -346>;
  pos uniFF43 <0 -220 0 -441>;
  pos uniFF44 <0 -176 0 -353>;
  # ...
} vpal;

vrt2: Vertical Alternates and Rotation

starstar
public
sentiment_dissatisfied
A

This feature was intended as a replacement for the vert feature. The idea was that this feature would contain rules for vertical alternates as per vert and also rules which replace Latin glyphs by rotated forms; this would mean that the layout process for vertical text would be greatly simplified: the layout engine could simply apply the vrt2 feature to both CJK and Latin text, and not need to rotate any glyphs.

However, this model of layout was not widely accepted, and the older vert feature continues to be the most compatible approach to vertical typesetting. For that reason, the use of this feature is discouraged in favour of vert.

vrtr: Vertical Alternates for Rotation

star_outline
public
W

This feature is intended to select alternate glyphs to be used in vertical typesetting. When the writing-mode CSS property is set to vertical-lr or vertical-rl, certain glyphs are rotated 90 degrees clockwise by the rendering engine.

However, prior to rotation, the font may wish to substitute glyphs which are designed for vertical settings. These glyphs will still be rotated by the rendering engine, but will be visually distinct from the original forms.

This feature is relatively new as of 2021, and no implementations have been identified.

zero: Slashed Zero

smart_toy
starstar
public
A

This feature allows the user to change between the default form of zero (without a slash) to a form with a slash through the counter.

Example
Off: 2021
On: 2021
Example Feature Code Implementation
feature zero {
  sub zero by zero.zero;
}
User-Interface expectations

In the OS X typography panel, this feature is accessed via "Typographic Extras > Slashed Zero".