unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Po Lu <luangruo@yahoo.com>
To: Manuel Giraud <manuel@ledu-giraud.fr>
Cc: Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org
Subject: Re: How to walk a Lisp_String?
Date: Fri, 02 Sep 2022 16:31:13 +0800	[thread overview]
Message-ID: <87bkrykwj2.fsf@yahoo.com> (raw)
In-Reply-To: <875yi68e15.fsf@elite.giraud> (Manuel Giraud's message of "Fri, 02 Sep 2022 08:51:34 +0200")

Manuel Giraud <manuel@ledu-giraud.fr> writes:

> Po Lu <luangruo@yahoo.com> writes:
>
>> Manuel Giraud <manuel@ledu-giraud.fr> writes:
>>
>>> Finally, I'd like to walk this Lisp_String and call FACE_FOR_CHAR for
>>> each charater of this frame.  And then be able to call XftDrawStringUtf8
>>> (or XmbDrawString) on each substring/font pair.  WDYT?
>>
>> That won't work correctly since glyphs do not correspond to
>> characters.
>>
>> After you obtain the substring containing characters that can be
>> displayed with a single font, you should pass it to the font driver's
>> `shape' function, and then give the resulting glyphs and offsets to
>> XftDrawGlyphs.
>
> Thanks for those hints.  What is a "font driver's `shape' function"?

See i.e. xftfont_shape in xftfont.c.

> Ok.  I've said XftDrawStringUtf8 because this is what is currently used
> in lwlib for cairo or xft.

That is definitely a bad thing.  The Cairo emulation of
XftDrawStringUtf8 uses the Cairo toy text API, which is something that
the Cairo developers tell you not to use:

  The functions with text in their name form cairo's toy text API. The
  toy API takes UTF-8 encoded text and is limited in its functionality
  to rendering simple left-to-right text with no advanced features. That
  means for example that most complex scripts like Hebrew, Arabic, and
  Indic scripts are out of question. No kerning or correct positioning
  of diacritical marks either. The font selection is pretty limited too
  and doesn't handle the case that the selected font does not cover the
  characters in the text. This set of functions are really that, a toy
  text API, for testing and demonstration purposes. Any serious
  application should avoid them.

The Xft function itself is much worse than the Cairo emulation.



  parent reply	other threads:[~2022-09-02  8:31 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-01 15:34 How to walk a Lisp_String? Manuel Giraud
2022-09-01 15:42 ` Stefan Monnier
2022-09-01 15:42 ` Eli Zaretskii
2022-09-01 15:49   ` Eli Zaretskii
2022-09-01 20:45     ` Manuel Giraud
2022-09-02  1:08       ` Po Lu
2022-09-02  6:32         ` Eli Zaretskii
2022-09-02  8:27           ` Po Lu
2022-09-02 10:36             ` Eli Zaretskii
2022-09-02 11:03               ` Po Lu
2022-09-02 11:15                 ` Eli Zaretskii
2022-09-02 12:48                   ` Po Lu
2022-09-02 13:17                     ` Eli Zaretskii
2022-09-02  6:51         ` Manuel Giraud
2022-09-02  7:20           ` Eli Zaretskii
2022-09-02  8:31           ` Po Lu [this message]
2022-09-02  6:43       ` Eli Zaretskii
2022-09-02  7:18         ` Manuel Giraud
2022-09-02  7:30           ` Eli Zaretskii
2022-09-02  8:56             ` Manuel Giraud
2022-09-02 10:52               ` Eli Zaretskii
2022-09-02 11:40                 ` Manuel Giraud
2022-09-02 12:51                   ` Po Lu
2022-09-02 15:07                     ` Manuel Giraud
2022-09-03  0:58                       ` Po Lu
2022-09-03  5:46                         ` Tomas Hlavaty
2022-09-03  6:19                           ` Po Lu
2022-09-03  8:05                             ` Tomas Hlavaty
2022-09-02 13:08                   ` Eli Zaretskii
2022-09-02 14:58                     ` Manuel Giraud
2022-09-02 15:33                       ` Eli Zaretskii

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=87bkrykwj2.fsf@yahoo.com \
    --to=luangruo@yahoo.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=manuel@ledu-giraud.fr \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).