I'd like to make a (Latin, English) bitmap-stle cursive font in FontForge. I want to treat initial, final, medial, and isolated forms of some letters. I cannot figure out how to get this to work. (Ligatures are working fine).

Here is a minimal example of what I tried:

Make a minimal bitmap font for testing
  • Open fontforge and create a new (empty) font.
  • MenuElementBitmap Strikes Available… and proceed through the dialog to generate bitmap strikes.
  • Double click on the slot for n and draw its bitmap.
  • MenuEncodingAdd Encoding Slots…, add 4 slots.
  • Double click each of these new slots in turn to open them, and rename them n.init n.medi n.fina n.isol using MenuElementGlyph Info… and then selecting the Unicode sub-dialog from the list on the left, and entering the name into the Glyph Name: text box at the top of the window.
  • Select n in the chracer map, type ctl+c to copy its bitmap, and type ctl+v to clone this bitmap into the four slots above. Manually edit each of the n.init n.medi n.fina n.isol to be distinctive for debugging purposes (so I can clearly see when they are active).
  • Also draw an (empty) bitmap for the space character (we'll use it in testing).
Define lookups for initial, medial, final, isolated variants
  • MenuElementFont Info… then from the list on the left-hand side of the dialog click Lookups. The GSUB tab should appear on top with some buttons to the right.
  • Add the init Initial forms lookup table.
    • Click Add Lookup on the right hand side, this will open a Lookup dialog.
    • From the Type: dropdown at the top, select Single Substitution.
    • In the Feature column of the table below, select the dropdown next to the <New> text and scroll down to init
    • Confirm that the Script(s) & Language(s) column is populated with latn{dflt} (although I also tried latn{dflt} DFLT{dflt} for good measure, to no avail).
    • Click Ok to finish.
    • Repeat these steps to make lookup tables for the feature types medi fina and isol.
  • In the GSUB tab of the Lookups sub-diaglog, you should now see lists of init/fina/medi/isol types with a [+] to the left.
  • Click on e.g. init and press the Add Subtable from the list of buttons on the right of the dialog. Choose a name like n.init.
    • In the table column Base Glyph Name, click <New> and type the glypn name (in this case n).
    • In the table column Replacement Glyph Name, type n.init.
    • Press Ok to finish.
    • Repeat these steps similarly for the fina, medi, and isol classes.
Test it in the preview window
  • To test, we'll bring up the Print dialog. On my system this menu optoin is grayed out in the main character map window, but if I bring up the metrics window using ctl+k, bring it into focus, I can then type ctl+p to bring this up. We will only use the Display tab from this dialog, ignore the Print tab.
  • Press the radio button bitmap to tell it to use the provided bitmaps for font testing.
  • Type something like `" n nn nnn nnnn n " to check whether the base, initial, final, medial, or isolate glyph variantes are being used.
  • In my case, only the base n is ever used.
  • Notably, the fina/init/isol/medi rules are not selected in the list in the top left. Clicking on them to try to activate them doesn't seem to do anything.

I installed fontforge from the Ubuntu repositories, here is the output of fontforge --version:

Copyright (c) 2000-2022. See AUTHORS for Contributors.
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
 Version: 20201107
 Based on sources from 2022-01-13 19:13 UTC-ML-D-GDK3.
fontforge 20201107
build date: 2022-01-13 19:13 UTC


I'm trying to define variants for initial/final/medial/isolated for a cursive-esque Latin English bitmap-style font.

Fontforge does not seem to use the defined init/fina/medi/isol rules or the characters bound to them in its Display dialog.

I do not think this is a bug in fontforge's Display dialog because ligatures (steps not shown) render fine here. It appears that the init/fina/medi/isol rules are just not used.

Indeed, if I go back and add arab{dflt} to the Script(s) & Language(s) column of a lookup table, then highlighting the test text in the Display dialog and typing arab{dflt} in the scripts text box above the test area reveals the init/fina/medi/isol forms --- and also changes the text to right-to-left.

So, it seems that the init/fina/medi/isol forms only work in Arabic fonts. Fair enough, but what is the simplest procedure for getting these to be active in a Latin cursive font? I have searched and the tutorials I found so far are mind-bogglingly convoluted.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.