Mercurial > emacs
comparison src/ChangeLog @ 107648:babfb0a156a1
Initial support for bidirectional editing.
Makefile.in (obj): Include bidi.o.
(bidi.o): New target.
makefile.w32-in (OBJ1): Add $(BLD)/bidi.$(O).
($(BLD)/bidi.$(O)): New target.
bidi.c: New file.
buffer.h (struct buffer): New members bidi_display_reordering
and bidi_paragraph_direction.
buffer.c (init_buffer_once): Initialize bidi_display_reordering
and bidi_paragraph_direction.
(syms_of_buffer): Declare Lisp variables bidi-display-reordering
and bidi-paragraph-direction.
(Fbuffer_swap_text): Swap the values of
bidi_display_reordering and bidi_paragraph_direction.
dispextern.h (BIDI_MAXLEVEL, BIDI_AT_BASE_LEVEL): New macros.
(bidi_type_t, bidi_dir_t): New types.
(bidi_saved_info, bidi_stack, bidi_it): New structures.
(struct it): New members bidi_p, bidi_it, paragraph_embedding,
prev_stop, base_level_stop, and eol_pos.
(bidi_init_it, bidi_get_next_char_visually): New prototypes.
(IT_STACK_SIZE): Enlarge to 5.
(struct glyph_row): New member reversed_p.
<string_buffer_position>: Update prototype.
(PRODUCE_GLYPHS): Set the reversed_p flag in the iterator's
glyph_row if bidi_it.paragraph_dir == R2L.
(struct glyph): New members resolved_level and bidi_type.
dispnew.c (direct_output_forward_char): Give up if we need bidi
processing or buffer's direction is right-to-left.
(prepare_desired_row): Preserve the reversed_p flag.
(row_equal_p): Compare the reversed_p attributes as well.
xdisp.c (init_iterator): Initialize it->bidi_p. Call
bidi_init_it and set it->paragraph_embedding from the current
buffer's value of bidi_paragraph_direction.
(reseat_1): Initialize bidi_it.first_elt.
(set_iterator_to_next, next_element_from_buffer): Use the value of
paragraph_embedding to determine the paragraph direction.
(set_iterator_to_next): Under bidi reordering, call
bidi_get_next_char_visually. Call bidi_paragraph_init if the
new_paragraph flag is set in the bidi iterator.
(next_element_from_buffer): If bidi_it.first_elt is set,
initialize paragraph direction and find the first character to
display in the visual order. If reseated to a middle of a line,
prime the bidi iterator starting at the line's beginning. Handle
the situation where we overstepped stop_charpos due to
non-linearity of the bidi iteration. Likewise for when we back up
beyond the previous stop_charpos. When moving across stop_charpos,
record it in prev_stop.
(display_line): Set row->end and it->start for the next row to the
next character in logical order. Always extend reversed_p rows to
the end of line, even if they end at ZV. Copy the reversed_p flag
to the next glyph row. Keep calling set_cursor_from_row for
bidi-reordered rows even if we already have a possible candidate
for cursor position. Set row_end after all the row's glyphs have
been produced, by looping over the glyphs. Record the position
after EOL in it->eol_pos, and use it to set end_pos of the last
row produced for a continued line.
<Qright_to_left, Qleft_to_right>: New variables.
(syms_of_xdisp): Initialize and staticpro them.
(string_buffer_position_lim): New function.
(string_buffer_position): Most of code moved to
string_buffer_position_lim. Last argument and return value are
now EMACS_INT; all callers changed.
(set_cursor_from_row): Rewritten to support bidirectional text and
reversed glyph rows.
(text_outside_line_unchanged_p, try_window_id): Disable
optimizations if we are reordering bidirectional text and the
paragraph direction can be affected by the change.
(append_glyph, append_composite_glyph)
(produce_image_glyph, append_stretch_glyph): Set the
resolved_level and bidi_type members of each glyph.
(append_glyph): If the glyph row is reversed, prepend the glyph
rather than appending it.
(handle_stop_backwards): New function.
(reseat_1, pop_it, push_it): Set prev_stop and base_level_stop.
(reseat): call handle_stop_backwards to recompute prev_stop and
base_level_stop for the new position.
(handle_invisible_prop): Under bidi iteration, skip invisible text
using bidi_get_next_char_visually. If we are `reseat'ed, init the
paragraph direction. Update IT->prev_stop after skipping
invisible text.
(move_it_in_display_line_to): New variables prev_method
and prev_pos. Compare for strict equality in
BUFFER_POS_REACHED_P.
(try_cursor_movement): Examine all the candidate rows that occlude
point, to return the best match. If rows are bidi-reordered
and point moved backwards, back up to the row that is not a
continuation line, and start looking for a suitable row from
there.
term.c (append_glyph): Reverse glyphs by pre-pending them,
rather than appending, if the glyph_row's reversed_p flag is set.
Set the resolved_level and bidi_type members of each glyph.
.gdbinit (pbiditype): New command.
(pgx): Use it to display bidi level and type of the glyph.
(pitx): Display some bidi information about the iterator.
(prowlims, pmtxrows): New commands.
files.el: Make bidi-display-reordering safe variable for boolean
values.
mule.texi (International): Mention support of bidirectional editing.
(Bidirectional Editing): New section.
HELLO: Reorder Arabic and Hebrew into logical order, and
insert RLM before the opening paren, to make the display more
reasonable. Add setting for bidi-display-reordering in the local
variables section.
NEWS: Mention initial support for bidirectional editing.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Tue, 30 Mar 2010 05:13:07 -0400 |
parents | dbd787c249c5 |
children | c7340d934f35 |
comparison
equal
deleted
inserted
replaced
107582:97afa1904e05 | 107648:babfb0a156a1 |
---|---|
1 2010-03-30 Eli Zaretskii <eliz@gnu.org> | |
2 | |
3 Initial support for bidirectional editing. | |
4 | |
5 * Makefile.in (obj): Include bidi.o. | |
6 (bidi.o): New target. | |
7 | |
8 * makefile.w32-in (OBJ1): Add $(BLD)/bidi.$(O). | |
9 ($(BLD)/bidi.$(O)): New target. | |
10 | |
11 * bidi.c: New file. | |
12 | |
13 * buffer.h (struct buffer): New members bidi_display_reordering | |
14 and bidi_paragraph_direction. | |
15 | |
16 * buffer.c (init_buffer_once): Initialize bidi_display_reordering | |
17 and bidi_paragraph_direction. | |
18 (syms_of_buffer): Declare Lisp variables bidi-display-reordering | |
19 and bidi-paragraph-direction. | |
20 (Fbuffer_swap_text): Swap the values of | |
21 bidi_display_reordering and bidi_paragraph_direction. | |
22 | |
23 * dispextern.h (BIDI_MAXLEVEL, BIDI_AT_BASE_LEVEL): New macros. | |
24 (bidi_type_t, bidi_dir_t): New types. | |
25 (bidi_saved_info, bidi_stack, bidi_it): New structures. | |
26 (struct it): New members bidi_p, bidi_it, paragraph_embedding, | |
27 prev_stop, base_level_stop, and eol_pos. | |
28 (bidi_init_it, bidi_get_next_char_visually): New prototypes. | |
29 (IT_STACK_SIZE): Enlarge to 5. | |
30 (struct glyph_row): New member reversed_p. | |
31 <string_buffer_position>: Update prototype. | |
32 (PRODUCE_GLYPHS): Set the reversed_p flag in the iterator's | |
33 glyph_row if bidi_it.paragraph_dir == R2L. | |
34 (struct glyph): New members resolved_level and bidi_type. | |
35 | |
36 * dispnew.c (direct_output_forward_char): Give up if we need bidi | |
37 processing or buffer's direction is right-to-left. | |
38 (prepare_desired_row): Preserve the reversed_p flag. | |
39 (row_equal_p): Compare the reversed_p attributes as well. | |
40 | |
41 * xdisp.c (init_iterator): Initialize it->bidi_p. Call | |
42 bidi_init_it and set it->paragraph_embedding from the current | |
43 buffer's value of bidi_paragraph_direction. | |
44 (reseat_1): Initialize bidi_it.first_elt. | |
45 (set_iterator_to_next, next_element_from_buffer): Use the value of | |
46 paragraph_embedding to determine the paragraph direction. | |
47 (set_iterator_to_next): Under bidi reordering, call | |
48 bidi_get_next_char_visually. Call bidi_paragraph_init if the | |
49 new_paragraph flag is set in the bidi iterator. | |
50 (next_element_from_buffer): If bidi_it.first_elt is set, | |
51 initialize paragraph direction and find the first character to | |
52 display in the visual order. If reseated to a middle of a line, | |
53 prime the bidi iterator starting at the line's beginning. Handle | |
54 the situation where we overstepped stop_charpos due to | |
55 non-linearity of the bidi iteration. Likewise for when we back up | |
56 beyond the previous stop_charpos. When moving across stop_charpos, | |
57 record it in prev_stop. | |
58 (display_line): Set row->end and it->start for the next row to the | |
59 next character in logical order. Always extend reversed_p rows to | |
60 the end of line, even if they end at ZV. Copy the reversed_p flag | |
61 to the next glyph row. Keep calling set_cursor_from_row for | |
62 bidi-reordered rows even if we already have a possible candidate | |
63 for cursor position. Set row_end after all the row's glyphs have | |
64 been produced, by looping over the glyphs. Record the position | |
65 after EOL in it->eol_pos, and use it to set end_pos of the last | |
66 row produced for a continued line. | |
67 <Qright_to_left, Qleft_to_right>: New variables. | |
68 (syms_of_xdisp): Initialize and staticpro them. | |
69 (string_buffer_position_lim): New function. | |
70 (string_buffer_position): Most of code moved to | |
71 string_buffer_position_lim. Last argument and return value are | |
72 now EMACS_INT; all callers changed. | |
73 (set_cursor_from_row): Rewritten to support bidirectional text and | |
74 reversed glyph rows. | |
75 (text_outside_line_unchanged_p, try_window_id): Disable | |
76 optimizations if we are reordering bidirectional text and the | |
77 paragraph direction can be affected by the change. | |
78 (append_glyph, append_composite_glyph) | |
79 (produce_image_glyph, append_stretch_glyph): Set the | |
80 resolved_level and bidi_type members of each glyph. | |
81 (append_glyph): If the glyph row is reversed, prepend the glyph | |
82 rather than appending it. | |
83 (handle_stop_backwards): New function. | |
84 (reseat_1, pop_it, push_it): Set prev_stop and base_level_stop. | |
85 (reseat): call handle_stop_backwards to recompute prev_stop and | |
86 base_level_stop for the new position. | |
87 (handle_invisible_prop): Under bidi iteration, skip invisible text | |
88 using bidi_get_next_char_visually. If we are `reseat'ed, init the | |
89 paragraph direction. Update IT->prev_stop after skipping | |
90 invisible text. | |
91 (move_it_in_display_line_to): New variables prev_method | |
92 and prev_pos. Compare for strict equality in | |
93 BUFFER_POS_REACHED_P. | |
94 (try_cursor_movement): Examine all the candidate rows that occlude | |
95 point, to return the best match. If rows are bidi-reordered | |
96 and point moved backwards, back up to the row that is not a | |
97 continuation line, and start looking for a suitable row from | |
98 there. | |
99 | |
100 * term.c (append_glyph): Reverse glyphs by pre-pending them, | |
101 rather than appending, if the glyph_row's reversed_p flag is set. | |
102 Set the resolved_level and bidi_type members of each glyph. | |
103 | |
104 * .gdbinit (pbiditype): New command. | |
105 (pgx): Use it to display bidi level and type of the glyph. | |
106 (pitx): Display some bidi information about the iterator. | |
107 (prowlims, pmtxrows): New commands. | |
108 | |
1 2010-03-30 Dan Nicolaescu <dann@ics.uci.edu> | 109 2010-03-30 Dan Nicolaescu <dann@ics.uci.edu> |
2 | 110 |
3 Remove all uses of C_DEBUG_SWITCH and LIBS_DEBUG. | 111 Remove all uses of C_DEBUG_SWITCH and LIBS_DEBUG. |
4 * s/usg5-4.h (LIBS_DEBUG): | 112 * s/usg5-4.h (LIBS_DEBUG): |
5 * s/irix6-5.h (C_DEBUG_SWITCH): | 113 * s/irix6-5.h (C_DEBUG_SWITCH): |