Don't zero advance of mark-non-mark ligatures

If there's a mark ligating forward with non-mark, they were
inheriting the GC of the mark and later get advance-zeroed.
Don't do that if there's any non-mark glyph in the ligature.

Sample test: U+1780,U+17D2,U+179F with Kh-Metal-Chrieng.ttf

Also:
Bug 58922 - Issue with mark advance zeroing in generic shaper
This commit is contained in:
Behdad Esfahbod 2013-05-27 14:48:34 -04:00
parent cf059ac69d
commit 7e08f1258d
2 changed files with 10 additions and 0 deletions

View File

@ -872,7 +872,11 @@ static inline void ligate_input (hb_apply_context_t *c,
unsigned int components_so_far = last_num_components;
if (!is_mark_ligature)
{
set_lig_props_for_ligature (c->buffer->cur(), lig_id, total_component_count);
if (_hb_glyph_info_get_general_category (&c->buffer->cur()) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
_hb_glyph_info_set_general_category (&c->buffer->cur(), HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER);
}
c->replace_glyph (lig_glyph, klass);
for (unsigned int i = 1; i < count; i++)

View File

@ -58,6 +58,12 @@ _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *uni
info->unicode_props1() = unicode->modified_combining_class (info->codepoint);
}
inline void
_hb_glyph_info_set_general_category (hb_glyph_info_t *info, hb_unicode_general_category_t gen_cat)
{
info->unicode_props0() = (unsigned int) gen_cat | ((info->unicode_props0()) & ~0x1F);
}
inline hb_unicode_general_category_t
_hb_glyph_info_get_general_category (const hb_glyph_info_t *info)
{