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().
This commit is contained in:
Behdad Esfahbod 2011-07-08 00:22:40 -04:00
parent c4641723fb
commit f6fd3780e1
3 changed files with 19 additions and 6 deletions

View File

@ -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;

View File

@ -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);
}

View File

@ -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);