emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r99790: Fix highlight of trailing whi


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r99790: Fix highlight of trailing whitespace is right-to-left lines.
Date: Wed, 31 Mar 2010 17:28:16 +0300
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 99790
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Wed 2010-03-31 17:28:16 +0300
message:
  Fix highlight of trailing whitespace is right-to-left lines.
  
   xdisp.c (highlight_trailing_whitespace): Support highlight of
   trailing whitespace in right-to-left rows.
modified:
  src/ChangeLog
  src/xdisp.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-03-31 04:14:08 +0000
+++ b/src/ChangeLog     2010-03-31 14:28:16 +0000
@@ -1,3 +1,8 @@
+2010-03-31  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (highlight_trailing_whitespace): Support highlight of
+       trailing whitespace in right-to-left rows.
+
 2010-03-31  Stefan Monnier  <address@hidden>
 
        Get rid of the direct_output optimizations.

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2010-03-31 04:14:08 +0000
+++ b/src/xdisp.c       2010-03-31 14:28:16 +0000
@@ -16868,19 +16868,37 @@
       struct glyph *start = row->glyphs[TEXT_AREA];
       struct glyph *glyph = start + used - 1;
 
+      if (row->reversed_p)
+       {
+         /* Right-to-left rows need to be processed in the opposite
+            direction, so swap the edge pointers. */
+         glyph = start;
+         start = row->glyphs[TEXT_AREA] + used - 1;
+       }
+
       /* Skip over glyphs inserted to display the cursor at the
         end of a line, for extending the face of the last glyph
         to the end of the line on terminals, and for truncation
         and continuation glyphs.  */
-      while (glyph >= start
-            && glyph->type == CHAR_GLYPH
-            && INTEGERP (glyph->object))
-       --glyph;
+      if (!row->reversed_p)
+       {
+         while (glyph >= start
+                && glyph->type == CHAR_GLYPH
+                && INTEGERP (glyph->object))
+           --glyph;
+       }
+      else
+       {
+         while (glyph <= start
+                && glyph->type == CHAR_GLYPH
+                && INTEGERP (glyph->object))
+           ++glyph;
+       }
 
       /* If last glyph is a space or stretch, and it's trailing
         whitespace, set the face of all trailing whitespace glyphs in
         IT->glyph_row to `trailing-whitespace'.  */
-      if (glyph >= start
+      if ((row->reversed_p ? glyph <= start : glyph >= start)
          && BUFFERP (glyph->object)
          && (glyph->type == STRETCH_GLYPH
              || (glyph->type == CHAR_GLYPH
@@ -16891,12 +16909,24 @@
          if (face_id < 0)
            return;
 
-         while (glyph >= start
-                && BUFFERP (glyph->object)
-                && (glyph->type == STRETCH_GLYPH
-                    || (glyph->type == CHAR_GLYPH
-                        && glyph->u.ch == ' ')))
-           (glyph--)->face_id = face_id;
+         if (!row->reversed_p)
+           {
+             while (glyph >= start
+                    && BUFFERP (glyph->object)
+                    && (glyph->type == STRETCH_GLYPH
+                        || (glyph->type == CHAR_GLYPH
+                            && glyph->u.ch == ' ')))
+               (glyph--)->face_id = face_id;
+           }
+         else
+           {
+             while (glyph <= start
+                    && BUFFERP (glyph->object)
+                    && (glyph->type == STRETCH_GLYPH
+                        || (glyph->type == CHAR_GLYPH
+                            && glyph->u.ch == ' ')))
+               (glyph++)->face_id = face_id;
+           }
        }
     }
 }


reply via email to

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