From 21fce5ab3669283e27cf8ec68905ea8778a73933 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 1 Jan 2010 06:54:22 -0500 Subject: [PATCH] Retrospective commit from 2009-11-07. 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 | 8 ++++++++ src/bidi.c | 12 +++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog.bidi b/src/ChangeLog.bidi index 0df409481a7..a09ce293823 100644 --- a/src/ChangeLog.bidi +++ b/src/ChangeLog.bidi @@ -1,3 +1,11 @@ +2009-11-07 Eli Zaretskii + + * 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 * xdisp.c (display_line): Always extend reversed_p rows to the end diff --git a/src/bidi.c b/src/bidi.c index 4b239caa6f8..e8b7b2a8c56 100644 --- a/src/bidi.c +++ b/src/bidi.c @@ -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); -- 2.39.2