Let shapers decide when to apply ccmp and locl

Instead of always applying those two features before the complex shaper,
let the complex shaper decide whether they should be applied first.

Also add stub for Indic's final_reordering().
pull/1/head
Behdad Esfahbod 14 years ago
parent c4641723fb
commit f6fd3780e1
  1. 2
      src/hb-ot-shape-complex-arabic.cc
  2. 16
      src/hb-ot-shape-complex-indic.cc
  3. 7
      src/hb-ot-shape.cc

@ -163,6 +163,8 @@ _hb_ot_shape_complex_collect_features_arabic (hb_ot_map_builder_t *map, const hb
* TODO: Add test cases for these two.
*/
map->add_bool_feature (HB_TAG('c','c','m','p'));
map->add_gsub_pause (NULL, NULL);
unsigned int num_features = props->script == HB_SCRIPT_SYRIAC ? SYRIAC_NUM_FEATURES : COMMON_NUM_FEATURES;

@ -281,13 +281,29 @@ static const hb_tag_t indic_other_features[] =
HB_TAG('b','l','w','m'),
};
static void
final_reordering (const hb_ot_map_t *map,
hb_face_t *face,
hb_buffer_t *buffer,
void *user_data HB_UNUSED)
{
}
void
_hb_ot_shape_complex_collect_features_indic (hb_ot_map_builder_t *map, const hb_segment_properties_t *props)
{
map->add_bool_feature (HB_TAG('l','o','c','l'));
/* The Indic specs do not require ccmp, but we apply since if there is a
* use of it, it's typically at the beginning. */
map->add_bool_feature (HB_TAG('c','c','m','p'));
map->add_gsub_pause (NULL, NULL);
for (unsigned int i = 0; i < ARRAY_LENGTH (indic_basic_features); i++)
map->add_bool_feature (indic_basic_features[i].tag, indic_basic_features[i].is_global);
map->add_gsub_pause (final_reordering, NULL);
for (unsigned int i = 0; i < ARRAY_LENGTH (indic_other_features); i++)
map->add_bool_feature (indic_other_features[i], true);
}

@ -34,12 +34,9 @@
HB_BEGIN_DECLS
hb_tag_t early_features[] = {
hb_tag_t common_features[] = {
HB_TAG('c','c','m','p'),
HB_TAG('l','o','c','l'),
};
hb_tag_t common_features[] = {
HB_TAG('m','a','r','k'),
HB_TAG('m','k','m','k'),
HB_TAG('r','l','i','g'),
@ -94,8 +91,6 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
planner->map.add_bool_feature (array[i]); \
} HB_STMT_END
ADD_FEATURES (early_features);
hb_ot_shape_complex_collect_features (planner->shaper, &planner->map, props);
ADD_FEATURES (common_features);

Loading…
Cancel
Save