Hookup Arabic shaper!
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 12 Oct 2010 21:23:54 +0000 (17:23 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 12 Oct 2010 21:23:54 +0000 (17:23 -0400)
Not tested yet.

src/hb-ot-shape-complex-arabic.cc
src/hb-ot-shape-complex-private.hh
src/hb-ot-shape-private.hh
src/hb-ot-shape.cc

index 5e6ce05..d1f9f4a 100644 (file)
@@ -24,7 +24,7 @@
  * Google Author(s): Behdad Esfahbod
  */
 
-#include "hb-ot-shape-private.hh"
+#include "hb-ot-shape-complex-private.hh"
 
 HB_BEGIN_DECLS
 
@@ -679,7 +679,7 @@ _hb_ot_shape_complex_collect_features_arabic        (hb_ot_shape_plan_t *plan, const hb
 }
 
 void
-_hb_ot_analyze_complex_arabic (hb_ot_shape_context_t *c)
+_hb_ot_shape_complex_setup_masks_arabic        (hb_ot_shape_context_t *c)
 {
   unsigned int count = c->buffer->len;
   unsigned int prev = 0, state = 0;
@@ -705,7 +705,7 @@ _hb_ot_analyze_complex_arabic (hb_ot_shape_context_t *c)
   hb_mask_t mask_array[TOTAL_NUM_FEATURES] = {0};
   unsigned int num_masks = c->buffer->props.script == HB_SCRIPT_SYRIAC ? SYRIAC_NUM_FEATURES : COMMON_NUM_FEATURES;
   for (unsigned int i = 0; i < num_masks; i++)
-    mask_array[i] = 0 /* XXX find_mask */;
+    mask_array[i] = c->plan->map.get_mask (arabic_syriac_features[i]);
 
   for (unsigned int i = 0; i < count; i++)
     c->buffer->info[i].mask |= mask_array[c->buffer->info[i].gproperty];
index 1c605bb..a3796b4 100644 (file)
 
 #include "hb-private.h"
 
-#include "hb-ot-map-private.hh"
+#include "hb-ot-shape-private.hh"
 
 HB_BEGIN_DECLS
 
 
-enum hb_ot_complex_shaper_t {
-  hb_ot_complex_shaper_none,
-  hb_ot_complex_shaper_arabic
-};
-
-
-struct hb_ot_shape_plan_t
-{
-  hb_ot_map_t map;
-  hb_ot_complex_shaper_t shaper;
-};
-
-
 static inline hb_ot_complex_shaper_t
 hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
 {
@@ -66,7 +53,9 @@ hb_ot_shape_complex_categorize (const hb_segment_properties_t *props)
 /*
  * collect_features()
  *
- * Called during planning.  Shapers should call plan->map.add_feature().
+ * Called during shape_plan().
+ *
+ * Shapers should use plan->map to add their features.
  */
 
 HB_INTERNAL void _hb_ot_shape_complex_collect_features_arabic  (hb_ot_shape_plan_t *plan, const hb_segment_properties_t  *props);
@@ -82,6 +71,24 @@ hb_ot_shape_complex_collect_features (hb_ot_shape_plan_t *plan,
 }
 
 
+/* setup_masks()
+ *
+ * Called during shape_execute().
+ *
+ * Shapers should use c->plan.map to get feature masks and set on buffer.
+ */
+
+HB_INTERNAL void _hb_ot_shape_complex_setup_masks_arabic       (hb_ot_shape_context_t *c);
+
+static inline void
+hb_ot_shape_complex_setup_masks (hb_ot_shape_context_t *c)
+{
+  switch (c->plan->shaper) {
+    case hb_ot_complex_shaper_arabic:  _hb_ot_shape_complex_setup_masks_arabic (c);    return;
+    case hb_ot_complex_shaper_none:    default:                                        return;
+  }
+}
+
 
 HB_END_DECLS
 
index 772b0cd..0794fbf 100644 (file)
 
 #include "hb-ot-shape.h"
 
-#include "hb-ot-shape-complex-private.hh"
 #include "hb-ot-map-private.hh"
 
 HB_BEGIN_DECLS
 
+enum hb_ot_complex_shaper_t {
+  hb_ot_complex_shaper_none,
+  hb_ot_complex_shaper_arabic
+};
+
+
+struct hb_ot_shape_plan_t
+{
+  hb_ot_map_t map;
+  hb_ot_complex_shaper_t shaper;
+};
+
+
 struct hb_ot_shape_context_t
 {
   /* Input to hb_ot_shape_execute() */
index 9eda177..0ce3896 100644 (file)
@@ -27,6 +27,7 @@
  */
 
 #include "hb-ot-shape-private.hh"
+#include "hb-ot-shape-complex-private.hh"
 
 HB_BEGIN_DECLS
 
@@ -95,7 +96,7 @@ hb_ot_shape_setup_masks (hb_ot_shape_context_t *c)
     }
   }
 
-  /* complex */
+  hb_ot_shape_complex_setup_masks (c);
 }