aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2010-04-23 21:23:51 +0300
committerEli Zaretskii2010-04-23 21:23:51 +0300
commit728588ccfd643b2161a186ee782db7695a1d9118 (patch)
tree7defdeb68eb1fc7f5498087b772193637256f563 /src
parent98092630efffdfaec82833f2366545baf9f01639 (diff)
parentb893a1502db32da5d0d0e26a90b5d26d2ee4ee04 (diff)
downloademacs-728588ccfd643b2161a186ee782db7695a1d9118.tar.gz
emacs-728588ccfd643b2161a186ee782db7695a1d9118.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog7
-rw-r--r--src/xdisp.c18
2 files changed, 25 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 73e0d967678..2a7212d8b26 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
12010-04-23 Eli Zaretskii <eliz@gnu.org>
2
3 Fix display of composed characters from L2R scripts in bidi buffers.
4 * xdisp.c (set_iterator_to_next, next_element_from_composition):
5 After advancing IT past the composition, resync the bidi iterator
6 with IT's position. (Bug#5977)
7
12010-04-23 Dan Nicolaescu <dann@ics.uci.edu> 82010-04-23 Dan Nicolaescu <dann@ics.uci.edu>
2 9
3 * Makefile.in (LD_SWITCH_MACHINE_TEMACS): Remove, unused. 10 * Makefile.in (LD_SWITCH_MACHINE_TEMACS): Remove, unused.
diff --git a/src/xdisp.c b/src/xdisp.c
index 86d6b75e187..753ea16db01 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -6274,6 +6274,15 @@ set_iterator_to_next (it, reseat_p)
6274 { 6274 {
6275 IT_CHARPOS (*it) += it->cmp_it.nchars; 6275 IT_CHARPOS (*it) += it->cmp_it.nchars;
6276 IT_BYTEPOS (*it) += it->cmp_it.nbytes; 6276 IT_BYTEPOS (*it) += it->cmp_it.nbytes;
6277 if (it->bidi_p)
6278 {
6279 if (it->bidi_it.new_paragraph)
6280 bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it);
6281 /* Resync the bidi iterator with IT's new position.
6282 FIXME: this doesn't support bidirectional text. */
6283 while (it->bidi_it.charpos < IT_CHARPOS (*it))
6284 bidi_get_next_char_visually (&it->bidi_it);
6285 }
6277 if (it->cmp_it.to < it->cmp_it.nglyphs) 6286 if (it->cmp_it.to < it->cmp_it.nglyphs)
6278 it->cmp_it.from = it->cmp_it.to; 6287 it->cmp_it.from = it->cmp_it.to;
6279 else 6288 else
@@ -6995,6 +7004,15 @@ next_element_from_composition (it)
6995 { 7004 {
6996 IT_CHARPOS (*it) += it->cmp_it.nchars; 7005 IT_CHARPOS (*it) += it->cmp_it.nchars;
6997 IT_BYTEPOS (*it) += it->cmp_it.nbytes; 7006 IT_BYTEPOS (*it) += it->cmp_it.nbytes;
7007 if (it->bidi_p)
7008 {
7009 if (it->bidi_it.new_paragraph)
7010 bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it);
7011 /* Resync the bidi iterator with IT's new position.
7012 FIXME: this doesn't support bidirectional text. */
7013 while (it->bidi_it.charpos < IT_CHARPOS (*it))
7014 bidi_get_next_char_visually (&it->bidi_it);
7015 }
6998 return 0; 7016 return 0;
6999 } 7017 }
7000 it->position = it->current.pos; 7018 it->position = it->current.pos;