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.
next prev 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
* 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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.