From 13403bc67a01e0d4908fb964093fd02ddd11c580 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 12 Oct 2010 17:23:54 -0400 Subject: [PATCH] Hookup Arabic shaper! Not tested yet. --- src/hb-ot-shape-complex-arabic.cc | 6 ++--- src/hb-ot-shape-complex-private.hh | 37 ++++++++++++++++++------------ src/hb-ot-shape-private.hh | 14 ++++++++++- src/hb-ot-shape.cc | 3 ++- 4 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc index 5e6ce053..d1f9f4af 100644 --- a/src/hb-ot-shape-complex-arabic.cc +++ b/src/hb-ot-shape-complex-arabic.cc @@ -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]; diff --git a/src/hb-ot-shape-complex-private.hh b/src/hb-ot-shape-complex-private.hh index 1c605bbc..a3796b49 100644 --- a/src/hb-ot-shape-complex-private.hh +++ b/src/hb-ot-shape-complex-private.hh @@ -29,24 +29,11 @@ #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 diff --git a/src/hb-ot-shape-private.hh b/src/hb-ot-shape-private.hh index 772b0cd3..0794fbfd 100644 --- a/src/hb-ot-shape-private.hh +++ b/src/hb-ot-shape-private.hh @@ -31,11 +31,23 @@ #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() */ diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index 9eda177b..0ce3896f 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -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); } -- GitLab