From 64ddca1e2f806afcf470c8f4aa9c8459cb0127b5 Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Tue, 12 Mar 2019 18:34:47 +0800 Subject: [PATCH] Add UCharIsArabicVowel --- include/gdi.h | 3 +++ src/font/charset-unicode.c | 14 ++++++++++++++ src/newgdi/shaped-glyph.c | 11 ++++------- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/include/gdi.h b/include/gdi.h index b2625b58..1bba2efa 100644 --- a/include/gdi.h +++ b/include/gdi.h @@ -8578,6 +8578,9 @@ MG_EXPORT Uchar32 GUIAPI UCharToFullSizeKana (Uchar32 uc); /** Converts a glyph to small Kana. */ MG_EXPORT Uchar32 GUIAPI UCharToSmallKana (Uchar32 uc); +/** Determines is the given Unicode character an Arabic vowel. */ +MG_EXPORT BOOL GUIAPI UCharIsArabicVowel(Uchar32 uc); + /** Determines the canonical combining class of a Unicode character.*/ MG_EXPORT int GUIAPI UCharCombiningClass (Uchar32 uc); diff --git a/src/font/charset-unicode.c b/src/font/charset-unicode.c index 0e7e2b70..2163bf2f 100644 --- a/src/font/charset-unicode.c +++ b/src/font/charset-unicode.c @@ -1581,4 +1581,18 @@ Uchar32 GUIAPI UCharToSmallKana (Uchar32 uc) return uc; } +BOOL GUIAPI UCharIsArabicVowel(Uchar32 uc) +{ + if ((uc >= 0x064B) && (uc <= 0x0655)) + return TRUE; + + if ((uc >= 0xFC5E) && (uc <= 0xFC63)) + return TRUE; + + if ((uc >= 0xFE70) && (uc <= 0xFE7F)) + return TRUE; + + return 0; +} + #endif /* _MGCHARSET_UNICODE */ diff --git a/src/newgdi/shaped-glyph.c b/src/newgdi/shaped-glyph.c index 8fca74c4..5db1b7c9 100644 --- a/src/newgdi/shaped-glyph.c +++ b/src/newgdi/shaped-glyph.c @@ -116,6 +116,9 @@ int GUIAPI GetShapedGlyphsBasic(LOGFONT* logfont, if (!visual_ucs) goto out; + /* TODO: compose logical character here */ + memcpy(visual_ucs, logical_ucs, sizeof(Uchar32) * nr_ucs); + if (nr_ucs < LOCAL_ARRAY_SIZE) bidi_ts = local_bidi_ts; else @@ -167,8 +170,6 @@ int GUIAPI GetShapedGlyphsBasic(LOGFONT* logfont, pos_v2l[i] = i; } - memcpy(visual_ucs, logical_ucs, sizeof(Uchar32) * nr_ucs); - if (content_language == LANGCODE_ar) { /* Arabic joining */ if (nr_ucs < LOCAL_ARRAY_SIZE) @@ -204,11 +205,7 @@ int GUIAPI GetShapedGlyphsBasic(LOGFONT* logfont, visual_glyphs[j].gt = GLYPH_TYPE_STDLIGATURE; visual_glyphs[j].gp = GLYPH_POS_BASELINE; } - else if (ar_prop & BIDI_MASK_ARAB_SHAPES) { - visual_glyphs[j].gt = GLYPH_TYPE_STDBASE; - visual_glyphs[j].gp = GLYPH_POS_BASELINE; - } - else if (ar_prop & BIDI_MASK_TRANSPARENT) { + else if (UCharIsArabicVowel(visual_ucs[i])) { visual_glyphs[j].gt = GLYPH_TYPE_STDMARK; visual_glyphs[j].gp = GLYPH_POS_STDMARK_ABOVE; }