aboutsummaryrefslogtreecommitdiffstats
path: root/src/ChangeLog
diff options
context:
space:
mode:
authorEli Zaretskii2011-06-04 10:41:44 +0300
committerEli Zaretskii2011-06-04 10:41:44 +0300
commitfec2107c58835163dc3b08c0a833a5072aa1fca9 (patch)
treefa112f71d61bd4166aa56fb80da80357455906ab /src/ChangeLog
parentea9fafe0937ebd99780610a7c1451ca08b013702 (diff)
parent57f97249c8e8673df19219e1f5cba478ea23024d (diff)
downloademacs-fec2107c58835163dc3b08c0a833a5072aa1fca9.tar.gz
emacs-fec2107c58835163dc3b08c0a833a5072aa1fca9.zip
Support bidi reordering of text covered by display properties.
src/bidi.c (bidi_copy_it): Use offsetof instead of emulating it. (bidi_fetch_char, bidi_fetch_char_advance): New functions. (bidi_cache_search, bidi_cache_iterator_state) (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak) (bidi_level_of_next_char, bidi_move_to_visually_next): Support character positions inside a run of characters covered by a display string. (bidi_paragraph_init, bidi_resolve_explicit_1) (bidi_level_of_next_char): Call bidi_fetch_char and bidi_fetch_char_advance instead of FETCH_CHAR and FETCH_CHAR_ADVANCE. (bidi_init_it): Initialize new members. (LRE_CHAR, RLE_CHAR, PDF_CHAR, LRO_CHAR, RLO_CHAR): Remove macro definitions. (bidi_explicit_dir_char): Lookup character type in bidi_type_table, instead of using explicit *_CHAR codes. (bidi_resolve_explicit, bidi_resolve_weak): Use FETCH_MULTIBYTE_CHAR instead of FETCH_CHAR, as reordering of bidirectional text is supported only in multibyte buffers. (bidi_init_it): Accept additional argument FRAME_WINDOW_P and use it to initialize the frame_window_p member of struct bidi_it. (bidi_cache_iterator_state, bidi_resolve_explicit_1) (bidi_resolve_explicit, bidi_resolve_weak) (bidi_level_of_next_char, bidi_move_to_visually_next): Abort if bidi_it->nchars is non-positive. (bidi_level_of_next_char): Don't try to lookup the cache for the next/previous character if nothing is cached there yet, or if we were just reseat()'ed to a new position. src/xdisp.c (set_cursor_from_row): Set start and stop points according to the row's direction when priming the loop that looks for the glyph on which to display cursor. (single_display_spec_intangible_p): Function deleted. (display_prop_intangible_p): Reimplement to call handle_display_spec instead of single_display_spec_intangible_p. Accept 3 additional arguments needed by handle_display_spec. This fixes incorrect cursor motion across display property with complex values: lists, `(when COND...)' forms, etc. (single_display_spec_string_p): Support property values that are lists with the argument STRING its top-level element. (display_prop_string_p): Fix the condition for processing a property that is a list to be consistent with handle_display_spec. (handle_display_spec): New function, refactored from the last portion of handle_display_prop. (compute_display_string_pos): Accept additional argument FRAME_WINDOW_P. Call handle_display_spec to determine whether the value of a `display' property is a "replacing spec". (handle_single_display_spec): Accept 2 additional arguments BUFPOS and FRAME_WINDOW_P. If IT is NULL, don't set up the iterator from the display property, but just return a value indicating whether the display property will replace the characters it covers. (Fcurrent_bidi_paragraph_direction): Initialize the nchars and frame_window_p members of struct bidi_it. (compute_display_string_pos, compute_display_string_end): New functions. (push_it): Accept second argument POSITION, where pop_it should jump to continue iteration. (reseat_1): Initialize bidi_it.disp_pos. src/keyboard.c (adjust_point_for_property): Adjust the call to display_prop_intangible_p to its new signature. src/dispextern.h (struct bidi_it): New member frame_window_p. (bidi_init_it): Update prototypes. (display_prop_intangible_p): Update prototype. (compute_display_string_pos, compute_display_string_end): Declare prototypes. (struct bidi_it): New members nchars and disp_pos. ch_len is now EMACS_INT.
Diffstat (limited to 'src/ChangeLog')
-rw-r--r--src/ChangeLog74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 45d8e38738a..4c33bcc4e67 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,77 @@
12011-06-03 Eli Zaretskii <eliz@gnu.org>
2
3 Support bidi reordering of text covered by display properties.
4
5 * bidi.c (bidi_copy_it): Use offsetof instead of emulating it.
6 (bidi_fetch_char, bidi_fetch_char_advance): New functions.
7 (bidi_cache_search, bidi_cache_iterator_state)
8 (bidi_paragraph_init, bidi_resolve_explicit, bidi_resolve_weak)
9 (bidi_level_of_next_char, bidi_move_to_visually_next): Support
10 character positions inside a run of characters covered by a
11 display string.
12 (bidi_paragraph_init, bidi_resolve_explicit_1)
13 (bidi_level_of_next_char): Call bidi_fetch_char and
14 bidi_fetch_char_advance instead of FETCH_CHAR and
15 FETCH_CHAR_ADVANCE.
16 (bidi_init_it): Initialize new members.
17 (LRE_CHAR, RLE_CHAR, PDF_CHAR, LRO_CHAR, RLO_CHAR): Remove macro
18 definitions.
19 (bidi_explicit_dir_char): Lookup character type in bidi_type_table,
20 instead of using explicit *_CHAR codes.
21 (bidi_resolve_explicit, bidi_resolve_weak): Use
22 FETCH_MULTIBYTE_CHAR instead of FETCH_CHAR, as reordering of
23 bidirectional text is supported only in multibyte buffers.
24 (bidi_init_it): Accept additional argument FRAME_WINDOW_P and use
25 it to initialize the frame_window_p member of struct bidi_it.
26 (bidi_cache_iterator_state, bidi_resolve_explicit_1)
27 (bidi_resolve_explicit, bidi_resolve_weak)
28 (bidi_level_of_next_char, bidi_move_to_visually_next): Abort if
29 bidi_it->nchars is non-positive.
30 (bidi_level_of_next_char): Don't try to lookup the cache for the
31 next/previous character if nothing is cached there yet, or if we
32 were just reseat()'ed to a new position.
33
34 * xdisp.c (set_cursor_from_row): Set start and stop points
35 according to the row's direction when priming the loop that looks
36 for the glyph on which to display cursor.
37 (single_display_spec_intangible_p): Function deleted.
38 (display_prop_intangible_p): Reimplement to call
39 handle_display_spec instead of single_display_spec_intangible_p.
40 Accept 3 additional arguments needed by handle_display_spec. This
41 fixes incorrect cursor motion across display property with complex
42 values: lists, `(when COND...)' forms, etc.
43 (single_display_spec_string_p): Support property values that are
44 lists with the argument STRING its top-level element.
45 (display_prop_string_p): Fix the condition for processing a
46 property that is a list to be consistent with handle_display_spec.
47 (handle_display_spec): New function, refactored from the
48 last portion of handle_display_prop.
49 (compute_display_string_pos): Accept additional argument
50 FRAME_WINDOW_P. Call handle_display_spec to determine whether the
51 value of a `display' property is a "replacing spec".
52 (handle_single_display_spec): Accept 2 additional arguments BUFPOS
53 and FRAME_WINDOW_P. If IT is NULL, don't set up the iterator from
54 the display property, but just return a value indicating whether
55 the display property will replace the characters it covers.
56 (Fcurrent_bidi_paragraph_direction): Initialize the nchars and
57 frame_window_p members of struct bidi_it.
58 (compute_display_string_pos, compute_display_string_end): New
59 functions.
60 (push_it): Accept second argument POSITION, where pop_it should
61 jump to continue iteration.
62 (reseat_1): Initialize bidi_it.disp_pos.
63
64 * keyboard.c (adjust_point_for_property): Adjust the call to
65 display_prop_intangible_p to its new signature.
66
67 * dispextern.h (struct bidi_it): New member frame_window_p.
68 (bidi_init_it): Update prototypes.
69 (display_prop_intangible_p): Update prototype.
70 (compute_display_string_pos, compute_display_string_end): Declare
71 prototypes.
72 (struct bidi_it): New members nchars and disp_pos. ch_len is now
73 EMACS_INT.
74
12011-06-02 Paul Eggert <eggert@cs.ucla.edu> 752011-06-02 Paul Eggert <eggert@cs.ucla.edu>
2 76
3 Malloc failure behavior now depends on size of allocation. 77 Malloc failure behavior now depends on size of allocation.