unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Kenichi Handa <handa@m17n.org>
To: "Drew Adams" <drew.adams@oracle.com>
Cc: emacs-devel@gnu.org
Subject: Re: composition text property
Date: Tue, 26 Jun 2007 10:32:57 +0900	[thread overview]
Message-ID: <E1I2zvN-0001oF-CL@etlken.m17n.org> (raw)
In-Reply-To: <EIENLHALHGIMHGDOLMIMOEPADCAA.drew.adams@oracle.com>


In article <EIENLHALHGIMHGDOLMIMOEPADCAA.drew.adams@oracle.com>, "Drew Adams" <drew.adams@oracle.com> writes:

> Trying again - got no reply. Anybody know about the `composition' property?

Sorry for not responding.  I've thought that I already
replied, but it was in the different thread.

> > From: Drew Adams Sent: Wednesday, May 30, 2007 9:09 AM
> > From the Elisp manual, node Special Properties, `composition':
> >
> >      This text property is used to display a sequence of characters as a
> >      single glyph composed from components.  For instance, in Thai a
> >      base consonant is composed with the following combining vowel as a
> >      single glyph.  The value should be a character or a sequence
> >      (vector, list, or string) of integers.
> >
> >         * If it is a character, it means to display that character
> >           instead of the text in the region.
> >
> >         * If it is a string, it means to display that string's contents
> >           instead of the text in the region.
> >
> >         * If it is a vector or list, the elements are characters
> >           interleaved with internal codes specifying how to compose the
> >           following character with the previous one.

In the thread of "Crash using text property 'composite on
w32", I wrote:

> Yes.  The above description is for the argument COMPONENTS
> of the function `compose-region', or for just a part of the
> property value.  The value has this form:
> 
>    The property value has this form when the composition is made:
> 	((LENGTH . COMPONENTS) . MODIFICATION-FUNC)
>    then turns to this form:
> 	(COMPOSITION-ID . (LENGTH COMPONENTS-VEC . MODIFICATION-FUNC))
>    when the composition is registered in composition_hash_table and
>    composition_table.  These rather peculiar structures were designed
>    to make it easy to distinguish them quickly (we can do that by
>    checking only the first element) and to extract LENGTH (from the
>    former form) and COMPOSITION-ID (from the latter form).
>    [...]
> 
> The detail is described in the header comment of
> src/composite.c.  How much detail, do you think, we should
> describe in Info?
> 
> Isn't it enough to say just as below?
> 
> The value should be a cons of special structure.  It should
> be manipulated only by the functions `compose-region',
> `compose-string' and `find-composition'.

So,

> > I must be misunderstanding this - perhaps someone can explain. I try this:
> >
> > (put-text-property
> >   (point) (1+ (point))
> >   'composition "Hi there!")
> >

This must be:
 (compose-region (point) (1+ (point))
 '(H? (Br . Bl) ?i (Br . Bl) ?\s (Br . Bl) ........."))

But in this case, you should simply use display property.

> > I expected to see "Hi there!" displayed in place of the character before
> > point ("display that strings contents instead of the text..."). Instead, I
> > see no visible change. `C-u C-x =' shows that the composition property was
> > applied. I also tried applying the property this way to several
> > consecutive
> > characters (expecting to see "Hi there!" in place of each), but with no
> > visible change.
> >
> > I also tried looking at Emacs source code that uses this property, but I
> > didn't find much, and what I found didn't enlighten me.
> >
> > What am I missing? Thx.
> >
> > BTW, should the text really be speaking of "the region" here? I tried with
> > and without an active region, with no visible change. I suspect that this
> > has nothing to do with the region, and I'd file a bug, but I don't yet
> > understand this text (obviously). Shouldn't "the region" be "the
> > characters
> > with property `composition'"?
> >
> > Also, the illustration of Thai doesn't help (me) much. How about a code
> > example, showing how `composition' can be used to compose a Thai consonant
> > and its following vowel, forming a single glyph?

Composition is not a text property to play around by direct
manipulation.  It is more internal to Emacs, and only text
layouting program (e.g. thai-composition-function,
tibetan-composition-function) should use.

I'll improve the documentaion soon.

---
Kenichi Handa
handa@m17n.org

  reply	other threads:[~2007-06-26  1:32 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-30 16:08 composition text property Drew Adams
2007-06-22 22:51 ` Drew Adams
2007-06-26  1:32   ` Kenichi Handa [this message]
2007-06-26  3:07     ` Drew Adams

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=E1I2zvN-0001oF-CL@etlken.m17n.org \
    --to=handa@m17n.org \
    --cc=drew.adams@oracle.com \
    --cc=emacs-devel@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.
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).