Subject: Re: bug#31315: wrong font encoding for fallback font

From: Werner LEMBERG <[email-masked]>
Date: Fri, 04 May 2018 07:11:37 +0200 (CEST)

>> Alas, my Elisp knowledge is ... well ... not impressive.
>> Basically, I'm just an Emacs user, not an Emacs developer.
> 
> Almost all of the relevant code is in C, not in Lisp.

OK.

>> With Xft, there is no possibility for improvement IMHO.  The
>> probably best choice is to switch to Pango for font access (in case
>> you don't do that already).
> 
> There are several back-ends besides Xft, the most advanced being
> xftfont.c.  They all didn't see any serious development for the past
> several years.  And yes, acquiring new back-ends is also a worthy
> goal.
> 
> All of that requires a level of expertise that IMO we currently
> don't have.

What I can certainly offer is advice.  However, I'm not sure to be
right person for working on the innards of Emacs, given the usual lack
of time (sigh).

>> An Emacs charset essentially triggers a language and script
>> setting, and those two parameters can be passed to Pango, AFAIK.
> 
> Emacs handles charsets and scripts separately.  A script is matched
> against OTF/TTF features of fonts to make sure the necessary shaping
> features required by a script are supported.

Interesting.  Access to OpenType features is exactly what's needed to
improve font display for selected charsets.  Where can I find the
related code in Emacs?

Additionally, I suggest that the Emacs maintainers set up a GSoC
project, namely to improve font rendering.  This is a broad topic,
which could be further split into smaller subprojects.

Emacs uses Handa-san's libotf library (are there any other projects
that use this library?), but AFAICS it doesn't receive a lot of
testing.  On the other hand, there is Behdad Esfahbod's `HarfBuzz'
shaping engine that comes with a large suite of tests.  One of such
subprojects could be to take these tests and use them to improve
libotf, especially for Indic scripts.

  https://www.freedesktop.org/wiki/Software/HarfBuzz/

    Werner