[1/4] usp10: Improve handling of whitespace in ScriptBreak.

Hans Leidekker hans at codeweavers.com
Tue Jan 6 04:20:26 CST 2009


diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c
index c63c6c8..429f51c 100644
--- a/dlls/usp10/tests/usp10.c
+++ b/dlls/usp10/tests/usp10.c
@@ -1382,6 +1382,50 @@ static void test_ScriptGetProperties(void)
     ok(hr == S_OK, "ScriptGetProperties failed: 0x%08x\n", hr);
 }
 
+static void test_ScriptBreak(void)
+{
+    static const WCHAR test[] = {' ','\r','\n',0};
+    SCRIPT_ITEM items[4];
+    SCRIPT_LOGATTR la;
+    HRESULT hr;
+
+    hr = ScriptItemize(test, 3, 4, NULL, NULL, items, NULL);
+    ok(!hr, "ScriptItemize should return S_OK not %08x\n", hr);
+
+    memset(&la, 0, sizeof(la));
+    hr = ScriptBreak(test, 1, &items[0].a, &la);
+    ok(!hr, "ScriptBreak should return S_OK not %08x\n", hr);
+
+    ok(!la.fSoftBreak, "fSoftBreak set\n");
+    ok(la.fWhiteSpace, "fWhiteSpace not set\n");
+    ok(la.fCharStop, "fCharStop not set\n");
+    ok(!la.fWordStop, "fWordStop set\n");
+    ok(!la.fInvalid, "fInvalid set\n");
+    ok(!la.fReserved, "fReserved set\n");
+
+    memset(&la, 0, sizeof(la));
+    hr = ScriptBreak(test + 1, 1, &items[1].a, &la);
+    ok(!hr, "ScriptBreak should return S_OK not %08x\n", hr);
+
+    ok(!la.fSoftBreak, "fSoftBreak set\n");
+    ok(!la.fWhiteSpace, "fWhiteSpace set\n");
+    ok(la.fCharStop, "fCharStop not set\n");
+    ok(!la.fWordStop, "fWordStop set\n");
+    ok(!la.fInvalid, "fInvalid set\n");
+    ok(!la.fReserved, "fReserved set\n");
+
+    memset(&la, 0, sizeof(la));
+    hr = ScriptBreak(test + 2, 1, &items[2].a, &la);
+    ok(!hr, "ScriptBreak should return S_OK not %08x\n", hr);
+
+    ok(!la.fSoftBreak, "fSoftBreak set\n");
+    ok(!la.fWhiteSpace, "fWhiteSpace set\n");
+    ok(la.fCharStop, "fCharStop not set\n");
+    ok(!la.fWordStop, "fWordStop set\n");
+    ok(!la.fInvalid, "fInvalid set\n");
+    ok(!la.fReserved, "fReserved set\n");
+}
+
 START_TEST(usp10)
 {
     HWND            hwnd;
@@ -1426,6 +1470,7 @@ START_TEST(usp10)
     test_ScriptLayout();
     test_digit_substitution();
     test_ScriptGetProperties();
+    test_ScriptBreak();
 
     ReleaseDC(hwnd, hdc);
     DestroyWindow(hwnd);
diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c
index 4af14ae..fb920ca 100644
--- a/dlls/usp10/usp10.c
+++ b/dlls/usp10/usp10.c
@@ -1041,8 +1041,14 @@ HRESULT WINAPI ScriptBreak(const WCHAR *chars, int count, const SCRIPT_ANALYSIS
         memset(&la[i], 0, sizeof(SCRIPT_LOGATTR));
 
         /* FIXME: set the other flags */
-        la[i].fWhiteSpace = isspaceW(chars[i]);
+        la[i].fWhiteSpace = (chars[i] == ' ');
         la[i].fCharStop = 1;
+
+        if (i > 0 && la[i - 1].fWhiteSpace)
+        {
+            la[i].fSoftBreak = 1;
+            la[i].fWordStop = 1;
+        }
     }
     return S_OK;
 }



More information about the wine-patches mailing list