Nikolay Sivov : dwrite: Use correct ranges to set DWRITE_SCRIPT_SHAPES_NO_VISUAL.

Alexandre Julliard julliard at winehq.org
Mon Jul 25 16:19:30 CDT 2022


Module: wine
Branch: master
Commit: 5259c1a1dcbbdeec8d60548194bbb6aed9c2f671
URL:    https://gitlab.winehq.org/wine/wine/-/commit/5259c1a1dcbbdeec8d60548194bbb6aed9c2f671

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Jul 25 14:27:41 2022 +0300

dwrite: Use correct ranges to set DWRITE_SCRIPT_SHAPES_NO_VISUAL.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>

---

 dlls/dwrite/analyzer.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c
index 86d030b3738..200ffc8da4c 100644
--- a/dlls/dwrite/analyzer.c
+++ b/dlls/dwrite/analyzer.c
@@ -501,15 +501,31 @@ static inline UINT16 get_char_script(WCHAR c)
     return script == Script_Inherited ? Script_Unknown : script;
 }
 
-static DWRITE_SCRIPT_ANALYSIS get_char_sa(WCHAR c)
+static DWRITE_SCRIPT_ANALYSIS get_char_sa(UINT32 c)
 {
     DWRITE_SCRIPT_ANALYSIS sa;
-    WORD type;
 
-    GetStringTypeW(CT_CTYPE1, &c, 1, &type);
     sa.script = get_char_script(c);
-    sa.shapes = (type & C1_CNTRL) || c == 0x2028 /* LINE SEPARATOR */ || c == 0x2029 /* PARAGRAPH SEPARATOR */ ?
-        DWRITE_SCRIPT_SHAPES_NO_VISUAL : DWRITE_SCRIPT_SHAPES_DEFAULT;
+    sa.shapes = DWRITE_SCRIPT_SHAPES_DEFAULT;
+    if ((c >= 0x0001 && c <= 0x001f) ||
+            (c >= 0x007f && c <= 0x009f) ||
+            (c == 0x00ad) /* SOFT HYPHEN */ ||
+            (c >= 0x200b && c <= 0x200f) ||
+            (c >= 0x2028 && c <= 0x202e) ||
+            (c >= 0x2060 && c <= 0x2064) ||
+            (c >= 0x2066 && c <= 0x206f) ||
+            (c == 0xfeff) ||
+            (c == 0xfff9) ||
+            (c == 0xfffa) ||
+            (c == 0xfffb))
+    {
+        sa.shapes = DWRITE_SCRIPT_SHAPES_NO_VISUAL;
+    }
+    else
+    {
+        sa.shapes = DWRITE_SCRIPT_SHAPES_DEFAULT;
+    }
+
     return sa;
 }
 




More information about the wine-cvs mailing list