summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2011-06-11 19:50:09 +0300
committerEli Zaretskii <eliz@gnu.org>2011-06-11 19:50:09 +0300
commitf23590ccc9bb0b6d335fb098b56ea07f4de6c91c (patch)
tree17d0e788285060ee04a0d4277a17aef542631615
parent34c48e575a30f075daedda6b487c7d24181743be (diff)
downloademacs-f23590ccc9bb0b6d335fb098b56ea07f4de6c91c.tar.gz
emacs-f23590ccc9bb0b6d335fb098b56ea07f4de6c91c.tar.bz2
emacs-f23590ccc9bb0b6d335fb098b56ea07f4de6c91c.zip
Fixed a bug with displaying strings padded with blanks.
src/xdisp.c (set_iterator_to_next): Advance string position correctly when padding it with blanks.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/xdisp.c15
2 files changed, 18 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 3ca0241f47c..071bcb23a03 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,10 @@
2011-06-11 Eli Zaretskii <eliz@gnu.org>
+ * xdisp.c (set_iterator_to_next): Advance string position
+ correctly when padding it with blanks.
+
+2011-06-11 Eli Zaretskii <eliz@gnu.org>
+
* xdisp.c (next_element_from_buffer): Improve commentary for when
the iterator is before prev_stop.
(init_iterator): Initialize bidi_p from the default value of
diff --git a/src/xdisp.c b/src/xdisp.c
index efd29895ea2..7494d5c5e48 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -6305,7 +6305,12 @@ set_iterator_to_next (struct it *it, int reseat_p)
case GET_FROM_C_STRING:
/* Current display element of IT is from a C string. */
- if (!it->bidi_p)
+ if (!it->bidi_p
+ /* If the string position is beyond string_nchars, it means
+ next_element_from_c_string is padding the string with
+ blanks, in which case we bypass the bidi iterator,
+ because it cannot deal with such virtual characters. */
+ || IT_CHARPOS (*it) >= it->string_nchars)
{
IT_BYTEPOS (*it) += it->len;
IT_CHARPOS (*it) += 1;
@@ -6428,7 +6433,13 @@ set_iterator_to_next (struct it *it, int reseat_p)
}
else
{
- if (!it->bidi_p)
+ if (!it->bidi_p
+ /* If the string position is beyond string_nchars, it
+ means next_element_from_string is padding the string
+ with blanks, in which case we bypass the bidi
+ iterator, because it cannot deal with such virtual
+ characters. */
+ || IT_STRING_CHARPOS (*it) >= it->string_nchars)
{
IT_STRING_BYTEPOS (*it) += it->len;
IT_STRING_CHARPOS (*it) += 1;