]> git.eshelyaron.com Git - emacs.git/commitdiff
We need the bidi level not the paragraph direction
authorKhaled Hosny <khaledhosny@eglug.org>
Sat, 5 Jan 2019 20:54:48 +0000 (22:54 +0200)
committerKhaled Hosny <khaledhosny@eglug.org>
Sat, 5 Jan 2019 20:54:48 +0000 (22:54 +0200)
src/composite.c
src/composite.h
src/xdisp.c

index 77bb79a0cfe44b8b23a4890a55a21d345e2c8a05..28501e47571ee23d84f59565715d7a95ca363ca8 100644 (file)
@@ -1167,8 +1167,8 @@ composition_compute_stop_pos (struct composition_it *cmp_it, ptrdiff_t charpos,
    characters to be composed.  FACE, if non-NULL, is a base face of
    the character.  If STRING is not nil, it is a string containing the
    character to check, and CHARPOS and BYTEPOS are indices in the
-   string.  In that case, FACE must not be NULL.  PDIR is the base
-   direction of the current paragraph, and is used to calculate the
+   string.  In that case, FACE must not be NULL.  BIDI_LEVEL is the bidi
+   embedding level of the current paragraph, and is used to calculate the
    direction argument to pass to the font shaper.
 
    If the character is composed, setup members of CMP_IT (id, nglyphs,
@@ -1178,7 +1178,7 @@ composition_compute_stop_pos (struct composition_it *cmp_it, ptrdiff_t charpos,
 bool
 composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos,
                       ptrdiff_t bytepos, ptrdiff_t endpos, struct window *w,
-                      bidi_dir_t pdir, struct face *face, Lisp_Object string)
+                      signed char bidi_level, struct face *face, Lisp_Object string)
 {
   if (cmp_it->ch == -2)
     {
@@ -1215,9 +1215,9 @@ composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos,
        continue;
       if (charpos < endpos)
        {
-         if (pdir == L2R)
+         if ((bidi_level & 1) == 0)
            direction = QL2R;
-         else if (pdir == R2L)
+         else
            direction = QR2L;
          for (; CONSP (val); val = XCDR (val))
            {
@@ -1252,10 +1252,10 @@ composition_reseat_it (struct composition_it *cmp_it, ptrdiff_t charpos,
              else
                bpos = CHAR_TO_BYTE (cpos);
            }
-         if (pdir == L2R)
-           direction = QR2L;
-         else if (pdir == R2L)
+         if ((bidi_level & 1) == 0)
            direction = QL2R;
+         else
+           direction = QR2L;
          lgstring = autocmp_chars (elt, cpos, bpos, charpos + 1, w, face,
                                    string, direction);
          if (! composition_gstring_p (lgstring)
index 44f7ab7f616ed1e8752a3d8d2e859fe82a46a7de..8ee18cd9eeab4345d83f0bd29fe8a0bf11c78bc3 100644 (file)
@@ -322,7 +322,7 @@ extern void composition_compute_stop_pos (struct composition_it *,
                                           Lisp_Object);
 extern bool composition_reseat_it (struct composition_it *, ptrdiff_t,
                                   ptrdiff_t, ptrdiff_t, struct window *,
-                                  bidi_dir_t, struct face *, Lisp_Object);
+                                  signed char, struct face *, Lisp_Object);
 extern int composition_update_it (struct composition_it *,
                                   ptrdiff_t, ptrdiff_t, Lisp_Object);
 
index 413d64f80c7fde64646761b16970569dc9ab2192..665ab2e583f8f67ed9ba385532f3267672b23ec1 100644 (file)
@@ -6906,7 +6906,7 @@ static next_element_function const get_next_element[NUM_IT_METHODS] =
    || ((IT)->cmp_it.stop_pos == (CHARPOS)                              \
        && composition_reseat_it (&(IT)->cmp_it, CHARPOS, BYTEPOS,      \
                                 END_CHARPOS, (IT)->w,                  \
-                                (IT)->bidi_it.paragraph_dir,           \
+                                (IT)->bidi_it.resolved_level,          \
                                 FACE_FROM_ID_OR_NULL ((IT)->f,         \
                                                       (IT)->face_id),  \
                                 (IT)->string)))