Mercurial > emacs
diff src/bidi.c @ 107604:9e8415b885ee
Retrospective commit from 2009-12-12.
Begin working on faces support. First version of handle_stop_backwards.
Rearrange struct bidi_it for more efficient push/pop ops.
dispextern.h (struct it): New members prev_stop and
base_level_stop.
xdisp.c (handle_stop_backwards): New function.
(next_element_from_buffer): Handle the situation where we
overstepped stop_charpos due to non-linearity of the bidi
iteration. Likewise for when we back up beyond the previous
stop_charpos.
(reseat_1, pop_it, push_it): Set prev_stop and base_level_stop.
dispextern.h (BIDI_AT_BASE_LEVEL): New macro.
bidi.c (bidi_copy_it): Fix compiler warning due to cast of a
pointer to `int'. Don't preserve the first_elt member, as it is
no longer copied, because its position in the structure was
changed, see below.
dispextern.h (struct bidi_it): Move first_elt, new_paragraph,
separator_limit, and paragraph_dir to after bidi_stack. Add a
note that anything beyond the level stack is not preserved when
the bidi iterator state is copied/saved.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Fri, 01 Jan 2010 09:46:25 -0500 |
parents | ee023eee6207 |
children | b1e1b45c9fb6 |
line wrap: on
line diff
--- a/src/bidi.c Fri Jan 01 07:01:23 2010 -0500 +++ b/src/bidi.c Fri Jan 01 09:46:25 2010 -0500 @@ -528,15 +528,10 @@ static inline void bidi_copy_it (struct bidi_it *to, struct bidi_it *from) { - int save_first_elt = to->first_elt; int i; - /* Copy everything except the level stack. */ - memcpy (to, from, ((int)&((struct bidi_it *)0)->level_stack[0])); - /* Don't copy FIRST_ELT flag. */ - to->first_elt = save_first_elt; - if (to->first_elt != 0 && to->first_elt != 1) - to->first_elt = 0; + /* Copy everything except the level stack and beyond. */ + memcpy (to, from, ((size_t)&((struct bidi_it *)0)->level_stack[0])); /* Copy the active part of the level stack. */ to->level_stack[0] = from->level_stack[0]; /* level zero is always in use */