There are several textdrawing API in windows. The one used by SynEdit has a few limits. Most important SynEdit can only use it for monospaced text. The API can output proportional, but SynEdit would not be able to place the caret, or draw the next token in the correct pos.
To change this, SynEdit would need full support for proportional fonts. That is a huge rewrite...
So when talking ligatures the first distinction that must be made is: Does the ligature have the same wide as the individual chars.
- the ligature for "=>" may actually have the width of 2 monospaced chars
- the ligature for "fi" may be smaller
SynEdit can tell windows to force the width, but that can look extremely ugly.
If monospacing would be kept by the ligature, the next challenge is to find start and end of ligatures. Some fonts replace entire words with one ligature.
If it was only combinations of max 2 chars, then SynEdits textdrawer could re-output one extra char on both sides of each token, and use clipping to prevent them from being drawn (since they already are, or still will be drawn).
That would work for colors, but may have side effects if font-style (bold, italics) changes.
Also note, that synedit would still treat the ligature as individual chars, allowing the caret in the middle of it, or selecting half of it. (which is why changes to bold/italic could be awkward, if half the ligature was bold, and the other was not)
SynEdit does some of this for Arabic scripts (actually all RTL text), but it is very inefficient.
See
unit LazSynTextArea;
line 1509
if ATokenInfo.RtlInfo.IsRtl then begin
You can look at this for your own copy of SynEdit.
For proper adding of this function, SynEdit would need to use a different drawing API. (And ideally support exchangeable classes for old/new drawing)