diff options
| author | Eli Zaretskii | 2011-10-18 18:56:09 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2011-10-18 18:56:09 +0200 |
| commit | 4787455fb7e0a33fe5420b4414a3b6e87685e45d (patch) | |
| tree | 8e096ba87813b86f17f498a663e0f0865774b762 /src/ChangeLog | |
| parent | 0a768890bacef10b9eb806982244044c12392dd9 (diff) | |
| download | emacs-4787455fb7e0a33fe5420b4414a3b6e87685e45d.tar.gz emacs-4787455fb7e0a33fe5420b4414a3b6e87685e45d.zip | |
Fix bug #9771 with slow redisplay in long lines full of control characters.
src/bidi.c (bidi_line_init): Initialize next_en_pos to zero, not -1.
(bidi_resolve_neutral): Don't enter the expensive loop looking for
non-neutral characters if the current character is a paragraph
separator (a.k.a. Newline). This avoids running the same
expensive loop twice, once when we consume the preceding newline
and the other time when the line actually needs to be displayed.
Avoid the loop when we see neutrals on the base embedding level
following a character whose directionality is the same as the
paragraph's. This avoids running the expensive loop when a line
ends in a long sequence of neutrals, like control characters.
Add assertion against STRONG_AL type. Slightly rearrange code
that determines the type of a neutral given the first non-neutral
that follows it.
(bidi_level_of_next_char): Set next_en_pos to zero when
invalidating its info.
Diffstat (limited to 'src/ChangeLog')
| -rw-r--r-- | src/ChangeLog | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 07b0418b399..d21e6383764 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,22 @@ | |||
| 1 | 2011-10-18 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | Fix part 3 of bug#9771. | ||
| 4 | * bidi.c (bidi_line_init): Initialize next_en_pos to zero, not -1. | ||
| 5 | (bidi_resolve_neutral): Don't enter the expensive loop looking for | ||
| 6 | non-neutral characters if the current character is a paragraph | ||
| 7 | separator (a.k.a. Newline). This avoids running the same | ||
| 8 | expensive loop twice, once when we consume the preceding newline | ||
| 9 | and the other time when the line actually needs to be displayed. | ||
| 10 | Avoid the loop when we see neutrals on the base embedding level | ||
| 11 | following a character whose directionality is the same as the | ||
| 12 | paragraph's. This avoids running the expensive loop when a line | ||
| 13 | ends in a long sequence of neutrals, like control characters. | ||
| 14 | Add assertion against STRONG_AL type. Slightly rearrange code | ||
| 15 | that determines the type of a neutral given the first non-neutral | ||
| 16 | that follows it. | ||
| 17 | (bidi_level_of_next_char): Set next_en_pos to zero when | ||
| 18 | invalidating its info. | ||
| 19 | |||
| 1 | 2011-10-17 Eli Zaretskii <eliz@gnu.org> | 20 | 2011-10-17 Eli Zaretskii <eliz@gnu.org> |
| 2 | 21 | ||
| 3 | * xdisp.c (push_display_prop): Determine whether to record string | 22 | * xdisp.c (push_display_prop): Determine whether to record string |