]> code.delx.au - gnu-emacs/commitdiff
Updated bidi_resolve_weak. Removed next_en_* members from stack.
authorEli Zaretskii <eliz@gnu.org>
Sat, 30 Aug 2014 14:01:35 +0000 (17:01 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 30 Aug 2014 14:01:35 +0000 (17:01 +0300)
src/bidi.c
src/dispextern.h

index a99fd7489817138745d0e7c4e121f6f997ce3f70..f3b4a0847d85d0e0803514e7dcda375d0f63920c 100644 (file)
@@ -439,8 +439,6 @@ bidi_push_embedding_level (struct bidi_it *bidi_it,
       st.prev_for_neutral = bidi_it->prev_for_neutral;
       st.next_for_neutral = bidi_it->next_for_neutral;
       st.next_for_ws = bidi_it->next_for_ws;
-      st.next_en_pos = bidi_it->next_en_pos;
-      st.next_en_type = bidi_it->next_en_type;
       st.sos = bidi_it->sos;
     }
 }
@@ -467,8 +465,6 @@ bidi_pop_embedding_level (struct bidi_it *bidi_it)
          bidi_it->prev_for_neutral = st.prev_for_neutral;
          bidi_it->next_for_neutral = st.next_for_neutral;
          bidi_it->next_for_ws = st.next_for_ws;
-         bidi_it->next_en_pos = st.next_en_pos;
-         bidi_it->next_en_type = st.next_en_type;
          bidi_it->sos = st.sos;
        }
       bidi_it->stack_idx--;
@@ -2018,6 +2014,12 @@ bidi_resolve_explicit (struct bidi_it *bidi_it)
   return new_level;
 }
 
+static bool
+bidi_isolate_fmt_char (bidi_type_t ch_type)
+{
+  return (ch_type == LRI || ch_type == RLI || ch_type == PDI);
+}
+
 /* Advance in the buffer/string, resolve weak types and return the
    type of the next character after weak type resolution.  */
 static bidi_type_t
@@ -2085,7 +2087,12 @@ bidi_resolve_weak (struct bidi_it *bidi_it)
          if (bidi_it->prev.type_after_w1 != UNKNOWN_BT
              /* if type_after_w1 is NEUTRAL_B, this NSM is at sos */
              && bidi_it->prev.type_after_w1 != NEUTRAL_B)
-           type = bidi_it->prev.type_after_w1;
+           {
+             if (bidi_isolate_fmt_char (bidi_it->prev.type_after_w1))
+               type = NEUTRAL_ON;
+             else
+               type = bidi_it->prev.type_after_w1;
+           }
          else if (bidi_it->sos == R2L)
            type = STRONG_R;
          else if (bidi_it->sos == L2R)
index 5e90a4ef23bab562399e81c4d183b42b946ca5cb..3723d341a515e9aadf3b309154800a495fb0741a 100644 (file)
@@ -1920,8 +1920,6 @@ struct bidi_stack {
   struct bidi_saved_info next_for_neutral;
   struct bidi_saved_info prev_for_neutral;
   struct bidi_saved_info next_for_ws;
-  ptrdiff_t next_en_pos;
-  bidi_type_t next_en_type;
   bidi_dir_t sos;
 };