aboutsummaryrefslogtreecommitdiffstats
path: root/src/ChangeLog
diff options
context:
space:
mode:
authorEli Zaretskii2011-07-14 20:28:42 +0300
committerEli Zaretskii2011-07-14 20:28:42 +0300
commit0bb2392728c10748f3376f8cef6d9ca53e29f464 (patch)
tree9fec522054a4e27aea4acfd098aa7d3f05dd0e2c /src/ChangeLog
parent6a57fb5f2ba5f040a39fcf4d04ca37619aa754bd (diff)
parentc965adc5e0e9f30a3caeac4b5fa2023f89347b2e (diff)
downloademacs-0bb2392728c10748f3376f8cef6d9ca53e29f464.tar.gz
emacs-0bb2392728c10748f3376f8cef6d9ca53e29f464.zip
Support bidi reordering of overlay and display strings.
Fix bugs #7616, #8133, #8867. src/xdisp.c (compute_display_string_pos) (compute_display_string_end): Accept additional argument STRING. (init_iterator, reseat_1): Initialize bidi_it->string.s to NULL. (reseat_to_string): Initialize bidi_it->string.s and bidi_it->string.schars. (Fcurrent_bidi_paragraph_direction): Initialize itb.string.s to NULL (avoids a crash in bidi_paragraph_init). Initialize itb.string.lstring. (init_iterator): Call bidi_init_it only of a valid buffer position was specified. Initialize paragraph_embedding to L2R. (reseat_to_string): Initialize the bidi iterator. (display_string): If we need to ignore text properties of LISP_STRING, set IT->stop_charpos to IT->end_charpos. (The original value of -1 will not work with bidi.) (compute_display_string_pos): First arg is now struct `text_pos *'; all callers changed. Support display properties on Lisp strings. (compute_display_string_end): Support display properties on Lisp strings. (init_iterator, reseat_1, reseat_to_string): Initialize the string.bufpos member to 0 (zero, for compatibility with IT_CHARPOS when iterating on a string not from display properties). (compute_display_string_pos, compute_display_string_end): Fix calculation of the object to scan. Fixes an error when using arrow keys. (next_element_from_buffer): Don't abort when IT_CHARPOS is before base_level_stop; instead, set base_level_stop to BEGV. Fixes crashes in vertical-motion. (next_element_from_buffer): Improve commentary for when the iterator is before prev_stop. (init_iterator): Initialize bidi_p from the default value of bidi-display-reordering, not from buffer-local value. Use the buffer-local value only if initializing for buffer iteration. (handle_invisible_prop): Support invisible properties on strings that are being bidi-reordered. (set_iterator_to_next): Support bidi reordering of C strings and Lisp strings. (next_element_from_string): Support bidi reordering of Lisp strings. (handle_stop_backwards): Support Lisp strings as well. (display_string): Support display of R2L glyph rows. Use IT_STRING_CHARPOS when displaying from a Lisp string. (init_iterator): Don't initialize it->bidi_p for strings here. (reseat_to_string): Initialize it->bidi_p for strings here. (next_element_from_string, next_element_from_c_string) (next_element_from_buffer): Add xassert's for correspondence between IT's object being iterated and it->bidi_it.string structure. (face_before_or_after_it_pos): Support bidi iteration. (next_element_from_c_string): Handle the case of the first string character that is not the first one in the visual order. (get_visually_first_element): New function, refactored from common parts of next_element_from_buffer, next_element_from_string, and next_element_from_c_string. (tool_bar_lines_needed, redisplay_tool_bar) (display_menu_bar): Force left-to-right direction. Add a FIXME comment for making that be controlled by a user option. (push_it, pop_it): Save and restore the state of the bidi iterator. Save and restore the bidi_p flag. (pop_it): Iterate out of display property for string iteration as well. (iterate_out_of_display_property): Support iteration over strings. (handle_single_display_spec): Set up it->bidi_it for iteration over a display string, and call bidi_init_it. (handle_single_display_spec, next_overlay_string) (get_overlay_strings_1, push_display_prop): Set up the bidi iterator for displaying display or overlay strings. (forward_to_next_line_start): Don't use the shortcut if bidi-iterating. (back_to_previous_visible_line_start): If handle_display_prop pushed the iterator stack, restore the internal state of the bidi iterator by calling bidi_pop_it same number of times. (reseat_at_next_visible_line_start): If ON_NEWLINE_P is non-zero, and we are bidi-iterating, don't decrement the iterator position; instead, set the first_elt flag in the bidi iterator, to produce the same effect. (reseat_1): Remove redundant setting of string_from_display_prop_p. (push_display_prop): xassert that we are iterating a buffer. (push_it, pop_it): Save and restore paragraph_embedding member. (handle_single_display_spec, next_overlay_string) (get_overlay_strings_1, reseat_1, reseat_to_string) (push_display_prop): Set up the `unibyte' member of bidi_it.string correctly. Don't assume unibyte strings are not bidi-reordered. (compute_display_string_pos) (compute_display_string_end): Fix handling the case of C string. (push_it, pop_it): Save and restore from_disp_prop_p. (handle_single_display_spec, push_display_prop): Set the from_disp_prop_p flag. (get_overlay_strings_1): Reset the from_disp_prop_p flag. (pop_it): Call iterate_out_of_display_property only if we are popping after iteration over a string that came from a display property. Fix a typo in popping stretch info. Add an assertion for verifying that the iterator position is in sync with the bidi iterator. (handle_single_display_spec, get_overlay_strings_1) (push_display_prop): Fix initialization of paragraph direction for string when that of the parent object is not yet determined. (reseat_1): Call bidi_init_it to resync the bidi iterator with IT's position. (Bug#7616) (find_row_edges): If ROW->start.pos gives position smaller than min_pos, use it as ROW->minpos. (Bug#7616) (handle_stop, back_to_previous_visible_line_start, reseat_1): Reset the from_disp_prop_p flag. (SAVE_IT, RESTORE_IT): New macros. (pos_visible_p, face_before_or_after_it_pos) (back_to_previous_visible_line_start) (move_it_in_display_line_to, move_it_in_display_line) (move_it_to, move_it_vertically_backward, move_it_by_lines) (try_scrolling, redisplay_window, display_line): Use them when saving a temporary copy of the iterator and restoring it back. (back_to_previous_visible_line_start, reseat_1) (init_iterator): Empty the bidi cache "stack". (move_it_in_display_line_to): If iterator ended up at EOL, but we never saw any buffer positions smaller than to_charpos, return MOVE_POS_MATCH_OR_ZV. Fixes vertical cursor motion in bidi-reordered lines. (move_it_in_display_line_to): Record prev_method and prev_pos immediately before the call to set_iterator_to_next. Fixes cursor motion in bidi-reordered lines with stretch glyphs and strings displayed in margins. (Bug#8133) (Bug#8867) Return MOVE_POS_MATCH_OR_ZV only if iterator position is past TO_CHARPOS. (pos_visible_p): Support positions in bidi-reordered lines. Save and restore bidi cache. src/bidi.c (bidi_level_of_next_char): clen should be EMACS_NT, not int. (bidi_paragraph_info): Delete unused struct. (bidi_cache_idx, bidi_cache_last_idx): Declare EMACS_INT. (bidi_cache_start): New variable. (bidi_cache_reset): Reset bidi_cache_idx to bidi_cache_start, not to zero. (bidi_cache_fetch_state, bidi_cache_search) (bidi_cache_find_level_change, bidi_cache_iterator_state) (bidi_cache_find, bidi_peek_at_next_level) (bidi_level_of_next_char, bidi_find_other_level_edge) (bidi_move_to_visually_next): Compare cache index with bidi_cache_start rather than with zero. (bidi_fetch_char): Accept new argument STRING; all callers changed. Support iteration over a string. Support strings with display properties. Support unibyte strings. Fix the type of `len' according to what STRING_CHAR_AND_LENGTH expects. (bidi_paragraph_init, bidi_resolve_explicit_1) (bidi_resolve_explicit, bidi_resolve_weak) (bidi_level_of_next_char, bidi_move_to_visually_next): Support iteration over a string. (bidi_set_sor_type, bidi_resolve_explicit_1) (bidi_resolve_explicit, bidi_type_of_next_char): ignore_bn_limit can now be zero (for strings); special values 0 and -1 were changed to -1 and -2, respectively. (bidi_char_at_pos): New function. (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak): Call it instead of FETCH_MULTIBYTE_CHAR. (bidi_move_to_visually_next): Abort if charpos or bytepos were not initialized to valid values. (bidi_init_it): Don't initialize charpos and bytepos with invalid values. (bidi_level_of_next_char): Allow the sentinel "position" to pass the test for valid cached positions. Fix the logic for looking up the sentinel state in the cache. GCPRO the Lisp string we are iterating. (bidi_push_it, bidi_pop_it): New functions. (bidi_initialize): Initialize the bidi cache start stack pointer. (bidi_cache_ensure_space): New function, refactored from part of bidi_cache_iterator_state. Don't assume the required size is just one BIDI_CACHE_CHUNK away. (bidi_cache_start_stack, bidi_push_it): Use IT_STACK_SIZE. (bidi_count_bytes, bidi_char_at_pos): New functions. (bidi_cache_search): Don't assume bidi_cache_last_idx is always valid if bidi_cache_idx is valid. (bidi_cache_find_level_change): xassert that bidi_cache_last_idx is valid if it's going to be used. (bidi_shelve_cache, bidi_unshelve_cache): New functions. (bidi_cache_fetch_state, bidi_cache_search) (bidi_cache_find_level_change, bidi_cache_ensure_space) (bidi_cache_iterator_state, bidi_cache_find) (bidi_find_other_level_edge, bidi_cache_start_stack): All variables related to cache indices are now EMACS_INT. src/dispextern.h (struct bidi_string_data): New structure. (struct bidi_it): New member `string'. Make flag members be 1-bit fields, and put them last in the struct. (compute_display_string_pos, compute_display_string_end): Update prototypes. (bidi_push_it, bidi_pop_it): Add prototypes. (struct iterator_stack_entry): New members bidi_p, paragraph_embedding, and from_disp_prop_p. (struct it): Member bidi_p is now a bit field 1 bit wide. (bidi_shelve_cache, bidi_unshelve_cache): Declare prototypes. src/.gdbinit (xvectype, xvector, xcompiled, xchartable, xboolvector) (xpr, xfont, xbacktrace): Use "header.size" when accessing vectors and vector-like objects. src/dispnew.c (buffer_posn_from_coords): Save and restore the bidi cache around display iteration. src/window.c (Fwindow_end, window_scroll_pixel_based) (displayed_window_lines, Frecenter): Save and restore the bidi cache around display iteration. lisp/buff-menu.el (Buffer-menu-buffer+size): Accept an additional argument LRM; if non-nil, append an invisible LRM character to the buffer name. (list-buffers-noselect): Call Buffer-menu-buffer+size with the last argument non-nil, when formatting buffer names. (Buffer-menu-mode, list-buffers-noselect): Force left-to-right paragraph direction. doc/lispref/display.texi (Other Display Specs): Document that `left-fringe' and `right-fringe' display specifications are of the "replacing" kind.
Diffstat (limited to 'src/ChangeLog')
-rw-r--r--src/ChangeLog206
1 files changed, 206 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 35c56e5f478..c2bd1981e76 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,209 @@
12011-07-14 Eli Zaretskii <eliz@gnu.org>
2
3 Support bidi reordering of display and overlay strings.
4 * xdisp.c (compute_display_string_pos)
5 (compute_display_string_end): Accept additional argument STRING.
6 (init_iterator, reseat_1): Initialize bidi_it->string.s to NULL.
7 (reseat_to_string): Initialize bidi_it->string.s and
8 bidi_it->string.schars.
9 (Fcurrent_bidi_paragraph_direction): Initialize itb.string.s to
10 NULL (avoids a crash in bidi_paragraph_init). Initialize
11 itb.string.lstring.
12 (init_iterator): Call bidi_init_it only of a valid
13 buffer position was specified. Initialize paragraph_embedding to
14 L2R.
15 (reseat_to_string): Initialize the bidi iterator.
16 (display_string): If we need to ignore text properties of
17 LISP_STRING, set IT->stop_charpos to IT->end_charpos. (The
18 original value of -1 will not work with bidi.)
19 (compute_display_string_pos): First arg is now struct
20 `text_pos *'; all callers changed. Support display properties on
21 Lisp strings.
22 (compute_display_string_end): Support display properties on Lisp
23 strings.
24 (init_iterator, reseat_1, reseat_to_string): Initialize the
25 string.bufpos member to 0 (zero, for compatibility with IT_CHARPOS
26 when iterating on a string not from display properties).
27 (compute_display_string_pos, compute_display_string_end): Fix
28 calculation of the object to scan. Fixes an error when using
29 arrow keys.
30 (next_element_from_buffer): Don't abort when IT_CHARPOS is before
31 base_level_stop; instead, set base_level_stop to BEGV. Fixes
32 crashes in vertical-motion.
33 (next_element_from_buffer): Improve commentary for when
34 the iterator is before prev_stop.
35 (init_iterator): Initialize bidi_p from the default value of
36 bidi-display-reordering, not from buffer-local value. Use the
37 buffer-local value only if initializing for buffer iteration.
38 (handle_invisible_prop): Support invisible properties on strings
39 that are being bidi-reordered.
40 (set_iterator_to_next): Support bidi reordering of C strings and
41 Lisp strings.
42 (next_element_from_string): Support bidi reordering of Lisp
43 strings.
44 (handle_stop_backwards): Support Lisp strings as well.
45 (display_string): Support display of R2L glyph rows. Use
46 IT_STRING_CHARPOS when displaying from a Lisp string.
47 (init_iterator): Don't initialize it->bidi_p for strings
48 here.
49 (reseat_to_string): Initialize it->bidi_p for strings here.
50 (next_element_from_string, next_element_from_c_string)
51 (next_element_from_buffer): Add xassert's for correspondence
52 between IT's object being iterated and it->bidi_it.string
53 structure.
54 (face_before_or_after_it_pos): Support bidi iteration.
55 (next_element_from_c_string): Handle the case of the first string
56 character that is not the first one in the visual order.
57 (get_visually_first_element): New function, refactored from common
58 parts of next_element_from_buffer, next_element_from_string, and
59 next_element_from_c_string.
60 (tool_bar_lines_needed, redisplay_tool_bar)
61 (display_menu_bar): Force left-to-right direction. Add a FIXME
62 comment for making that be controlled by a user option.
63 (push_it, pop_it): Save and restore the state of the
64 bidi iterator. Save and restore the bidi_p flag.
65 (pop_it): Iterate out of display property for string iteration as
66 well.
67 (iterate_out_of_display_property): Support iteration over strings.
68 (handle_single_display_spec): Set up it->bidi_it for iteration
69 over a display string, and call bidi_init_it.
70 (handle_single_display_spec, next_overlay_string)
71 (get_overlay_strings_1, push_display_prop): Set up the bidi
72 iterator for displaying display or overlay strings.
73 (forward_to_next_line_start): Don't use the shortcut if
74 bidi-iterating.
75 (back_to_previous_visible_line_start): If handle_display_prop
76 pushed the iterator stack, restore the internal state of the bidi
77 iterator by calling bidi_pop_it same number of times.
78 (reseat_at_next_visible_line_start): If ON_NEWLINE_P is non-zero,
79 and we are bidi-iterating, don't decrement the iterator position;
80 instead, set the first_elt flag in the bidi iterator, to produce
81 the same effect.
82 (reseat_1): Remove redundant setting of string_from_display_prop_p.
83 (push_display_prop): xassert that we are iterating a buffer.
84 (push_it, pop_it): Save and restore paragraph_embedding member.
85 (handle_single_display_spec, next_overlay_string)
86 (get_overlay_strings_1, reseat_1, reseat_to_string)
87 (push_display_prop): Set up the `unibyte' member of bidi_it.string
88 correctly. Don't assume unibyte strings are not bidi-reordered.
89 (compute_display_string_pos)
90 (compute_display_string_end): Fix handling the case of C string.
91 (push_it, pop_it): Save and restore from_disp_prop_p.
92 (handle_single_display_spec, push_display_prop): Set the
93 from_disp_prop_p flag.
94 (get_overlay_strings_1): Reset the from_disp_prop_p flag.
95 (pop_it): Call iterate_out_of_display_property only if we are
96 popping after iteration over a string that came from a display
97 property. Fix a typo in popping stretch info. Add an assertion
98 for verifying that the iterator position is in sync with the bidi
99 iterator.
100 (handle_single_display_spec, get_overlay_strings_1)
101 (push_display_prop): Fix initialization of paragraph direction for
102 string when that of the parent object is not yet determined.
103 (reseat_1): Call bidi_init_it to resync the bidi
104 iterator with IT's position. (Bug#7616)
105 (find_row_edges): If ROW->start.pos gives position
106 smaller than min_pos, use it as ROW->minpos. (Bug#7616)
107 (handle_stop, back_to_previous_visible_line_start, reseat_1):
108 Reset the from_disp_prop_p flag.
109 (SAVE_IT, RESTORE_IT): New macros.
110 (pos_visible_p, face_before_or_after_it_pos)
111 (back_to_previous_visible_line_start)
112 (move_it_in_display_line_to, move_it_in_display_line)
113 (move_it_to, move_it_vertically_backward, move_it_by_lines)
114 (try_scrolling, redisplay_window, display_line): Use them when
115 saving a temporary copy of the iterator and restoring it back.
116 (back_to_previous_visible_line_start, reseat_1)
117 (init_iterator): Empty the bidi cache "stack".
118 (move_it_in_display_line_to): If iterator ended up at
119 EOL, but we never saw any buffer positions smaller than
120 to_charpos, return MOVE_POS_MATCH_OR_ZV. Fixes vertical cursor
121 motion in bidi-reordered lines.
122 (move_it_in_display_line_to): Record prev_method and prev_pos
123 immediately before the call to set_iterator_to_next. Fixes cursor
124 motion in bidi-reordered lines with stretch glyphs and strings
125 displayed in margins. (Bug#8133) (Bug#8867)
126 Return MOVE_POS_MATCH_OR_ZV only if iterator position is past
127 TO_CHARPOS.
128 (pos_visible_p): Support positions in bidi-reordered lines. Save
129 and restore bidi cache.
130
131 * bidi.c (bidi_level_of_next_char): clen should be EMACS_NT, not int.
132 (bidi_paragraph_info): Delete unused struct.
133 (bidi_cache_idx, bidi_cache_last_idx): Declare EMACS_INT.
134 (bidi_cache_start): New variable.
135 (bidi_cache_reset): Reset bidi_cache_idx to bidi_cache_start, not
136 to zero.
137 (bidi_cache_fetch_state, bidi_cache_search)
138 (bidi_cache_find_level_change, bidi_cache_iterator_state)
139 (bidi_cache_find, bidi_peek_at_next_level)
140 (bidi_level_of_next_char, bidi_find_other_level_edge)
141 (bidi_move_to_visually_next): Compare cache index with
142 bidi_cache_start rather than with zero.
143 (bidi_fetch_char): Accept new argument STRING; all callers
144 changed. Support iteration over a string. Support strings with
145 display properties. Support unibyte strings. Fix the type of
146 `len' according to what STRING_CHAR_AND_LENGTH expects.
147 (bidi_paragraph_init, bidi_resolve_explicit_1)
148 (bidi_resolve_explicit, bidi_resolve_weak)
149 (bidi_level_of_next_char, bidi_move_to_visually_next): Support
150 iteration over a string.
151 (bidi_set_sor_type, bidi_resolve_explicit_1)
152 (bidi_resolve_explicit, bidi_type_of_next_char): ignore_bn_limit
153 can now be zero (for strings); special values 0 and -1 were
154 changed to -1 and -2, respectively.
155 (bidi_char_at_pos): New function.
156 (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak):
157 Call it instead of FETCH_MULTIBYTE_CHAR.
158 (bidi_move_to_visually_next): Abort if charpos or bytepos were not
159 initialized to valid values.
160 (bidi_init_it): Don't initialize charpos and bytepos with invalid
161 values.
162 (bidi_level_of_next_char): Allow the sentinel "position" to pass
163 the test for valid cached positions. Fix the logic for looking up
164 the sentinel state in the cache. GCPRO the Lisp string we are
165 iterating.
166 (bidi_push_it, bidi_pop_it): New functions.
167 (bidi_initialize): Initialize the bidi cache start stack pointer.
168 (bidi_cache_ensure_space): New function, refactored from part of
169 bidi_cache_iterator_state. Don't assume the required size is just
170 one BIDI_CACHE_CHUNK away.
171 (bidi_cache_start_stack, bidi_push_it): Use IT_STACK_SIZE.
172 (bidi_count_bytes, bidi_char_at_pos): New functions.
173 (bidi_cache_search): Don't assume bidi_cache_last_idx is
174 always valid if bidi_cache_idx is valid.
175 (bidi_cache_find_level_change): xassert that bidi_cache_last_idx
176 is valid if it's going to be used.
177 (bidi_shelve_cache, bidi_unshelve_cache): New functions.
178 (bidi_cache_fetch_state, bidi_cache_search)
179 (bidi_cache_find_level_change, bidi_cache_ensure_space)
180 (bidi_cache_iterator_state, bidi_cache_find)
181 (bidi_find_other_level_edge, bidi_cache_start_stack): All
182 variables related to cache indices are now EMACS_INT.
183
184 * dispextern.h (struct bidi_string_data): New structure.
185 (struct bidi_it): New member `string'. Make flag members be 1-bit
186 fields, and put them last in the struct.
187 (compute_display_string_pos, compute_display_string_end): Update
188 prototypes.
189 (bidi_push_it, bidi_pop_it): Add prototypes.
190 (struct iterator_stack_entry): New members bidi_p,
191 paragraph_embedding, and from_disp_prop_p.
192 (struct it): Member bidi_p is now a bit field 1 bit wide.
193 (bidi_shelve_cache, bidi_unshelve_cache): Declare
194 prototypes.
195
196 * .gdbinit (xvectype, xvector, xcompiled, xchartable, xboolvector)
197 (xpr, xfont, xbacktrace): Use "header.size" when accessing vectors
198 and vector-like objects.
199
200 * dispnew.c (buffer_posn_from_coords): Save and restore the bidi
201 cache around display iteration.
202
203 * window.c (Fwindow_end, window_scroll_pixel_based)
204 (displayed_window_lines, Frecenter): Save and restore the bidi
205 cache around display iteration.
206
12011-07-14 Lars Magne Ingebrigtsen <larsi@gnus.org> 2072011-07-14 Lars Magne Ingebrigtsen <larsi@gnus.org>
2 208
3 * editfns.c (Fdelete_region): Clarify the use of the named 209 * editfns.c (Fdelete_region): Clarify the use of the named