[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