Fix arabic shaping of LTR text
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 7 Dec 2010 21:20:42 +0000 (16:20 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 7 Dec 2010 21:20:42 +0000 (16:20 -0500)
We should ensure-direction before doing any complex work.  The only
exception is mirroring that needs to see the original / final direction,
not the native.  Handle that.

src/hb-ot-shape.cc

index 346cb37..f1ca7c2 100644 (file)
@@ -193,7 +193,7 @@ hb_mirror_chars (hb_ot_shape_context_t *c)
 {
   hb_unicode_get_mirroring_func_t get_mirroring = c->buffer->unicode->v.get_mirroring;
 
-  if (HB_DIRECTION_IS_FORWARD (c->buffer->props.direction))
+  if (HB_DIRECTION_IS_FORWARD (c->original_direction))
     return;
 
   hb_mask_t rtlm_mask = c->plan->map.get_1_mask (HB_TAG ('r','t','l','m'));
@@ -300,6 +300,8 @@ hb_ot_shape_execute_internal (hb_ot_shape_context_t *c)
 
   hb_set_unicode_props (c); /* BUFFER: Set general_category and combining_class in var1 */
 
+  hb_ensure_native_direction (c);
+
   hb_form_clusters (c);
 
   hb_ot_shape_setup_masks (c); /* BUFFER: Clobbers var2 */
@@ -309,8 +311,6 @@ hb_ot_shape_execute_internal (hb_ot_shape_context_t *c)
     /* Mirroring needs to see the original direction */
     hb_mirror_chars (c);
 
-    hb_ensure_native_direction (c);
-
     hb_substitute_default (c);
 
     hb_ot_substitute_complex (c);