From 7b5d6677eca241b608f32b1de8d60e03758ec157 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 20 Oct 2011 14:39:52 +0200 Subject: 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. --- src/dispextern.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/dispextern.h') 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 */ -- cgit v1.2.3