emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r100013: Fix display of composed char


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r100013: Fix display of composed characters from L2R scripts in bidi buffers. (Bug#5977)
Date: Fri, 23 Apr 2010 21:23:51 +0300
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 100013 [merge]
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Fri 2010-04-23 21:23:51 +0300
message:
  Fix display of composed characters from L2R scripts in bidi buffers. 
(Bug#5977)
  
   xdisp.c (set_iterator_to_next, next_element_from_composition):
   After advancing IT past the composition, resync the bidi iterator
   with IT's position.
modified:
  src/ChangeLog
  src/xdisp.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-04-23 17:40:47 +0000
+++ b/src/ChangeLog     2010-04-23 18:23:51 +0000
@@ -1,3 +1,10 @@
+2010-04-23  Eli Zaretskii  <address@hidden>
+
+       Fix display of composed characters from L2R scripts in bidi buffers.
+       * xdisp.c (set_iterator_to_next, next_element_from_composition):
+       After advancing IT past the composition, resync the bidi iterator
+       with IT's position.  (Bug#5977)
+
 2010-04-23  Dan Nicolaescu  <address@hidden>
 
        * Makefile.in (LD_SWITCH_MACHINE_TEMACS): Remove, unused.

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2010-04-23 15:24:39 +0000
+++ b/src/xdisp.c       2010-04-23 18:23:51 +0000
@@ -6274,6 +6274,15 @@
        {
          IT_CHARPOS (*it) += it->cmp_it.nchars;
          IT_BYTEPOS (*it) += it->cmp_it.nbytes;
+         if (it->bidi_p)
+           {
+             if (it->bidi_it.new_paragraph)
+               bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it);
+             /* Resync the bidi iterator with IT's new position.
+                FIXME: this doesn't support bidirectional text.  */
+             while (it->bidi_it.charpos < IT_CHARPOS (*it))
+               bidi_get_next_char_visually (&it->bidi_it);
+           }
          if (it->cmp_it.to < it->cmp_it.nglyphs)
            it->cmp_it.from = it->cmp_it.to;
          else
@@ -6995,6 +7004,15 @@
        {
          IT_CHARPOS (*it) += it->cmp_it.nchars;
          IT_BYTEPOS (*it) += it->cmp_it.nbytes;
+         if (it->bidi_p)
+           {
+             if (it->bidi_it.new_paragraph)
+               bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it);
+             /* Resync the bidi iterator with IT's new position.
+                FIXME: this doesn't support bidirectional text.  */
+             while (it->bidi_it.charpos < IT_CHARPOS (*it))
+               bidi_get_next_char_visually (&it->bidi_it);
+           }
          return 0;
        }
       it->position = it->current.pos;


reply via email to

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