Emoji skin tone modifiers need to be treated as combining marks
Fixes https://github.com/behdad/harfbuzz/issues/169
This commit is contained in:
parent
da41e48f0a
commit
aae2847099
|
@ -256,8 +256,11 @@ _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_buffer_t *buffer)
|
||||||
if (u == 0x200Cu) props |= UPROPS_MASK_ZWNJ;
|
if (u == 0x200Cu) props |= UPROPS_MASK_ZWNJ;
|
||||||
if (u == 0x200Du) props |= UPROPS_MASK_ZWJ;
|
if (u == 0x200Du) props |= UPROPS_MASK_ZWJ;
|
||||||
}
|
}
|
||||||
else if (unlikely (HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK (gen_cat)))
|
else if (unlikely (HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK_OR_MODIFIER_SYMBOL (gen_cat)))
|
||||||
{
|
{
|
||||||
|
/* The above check is just an optimization to let in only things we need further
|
||||||
|
* processing on. */
|
||||||
|
|
||||||
/* Only Mn and Mc can have non-zero ccc:
|
/* Only Mn and Mc can have non-zero ccc:
|
||||||
* http://www.unicode.org/policies/stability_policy.html#Property_Value
|
* http://www.unicode.org/policies/stability_policy.html#Property_Value
|
||||||
* """
|
* """
|
||||||
|
@ -272,6 +275,16 @@ _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_buffer_t *buffer)
|
||||||
* the "else if".
|
* the "else if".
|
||||||
*/
|
*/
|
||||||
props |= unicode->modified_combining_class (info->codepoint)<<8;
|
props |= unicode->modified_combining_class (info->codepoint)<<8;
|
||||||
|
|
||||||
|
/* Recategorize emoji skin-tone modifiers as Unicode mark, so they
|
||||||
|
* behave correctly in non-native directionality. They originally
|
||||||
|
* are MODIFIER_SYMBOL. Fixes:
|
||||||
|
* https://github.com/behdad/harfbuzz/issues/169
|
||||||
|
*/
|
||||||
|
if (unlikely (hb_in_range (u, 0x1F3FBu, 0x1F3FFu)))
|
||||||
|
{
|
||||||
|
props = gen_cat = HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -357,9 +357,10 @@ extern HB_INTERNAL const hb_unicode_funcs_t _hb_unicode_funcs_nil;
|
||||||
FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
|
FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
|
||||||
FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
|
FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
|
||||||
|
|
||||||
#define HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK(gen_cat) \
|
#define HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK_OR_MODIFIER_SYMBOL(gen_cat) \
|
||||||
(FLAG_SAFE (gen_cat) & \
|
(FLAG_SAFE (gen_cat) & \
|
||||||
(FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
|
(FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
|
||||||
FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
|
FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) | \
|
||||||
|
FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL)))
|
||||||
|
|
||||||
#endif /* HB_UNICODE_PRIVATE_HH */
|
#endif /* HB_UNICODE_PRIVATE_HH */
|
||||||
|
|
Loading…
Reference in New Issue