Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/dwrite/dwrite_private.h | 2 ++ dlls/dwrite/opentype.c | 2 +- dlls/dwrite/shapers/arabic.c | 7 ++++++- 3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/dwrite/dwrite_private.h b/dlls/dwrite/dwrite_private.h index e03ad6c6c6d..fa82a8d4376 100644 --- a/dlls/dwrite/dwrite_private.h +++ b/dlls/dwrite/dwrite_private.h @@ -690,6 +690,8 @@ extern void opentype_layout_apply_gpos_features(struct scriptshaping_context *co extern BOOL opentype_layout_check_feature(struct scriptshaping_context *context, unsigned int script_index, unsigned int language_index, struct shaping_feature *feature, unsigned int glyph_count, const UINT16 *glyphs, UINT8 *feature_applies) DECLSPEC_HIDDEN; +extern void opentype_layout_unsafe_to_break(struct scriptshaping_context *context, unsigned int start, + unsigned int end) DECLSPEC_HIDDEN; extern BOOL opentype_has_vertical_variants(struct dwrite_fontface *fontface) DECLSPEC_HIDDEN; extern HRESULT opentype_get_vertical_glyph_variants(struct dwrite_fontface *fontface, unsigned int glyph_count, const UINT16 *nominal_glyphs, UINT16 *glyphs) DECLSPEC_HIDDEN; diff --git a/dlls/dwrite/opentype.c b/dlls/dwrite/opentype.c index 515d2440fcf..afae1b69d07 100644 --- a/dlls/dwrite/opentype.c +++ b/dlls/dwrite/opentype.c @@ -5127,7 +5127,7 @@ static BOOL opentype_layout_context_match_input(const struct match_context *mc, }
/* Marks text segment as unsafe to break between [start, end) glyphs. */ -static void opentype_layout_unsafe_to_break(struct scriptshaping_context *context, unsigned int start, +void opentype_layout_unsafe_to_break(struct scriptshaping_context *context, unsigned int start, unsigned int end) { unsigned int i; diff --git a/dlls/dwrite/shapers/arabic.c b/dlls/dwrite/shapers/arabic.c index cc598f834e5..720f18915a4 100644 --- a/dlls/dwrite/shapers/arabic.c +++ b/dlls/dwrite/shapers/arabic.c @@ -174,7 +174,12 @@ static void arabic_setup_masks(struct scriptshaping_context *context,
/* Unaffected glyphs get action NONE with zero mask. */ for (i = 0; i < context->glyph_count; ++i) - context->glyph_infos[i].mask |= masks[arabic_get_shaping_action(context, i)]; + { + enum arabic_shaping_action action = arabic_get_shaping_action(context, i); + if (action != NONE) + opentype_layout_unsafe_to_break(context, i, i + 1); + context->glyph_infos[i].mask |= masks[action]; + } }
const struct shaper arabic_shaper =