Three questions about ligatures and scripts

The font I’m working on, a modified version of the Aurebesh based on Latin letters and styled to look like other fonts, involves ligatures at certain letters (c_h, a_e, e_o k_h, n_g, o_o, s_h, and t_h respectively), but whether or not they appear should depend on the sound they make. In order to make this happen, I’m creating a list (elsewhere) of every word that has one of these ligatures but does not have the pronunciation (eg. plothole, sponge), and plan on incorporating the back into Glyphs in the form of ligatures.

I have three questions about this:

  • Do already existing ligatures stack on top of one another? For example, if I have a ligature that replaces t_h with þ, if I create another ligature for the word “plothole”, specifically designing it so that it does not say “ploþole”, will the original ligature override the second one so that it will say “ploþole” anyway?

  • Is there any way to make the ligatures case insensitive other than defaulting everything to one case as I type? For example, if I’m trying to make a ligature for the word sponge, is there any way to avoid having to make all 63 (2^number-of-letters) other ligatures (for SPONGE, SPONGe, SPONgE, SPOnGE, etc)?

  • Once I do have all the words listed out, even without the additional cases, I still have about 15,000 to 30,000 words to create ligatures for (adding in the extra cases makes it about 2,880,000); is there a program I can use that would make this process easier?

I tried reading the page on ligatures here but found nothing that could answer my questions. I don’t have much knowledge, but any help would be appreciated. Thanks.

You can do something like:

sub [S s] [P p] [O o] [N n] [G g] [E e] by s_p_o_n_g_e;

Substitutions replace glyphs, and they can respect each other, depending on their order. The scenario you describe here, though, should probably not be a ligature in the first place. It is a different character (þ) altogether.

You are working on a constructed language which may require different rules of a sort.

Such characters as those you refer to here are technically not ligatures, but digraphs (or digrams) because the two together represent a single sound. Ligatures still represent the characters/sounds they are and are usually used to improve the overall look of the typeset page.

It seems to me the best way to approach this is through feature code substitution. While it may take a bit of time to get right, it won’t be nearly as much work as you describe above and should work seamlessly in most cases.

As to casing, from what I can see about Aurebesh, it is caseless. You can just use the same glyphs for both cases.

::edit:: Actually they aren’t even two characters made into a digraph in the actual alphabet. They are just a design representing a sound in the language which in Latin is represented by two characters.

So it seems that in this situation, in order to avoid ligatures stacking up, I should put

sub [S s] [P p] [O o] [N n] [G g] [E e] by s_p_o_n_g_e;

before

sub [N n] [G g] by n_g

so that the new ligature doesn’t show up in sponge but otherwise would, is that right?

You can try but I doubt that this large number of substitutions will compile. You can use Python to construct such a feature. See the Scripting Glyphs tutorials.

You may want to look into the differences between glyphs and characters (I suggest the Unicode tutorial). And not all of that is the responsibility of the font. It does not make sense to add dictionaries into the font, that should be reserved for the software that applies the font.

Yes. You may need to put the two rules in different lookups and order the lookups accordingly. YMMV.