]> git.eshelyaron.com Git - emacs.git/commitdiff
Initial support for bidirectional editing.
authorEli Zaretskii <eliz@gnu.org>
Tue, 30 Mar 2010 09:13:07 +0000 (05:13 -0400)
committerEli Zaretskii <eliz@gnu.org>
Tue, 30 Mar 2010 09:13:07 +0000 (05:13 -0400)
 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.

1  2 
doc/emacs/ChangeLog
etc/ChangeLog
etc/NEWS
lisp/ChangeLog
src/ChangeLog
src/Makefile.in

index 04f30a689d8ca9f7f50772b5267ae3b443b292a1,f4742c904bcd37dacf012ae6bbaf5ed25d8025e9..e23f129a168bf6bbb06c0bb67390acf99bed0016
@@@ -1,3 -1,3 +1,8 @@@
++2010-03-30  Eli Zaretskii  <eliz@gnu.org>
++
++      * mule.texi (International): Mention support of bidirectional editing.
++      (Bidirectional Editing): New section.
++
  2010-03-28  Nick Roberts  <nickrob@snap.net.nz>
  
        * emacs.texi (Top): Update node names to those in building.texi.
diff --cc etc/ChangeLog
index a00cd71bb96781a2e9eac2c3ce7dcf048b32133f,a00cd71bb96781a2e9eac2c3ce7dcf048b32133f..c4a678c295051797d79706d9e4dcfddce32761c4
@@@ -1,3 -1,3 +1,11 @@@
++2010-03-28  Eli Zaretskii  <eliz@gnu.org>
++
++      * 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.
++
  2010-03-24  Francesc Rocher  <rocher@member.fsf.org>
  
        * MORE.STUFF: Remove CEDET entry, now distributed as part of
diff --cc etc/NEWS
Simple merge
diff --cc lisp/ChangeLog
index ca4c43b65d65453852738c6f9815dad3ddc9da31,84f038667c2ebd424a7d0ac19f8a43bd4e99ec0e..289bc012bdf963f80da75917141e777ed75f6c39
@@@ -1,27 -1,3 +1,32 @@@
++2010-03-30  Eli Zaretskii  <eliz@gnu.org>
++
++      * files.el: Make bidi-display-reordering safe variable for boolean
++      values.
++
 +2010-03-29  Phil Hagelberg  <phil@evri.com>
 +          Chong Yidong  <cyd@stupidchicken.com>
 +
 +      * subr.el: Extend progress reporters to perform "spinning".
 +      (progress-reporter-update, progress-reporter-do-update): Handle
 +      non-numeric value arguments.
 +      (progress-reporter--pulse-characters): New var.
 +
 +2010-03-28  Chong Yidong  <cyd@stupidchicken.com>
 +
 +      * progmodes/compile.el (compilation-start): Fix regexp detection
 +      of initial cd command (Bug#5771).
 +
 +2010-03-28  Stefan Guath  <stefan@automata.se>  (tiny change)
 +
 +      * find-dired.el (find-dired): Use read-directory-name (Bug#5777).
 +
 +2010-03-27  Nick Roberts  <nickrob@snap.net.nz>
 +
 +      Restore GDB/MI fuctionality removed by 2009-12-29T07:15:34Z!nickrob@snap.net.nz.
 +        * lisp/progmodes/gdb-mi.el: Restored.
 +      * lisp/progmodes/gdb-ui.el: Removed.
 +      * lisp/progmodes/gud.el: Re-accommodated for gdb-mi.el.
 +
  2010-03-25  Glenn Morris  <rgm@gnu.org>
  
        * desktop.el (desktop-save-buffer-p): Don't mistakenly include
diff --cc src/ChangeLog
index 8fd89e9fd0c01d05a292d978e457f9b31114d417,7aae2a3754f45d8ec32bd16120a8b93988a7e82f..1e013964db6b0226269197839a9fdee69018e7b5
@@@ -1,18 -1,3 +1,126 @@@
++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
diff --cc src/Makefile.in
Simple merge