I’m sure there’s a really simple answer to this, but it’s a surprisingly difficult problem to search for.

I’ve got a RichTextBox control and I’m trying to write text that includes the letters “ff”, but they don’t show up. This is the specific code in question:

for entry in suffix:
  desc += "[color=darkgray]Suffix (Tier: %s, Quality: %s%%) 'of %s'\n[color=royalblue]" % [entry.tier, entry.quality, entry.mod.name]

This is what it ends up printing:

If I change one or both of the Fs to capitals, they both display fine; it’s specifically two lowercase Fs that’re problematic. They also display fine elsewhere in the same textbox; it’s just this line specifically that’s problematic. Even tried escaping it but it didn’t like that, either.

Most of the settings on the RichTextBox are default; the font has a lowercase ‘f’ character; I haven’t done anything weird with the font size, or style, or anything else.

I’m tearing my hair out here. Please tell me this is just some stupid bbcode tag or some such.

Edit: For anyone finding this later:

It’s a ligature (ffi) that the font is missing a glyph for. To solve the problem: On the Import tab, choose the font you’re using, click Advanced, and under Metadata Overrides, expand OpenType Features, click Add Feature -> Ligatures, add whichever option is appropriate (discretionary or standard ligatures), then disable the option. Reimport the font, and the issue is fixed!

  • Jesus_666@lemmy.world
    link
    fedilink
    arrow-up
    22
    ·
    3 months ago

    Not a Godot expert but does the font maybe declare that it contains an “ff” ligature that it doesn’t actually contain? The fact that this affects the combination “ff” strongly suggests a ligature issue to me.

    • KoboldCoterie@pawb.socialOP
      link
      fedilink
      English
      arrow-up
      9
      ·
      edit-2
      3 months ago

      Oh my god, this is exactly it. If I type “Suffix” in a word processor in that font I get the same result. I didn’t actually have the font installed as a system font; I’d only imported it into Godot, so I hadn’t even considered this possibility. Thank you!

      I guess the followup question now is, is there a way to disable contextual ligatures in RichTextBox controls? I’m not seeing an option for it. :|

      I’ve found the stupidest temporary hack, which is to include useless BBCode tags in the middle of the word:

      for entry in suffix:
          desc += "[color=darkgray]Suf[i][/i]fix (Tier: %s, Quality: %s%%) 'of %s'\n[color=royalblue]" % [entry.tier, entry.quality, entry.mod.name]
      

      Sure would be nice to have a non-hacky fix though.