};
static void
-hb_ot_shape_setup_lookups (hb_ot_shape_context_t *c,
- lookup_map *lookups,
- unsigned int *num_lookups)
+hb_ot_shape_collect_features (hb_ot_shape_context_t *c,
+ hb_mask_allocator_t *allocator)
{
- hb_mask_allocator_t allocator;
-
switch (c->original_direction) {
case HB_DIRECTION_LTR:
- allocator.add_feature (HB_TAG ('l','t','r','a'), 1, true);
- allocator.add_feature (HB_TAG ('l','t','r','m'), 1, true);
+ allocator->add_feature (HB_TAG ('l','t','r','a'), 1, true);
+ allocator->add_feature (HB_TAG ('l','t','r','m'), 1, true);
break;
case HB_DIRECTION_RTL:
- allocator.add_feature (HB_TAG ('r','t','l','a'), 1, true);
- allocator.add_feature (HB_TAG ('r','t','l','m'), 1, false);
+ allocator->add_feature (HB_TAG ('r','t','l','a'), 1, true);
+ allocator->add_feature (HB_TAG ('r','t','l','m'), 1, false);
break;
case HB_DIRECTION_TTB:
case HB_DIRECTION_BTT:
}
for (unsigned int i = 0; i < ARRAY_LENGTH (default_features); i++)
- allocator.add_feature (default_features[i], 1, true);
+ allocator->add_feature (default_features[i], 1, true);
/* complex */
for (unsigned int i = 0; i < c->num_features; i++) {
const hb_feature_t *feature = &c->features[i];
- allocator.add_feature (feature->tag, feature->value, (feature->start == 0 && feature->end == (unsigned int) -1));
+ allocator->add_feature (feature->tag, feature->value, (feature->start == 0 && feature->end == (unsigned int) -1));
}
+}
+
+
+static void
+hb_ot_shape_setup_lookups (hb_ot_shape_context_t *c,
+ lookup_map *lookups,
+ unsigned int *num_lookups)
+{
+ hb_mask_allocator_t allocator;
+ hb_ot_shape_collect_features (c, &allocator);
/* Compile features */
unsigned int script_index, language_index, feature_index;