++2010-03-30 Eli Zaretskii <eliz@gnu.org>
++
++ 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.
++
+2010-03-30 Dan Nicolaescu <dann@ics.uci.edu>
+
+ Remove all uses of C_DEBUG_SWITCH and LIBS_DEBUG.
+ * s/usg5-4.h (LIBS_DEBUG):
+ * s/irix6-5.h (C_DEBUG_SWITCH):
+ * s/gnu-linux.h (LIBS_DEBUG):
+ * s/darwin.h (LIBS_DEBUG):
+ * s/bsd-common.h (LIBS_DEBUG):
+ * s/aix4-2.h (LIBS_DEBUG, C_DEBUG_SWITCH):
+ * m/iris4d.h (LIBS_DEBUG):
+ * m/hp800.h (LIBS_DEBUG): Remove definitions.
+
+ * Makefile.in (LIBES): Remove reference to LIBS_DEBUG.
+ (LIBS_DEBUG): Remove definition.
+
2010-03-27 Chong Yidong <cyd@stupidchicken.com>
* process.c (Fmake_network_process): Don't apply Bug#5173 fix for