[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: composition text property
From: |
Kenichi Handa |
Subject: |
Re: composition text property |
Date: |
Tue, 26 Jun 2007 10:32:57 +0900 |
User-agent: |
SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.2 Emacs/23.0.0 (i686-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) |
In article <address@hidden>, "Drew Adams" <address@hidden> 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
address@hidden