[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