Aric Stewart : usp10: Update ScriptItemize to use the baselevel of a unified run.

Alexandre Julliard julliard at winehq.org
Thu Apr 29 14:45:06 CDT 2010


Module: wine
Branch: master
Commit: d5672fee0ae543e070da17cdb5e68c3c0a330306
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d5672fee0ae543e070da17cdb5e68c3c0a330306

Author: Aric Stewart <aric at codeweavers.com>
Date:   Thu Apr 29 07:32:03 2010 -0500

usp10: Update ScriptItemize to use the baselevel of a unified run.

---

 dlls/usp10/tests/usp10.c |    8 ++++----
 dlls/usp10/usp10.c       |   16 +++++++++++++++-
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c
index 7a7567f..ad65b25 100644
--- a/dlls/usp10/tests/usp10.c
+++ b/dlls/usp10/tests/usp10.c
@@ -82,7 +82,7 @@ static void test_ScriptItemize( void )
 {
     static const WCHAR test1[] = {'t', 'e', 's', 't',0};
     static const itemTest t11[2] = {{{0,0,0,0},0,0,0,0},{{0,0,0,0},4,0,0,0}};
-    static const itemTest t12[2] = {{{0,0,0,1},0,0,0,2},{{0,0,0,0},4,0,0,0}};
+    static const itemTest t12[2] = {{{0,0,0,0},0,0,0,2},{{0,0,0,0},4,0,0,0}};
 
     /* Arabic, English*/
     static const WCHAR test2[] = {'1','2','3','-','5','2',0x064a,0x064f,0x0633,0x0627,0x0648,0x0650,0x064a,'7','1','.',0};
@@ -98,7 +98,7 @@ static void test_ScriptItemize( void )
  0x0e2d,0x0e22,0x0e39,0x0e48,0x0e17,0x0e35,0x0e48,0x0e19,0x0e31,0x0e48,0x0e19,0};
 
     static const itemTest t31[2] = {{{0,0,0,0},0,0,0,0},{{0,0,0,0},41,0,0,0}};
-    static const itemTest t32[2] = {{{0,0,0,1},0,0,0,2},{{0,0,0,0},41,0,0,0}};
+    static const itemTest t32[2] = {{{0,0,0,0},0,0,0,2},{{0,0,0,0},41,0,0,0}};
 
     static const WCHAR test4[]  = {'1','2','3','-','5','2',' ','i','s',' ','7','1','.',0};
 
@@ -116,7 +116,7 @@ static void test_ScriptItemize( void )
     /* Hebrew */
     static const WCHAR test6[]  = {0x05e9, 0x05dc, 0x05d5, 0x05dd, '.',0};
     static const itemTest t61[3] = {{{0,0,0,0},0,1,1,1},{{0,0,0,0},4,0,0,0},{{0,0,0,0},5,0,0,0}};
-    static const itemTest t62[3] = {{{0,0,0,0},0,1,1,1},{{0,1,1,1},4,1,1,1},{{0,0,0,0},5,0,0,0}};
+    static const itemTest t62[3] = {{{0,0,0,0},0,1,1,1},{{0,0,0,0},4,1,1,1},{{0,0,0,0},5,0,0,0}};
     static const WCHAR test7[]  = {'p','a','r','t',' ','o','n','e',' ',0x05d7, 0x05dc, 0x05e7, ' ', 0x05e9, 0x05ea, 0x05d9, 0x05d9, 0x05dd, ' ','p','a','r','t',' ','t','h','r','e','e', 0};
     static const itemTest t71[4] = {{{0,0,0,0},0,0,0,0},{{0,0,0,0},9,1,1,1},{{0,0,0,0},19,0,0,0},{{0,0,0,0},29,0,0,0}};
     static const itemTest t72[4] = {{{0,0,0,0},0,0,0,0},{{0,0,0,0},9,1,1,1},{{0,0,0,0},18,0,0,0},{{0,0,0,0},29,0,0,0}};
@@ -127,7 +127,7 @@ static void test_ScriptItemize( void )
     /* Syriac  (Like Arabic )*/
     static const WCHAR test9[] = {0x0710, 0x0712, 0x0712, 0x0714, '.',0};
     static const itemTest t91[3] = {{{0,0,0,0},0,1,1,1},{{0,0,0,0},4,0,0,0},{{0,0,0,0},5,0,0,0}};
-    static const itemTest t92[3] = {{{0,0,0,0},0,1,1,1},{{0,1,1,1},4,1,1,1},{{0,0,0,0},5,0,0,0}};
+    static const itemTest t92[3] = {{{0,0,0,0},0,1,1,1},{{0,0,0,0},4,1,1,1},{{0,0,0,0},5,0,0,0}};
 
     static const WCHAR test10[] = {0x0717, 0x0718, 0x071a, 0x071b,0};
     static const itemTest t101[2] = {{{0,0,0,0},0,1,1,1},{{0,0,0,0},4,0,0,0}};
diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c
index eebc8ab..0ab86a1 100644
--- a/dlls/usp10/usp10.c
+++ b/dlls/usp10/usp10.c
@@ -534,6 +534,7 @@ HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItem
     int   cnt = 0, index = 0;
     int   New_Script = SCRIPT_UNDEFINED;
     WORD  *levels = NULL;
+    WORD  baselevel = 0;
 
     TRACE("%s,%d,%d,%p,%p,%p,%p\n", debugstr_wn(pwcInChars, cInChars), cInChars, cMaxItems, 
           psControl, psState, pItems, pcItems);
@@ -549,6 +550,7 @@ HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItem
             return E_OUTOFMEMORY;
 
         BIDI_DetermineLevels(pwcInChars, cInChars, psState, psControl, levels);
+        baselevel = levels[0];
         for (i = 0; i < cInChars; i++)
             if (levels[i]!=levels[0])
                 break;
@@ -597,7 +599,12 @@ HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItem
         pItems[index].a.fRTL = 1;
         pItems[index].a.fLayoutRTL = 1;
     }
-
+    else
+    {
+        pItems[index].a.s.uBidiLevel = baselevel;
+        pItems[index].a.fLayoutRTL = odd(baselevel);
+        pItems[index].a.fRTL = odd(baselevel);
+    }
 
     TRACE("New_Level=%i New_Script=%d, eScript=%d index=%d cnt=%d iCharPos=%d\n",
           levels?levels[cnt]:-1, New_Script, pItems[index].a.eScript, index, cnt,
@@ -660,6 +667,13 @@ HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItem
                 pItems[index].a.fRTL = 1;
                 pItems[index].a.fLayoutRTL = 1;
             }
+            else
+            {
+                pItems[index].a.s.uBidiLevel = baselevel;
+                pItems[index].a.fLayoutRTL = odd(baselevel);
+                pItems[index].a.fRTL = odd(baselevel);
+            }
+
             pItems[index].a.eScript = New_Script;
 
             TRACE("index=%d cnt=%d iCharPos=%d\n", index, cnt, pItems[index].iCharPos);




More information about the wine-cvs mailing list