emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Composing Hebrew diacriticals


From: Eli Zaretskii
Subject: Re: Composing Hebrew diacriticals
Date: Sat, 08 May 2010 15:51:32 +0300

> From: Kenichi Handa <address@hidden>
> Cc: address@hidden
> Date: Fri, 07 May 2010 20:15:03 +0900
> 
> > > (set-char-table-range 
> > >  composition-function-table '(#x591 . #x5F4)
> > >  '(["[\u0591-\u05F4]+" 0 font-shape-gstring]))
> > > 
> > > On Windows, I expect uniscribe already has capability to
> > > handle that.
> 
> > Thanks, but when I evaluate this expression and insert a consonant
> > followed by a diacriticals, Emacs infloops.  Do you think that this is
> > something specific to uniscribe, or to how Emacs uses uniscribe?
> 
> I'm not sure.  I don't see infloops on GNU/Linux.  But,
> investigating it based on the current problematic code is a
> waste of time.

I'm not sure what problematic code you have in mind.  I see the
infinite loop without turning bidi-display-reordering on, and also in
Emacs 23.2.

In the debugger, I see that it loops inside move_it_in_display_line_to,
because set_iterator_to_next does not advance to the next character.
This happens because autocmp_chars and composition_update_it produce a
cmp_it structure with this contents:

    (gdb) p *cmp_it
    $62 = {
      stop_pos = 308,
      id = 4,
      ch = 1489,
      lookback = 0,
      nglyphs = 1,
      nchars = 0,
      nbytes = 0,
      from = 0,
      to = 1,
      width = 0
    }

Since nchars and nbytes are zero, the iterator does not move.

The character whose codepoint is 1489 is u+05d1, HEBREW LETTER BET.  I
typed that character, followed by a u+05bc, HEBREW POINT DAGESH, after
evaluating the expression you suggested (see above).  Emacs loops
after I type the DAGESH.

This code is almost 100% platform independent, except where
font-shape-gstring calls Uniscribe.  Since you don't see the loop,
what could be the reason for that, if it's not something specific to
Uniscribe?  Did I do something wrong?

Thanks.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]