mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-01 09:51:22 -08:00
Fix display of composed characters from L2R scripts in bidi buffers.
xdisp.c (set_iterator_to_next, next_element_from_composition): After advancing IT past the composition, resync the bidi iterator with IT's position. (Bug#5977)
This commit is contained in:
parent
8785b8887a
commit
b893a1502d
2 changed files with 22 additions and 1 deletions
|
|
@ -3,6 +3,9 @@
|
|||
* xdisp.c (pop_it): When the stack is popped after displaying
|
||||
from a string, bidi-iterate to exit from the text portion covered
|
||||
by the `display' property or overlay. (Bug#5988, bug#5920)
|
||||
(set_iterator_to_next, next_element_from_composition): Fix display
|
||||
of composed characters from L2R scripts in bidi buffers.
|
||||
(Bug#5977)
|
||||
|
||||
2010-04-23 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
|
|
|
|||
20
src/xdisp.c
20
src/xdisp.c
|
|
@ -5309,7 +5309,7 @@ pop_it (it)
|
|||
determine the paragraph base direction if the overlay we
|
||||
just processed is at the beginning of a new
|
||||
paragraph. */
|
||||
if (it->bidi_it.first_elt)
|
||||
if (it->bidi_it.first_elt && it->bidi_it.charpos < ZV)
|
||||
bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it);
|
||||
/* prev_stop can be zero, so check against BEGV as well. */
|
||||
while (it->bidi_it.charpos >= BEGV
|
||||
|
|
@ -6274,6 +6274,15 @@ set_iterator_to_next (it, reseat_p)
|
|||
{
|
||||
IT_CHARPOS (*it) += it->cmp_it.nchars;
|
||||
IT_BYTEPOS (*it) += it->cmp_it.nbytes;
|
||||
if (it->bidi_p)
|
||||
{
|
||||
if (it->bidi_it.new_paragraph)
|
||||
bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it);
|
||||
/* Resync the bidi iterator with IT's new position.
|
||||
FIXME: this doesn't support bidirectional text. */
|
||||
while (it->bidi_it.charpos < IT_CHARPOS (*it))
|
||||
bidi_get_next_char_visually (&it->bidi_it);
|
||||
}
|
||||
if (it->cmp_it.to < it->cmp_it.nglyphs)
|
||||
it->cmp_it.from = it->cmp_it.to;
|
||||
else
|
||||
|
|
@ -6995,6 +7004,15 @@ next_element_from_composition (it)
|
|||
{
|
||||
IT_CHARPOS (*it) += it->cmp_it.nchars;
|
||||
IT_BYTEPOS (*it) += it->cmp_it.nbytes;
|
||||
if (it->bidi_p)
|
||||
{
|
||||
if (it->bidi_it.new_paragraph)
|
||||
bidi_paragraph_init (it->paragraph_embedding, &it->bidi_it);
|
||||
/* Resync the bidi iterator with IT's new position.
|
||||
FIXME: this doesn't support bidirectional text. */
|
||||
while (it->bidi_it.charpos < IT_CHARPOS (*it))
|
||||
bidi_get_next_char_visually (&it->bidi_it);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
it->position = it->current.pos;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue