[hebrew] Implement Jerusalem mark reordering
Fixes https://github.com/harfbuzz/harfbuzz/issues/2947
This commit is contained in:
parent
605bb1ee3d
commit
c60d810d50
|
@ -162,6 +162,31 @@ compose_hebrew (const hb_ot_shape_normalize_context_t *c,
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
reorder_marks_hebrew (const hb_ot_shape_plan_t *plan HB_UNUSED,
|
||||||
|
hb_buffer_t *buffer,
|
||||||
|
unsigned int start,
|
||||||
|
unsigned int end)
|
||||||
|
{
|
||||||
|
hb_glyph_info_t *info = buffer->info;
|
||||||
|
|
||||||
|
for (unsigned i = start + 2; i < end; i++)
|
||||||
|
{
|
||||||
|
unsigned c0 = info_cc (info[i - 2]);
|
||||||
|
unsigned c1 = info_cc (info[i - 1]);
|
||||||
|
unsigned c2 = info_cc (info[i - 0]);
|
||||||
|
|
||||||
|
if ((c0 == HB_MODIFIED_COMBINING_CLASS_CCC17 || c0 == HB_MODIFIED_COMBINING_CLASS_CCC18) /* patach or qamats */ &&
|
||||||
|
(c1 == HB_MODIFIED_COMBINING_CLASS_CCC10 || c1 == HB_MODIFIED_COMBINING_CLASS_CCC14) /* sheva or hiriq */ &&
|
||||||
|
(c2 == HB_MODIFIED_COMBINING_CLASS_CCC22 || c2 == HB_UNICODE_COMBINING_CLASS_BELOW) /* meteg or below */)
|
||||||
|
{
|
||||||
|
buffer->merge_clusters (i - 1, i + 1);
|
||||||
|
hb_swap (info[i - 1], info[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
const hb_ot_shaper_t _hb_ot_shaper_hebrew =
|
const hb_ot_shaper_t _hb_ot_shaper_hebrew =
|
||||||
{
|
{
|
||||||
|
@ -174,7 +199,7 @@ const hb_ot_shaper_t _hb_ot_shaper_hebrew =
|
||||||
nullptr, /* decompose */
|
nullptr, /* decompose */
|
||||||
compose_hebrew,
|
compose_hebrew,
|
||||||
nullptr, /* setup_masks */
|
nullptr, /* setup_masks */
|
||||||
nullptr, /* reorder_marks */
|
reorder_marks_hebrew,
|
||||||
HB_TAG ('h','e','b','r'), /* gpos_tag. https://github.com/harfbuzz/harfbuzz/issues/347#issuecomment-267838368 */
|
HB_TAG ('h','e','b','r'), /* gpos_tag. https://github.com/harfbuzz/harfbuzz/issues/347#issuecomment-267838368 */
|
||||||
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
|
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
|
||||||
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
|
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
|
||||||
|
|
Loading…
Reference in New Issue