OpenType feature tips: case-sensitive forms

This is part of a set of posts on OpenType font features. Here's the full list of posts:


Many Latin-script punctuation marks and symbols are drawn and aligned to blend with the lowercase characters that form the majority of text, so they don't quite match with all-caps text. Basically, they tend to be a little too low or short.

Enter “case-sensitive forms”, codename case, which swaps these glyphs for ones drawn taller or shifted upwards, making for a more balanced look. The case-sensitive versions tend to be drawn centred on the crossbar of a capital “E” in typical body text fonts, which is just slightly above the midpoint from baseline to capital height.

These are the characters I'd change in case-sensitive forms, if they're included in the font:

Most of them just need to be moved upwards to be centred on capital letters, but a few (e.g. the colon) may need to be redrawn slightly.

On numerals and maths symbols, if your font includes oldstyle numerals, you should force all oldstyle numerals into lining numerals in the case feature. If you have different maths symbols for matching oldstyle numerals vs lining numerals then you should also swap those into their lining forms as well. If your font doesn't have oldstyle figures at all, then you don't need to change numerals or maths symbols in the case feature.


As with tabular figures, case-sensitive forms is a pretty simple feature to implement, even if the set of glyphs is less rigidly defined. The feature code should be as simple as swapping the regular form for the case-sensitive form. Things get a little more complex in the remaining features in this set of posts.