Apply user features to ranges!
This commit is contained in:
parent
9b60233385
commit
6774463883
|
@ -116,12 +116,33 @@ setup_lookups (hb_face_t *face,
|
||||||
add_feature (face, table_tag, feature_index, 1, lookups, num_lookups, room_lookups);
|
add_feature (face, table_tag, feature_index, 1, lookups, num_lookups, room_lookups);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Clear buffer masks. */
|
||||||
|
unsigned int count = buffer->len;
|
||||||
|
for (unsigned int i = 0; i < count; i++)
|
||||||
|
buffer->info[i].mask = 1;
|
||||||
|
|
||||||
|
unsigned int last_bit_used = 1;
|
||||||
for (i = 0; i < num_features; i++)
|
for (i = 0; i < num_features; i++)
|
||||||
{
|
{
|
||||||
|
unsigned int bits_needed = _hb_bit_storage (features[i].value);
|
||||||
|
if (!bits_needed)
|
||||||
|
continue;
|
||||||
|
unsigned int mask = (1 << (last_bit_used + bits_needed)) - (1 << last_bit_used);
|
||||||
|
unsigned int value = features[i].value << last_bit_used;
|
||||||
|
last_bit_used += bits_needed;
|
||||||
|
|
||||||
if (hb_ot_layout_language_find_feature (face, table_tag, script_index, language_index,
|
if (hb_ot_layout_language_find_feature (face, table_tag, script_index, language_index,
|
||||||
features[i].tag,
|
features[i].tag,
|
||||||
&feature_index))
|
&feature_index))
|
||||||
add_feature (face, table_tag, feature_index, 1, lookups, num_lookups, room_lookups);
|
add_feature (face, table_tag, feature_index, mask, lookups, num_lookups, room_lookups);
|
||||||
|
|
||||||
|
/* Turn mask on in the buffer, the über-slow way! */
|
||||||
|
unsigned int count = buffer->len;
|
||||||
|
for (unsigned int i = 0; i < count; i++) {
|
||||||
|
unsigned int cluster = buffer->info[i].cluster;
|
||||||
|
if (features[i].start <= cluster && cluster < features[i].end)
|
||||||
|
buffer->info[i].mask |= value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qsort (lookups, *num_lookups, sizeof (lookups[0]), cmp_lookups);
|
qsort (lookups, *num_lookups, sizeof (lookups[0]), cmp_lookups);
|
||||||
|
|
Loading…
Reference in New Issue