提交 2bc3b9a6 编写于 作者: B Behdad Esfahbod

[OT] Zero mark advances if the shaper desires so

Enabled for all shapers except for Indic.
上级 5fecd8b0
...@@ -299,4 +299,5 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic = ...@@ -299,4 +299,5 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
NULL, /* override_features */ NULL, /* override_features */
NULL, /* normalization_preference */ NULL, /* normalization_preference */
setup_masks_arabic, setup_masks_arabic,
true, /* zero_width_marks */
}; };
...@@ -1245,4 +1245,5 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic = ...@@ -1245,4 +1245,5 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
override_features_indic, override_features_indic,
NULL, /* normalization_preference */ NULL, /* normalization_preference */
setup_masks_indic, setup_masks_indic,
false, /* zero_width_marks */
}; };
...@@ -93,6 +93,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default = ...@@ -93,6 +93,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
NULL, /* override_features */ NULL, /* override_features */
normalization_preference_default, normalization_preference_default,
NULL, /* setup_masks */ NULL, /* setup_masks */
true, /* zero_width_marks */
}; };
...@@ -201,4 +202,5 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai = ...@@ -201,4 +202,5 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai =
NULL, /* override_features */ NULL, /* override_features */
NULL, /* normalization_preference */ NULL, /* normalization_preference */
setup_masks_thai, setup_masks_thai,
true, /* zero_width_marks */
}; };
...@@ -93,6 +93,8 @@ struct hb_ot_complex_shaper_t ...@@ -93,6 +93,8 @@ struct hb_ot_complex_shaper_t
const hb_ot_map_t *map, const hb_ot_map_t *map,
hb_buffer_t *buffer, hb_buffer_t *buffer,
hb_font_t *font); hb_font_t *font);
bool zero_width_marks;
}; };
#define HB_COMPLEX_SHAPER_IMPLEMENT(name) extern HB_INTERNAL const hb_ot_complex_shaper_t _hb_ot_complex_shaper_##name; #define HB_COMPLEX_SHAPER_IMPLEMENT(name) extern HB_INTERNAL const hb_ot_complex_shaper_t _hb_ot_complex_shaper_##name;
......
...@@ -401,6 +401,18 @@ hb_position_default (hb_ot_shape_context_t *c) ...@@ -401,6 +401,18 @@ hb_position_default (hb_ot_shape_context_t *c)
} }
} }
static void
hb_zero_mark_advances (hb_ot_shape_context_t *c)
{
unsigned int count = c->buffer->len;
for (unsigned int i = 0; i < count; i++)
if (c->buffer->info[i].glyph_props() & HB_OT_LAYOUT_GLYPH_CLASS_MARK)
{
c->buffer->pos[i].x_advance = 0;
c->buffer->pos[i].y_advance = 0;
}
}
static void static void
hb_ot_position_complex (hb_ot_shape_context_t *c) hb_ot_position_complex (hb_ot_shape_context_t *c)
{ {
...@@ -429,6 +441,9 @@ hb_ot_position_complex (hb_ot_shape_context_t *c) ...@@ -429,6 +441,9 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
c->applied_position_complex = true; c->applied_position_complex = true;
} }
if (c->plan->shaper->zero_width_marks)
hb_zero_mark_advances (c);
hb_ot_layout_position_finish (c->font, c->buffer); hb_ot_layout_position_finish (c->font, c->buffer);
return; return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册