On Sat, Nov 19, 2011 at 3:30 AM, Aidan Kehoe <keh...@parhasard.net> wrote:
> > Ar an t-ochtú lá déag de mí na Samhain, scríobh Jeff Sparkes: > > > Aidan Kehoe <keh...@parhasard.net> writes: > > > > > > > I am one of the three people most familiar with the XEmacs > > > > > codebase in the world, and I was asking where to start :-) > > > > > . Thanks for having looked. > > > > > > > > Well, start by checking what exactly is passed to > > > > pango_layout_set_text(), and also what font is used (you can pmap > > > > the process and grep for fonts). > > > > > > Thanks, that’s very helpful. > > > > Sorry I disappeared for a few months, but I'm back working on Gtk. > > I just updated the code to use pango_itemize, which should handle RTL > > languages better. The characters seem to be in the right order but > > the words are not. XEmacs-gtk display now matches gedit for Arabic > > and Persian. They don't match FSF emacs display, but I think the > > pango is correct. (Firefox and IE agree with pango) > > To get the Persian-specific characters to join (n.b. these are characters > that are not in iso-88859-6) I need the below patch; basically we should > have taken the decision years ago to leave whether splitting character runs > based on Mule charsets is appropriate, to the platform-specific code. > > > Editing RTL is wrong, just moving the cursor through the string makes > > the characters dance. > > Right, I see that too. > I should have put a smiley there. RTL is a lot of work, all I know about it is from postings by Eli Zaretskii on emacs-devel list. I think the dancing characters are caused by having a separate textual_run containing only the character covered by the cursor. I'd just like to get display working well, e.g. for reading email. As I understand it, this patch makes the input text be split into chunks, each one containing either all ascii or all non-ascii chars. I think even that is unnecessary, but avoiding it would require changing the code flow, right? I just checked my current gtk_output_string(), which doesn't call separate_textual_runs at all. This xlike file patches shouldn't be needed at all. WIll the redisplay.c changes break tty display when compiled with gtk? > > diff -r 2770fc9ad918 src/console-xlike-inc.h > --- a/src/console-xlike-inc.h Fri Nov 04 11:22:51 2011 -0400 > +++ b/src/console-xlike-inc.h Fri Nov 18 19:32:00 2011 +0000 > @@ -219,6 +219,7 @@ > #define XLIKE_SET_GC_COLOR(lval, rval) ((lval) = (rval).pixel) > #define XLIKE_SET_GC_PIXEL(lval, rval) ((lval) = (rval)) > #define XLIKE_FONT_NUM(val) ((val)->fid) > +#define XLIKE_ICHAR_CHARSET(c) ichar_charset (c) > > /************ End X flavor of XLIKE **********/ > > @@ -331,6 +332,7 @@ > #define XLIKE_SET_GC_COLOR(lval, rval) ((lval) = (rval)) > #define XLIKE_SET_GC_PIXEL(lval, rval) ((lval).pixel = (rval)) > #define XLIKE_FONT_NUM(val) (val) > +#define XLIKE_ICHAR_CHARSET(c) Vcharset_ascii > > /************ End GTK flavor of XLIKE **********/ > > diff -r 2770fc9ad918 src/redisplay-xlike-inc.c > --- a/src/redisplay-xlike-inc.c Fri Nov 04 11:22:51 2011 -0400 > +++ b/src/redisplay-xlike-inc.c Fri Nov 18 19:32:00 2011 +0000 > @@ -683,7 +195,9 @@ > findex = rb->findex; > xpos = rb->xpos; > if (rb->type == RUNE_CHAR) > - charset = ichar_charset (rb->object.chr.ch); > + { > + charset = XLIKE_ICHAR_CHARSET (rb->object.chr.ch); > + } > > if (end < 0) > end = Dynarr_length (rba); > @@ -695,7 +209,7 @@ > > if (rb->findex == findex && rb->type == RUNE_CHAR > && rb->object.chr.ch != '\n' && rb->cursor_type != CURSOR_ON > - && EQ (charset, ichar_charset (rb->object.chr.ch))) > + && EQ (charset, XLIKE_ICHAR_CHARSET (rb->object.chr.ch))) > { > Dynarr_add (buf, rb->object.chr.ch); > width += rb->width; > @@ -718,7 +232,7 @@ > { > findex = rb->findex; > xpos = rb->xpos; > - charset = ichar_charset (rb->object.chr.ch); > + charset = XLIKE_ICHAR_CHARSET (rb->object.chr.ch); > > if (rb->cursor_type == CURSOR_ON) > { > diff -r 2770fc9ad918 src/redisplay.c > --- a/src/redisplay.c Fri Nov 04 11:22:51 2011 -0400 > +++ b/src/redisplay.c Fri Nov 18 19:32:00 2011 +0000 > @@ -631,11 +631,16 @@ > redisplay_window_text_width_ichar_string (struct window *w, int findex, > Ichar *str, Charcount len) > { > + Lisp_Object window = wrap_window (w); > unsigned char charsets[NUM_LEADING_BYTES]; > - Lisp_Object window; > - > + > +#ifdef HAVE_GTK > + memset (charsets, 0, NUM_LEADING_BYTES); > + charsets[0] = 1; > +#else > find_charsets_in_ichar_string (charsets, str, len); > - window = wrap_window (w); > +#endif > + > ensure_face_cachel_complete (WINDOW_FACE_CACHEL (w, findex), window, > charsets); > return DEVMETH (WINDOW_XDEVICE (w), > @@ -681,7 +686,12 @@ > if (STRINGP (reloc)) > nonreloc = XSTRING_DATA (reloc); > convert_ibyte_string_into_ichar_dynarr (nonreloc, len, rtw_ichar_dynarr); > +#ifdef HAVE_GTK > + memset (charsets, 0, NUM_LEADING_BYTES); > + charsets[0] = 1; > +#else > find_charsets_in_ibyte_string (charsets, nonreloc, len); > +#endif > reset_face_cachel (&cachel); > cachel.face = face; > ensure_face_cachel_complete (&cachel, > @@ -1108,7 +1118,7 @@ > } > else > { > - Lisp_Object charset = ichar_charset (data->ch); > + Lisp_Object charset = Vcharset_ascii; > if (!EQ (charset, data->last_charset) || > data->findex != data->last_findex) > { > > > -- > ‘Iodine deficiency was endemic in parts of the UK until, through what has > been > described as “an unplanned and accidental public health triumph”, iodine > was > added to cattle feed to improve milk production in the 1930s.’ > (EN Pearce, Lancet, June 2011) > -- Jeff Sparkes jspar...@gmail.com
_______________________________________________ gtk-i18n-list mailing list gtk-i18n-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-i18n-list