OT Sub Prioritisation (Need Help)

I'm working on a monospaced, and playing around with ligatures for i_i, i_l, l_i, and l_l.

I'm trying to set it up so that the sequence i l l becomes i l_l, not i_l l.

The ordering of my substitution rules for i_l and l_l doesn't make a difference and nothing else I can think of or find online helps either.

Thanks in advance.
Tagged:

Comments

  • set the first line of your feature to:
    sub i l' l' by l_l;
    The order of the substution rules does matter, and you need to define the longest substitutions first.
  • John Hudson
    John Hudson Posts: 3,186
    Try putting the l_l substitution in a separate lookup before the i_l lookup.
  • Thanks @Paul van der Laan, that did it.

    Thanks, too, @John Hudson.
  • Kent Lew
    Kent Lew Posts: 937
    and you need to define the longest substitutions first.
    Actually, this is not strictly true for features in Adobe syntax which are being compiled by AFDKO. From http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html#5.d :

    “A contiguous set of ligature rules does not need to be ordered in any particular way by the font editor; the implementation software must do the appropriate sorting.”

    The compiler is supposed to be responsible for ordering the longest substitutions first.
  • John Hudson
    John Hudson Posts: 3,186
    In this case, though, the substitutions are of equal length:

     i l -> i_l
     l l -> l_l

    Paul has suggested a way to handle this by making the substitution for the sequence <i l l> to /i l_l/ contextual. That's certainly one solution.