[HarfBuzz] Ligatures

Eli Zaretskii eliz at gnu.org
Sat May 23 08:35:46 UTC 2020


> From: Khaled Hosny <dr.khaled.hosny at gmail.com>
> Date: Sat, 23 May 2020 09:59:15 +0200
> Cc: harfbuzz at lists.freedesktop.org
> 
> Also either Emacs is currently treating text that it enables shaping for as second-class citizens where limitations/degraded performance is acceptable (which is really really bad)

Could you tell more about which limitations and degraded performance
you had in mind?  I'm not sure we have this, but cannot tell without
understanding the issues.

> or “redesigning the entire Emacs display engine” is not really needed as you can just declare all text as text that needs to be shaped and be done with it.

The Emacs display engine examines the text to be displayed and laid
out one character at a time, and makes layout decisions after each
character or grapheme cluster it lays out.  Its design is therefore
fundamentally incompatible with shaping large substrings of buffer
text at once.  We do support that for short sequences of characters,
which seems to work well enough for complex shaping (a.k.a. "character
compositions") of scripts that require that, but we still do that one
grapheme cluster at a time.  The character composition is implemented
in Lisp, which is called by the display engine, and which then calls
back into C to invoke the shaper.  This implementation is meant to
allow a great deal of control on what should be composed and how.  But
it is also relatively slow, which is another reason why doing that for
all the text to be laid out is impractical: it slows down redisplay to
the degree that it becomes annoying to users.

That is why solving these problems in the way that you suggest
requires a complete rewrite of the Emacs display code.  It simply
cannot currently support what you expect.


More information about the HarfBuzz mailing list