mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-30 17:10:51 -08:00
Move code that bidi-iterates out of display property to a separate function.
xdisp.c (iterate_out_of_display_property): New function, body from pop_it. (pop_it): Use it.
This commit is contained in:
parent
adf4f59cc8
commit
f538fcec9a
2 changed files with 30 additions and 19 deletions
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
* xdisp.c (display_line): Fix crash with bidi display on the last
|
||||
empty line. (Bug#6030)
|
||||
(iterate_out_of_display_property): New function, body from pop_it.
|
||||
(pop_it): Use it.
|
||||
|
||||
2010-04-24 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
|
|
|
|||
47
src/xdisp.c
47
src/xdisp.c
|
|
@ -5259,6 +5259,33 @@ push_it (it)
|
|||
++it->sp;
|
||||
}
|
||||
|
||||
static void
|
||||
iterate_out_of_display_property (it)
|
||||
struct it *it;
|
||||
{
|
||||
/* Maybe initialize paragraph direction. If we are at the beginning
|
||||
of a new paragraph, next_element_from_buffer may not have a
|
||||
chance to do that. */
|
||||
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
|
||||
&& it->prev_stop <= it->bidi_it.charpos
|
||||
&& it->bidi_it.charpos < CHARPOS (it->position))
|
||||
bidi_get_next_char_visually (&it->bidi_it);
|
||||
/* Record the stop_pos we just crossed, for when we cross it
|
||||
back, maybe. */
|
||||
if (it->bidi_it.charpos > CHARPOS (it->position))
|
||||
it->prev_stop = CHARPOS (it->position);
|
||||
/* If we ended up not where pop_it put us, resync IT's
|
||||
positional members with the bidi iterator. */
|
||||
if (it->bidi_it.charpos != CHARPOS (it->position))
|
||||
{
|
||||
SET_TEXT_POS (it->position,
|
||||
it->bidi_it.charpos, it->bidi_it.bytepos);
|
||||
it->current.pos = it->position;
|
||||
}
|
||||
}
|
||||
|
||||
/* Restore IT's settings from IT->stack. Called, for example, when no
|
||||
more overlay strings must be processed, and we return to delivering
|
||||
|
|
@ -5309,25 +5336,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 && 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
|
||||
&& it->prev_stop <= it->bidi_it.charpos
|
||||
&& it->bidi_it.charpos < CHARPOS (it->position))
|
||||
bidi_get_next_char_visually (&it->bidi_it);
|
||||
/* Record the stop_pos we just crossed, for when we cross it
|
||||
back, maybe. */
|
||||
if (it->bidi_it.charpos > CHARPOS (it->position))
|
||||
it->prev_stop = CHARPOS (it->position);
|
||||
/* If we ended up not where pop_it put us, resync IT's
|
||||
positional members with the bidi iterator. */
|
||||
if (it->bidi_it.charpos != CHARPOS (it->position))
|
||||
{
|
||||
SET_TEXT_POS (it->position,
|
||||
it->bidi_it.charpos, it->bidi_it.bytepos);
|
||||
it->current.pos = it->position;
|
||||
}
|
||||
iterate_out_of_display_property (it);
|
||||
}
|
||||
break;
|
||||
case GET_FROM_STRING:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue