usp10: Itemise ZWSP like ZWNJ and ZWJ.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Aric Stewart <aric@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet 2017-02-13 22:57:14 +01:00 committed by Alexandre Julliard
parent 721fbf617b
commit d00f7315e0
2 changed files with 7 additions and 5 deletions

View File

@ -1799,7 +1799,7 @@ static void test_ScriptShape(HDC hdc)
chars[1] = c; chars[1] = c;
hr = ScriptItemize(chars, 3, 4, NULL, NULL, items, &nb); hr = ScriptItemize(chars, 3, 4, NULL, NULL, items, &nb);
ok(hr == S_OK, "%s: [%02x] expected S_OK, got %08x\n", lf.lfFaceName, c, hr); ok(hr == S_OK, "%s: [%02x] expected S_OK, got %08x\n", lf.lfFaceName, c, hr);
todo_wine_if(c == 0x200b) ok(nb == test_data[j].item_count, "%s: [%02x] Got unexpected item count %d.\n", ok(nb == test_data[j].item_count, "%s: [%02x] Got unexpected item count %d.\n",
lf.lfFaceName, c, nb); lf.lfFaceName, c, nb);
item = &items[test_data[j].item]; item = &items[test_data[j].item];

View File

@ -1363,7 +1363,7 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
for (i = 0; i < cInChars; i++) for (i = 0; i < cInChars; i++)
{ {
/* Joiners get merged preferencially right */ /* Joiners get merged preferencially right */
if (i > 0 && (pwcInChars[i] == ZWJ || pwcInChars[i] == ZWNJ)) if (i > 0 && (pwcInChars[i] == ZWJ || pwcInChars[i] == ZWNJ || pwcInChars[i] == ZWSP))
{ {
int j; int j;
if (i+1 == cInChars) if (i+1 == cInChars)
@ -1372,7 +1372,8 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
{ {
for (j = i+1; j < cInChars; j++) for (j = i+1; j < cInChars; j++)
{ {
if (pwcInChars[j] != ZWJ && pwcInChars[j] != ZWNJ && pwcInChars[j] != Numeric_space) if (pwcInChars[j] != ZWJ && pwcInChars[j] != ZWNJ
&& pwcInChars[j] != ZWSP && pwcInChars[j] != Numeric_space)
{ {
scripts[i] = scripts[j]; scripts[i] = scripts[j];
break; break;
@ -1497,14 +1498,15 @@ static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars,
} }
/* Joiners get merged preferencially right */ /* Joiners get merged preferencially right */
if (i > 0 && (pwcInChars[i] == ZWJ || pwcInChars[i] == ZWNJ)) if (i > 0 && (pwcInChars[i] == ZWJ || pwcInChars[i] == ZWNJ || pwcInChars[i] == ZWSP))
{ {
int j; int j;
if (i+1 == cInChars && levels[i-1] == levels[i]) if (i+1 == cInChars && levels[i-1] == levels[i])
strength[i] = strength[i-1]; strength[i] = strength[i-1];
else else
for (j = i+1; j < cInChars && levels[i] == levels[j]; j++) for (j = i+1; j < cInChars && levels[i] == levels[j]; j++)
if (pwcInChars[j] != ZWJ && pwcInChars[j] != ZWNJ && pwcInChars[j] != Numeric_space) if (pwcInChars[j] != ZWJ && pwcInChars[j] != ZWNJ
&& pwcInChars[j] != ZWSP && pwcInChars[j] != Numeric_space)
{ {
strength[i] = strength[j]; strength[i] = strength[j];
break; break;