diff options
author | Eli Zaretskii <eliz@gnu.org> | 2011-10-20 14:39:52 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2011-10-20 14:39:52 +0200 |
commit | 7b5d6677eca241b608f32b1de8d60e03758ec157 (patch) | |
tree | acb4c67188e9ca5e819c44350a3907812638a904 /src/dispextern.h | |
parent | 1ebc9c872623dab285842f273a18937223f4d3c6 (diff) |
Improve the speedup of bidi display introduced in 2011-10-18T16:56:09Z!eliz@gnu.org for bug#9771.
src/dispextern.h (struct bidi_it): New member next_en_type.
src/bidi.c (bidi_line_init): Initialize the next_en_type member.
(bidi_resolve_explicit_1): When next_en_pos is valid for the
current character, check also for next_en_type being WEAK_EN.
(bidi_resolve_weak): Don't enter the expensive loop if the current
position is before next_en_pos. Record the bidi type of the first
non-ET, non-BN character we find, in addition to its position.
(bidi_level_of_next_char): Invalidate next_en_type when
next_en_pos is over-stepped.
Diffstat (limited to 'src/dispextern.h')
-rw-r--r-- | src/dispextern.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/dispextern.h b/src/dispextern.h index 3c157371ef..dd5f67d2d1 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -1856,7 +1856,8 @@ struct bidi_it { struct bidi_saved_info next_for_neutral; /* surrounding characters for... */ struct bidi_saved_info prev_for_neutral; /* ...resolving neutrals */ struct bidi_saved_info next_for_ws; /* character after sequence of ws */ - EMACS_INT next_en_pos; /* position of next EN char for ET */ + EMACS_INT next_en_pos; /* pos. of next char for determining ET type */ + bidi_type_t next_en_type; /* type of char at next_en_pos */ EMACS_INT ignore_bn_limit; /* position until which to ignore BNs */ bidi_dir_t sor; /* direction of start-of-run in effect */ int scan_dir; /* direction of text scan, 1: forw, -1: back */ |