All-Caps font / ligatures

Hi – I’ve created a All-Caps font, according to the tutorial (Creating an All-Caps Font | Glyphs) and all is working fine. But I have 3 ligatures currently named L_I, L_L and T_T. How are those handled (so that they work when I type them lowercase? Do I need to have lowercase copies named l_l, l_i and t_t?
Hope my question is clear – thank you.

As described in the tutorial, you can assign multiple Unicode values to a single glyph. That way, both the uppercase T and the lowercase t map to the same glyph named T and all should work just fine.

In case you need separate glyphs for uppercase and lowercase, I think you need to write the feature code yourself.

Instead of

sub L I by L_I;
sub L L by L_L;
sub T T by T_T;


sub [L l] [I i] by L_I;
sub [L l] [L l] by L_L;
sub [T t] [T t] by T_T;

The glyph names are glyph names, not character names. If you only have UC letters as suggested in the tutorial, the glyph name L will cover both characters U+004C (LATIN CAPITAL LETTER L) and U+006C (LATIN SMALL LETTER L).

In other words, you do not need to add lowercase glyph names, because the uppercase glyph names already cover the lowercase characters. As a matter of fact, the feature code will not compile if glyphs with those names do not exist in the font.

Thank you both for the prompt response. It’s all clear, but I’m running into the ’ Dilemma of the Dotted i’…:

I have added these, as described in the tutorial

so the capital i has only one Unicode (and in fact only the LI ligature didn’t work: LL and TT worked with both lowercase and uppercase, as intended – sorry, I should have noticed).

If I remove the lowercase i and assign two unicodes to the uppercase, when I update the features I get an error for this line in ‘locl’:
sub i by idotaccent;

Should I maybe add something like this in ‘dlig’ features?
sub L i by L_I;

Thank you

You could do either a similar same recipe as you did with the single letters:


Or you add to the automatic OT feature. Add a new feature with the same tag, but non-automated, e.g. ss02 in this example (but in your case, I guess it is dlig):


And there you add the missing substitutions:

sub L [i idotless] by L_I;

Thank you – I went with the second option and it works.

As a backup, can you clarify where do I do the recipe for option 1?
(just in case I use the ‘generate features automatically’ , which will not retain the ‘custom’ feature)

Thank you for your patience.

Glyph > Generate Glyphs. There is a tutorial about recipes.

Hi – I’ve submitted the font to MyFonts but they’re saying some characters are missing. (All caps font, created as per the tutorial - see first entry)

I have found another thread dealing with this issue (All caps font - MyFonts validator problem - #15 by Francesco) and I think it’s the same problem (i, idotless etc), but I have the further complication of the ligatures (see previous entries)

Here is what I see in the filters:

MacRoman - idotless is present (with only one unicode - 0131)
MacRoman & Windows 1252 - i is present (with only one unicode - 0069)
MacRoman & Windows 1252 - I is present (with only one unicode - 0049)

and here is what I have in Features - Discretionary Ligatures:
sub L I by L_I;
sub L L by L_L;
sub T T by T_T;
sub L [i idotless] by L_I;

What’s the proper way to handle this?

Thank you for your patience

Which ones are missing according to the report? All lowercase letters? Perhaps get in touch with the MyFonts team and ask them to adapt their tests for all-caps fonts.

Sorry, I should have specified that yes, all lowercase were listed. They have indeed told me to add a note that the glyphs are double-mapped (the unicodes, correct?) and they will ignore the validation.

But one last clarification: shouldn’t the capital i be double-mapped as well?
MacRoman & Windows 1252 - I is present (with only one unicode - 0049)

Thanks again for your patience

The I/i is a bit tricky. Because of rules with dotted i in Turkish languages.

In the All Caps tutorial, there is a section called ‘Dilemma of the Dotted i’. It explains the problems with mapping I/İ/i/ı.