Retrospective commit from 2009-11-07.
authorEli Zaretskii <eliz@gnu.org>
Fri, 1 Jan 2010 11:54:22 +0000 (06:54 -0500)
committerEli Zaretskii <eliz@gnu.org>
Fri, 1 Jan 2010 11:54:22 +0000 (06:54 -0500)
More fixes for iteration near ZV.

 bidi.c (bidi_paragraph_init): Don't overstep end of buffer.
 Treat end of buffer as a NEUTRAL_B character.
 (bidi_resolve_explicit): Don't special-case ZV when bidi_it->type
 is NEUTRAL_B, since bidi_set_paragraph_end no longer sets the
 new_paragraph flag.

src/ChangeLog.bidi
src/bidi.c

index 0df4094..a09ce29 100644 (file)
@@ -1,3 +1,11 @@
+2009-11-07  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_paragraph_init): Don't overstep end of buffer.
+       Treat end of buffer as a NEUTRAL_B character.
+       (bidi_resolve_explicit): Don't special-case ZV when bidi_it->type
+       is NEUTRAL_B, since bidi_set_paragraph_end no longer sets the
+       new_paragraph flag.
+
 2009-10-31  Eli Zaretskii  <eliz@gnu.org>
 
        * xdisp.c (display_line): Always extend reversed_p rows to the end
index 4b239ca..e8b7b2a 100644 (file)
@@ -927,6 +927,12 @@ bidi_paragraph_init (bidi_dir_t dir, struct bidi_it *bidi_it)
        {
          if (type == NEUTRAL_B && bidi_at_paragraph_end (pos, bytepos) >= -1)
            break;
+         if (bytepos >= ZV_BYTE)
+           {
+             /* Pretend there's a paragraph separator at end of buffer.  */
+             type = NEUTRAL_B;
+             break;
+           }
          FETCH_CHAR_ADVANCE (ch, pos, bytepos);
        }
       if (type == STRONG_R || type == STRONG_AL) /* P3 */
@@ -1289,11 +1295,7 @@ bidi_resolve_explicit (struct bidi_it *bidi_it)
 
   if (bidi_it->type == NEUTRAL_B)      /* X8 */
     {
-      /* End of buffer does _not_ indicate a new paragraph is coming.
-        Otherwise, each character inserted at EOB will be processed
-        as starting a new paragraph.  */
-      if (bidi_it->bytepos < ZV_BYTE)
-       bidi_set_paragraph_end (bidi_it);
+      bidi_set_paragraph_end (bidi_it);
       /* This is needed by bidi_resolve_weak below, and in L1.  */
       bidi_it->type_after_w1 = bidi_it->type;
       bidi_check_type (bidi_it->type_after_w1);