[OT] Zero mark advances if the shaper desires so
Enabled for all shapers except for Indic.
This commit is contained in:
parent
5fecd8b035
commit
2bc3b9a616
|
@ -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 =
|
||||||
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 =
|
||||||
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 =
|
||||||
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
|
||||||
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue