提交 3276c354 编写于 作者: B Behdad Esfahbod

[OTLayout] Minor refactoring

上级 ea86efa4
...@@ -118,6 +118,10 @@ struct hb_ot_map_t ...@@ -118,6 +118,10 @@ struct hb_ot_map_t
} }
HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t *lookups) const; HB_INTERNAL void collect_lookups (unsigned int table_index, hb_set_t *lookups) const;
HB_INTERNAL inline void apply (unsigned int table_index,
const struct hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer) const;
HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const; HB_INTERNAL void substitute (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const; HB_INTERNAL void position (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const;
......
...@@ -102,20 +102,30 @@ void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value, ...@@ -102,20 +102,30 @@ void hb_ot_map_builder_t::add_feature (hb_tag_t tag, unsigned int value,
info->stage[1] = current_stage[1]; info->stage[1] = current_stage[1];
} }
/* Keep the next two functions in sync. */ inline void hb_ot_map_t::apply (unsigned int table_index,
const hb_ot_shape_plan_t *plan,
void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const hb_font_t *font,
hb_buffer_t *buffer) const
{ {
const unsigned int table_index = 0;
unsigned int i = 0; unsigned int i = 0;
for (unsigned int stage_index = 0; stage_index < stages[table_index].len; stage_index++) { for (unsigned int stage_index = 0; stage_index < stages[table_index].len; stage_index++) {
const stage_map_t *stage = &stages[table_index][stage_index]; const stage_map_t *stage = &stages[table_index][stage_index];
for (; i < stage->last_lookup; i++) for (; i < stage->last_lookup; i++)
hb_ot_layout_substitute_lookup (font, buffer, switch (table_index)
lookups[table_index][i].index, {
lookups[table_index][i].mask, case 0:
lookups[table_index][i].auto_zwj); hb_ot_layout_substitute_lookup (font, buffer, lookups[table_index][i].index,
lookups[table_index][i].mask,
lookups[table_index][i].auto_zwj);
break;
case 1:
hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index,
lookups[table_index][i].mask,
lookups[table_index][i].auto_zwj);
break;
}
if (stage->pause_func) if (stage->pause_func)
{ {
...@@ -125,23 +135,17 @@ void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, h ...@@ -125,23 +135,17 @@ void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, h
} }
} }
void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
{ {
const unsigned int table_index = 1; apply (0, plan, font, buffer);
unsigned int i = 0; }
for (unsigned int stage_index = 0; stage_index < stages[table_index].len; stage_index++) {
const stage_map_t *stage = &stages[table_index][stage_index];
for (; i < stage->last_lookup; i++)
hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index,
lookups[table_index][i].mask,
lookups[table_index][i].auto_zwj);
if (stage->pause_func) void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
stage->pause_func (plan, font, buffer); {
} apply (1, plan, font, buffer);
} }
void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t *lookups_out) const void hb_ot_map_t::collect_lookups (unsigned int table_index, hb_set_t *lookups_out) const
{ {
for (unsigned int i = 0; i < lookups[table_index].len; i++) for (unsigned int i = 0; i < lookups[table_index].len; i++)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册