Localize Your Font: Catalan Punt Volat

Tutorial
by Rainer Erich Scheichelbauer
en fr zh

10 September 2021 Published on 3 October 2012

In Catalonia, you will sometimes see a dot in mid air between two L’s. Here is why, and how to implement it in your font.

Catalans type L·L (L–periodcentered–L) when they mean to type a punt volat between two L’s in order to indicate that it is an ela geminada, as opposed to a double L, which is pronounced differently.

Typographically, there are two things to consider. Firstly, there is no word space between the two L’s or l’s. In other words, it should still look like one word, not two. So, the extra distance caused by the insertion of the middot must not be too much. Secondly, the dot needs to appear in the optical center between the two L’s or l’s:

Type designers employ different solutions for this problem. Personally, I recommend a combination of the ‘spacing solution’ and the ‘Ldot solution’. But… not so fast, let’s go through the possible ways to solve the punt volat:

The kerning solution

There are type designers who prefer a pure kerning solution. For this, you’d simply kern the sequence L-periodcentered-L. Type Catalan words like COL·LEGI and paral·lel in your Edit tab, and kern it until you’re satisfied. You may also consider contextual kerning.

The good thing is that this works in language-agnostic typesetting environments, like Apple’s TextEdit and most other Cocoa apps. That is because the Mac text engine does not allow specifying the language and thus ignores the locl OpenType feature (Localized Forms, see below).

There are a few problems with this approach though:

  • It doesn’t work when kerning is disabled or if the font is used in an environment where there is no kerning available.
  • You may want to use the periodcentered for other purposes as well, e.g. to indicate syllables in a dictionary, and then you may run into problems with a word like ‘col·li·sion’.
  • The default periodcentered may not be at the right height for this purpose.
  • The periodcentered may not fit both uppercase and lowercase L’s (and small-cap L’s if you have small caps in your font), and you may have to resort to a bad compromise.

The spacing solution

Because of these issues, I recommend to solve the problem without kerning. To do this, build the following glyphs:

  1. Lowercase: create a glyph called periodcentered.loclCAT containing the punt volat. Design it in such a way that it fits perfectly between two lowercase L’s.
  2. Uppercase: repeat the process with periodcentered.loclCAT.case. The glyph should contain a punt volat that is optically centered between two uppercase L’s.
  3. Smallcaps: if you have small capitals in your font, create a periodcentered.loclCAT.sc that centers optically between two small-cap L’s.

Important: do not kern, rather only use spacing for fitting the punts volats between the respective L’s. Exclude them from kerning completely, do not even set a kerning group.

‘What do those suffixes mean?’, I hear you ask. Easy, .case stands for Case-Sensitive Forms, an OpenType feature for shifting ‘punctuation marks […] up to a position that works better with all-capital sequences or sets of lining figures’, whereas locl is the four-letter code for the Localized Forms feature, which is intended to substitute default glyphs with ‘localized variant forms’. And the CAT part is the Language System Tag for Catalan.

And if you make use of this suffix, Glyphs can automatically add the localized mid dots to the Localized Forms feature. Go to File > Font Info > Features and press the Update button, and take a look in the locl feature. There should be a section that reads approximately like this:

lookup locl_latn_1 {
    script latn;
    language CAT;
    sub l periodcentered' l by periodcentered.loclCAT;
    sub L periodcentered' L by periodcentered.loclCAT.case;
} locl_latn_1;

The number (‘1’ in this example) may be different for you, depending on which other localizations you have in your font. The code means: only when (a) the language is set to Catalan, and (b) the periodcentered appears between two lowercase L glyphs, it will be replaced with the Catalan periodcentered.loclCAT; and with periodcentered.loclCAT.case between two uppercase L glyphs.

Many type designers consider this the best solution, mostly because it survives increased tracking, even though the space between the dot and the surrounding lowercase l’s should not increase as much as space between two letters. And it also works in environments where there is no kerning. Consider that, by default, kerning is off in Microsoft Word.

One downside is that it requires the users to set the language of the text. And another is that it will fail in language-agnostic environments. But if you feel like you can ignore the dictionary case mentioned above, you can copy the code to the calt (Contextual Alternates) feature:

Make sure you remove the script and language statements, because it wouldn’t be language-agnostic otherwise. And don’t forget to rename the lookup, e.g. to lookup CATALAN, because it would collide with the code in the locl feature. So, your calt code may end up looking like this:

lookup CATALAN {
    sub l periodcentered' l by periodcentered.loclCAT;
    sub L periodcentered' L by periodcentered.loclCAT.case;
} CATALAN;

If you also have small caps, insert a corresponding line for the .sc glyphs:

lookup CATALAN {
    sub l periodcentered' l by periodcentered.loclCAT;
    sub L periodcentered' L by periodcentered.loclCAT.case;
    sub l.sc periodcentered' l.sc by periodcentered.loclCAT.sc;
} CATALAN;

Alternate small-cap feature code

Alternatively, you can opt for an advanced feature code solution. Add additional smcp and c2sc entries after the autogenerated ones you already have. Disable automatic code generation for the new feature entries. Then add a lookup with the small-cap code in the first one (typically c2sc comes first):

lookup CATALANSC {
    sub l.sc periodcentered' l.sc by periodcentered.loclCAT.sc;
} CATALANSC;

… and the respective lookup call in the second one:

lookup CATALANSC;

So your small-cap features will end up looking like this:

Press the Compile button and see if the code checks out fine.

The ligature solution

Assuming you have L, l, and periodcentered in your font, add these ligatures, best via Glyph > Add Glyphs (Cmd-Shift-G):

  • L_periodcentered_L.loclCAT
  • l_periodcentered_l.loclCAT
  • l_periodcentered_l.loclCAT.sc if you have small caps

Glyphs will then auto-generate the following code in a locl lookup:

script latn;
language CAT;
sub l periodcentered l by l_periodcentered_l.loclCAT;
sub L periodcentered L by L_periodcentered_L.loclCAT;

By now, I suppose you can tell the pros and cons. On the plus side, we have perfect control of our ela geminada. But it will fail in language-agnostic environments, and it will not work well with increased tracking. Therefore I do not recommend this solution. If, however, you do employ this solution, you can duplicate the code in calt, just like above, for language-agnostic environments.

The Ldot solution

Or, and especially if you care a lot about backwards compatibility, we can actually build the legacy glyphs Ldot and ldot and design them in such a way that they look great with a following upper or lowercase L.

Wait a minute: why ‘legacy’?

In an old 8-bit encoding from the eighties, there used to be a separate Ldot and ldot. They survive to this day as U+013F LATIN CAPITAL LETTER L WITH MIDDLE DOT and U+0140 LATIN SMALL LETTER L WITH MIDDLE DOT in Unicode. They are not supposed to be used anymore, because they are mere compatibility characters. And actually, chances are very low you will ever encounter them in texts typed in this century.

But hey, this only applies to people who produce texts with characters. We’re the font-making people, and on the glyph level, we can do what we want, as long as it looks good. So here we go:

When you create Ldot and ldot, Glyphs gives you a glyph with an L or l component and a periodcentered. Of course you can delete, replace or decompose the periodcentered component if you want to roll your own punt volat.

If you have the .loclCAT glyphs from the spacing solution above, it is best to simply insert them as components into Ldot. You can use the mekkablue script Build Ldot and ldot for this (see below). Or take matters in your own hands with this recipe in Glyph > Add Glyphs:

L+periodcentered.loclCAT.case=Ldot
l+periodcentered.loclCAT=ldot
l.sc+periodcentered.loclCAT.sc=ldot.sc

Again, if Glyphs finds all the involved glyphs your font, it will build this locl feature automatically for you:

script latn;
language CAT;
sub  l' periodcentered' l by ldot;
sub  L' periodcentered' L by Ldot;

Many type designers are not really happy with this solution, because it looks really stupid with increased tracking. Duh.

Combining multiple solutions

There is nothing wrong with combining multiple solutions, especially language-agnostic solutions with the localized solutions. This way you can maximize compatibility.

But if you have multiple locl solutions, which one will the automatic feature generator pick? Well, the spacing solution will take precedence over the ligature solution, and the ligature will take precedence over the Ldot solution. Of course, if you are not happy with the automatism or the precedence order, please feel free to disable the automatic generation for the locl feature, and type your own code.

We whole-heartedly recommend the spacing solution, and adding the Ldots for good measure.

Useful scripts

In the mekkablue scripts, there is Build Glyphs > Build Ldot and ldot. The script assumes that you have the .loclCAT glyphs from the spacing solution, and will reset the Ldots in your font with it.

And ta-daaa: Now, your font is ready for Catalan!


Update 2014-12-01: Added Spacing and Ligature solutions, double underscore hack, and combining solutions; many small improvements.
Update 2016-02-19: Updated screenshots for Glyphs 2.
Update 2016-10-16: Corrected long-standing typo in ela geminada (thx Joan Montané).
Update 2017-09-12: Fixed typo.
Update 2019-10-25: Fixed typos.
Update 2021-09-10: Partial rewrite for Glyphs 3, useful scripts, new screenshots, removed double underscore hack.