diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index 9fc638b75..32c4a6d20 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -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++) diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh index a9de35690..c5ba8b4b4 100644 --- a/src/hb-ot-layout-private.hh +++ b/src/hb-ot-layout-private.hh @@ -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) {