]> git.eshelyaron.com Git - emacs.git/commitdiff
Retrospective commit from 2009-08-15.
authorEli Zaretskii <eliz@gnu.org>
Thu, 31 Dec 2009 20:04:11 +0000 (15:04 -0500)
committerEli Zaretskii <eliz@gnu.org>
Thu, 31 Dec 2009 20:04:11 +0000 (15:04 -0500)
Start of work on bidi Emacs 23/24.

 bidi.c (bidi_initialize): Fix initialization of bidi_type_table.

 xdisp.c (set_iterator_to_next): Fix position setting after call
 to bidi_get_next_char_visually.

 bidi.c: Include stdio.h unconditionally.  Fix and elaborate
 commentary.  Add Copyright blurb.

src/ChangeLog.bidi
src/Makefile.in
src/bidi.c
src/buffer.c
src/buffer.h
src/dispextern.h
src/dispnew.c
src/xdisp.c

index 415e6a5c4684cb435cc0a48de9528664c35fb31d..9d2d643ae572cf8d1dd53e95f496d3d9b6956c84 100644 (file)
@@ -1,3 +1,10 @@
+2009-08-15  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_initialize): Fix initialization of bidi_type_table.
+
+       * xdisp.c (set_iterator_to_next): Fix position setting after call
+       to bidi_get_next_char_visually.
+
 2005-12-03  Eli Zaretskii  <eliz@gnu.org>
 
        * bidi.c: Include stdio.h unconditionally.  Fix and elaborate
@@ -11,7 +18,8 @@
 
 2004-03-04  Kenichi Handa  <handa@m17n.org>
 
-       The following changes are to support bidirectional text display.
+       The following changes are to support for bi-directional text
+       display.
 
        * Makefile.in (obj): Include bidi.o.
        (bidi.o): New target.
index f5b7133a7aebfe0b50511b1d890baf3493dcda05..60e7ac1ee0f70babbf8357131b9fa7427e3eeeaf 100644 (file)
@@ -560,8 +560,7 @@ FONT_DRIVERS = xfont.o
 /* lastfile must follow all files
    whose initialized data areas should be dumped as pure by dump-emacs.  */
 obj=    dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
-       bidi.o \
-       charset.o coding.o category.o ccl.o character.o chartab.o \
+       charset.o coding.o category.o ccl.o character.o chartab.o bidi.o \
        cm.o term.o terminal.o xfaces.o $(XOBJ) $(GTK_OBJ) $(DBUS_OBJ) \
        emacs.o keyboard.o macros.o keymap.o sysdep.o \
        buffer.o filelock.o insdel.o marker.o \
@@ -1053,7 +1052,7 @@ doc.o: buildobj.h
 
 atimer.o: atimer.c atimer.h syssignal.h systime.h lisp.h blockinput.h \
  $(config_h)
-bidi.o: bidi.c buffer.h character.h
+bidi.o: bidi.c buffer.h character.h dispextern.h
 buffer.o: buffer.c buffer.h region-cache.h commands.h window.h \
    $(INTERVALS_H) blockinput.h atimer.h systime.h character.h \
    indent.h keyboard.h coding.h keymap.h frame.h lisp.h $(config_h)
index 2a3a97067679817c03337a34c6a2c1218710c52e..46382b2b66c0c7f3286a8deebd07a2c0f6efd354 100644 (file)
@@ -155,6 +155,7 @@ int bidi_ignore_explicit_marks_for_paragraph_level = 1;
 
 bidi_dir_t bidi_overriding_paragraph_direction = NEUTRAL_DIR;
 
+/* FIXME: Unused? */
 #define ASCII_BIDI_TYPE_SET(STR, TYPE)                 \
   do {                                                 \
     unsigned char *p;                                  \
@@ -448,7 +449,8 @@ bidi_initialize ()
   bidi_type_table = Fmake_char_table (Qnil, make_number (STRONG_L));
 
   for (i = 0; i < sizeof bidi_type / sizeof bidi_type[0]; i++)
-    char_table_set_range (bidi_type_table, bidi_type[i].from, bidi_type[i].to,
+    char_table_set_range (bidi_type_table, bidi_type[i].from,
+                         bidi_type[i].to ? bidi_type[i].to : bidi_type[i].from,
                          make_number (bidi_type[i].type));
   bidi_initialized = 1;
 }
index 35e1f4d22ec23eda124d3c443b1d8c1c4b8bc578..2930465834d2db4be1e61c45367cd8b707382253 100644 (file)
@@ -5186,8 +5186,8 @@ init_buffer_once ()
   buffer_defaults.truncate_lines = Qnil;
   buffer_defaults.word_wrap = Qnil;
   buffer_defaults.ctl_arrow = Qt;
-  buffer_defaults.enable_bidi_display = Qnil;
-  buffer_defaults.orientation_reversed = Qnil;
+  buffer_defaults.bidi_display_reordering = Qnil;
+  buffer_defaults.direction_reversed = Qnil;
   buffer_defaults.cursor_type = Qt;
   buffer_defaults.extra_line_spacing = Qnil;
   buffer_defaults.cursor_in_non_selected_windows = Qt;
@@ -5272,8 +5272,8 @@ init_buffer_once ()
   XSETFASTINT (buffer_local_flags.syntax_table, idx); ++idx;
   XSETFASTINT (buffer_local_flags.cache_long_line_scans, idx); ++idx;
   XSETFASTINT (buffer_local_flags.category_table, idx); ++idx;
-  XSETFASTINT (buffer_local_flags.enable_bidi_display, idx); ++idx;
-  XSETFASTINT (buffer_local_flags.orientation_reversed, idx); ++idx;
+  XSETFASTINT (buffer_local_flags.bidi_display_reordering, idx); ++idx;
+  XSETFASTINT (buffer_local_flags.direction_reversed, idx); ++idx;
   XSETFASTINT (buffer_local_flags.buffer_file_coding_system, idx);
   /* Make this one a permanent local.  */
   buffer_permanent_local_flags[idx++] = 1;
@@ -5530,15 +5530,15 @@ This is the same as (default-value 'abbrev-mode).  */);
                     doc: /* Default value of `ctl-arrow' for buffers that do not override it.
 This is the same as (default-value 'ctl-arrow).  */);
 
-    DEFVAR_LISP_NOPRO ("default-enable-bidi-display",
-                     &buffer_defaults.enable_bidi_display,
-                     doc: /* *Default value of `enable-bidi-display' for buffers not overriding it.
-This is the same as (default-value 'enable-bidi-display).  */);
+  DEFVAR_LISP_NOPRO ("default-bidi-display-reordering",
+             &buffer_defaults.bidi_display_reordering,
+             doc: /* *Default value of `bidi-display-reordering' for buffers not overriding it.
+This is the same as (default-value 'bidi-display-reordering).  */);
 
-  DEFVAR_LISP_NOPRO ("default-orientation-reversed",
-                    &buffer_defaults.orientation_reversed,
-                    doc: /* *Default value of `orientation-reversed' for buffers that do not override it.
-This is the same as (default-value 'orientation-reversed).  */);
+  DEFVAR_LISP_NOPRO ("default-direction-reversed",
+                     &buffer_defaults.direction_reversed,
+                     doc: /* Default value of `direction-reversed' for buffers that do not override it.
+This is the same as (default-value 'direction-reversed).  */);
 
   DEFVAR_LISP_NOPRO ("default-enable-multibyte-characters",
                      &buffer_defaults.enable_multibyte_characters,
@@ -5796,15 +5796,15 @@ The variable `coding-system-for-write', if non-nil, overrides this variable.
 
 This variable is never applied to a way of decoding a file while reading it.  */);
 
-  DEFVAR_PER_BUFFER ("orientation-reversed",
-                    &current_buffer->orientation_reversed, Qnil,
-                    doc: /* Non-nil means set beginning of lines at the right end of the window.
-See also the variable `enable-bidi-display'.  */);
+  DEFVAR_PER_BUFFER ("direction-reversed",
+                    &current_buffer->direction_reversed, Qnil,
+                    doc: /* Non-nil means set beginning of lines at the right edge of the window.
+See also the variable `bidi-display-reordering'.  */);
 
-  DEFVAR_PER_BUFFER ("enable-bidi-display",
-                    &current_buffer->enable_bidi_display, Qnil,
-                    doc: /*Non-nil means display bidi text in correct visual order.
-See also the variable `orientation-reversed'.  */);
+  DEFVAR_PER_BUFFER ("bidi-display-reordering",
+                    &current_buffer->bidi_display_reordering, Qnil,
+                    doc: /*Non-nil means reorder bidirectional text for display in the visual order.
+See also the variable `direction-reversed'.  */);
 
  DEFVAR_PER_BUFFER ("truncate-lines", &current_buffer->truncate_lines, Qnil,
                     doc: /* *Non-nil means do not display continuation lines.
index 8197ac6328c21cafb44d80b0dd67dd0ba9c61cda..c870f923e875c3b989ac35e83f0ca330818c84fe 100644 (file)
@@ -658,10 +658,12 @@ struct buffer
   Lisp_Object word_wrap;
   /* Non-nil means display ctl chars with uparrow.  */
   Lisp_Object ctl_arrow;
-  /* Non-nil means display bidi text in correct visual order.  */
-  Lisp_Object enable_bidi_display;
-  /* Non-nil means set beginning of lines at the right end of windows.  */
-  Lisp_Object orientation_reversed;
+  /* Non-nil means reorder bidirectional text for display in the
+     visual order.  */
+  Lisp_Object bidi_display_reordering;
+  /* Non-nil means set beginning of lines at the right edge of
+     windows.  */
+  Lisp_Object direction_reversed;
   /* Non-nil means do selective display;
      see doc string in syms_of_buffer (buffer.c) for details.  */
   Lisp_Object selective_display;
index 0b3310c8f69c01795da34751b08fcabf131c76e2..3cc1c83c7e3f0aa811e252cd45fc49974d079de1 100644 (file)
@@ -2307,10 +2307,11 @@ struct it
   /* Face of the right fringe glyph.  */
   unsigned right_user_fringe_face_id : FACE_ID_BITS;
 
-  /* 1 means we need bidi processing.  */
+  /* Non-zero means we need to reorder bidirectional text for display
+     in the visual order.  */
   int bidi_p;
 
-  /* For iterating over bidi text.  */
+  /* For iterating over bidirectional text.  */
   struct bidi_it bidi_it;
 };
 
index a6984d96a153969ffbadb4e9960831d7f0e95626..d8cab59dbe9edb8387e8e8799754c0c5285473db 100644 (file)
@@ -3776,12 +3776,12 @@ direct_output_forward_char (n)
   if (!display_completed || cursor_in_echo_area)
     return 0;
 
-  /* Give up if we need bidi display.  */
-  if (!NILP (XBUFFER (w->buffer)->enable_bidi_display))
+  /* Give up if we need to reorder bidirectional text.  */
+  if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering))
     return 0;
 
-  /* Give up if the buffer's orientation is reversed.  */
-  if (!NILP (XBUFFER (w->buffer)->orientation_reversed))
+  /* Give up if the buffer's direction is reversed.  */
+  if (!NILP (XBUFFER (w->buffer)->direction_reversed))
     return 0;
 
   /* Can't use direct output if highlighting a region.  */
index 560ca38e2d06cf2373ba3efdf02d7c4cfffc7bb2..bd9300a40a217ae47f8ebc703031521461aab89a 100644 (file)
@@ -2658,8 +2658,8 @@ init_iterator (it, w, charpos, bytepos, row, base_face_id)
   /* Are multibyte characters enabled in current_buffer?  */
   it->multibyte_p = !NILP (current_buffer->enable_multibyte_characters);
 
-  /* Do we need multibyte processing?  */
-  it->bidi_p = !NILP (current_buffer->enable_bidi_display);
+  /* Do we need to reorded bidirectional text?  */
+  it->bidi_p = !NILP (current_buffer->bidi_display_reordering);
 
   /* Non-zero if we should highlight the region.  */
   highlight_region_p
@@ -5520,6 +5520,11 @@ reseat_1 (it, pos, set_stop_p)
 
   if (it->bidi_p)
     {
+      /* FIXME: L2R below is just for easyness of testing, as we
+        currently support only left-to-right paragraphs.  The value
+        should be user-definable and/or come from some ``higher
+        protocol''. In the absence of any other guidance, the default
+        for this initialization should be NEUTRAL_DIR.  */
       bidi_init_it (pos.charpos - 1, L2R, &it->bidi_it);
       bidi_get_next_char_visually (&it->bidi_it);
 
@@ -6100,8 +6105,8 @@ set_iterator_to_next (it, reseat_p)
          else
            {
              bidi_get_next_char_visually (&it->bidi_it);
-             IT_BYTEPOS (*it) = it->bidi_it.charpos;
-             IT_CHARPOS (*it) = it->bidi_it.bytepos;
+             IT_BYTEPOS (*it) = it->bidi_it.bytepos;
+             IT_CHARPOS (*it) = it->bidi_it.charpos;
            }
          xassert (IT_BYTEPOS (*it) == CHAR_TO_BYTE (IT_CHARPOS (*it)));
        }