diff options
| author | Eli Zaretskii | 2010-04-23 21:23:51 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2010-04-23 21:23:51 +0300 |
| commit | 728588ccfd643b2161a186ee782db7695a1d9118 (patch) | |
| tree | 7defdeb68eb1fc7f5498087b772193637256f563 /src | |
| parent | 98092630efffdfaec82833f2366545baf9f01639 (diff) | |
| parent | b893a1502db32da5d0d0e26a90b5d26d2ee4ee04 (diff) | |
| download | emacs-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/ChangeLog | 7 | ||||
| -rw-r--r-- | src/xdisp.c | 18 |
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 @@ | |||
| 1 | 2010-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 | |||
| 1 | 2010-04-23 Dan Nicolaescu <dann@ics.uci.edu> | 8 | 2010-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; |