Huw Davies : riched20: Pass character ptrs to the whitespace finding functions.
Alexandre Julliard
julliard at winehq.org
Tue Feb 5 13:25:26 CST 2013
Module: wine
Branch: master
Commit: b730efc9b422f0ef8c61c4d13924acbed1263404
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b730efc9b422f0ef8c61c4d13924acbed1263404
Author: Huw Davies <huw at codeweavers.com>
Date: Tue Feb 5 13:19:40 2013 +0000
riched20: Pass character ptrs to the whitespace finding functions.
---
dlls/riched20/string.c | 27 --------------------------
dlls/riched20/wrap.c | 49 ++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 41 insertions(+), 35 deletions(-)
diff --git a/dlls/riched20/string.c b/dlls/riched20/string.c
index 8db1a3b..0e13394 100644
--- a/dlls/riched20/string.c
+++ b/dlls/riched20/string.c
@@ -121,33 +121,6 @@ void ME_StrDeleteV(ME_String *s, int nVChar, int nChars)
s->nLen -= nChars;
}
-int ME_FindNonWhitespaceV(const ME_String *s, int nVChar) {
- int i;
- for (i = nVChar; i<s->nLen && ME_IsWSpace(s->szData[i]); i++)
- ;
-
- return i;
-}
-
-/* note: returns offset of the first trailing whitespace */
-int ME_ReverseFindNonWhitespaceV(const ME_String *s, int nVChar) {
- int i;
- for (i = nVChar; i>0 && ME_IsWSpace(s->szData[i-1]); i--)
- ;
-
- return i;
-}
-
-/* note: returns offset of the first trailing nonwhitespace */
-int ME_ReverseFindWhitespaceV(const ME_String *s, int nVChar) {
- int i;
- for (i = nVChar; i>0 && !ME_IsWSpace(s->szData[i-1]); i--)
- ;
-
- return i;
-}
-
-
static int
ME_WordBreakProc(LPWSTR s, INT start, INT len, INT code)
{
diff --git a/dlls/riched20/wrap.c b/dlls/riched20/wrap.c
index 9c72285..b63697b 100644
--- a/dlls/riched20/wrap.c
+++ b/dlls/riched20/wrap.c
@@ -206,13 +206,46 @@ static void ME_WrapSizeRun(ME_WrapContext *wc, ME_DisplayItem *p)
wc->nRow ? wc->nLeftMargin : wc->nFirstMargin, &p->member.run);
}
+
+static int find_non_whitespace(const WCHAR *s, int len, int start)
+{
+ int i;
+ for (i = start; i < len && ME_IsWSpace( s[i] ); i++)
+ ;
+
+ return i;
+}
+
+/* note: these two really return the first matching offset (starting from EOS)+1
+ * in other words, an offset of the first trailing white/black */
+
+/* note: returns offset of the first trailing whitespace */
+static int reverse_find_non_whitespace(const WCHAR *s, int start)
+{
+ int i;
+ for (i = start; i > 0 && ME_IsWSpace( s[i - 1] ); i--)
+ ;
+
+ return i;
+}
+
+/* note: returns offset of the first trailing nonwhitespace */
+static int reverse_find_whitespace(const WCHAR *s, int start)
+{
+ int i;
+ for (i = start; i > 0 && !ME_IsWSpace( s[i - 1] ); i--)
+ ;
+
+ return i;
+}
+
static ME_DisplayItem *ME_MaximizeSplit(ME_WrapContext *wc, ME_DisplayItem *p, int i)
{
ME_DisplayItem *pp, *piter = p;
int j;
if (!i)
return NULL;
- j = ME_ReverseFindNonWhitespaceV(p->member.run.strText, i);
+ j = reverse_find_non_whitespace( get_text( &p->member.run, 0 ), i);
if (j>0) {
pp = ME_SplitRun(wc, piter, j);
wc->pt.x += piter->member.run.nWidth;
@@ -232,8 +265,8 @@ static ME_DisplayItem *ME_MaximizeSplit(ME_WrapContext *wc, ME_DisplayItem *p, i
}
if (piter->member.run.nFlags & MERF_ENDWHITE)
{
- i = ME_ReverseFindNonWhitespaceV(piter->member.run.strText,
- piter->member.run.len);
+ i = reverse_find_non_whitespace( get_text( &piter->member.run, 0 ),
+ piter->member.run.len );
pp = ME_SplitRun(wc, piter, i);
wc->pt = pp->member.run.pt;
return pp;
@@ -261,7 +294,7 @@ static ME_DisplayItem *ME_SplitByBacktracking(ME_WrapContext *wc, ME_DisplayItem
assert(i<len);
if (i) {
/* don't split words */
- i = ME_ReverseFindWhitespaceV(run->strText, i);
+ i = reverse_find_whitespace( get_text( run, 0 ), i );
pp = ME_MaximizeSplit(wc, p, i);
if (pp)
return pp;
@@ -285,9 +318,9 @@ static ME_DisplayItem *ME_SplitByBacktracking(ME_WrapContext *wc, ME_DisplayItem
run = &piter->member.run;
len = run->len;
/* don't split words */
- i = ME_ReverseFindWhitespaceV(run->strText, len);
+ i = reverse_find_whitespace( get_text( run, 0 ), len );
if (i == len)
- i = ME_ReverseFindNonWhitespaceV(run->strText, len);
+ i = reverse_find_non_whitespace( get_text( run, 0 ), len );
if (i) {
ME_DisplayItem *piter2 = ME_SplitRun(wc, piter, i);
wc->pt = piter2->member.run.pt;
@@ -357,7 +390,7 @@ static ME_DisplayItem *ME_WrapHandleRun(ME_WrapContext *wc, ME_DisplayItem *p)
if (run->nFlags & MERF_STARTWHITE) {
/* try to split the run at the first non-white char */
int black;
- black = ME_FindNonWhitespaceV(run->strText, 0);
+ black = find_non_whitespace( get_text( run, 0 ), run->len, 0 );
if (black) {
wc->bOverflown = FALSE;
pp = ME_SplitRun(wc, p, black);
@@ -410,7 +443,7 @@ static ME_DisplayItem *ME_WrapHandleRun(ME_WrapContext *wc, ME_DisplayItem *p)
if (run->nFlags & MERF_ENDWHITE)
{
/* we aren't sure if it's *really* necessary, it's a good start however */
- int black = ME_ReverseFindNonWhitespaceV(run->strText, len);
+ int black = reverse_find_non_whitespace( get_text( run, 0 ), len );
ME_SplitRun(wc, p, black);
/* handle both parts again */
return p;
More information about the wine-cvs
mailing list