Module: wine Branch: master Commit: 8c4b47c6f94054b60c3830ee76edd81886375365 URL: https://source.winehq.org/git/wine.git/?a=commit;h=8c4b47c6f94054b60c3830ee7...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Feb 11 11:10:20 2021 +0300
dwrite/arabic: Mark glyphs with assigned action as unsafe to break.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 =