|
|
|
@ -138,7 +138,11 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m, |
|
|
|
|
const int *coords, |
|
|
|
|
unsigned int num_coords) |
|
|
|
|
{ |
|
|
|
|
m.global_mask = 1; |
|
|
|
|
ASSERT_STATIC (!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))); |
|
|
|
|
unsigned int global_bit_mask = HB_GLYPH_FLAG_DEFINED + 1; |
|
|
|
|
unsigned int global_bit_shift = _hb_popcount32 (HB_GLYPH_FLAG_DEFINED); |
|
|
|
|
|
|
|
|
|
m.global_mask = global_bit_mask; |
|
|
|
|
|
|
|
|
|
unsigned int required_feature_index[2]; |
|
|
|
|
hb_tag_t required_feature_tag[2]; |
|
|
|
@ -190,8 +194,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Allocate bits now */ |
|
|
|
|
unsigned int next_bit = 1; |
|
|
|
|
next_bit++; /* Allocate for HB_GLYPH_FLAG_UNSAFE_TO_BREAK */ |
|
|
|
|
unsigned int next_bit = global_bit_shift + 1; |
|
|
|
|
|
|
|
|
|
for (unsigned int i = 0; i < feature_infos.len; i++) |
|
|
|
|
{ |
|
|
|
@ -251,8 +254,8 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m, |
|
|
|
|
map->auto_zwj = !(info->flags & F_MANUAL_ZWJ); |
|
|
|
|
if ((info->flags & F_GLOBAL) && info->max_value == 1) { |
|
|
|
|
/* Uses the global bit */ |
|
|
|
|
map->shift = 0; |
|
|
|
|
map->mask = 1; |
|
|
|
|
map->shift = global_bit_shift; |
|
|
|
|
map->mask = global_bit_mask; |
|
|
|
|
} else { |
|
|
|
|
map->shift = next_bit; |
|
|
|
|
map->mask = (1u << (next_bit + bits_needed)) - (1u << next_bit); |
|
|
|
@ -289,7 +292,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m, |
|
|
|
|
add_lookups (m, face, table_index, |
|
|
|
|
required_feature_index[table_index], |
|
|
|
|
variations_index, |
|
|
|
|
1 /* mask */); |
|
|
|
|
global_bit_mask); |
|
|
|
|
|
|
|
|
|
for (unsigned i = 0; i < m.features.len; i++) |
|
|
|
|
if (m.features[i].stage[table_index] == stage) |
|
|
|
|