unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: help-gnu-emacs@gnu.org
Subject: Re: Display of decomposed characters
Date: Sun, 21 Mar 2021 14:10:32 +0200	[thread overview]
Message-ID: <83im5kbtc7.fsf@gnu.org> (raw)
In-Reply-To: <91547ED5-8F17-49FF-86CF-EA90C8791DA9@gmail.com> (message from Philipp on Sun, 21 Mar 2021 12:43:47 +0100)

> From: Philipp <p.stephani2@gmail.com>
> Date: Sun, 21 Mar 2021 12:43:47 +0100
> Cc: help-gnu-emacs@gnu.org
> 
> >> For example, the shaping engine could use U+00A8 (assuming it's available in the font), but place it on top of the base glyph, without horizontal shift.
> > 
> > First, we were talking about the case where U+00A8 is NOT available in
> > the font.  (If it _is_ available, then this whole discussion is
> > pointless, because things already work well in that case.)
> 
> No, the case is that U+00A8 (the spacing diaeresis) is available, but U+0308 (the combining diaeresis) is not.

But that's a completely different character, with a completely
different metrics.  The results of superimposing them may well be
illegible.  It is certainly not what the author of the text intended.

And then what to do about diacritics which don't have such
counterparts?

> > The horizontal shift happens because we use U+00A8 from a different
> > font.  Placing a glyph from a different font on top of a base glyph is
> > in general an impossible task, because different fonts have different
> > ways of describing the points where the accents shall be placed on top
> > of base characters.
> 
> Yes, but a fallback option where the two glyphs would just be centered horizontally on top of each other would be at least thinkable.  It wouldn't give great results, but I wouldn't call it impossible.

It could be illegible.  The two dots could become located on some part
of the base character, for example.  Think lower-case and upper-case
base characters.

> >> The optimal approach (for this case) would still be to try out composition before font selection, and use that if it works.
> > 
> > I tried to explain why that's not possible, but I guess I failed
> > miserably.
> 
> At least I'm not convinced.  Surely it's possible to call ucs-normalize-NFC-string before selecting fonts or sending a combined character sequence to the shaping engine, it produces optimal results in this case (I've tried it), and https://lists.freedesktop.org/archives/harfbuzz/2011-July/001426.html appears to talk about something very similar.  The question is rather whether this normalization would cause more problems than it fixes; at least the Harfbuzz approach shouldn't.

Once again: (a) HarfBuzz folks (which are better text-shaping expert
than me and you combined) tell us this is the job of the shaping
engine, in particular because the shaper can handle the codepoints in
any order, not just the canonical order; (b) what about sequences
where NFC produces nothing (because the precomposed character doesn't
exist)?

> >> I should note that Emacs is not alone in producing suboptimal results in this case; other GUI programs on that systems appear to either perform the fake composition I mentioned before, or no composition at all (placing the base and combining characters next to each other).
> > 
> > Which should tell us something about the issue and the ways it can and
> > cannot be solved.
> 
> It tells us that it's a difficult problem, as text rendering is in general.  But it's not unsolvable: for example, I just tried Firefox and Google Chrome, and both produce optimal results.

But that doesn't mean they do what you propose we should do.



      reply	other threads:[~2021-03-21 12:10 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-23 10:05 Display of decomposed characters Philipp Stephani
2020-12-23 13:00 ` Janusz S. Bień
2020-12-23 15:44 ` Eli Zaretskii
2020-12-25 17:14   ` Philipp Stephani
2020-12-25 19:01     ` Eli Zaretskii
2021-01-24 18:58       ` Philipp Stephani
2021-01-24 19:48         ` Eli Zaretskii
2021-01-24 19:57           ` Eli Zaretskii
2021-02-28 18:10           ` Philipp
2021-02-28 18:42             ` Eli Zaretskii
2021-03-18 14:16               ` Philipp
2021-03-18 14:37                 ` Philipp
2021-03-18 15:01                 ` Eli Zaretskii
2021-03-19 16:37                   ` Philipp
2021-03-19 16:44                     ` Eli Zaretskii
2021-03-21 11:43                       ` Philipp
2021-03-21 12:10                         ` Eli Zaretskii [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83im5kbtc7.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).