[PATCH 5/5] usp10: Properly check for numeric scripts.

Henri Verbeet hverbeet at codeweavers.com
Sun Jun 5 13:05:29 CDT 2016


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/usp10/tests/usp10.c | 16 ++++++++--------
 dlls/usp10/usp10.c       | 34 +++++++++++++++++-----------------
 2 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c
index 6017241..deb5da0 100644
--- a/dlls/usp10/tests/usp10.c
+++ b/dlls/usp10/tests/usp10.c
@@ -575,18 +575,18 @@ static const itemTest t74[4] = {{{0,0,0,0,0,0},0,0,0,0,1,latn_tag,FALSE},
                                     {{0,0,0,0,0,0}, 3,0,1,2,0,arab_tag,FALSE},{{0,1,0,1,0,0}, 6,0,1,2,0,arab_tag,FALSE},
                                     {{0,0,0,0,0,0}, 7,0,1,2,0,arab_tag,FALSE},{{0,1,0,1,0,0},10,0,1,2,0,arab_tag,FALSE},
                                     {{0,0,0,0,0,0},11,0,1,2,0,arab_tag,FALSE},{{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
-    static const itemTest t572[] = {{{0,0,0,1,0,0}, 0,0,0,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 2,0,1,2,0,arab_tag,FALSE},
-                                    {{0,0,0,1,0,0}, 3,0,0,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 6,0,1,2,0,arab_tag,FALSE},
-                                    {{0,0,0,1,0,0}, 7,0,0,2,0,arab_tag,FALSE},{{0,0,1,0,0,0},10,0,1,2,0,arab_tag,FALSE},
-                                    {{0,0,0,1,0,0},11,0,0,2,0,arab_tag,FALSE},{{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
+    static const itemTest t572[] = {{{0,0,0,0,0,0}, 0,0,0,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 2,0,1,2,0,arab_tag,FALSE},
+                                    {{0,0,0,0,0,0}, 3,0,0,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 6,0,1,2,0,arab_tag,FALSE},
+                                    {{0,0,0,0,0,0}, 7,0,0,2,0,arab_tag,FALSE},{{0,0,1,0,0,0},10,0,1,2,0,arab_tag,FALSE},
+                                    {{0,0,0,0,0,0},11,0,0,2,0,arab_tag,FALSE},{{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
     static const itemTest t573[] = {{{0,0,0,0,0,0}, 0,0,0,0,1,arab_tag,FALSE},{{0,0,0,0,0,0}, 2,0,0,0,1,arab_tag,FALSE},
                                     {{0,0,0,0,0,0}, 3,0,0,0,1,arab_tag,FALSE},{{0,0,0,0,0,0}, 6,0,0,0,1,arab_tag,FALSE},
                                     {{0,0,0,0,0,0}, 7,0,0,0,1,arab_tag,FALSE},{{0,0,0,0,0,0},10,0,0,0,1,arab_tag,FALSE},
                                     {{0,0,0,0,0,0},11,0,0,0,1,arab_tag,FALSE},{{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
-    static const itemTest t574[] = {{{0,0,1,0,0,0}, 0,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 2,0,1,2,0,arab_tag,FALSE},
-                                    {{0,0,1,0,0,0}, 3,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 6,0,1,2,0,arab_tag,FALSE},
-                                    {{0,0,1,0,0,0}, 7,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0},10,0,1,2,0,arab_tag,FALSE},
-                                    {{0,0,1,0,0,0},11,0,1,2,0,arab_tag,FALSE},{{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
+    static const itemTest t574[] = {{{0,0,0,0,0,0}, 0,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 2,0,1,2,0,arab_tag,FALSE},
+                                    {{0,0,0,0,0,0}, 3,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 6,0,1,2,0,arab_tag,FALSE},
+                                    {{0,0,0,0,0,0}, 7,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0},10,0,1,2,0,arab_tag,FALSE},
+                                    {{0,0,0,0,0,0},11,0,1,2,0,arab_tag,FALSE},{{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
 
     SCRIPT_ITEM items[15];
     SCRIPT_CONTROL  Control;
diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c
index 7f6af24..8c4991a 100644
--- a/dlls/usp10/usp10.c
+++ b/dlls/usp10/usp10.c
@@ -1253,6 +1253,10 @@ static inline WORD base_indic(WORD script)
     };
 }
 
+static BOOL script_is_numeric(WORD script)
+{
+    return scriptInformation[script].props.fNumeric;
+}
 
 static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
                 int cMaxItems, const SCRIPT_CONTROL *psControl,
@@ -1451,12 +1455,12 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
             for (i = 0; i < cInChars; i++)
             {
                 if (i > 0 && i < cInChars-1 &&
-                    scripts[i-1] == Script_Numeric &&
+                    script_is_numeric(scripts[i-1]) &&
                     strchrW(math_punc, pwcInChars[i]))
                 {
-                    if (scripts[i+1] == Script_Numeric)
+                    if (script_is_numeric(scripts[i+1]))
                     {
-                        scripts[i] = Script_Numeric;
+                        scripts[i] = scripts[i+1];
                         levels[i] = levels[i-1];
                         strength[i] = strength[i-1];
                         i++;
@@ -1466,11 +1470,11 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
                         int j;
                         for (j = i+1; j < cInChars; j++)
                         {
-                            if (scripts[j] == Script_Numeric)
+                            if (script_is_numeric(scripts[j]))
                             {
                                 for(;i<j; i++)
                                 {
-                                    scripts[i] = Script_Numeric;
+                                    scripts[i] = scripts[j];
                                     levels[i] = levels[i-1];
                                     strength[i] = strength[i-1];
                                 }
@@ -1483,8 +1487,9 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
 
             for (i = 0; i < cInChars; i++)
             {
-                /* Script_Numeric at level 0 get bumped to level 2 */
-                if (!overrides[i] && (levels[i] == 0 || (odd(psState->uBidiLevel) && levels[i] == psState->uBidiLevel+1)) && scripts[i] == Script_Numeric)
+                /* Numerics at level 0 get bumped to level 2 */
+                if (!overrides[i] && (levels[i] == 0 || (odd(psState->uBidiLevel)
+                        && levels[i] == psState->uBidiLevel + 1)) && script_is_numeric(scripts[i]))
                 {
                     levels[i] = 2;
                 }
@@ -1576,8 +1581,7 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
         if (overrides)
             pItems[index].a.s.fOverrideDirection = (overrides[cnt] != 0);
         pItems[index].a.fRTL = odd(levels[cnt]);
-        if (pItems[index].a.eScript == Script_Numeric ||
-            pItems[index].a.eScript == Script_Numeric2)
+        if (script_is_numeric(pItems[index].a.eScript))
             pItems[index].a.fLayoutRTL = layoutRTL;
         else
             pItems[index].a.fLayoutRTL = pItems[index].a.fRTL;
@@ -1590,8 +1594,7 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
         layoutRTL = odd(baselayout);
         pItems[index].a.s.uBidiLevel = baselevel;
         pItems[index].a.fRTL = odd(baselevel);
-        if (pItems[index].a.eScript == Script_Numeric ||
-            pItems[index].a.eScript == Script_Numeric2)
+        if (script_is_numeric(pItems[index].a.eScript))
             pItems[index].a.fLayoutRTL = odd(baselayout);
         else
             pItems[index].a.fLayoutRTL = pItems[index].a.fRTL;
@@ -1646,8 +1649,7 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
         if (!new_run && strength && str == BIDI_STRONG)
         {
             layoutRTL = odd(layout_levels[cnt]);
-            if (pItems[index].a.eScript == Script_Numeric ||
-                pItems[index].a.eScript == Script_Numeric2)
+            if (script_is_numeric(pItems[index].a.eScript))
                 pItems[index].a.fLayoutRTL = layoutRTL;
         }
 
@@ -1677,8 +1679,7 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
                 else
                     layoutRTL = (layoutRTL || odd(layout_levels[cnt]));
                 pItems[index].a.fRTL = odd(levels[cnt]);
-                if (pItems[index].a.eScript == Script_Numeric ||
-                    pItems[index].a.eScript == Script_Numeric2)
+                if (script_is_numeric(pItems[index].a.eScript))
                     pItems[index].a.fLayoutRTL = layoutRTL;
                 else
                     pItems[index].a.fLayoutRTL = pItems[index].a.fRTL;
@@ -1690,8 +1691,7 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
                     pItems[index].a.s.fOverrideDirection = TRUE;
                 pItems[index].a.s.uBidiLevel = baselevel;
                 pItems[index].a.fRTL = odd(baselevel);
-                if (pItems[index].a.eScript == Script_Numeric||
-                    pItems[index].a.eScript == Script_Numeric2)
+                if (script_is_numeric(pItems[index].a.eScript))
                     pItems[index].a.fLayoutRTL = layoutRTL;
                 else
                     pItems[index].a.fLayoutRTL = pItems[index].a.fRTL;
-- 
2.1.4




More information about the wine-patches mailing list