How to Set Up Case-Sensitive Forms in FontForge

Yes, you can set up case-sensitive forms in FontForge by utilizing OpenType layout features. Case-sensitive forms allow fonts to swap standard punctuation marks—such as hyphens, parentheses, brackets, and colons—for vertically shifted variants designed to align with all-caps text. This guide explains how to create the alternate glyphs, configure the OpenType case feature via FontForge's Lookup tables, and map the substitutions directly in your font project.

Step 1: Design Alternate Glyphs

Standard punctuation is typically centered relative to the lowercase x-height. For all-caps settings, these glyphs appear too low. You must first create raised versions:

  1. Open your font project in FontForge.
  2. Select an empty glyph slot or go to Encoding > Add Encoding Slots to create space for your alternates.
  3. Draw or copy the glyphs you want to adjust (such as hyphen, parenleft, parenright, bracketleft, bracketright, colon, or guillemotleft).
  4. Shift the contours upward so they vertically align with the cap height.
  5. Rename each alternate glyph using a standardized suffix. Right-click the glyph, select Glyph Info, and change the name (for example, hyphen.case, parenleft.case, or colon.case).

Step 2: Create the OpenType case Lookup

FontForge manages OpenType features through the Lookups menu in the Font Info dialog.

  1. Navigate to Element > Font Info (or press Ctrl+Shift+F / Cmd+Shift+F).
  2. In the left sidebar, select the Lookups tab.
  3. Click the GSUB (Glyph Substitution) tab at the top.
  4. Click Add Lookup.
  5. Set the Type dropdown to Single Substitution.
  6. Under the Feature column, select or type case (Case-Sensitive Forms).
  7. Select the appropriate script and language systems (typically latn with <Default> language).
  8. Click OK to create the lookup.

Step 3: Add and Populate the Subtable

With the lookup created, you need to define which base glyphs are replaced by your new alternates.

  1. Select your newly created case lookup in the list and click Add Subtable.
  2. Accept the default subtable name or provide your own, then click OK.
  3. In the subtable editor, populate the substitution list:
    • Click the field under the Base Glyph Name column and enter the standard glyph name (e.g., hyphen).
    • Click the field under the Replacement Glyph Name column and enter the corresponding alternate name (e.g., hyphen.case).
    • Alternatively, if you named your glyphs systematically with a .case extension, click the Populate or Default button to have FontForge automatically detect and pair the glyphs.
  4. Add rows for all punctuation marks you have created alternate forms for.
  5. Click OK to close the subtable, then click OK again to apply the changes in Font Info.

Step 4: Validate and Export

Once configured, test the substitutions before finalizing the font:

  1. Open the Metrics window by going to Metrics > New Metrics Window.
  2. Type an uppercase word flanked by punctuation (e.g., (TEST)).
  3. Open the Features menu in the Metrics window and toggle Case-Sensitive Forms (case) on and off to confirm that the punctuation shifts into alignment with the capital letters.
  4. Once verified, go to File > Generate Fonts to export your OpenType font file (.otf or .ttf). Modern design applications like Adobe InDesign, Illustrator, and CSS-supported web browsers will now automatically apply these alternates when all-caps formatting or the font-feature-settings: "case" property is used.