[Try 2]richedit: Implement WB_DELIMITER and remove todo_wines in tests.
James McKenzie
jjmckenzie51 at gmail.com
Tue Jul 26 21:15:08 CDT 2011
[Try 2] Remove if-else and duplicated code in tests.
Based on unpublished code of Dylan Smith.
Addresses issues with initial code through simplification found by
Dan Kegel.
Sets remaining EM_FINDWORDBREAK actions to FIXME.
To: wine-patches <wine-patches at winehq.org>
Reply-To: wine-devel <wine-devel at winehq.org>
---
dlls/riched20/editor.c | 39 +++++++++++++++++++++++++++++++++++++--
dlls/riched20/string.c | 22 ++++++++++++++++++----
dlls/riched20/tests/editor.c | 24 ++++++------------------
3 files changed, 61 insertions(+), 24 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 3c409e4..025d067 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -38,7 +38,7 @@
+ EM_EXSETSEL
+ EM_FINDTEXT (only FR_DOWN flag implemented)
+ EM_FINDTEXTEX (only FR_DOWN flag implemented)
- - EM_FINDWORDBREAK
+ + EM_FINDWORDBREAK (Partial implementation)
- EM_FMTLINES
- EM_FORMATRANGE
+ EM_GETAUTOURLDETECT 2.0
@@ -3007,7 +3007,6 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
switch(msg) {
UNSUPPORTED_MSG(EM_DISPLAYBAND)
- UNSUPPORTED_MSG(EM_FINDWORDBREAK)
UNSUPPORTED_MSG(EM_FMTLINES)
UNSUPPORTED_MSG(EM_FORMATRANGE)
UNSUPPORTED_MSG(EM_GETBIDIOPTIONS)
@@ -4378,6 +4377,42 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
FIXME("EM_SETTARGETDEVICE doesn't use non-NULL target devices\n");
}
return TRUE;
+ case EM_FINDWORDBREAK:
+ {
+ ME_Cursor cursor;
+
+ ME_CursorFromCharOfs(editor, lParam, &cursor);
+ switch(wParam)
+ {
+ case WB_ISDELIMITER:
+ return ME_CallWordBreakProc(editor, cursor.pRun->member.run.strText,
+ cursor.nOffset, wParam);
+ case WB_CLASSIFY:
+ FIXME("WB_CLASSIFY not yet implemented\n");
+ break;
+ case WB_LEFT:
+ FIXME("WB_LEFT not yet implemented\n");
+ break;
+ case WB_RIGHT:
+ FIXME("WB_RIGHT not yet implemented\n");
+ break;
+ case WB_MOVEWORDLEFT:
+ FIXME("WB_MOVEWORDLEFT not implemented\n");
+ break;
+ case WB_MOVEWORDRIGHT:
+ FIXME("WB_MOVEWORDRIGHT not implemented\n");
+ break;
+ case WB_LEFTBREAK:
+ FIXME("WB_LEFT/PREVBREAK not implemented\n");
+ break;
+ case WB_RIGHTBREAK:
+ FIXME("WB_RIGHT/NEXTBREAK not implemented\n");
+ break;
+ default:
+ FIXME("Unknown EM_FINDWORDBREAK code %d\n", (int)wParam);
+ return -1;
+ }
+ }
default:
do_default:
*phresult = S_FALSE;
diff --git a/dlls/riched20/string.c b/dlls/riched20/string.c
index db45d92..5424b8f 100644
--- a/dlls/riched20/string.c
+++ b/dlls/riched20/string.c
@@ -175,19 +175,27 @@ int ME_ReverseFindWhitespaceV(const ME_String *s, int nVChar) {
return i;
}
+static int
+ME_IsDefaultDelimiter(WCHAR c)
+{
+ return (
+ c == 0x20 || /* normal space */
+ c == 0xf020 /* Windows translates space from CP_SYMBOL to u+ff20 */
+ );
+}
static int
ME_WordBreakProc(LPWSTR s, INT start, INT len, INT code)
{
- /* FIXME: Native also knows about punctuation */
- TRACE("s==%s, start==%d, len==%d, code==%d\n",
- debugstr_wn(s, len), start, len, code);
/* convert number of bytes to number of characters. */
len /= sizeof(WCHAR);
+ TRACE("s==%s, start==%d, len==%d, code==%d\n",
+ debugstr_wn(s, len), start, len, code);
switch (code)
{
case WB_ISDELIMITER:
- return ME_IsWSpace(s[start]);
+ return ME_IsDefaultDelimiter(s[start]);
+ break;
case WB_LEFT:
case WB_MOVEWORDLEFT:
while (start && ME_IsWSpace(s[start - 1]))
@@ -202,6 +210,12 @@ ME_WordBreakProc(LPWSTR s, INT start, INT len, INT code)
while (start < len && ME_IsWSpace(s[start]))
start++;
return start;
+ case WB_CLASSIFY:
+ case WB_LEFTBREAK:
+ case WB_RIGHTBREAK:
+ default:
+ FIXME("Unimplemented EM_FINDWORDBREAK function\n");
+ return -1;
}
return 0;
}
diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c
index 6bc2d6b..70f109d 100644
--- a/dlls/riched20/tests/editor.c
+++ b/dlls/riched20/tests/editor.c
@@ -7083,15 +7083,9 @@ static void test_EM_FINDWORDBREAK_W(void)
wbuf[1] = 0;
SendMessageW(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)wbuf);
result = SendMessageW(hwndRichEdit, EM_FINDWORDBREAK, WB_ISDELIMITER,0);
- if (wbuf[0] == 0x20 || wbuf[0] == 0xf020)
- todo_wine
- ok(result == delimiter_tests[i].isdelimiter,
- "wanted ISDELIMITER_W(0x%x) %d, got %d\n",
- delimiter_tests[i].c, delimiter_tests[i].isdelimiter,result);
- else
- ok(result == delimiter_tests[i].isdelimiter,
- "wanted ISDELIMITER_W(0x%x) %d, got %d\n",
- delimiter_tests[i].c, delimiter_tests[i].isdelimiter, result);
+ ok(result == delimiter_tests[i].isdelimiter,
+ "wanted ISDELIMITER_W(0x%x) %d, got %d\n",
+ delimiter_tests[i].c, delimiter_tests[i].isdelimiter,result);
}
DestroyWindow(hwndRichEdit);
}
@@ -7121,15 +7115,9 @@ static void test_EM_FINDWORDBREAK_A(void)
buf[1] = 0;
SendMessageW(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)buf);
result = SendMessage(hwndRichEdit, EM_FINDWORDBREAK, WB_ISDELIMITER, 0);
- if (buf[0] == 0x20)
- todo_wine
- ok(result == delimiter_tests[i].isdelimiter,
- "wanted ISDELIMITER_A(0x%x) %d, got %d\n",
- delimiter_tests[i].c, delimiter_tests[i].isdelimiter,result);
- else
- ok(result == delimiter_tests[i].isdelimiter,
- "wanted ISDELIMITER_A(0x%x) %d, got %d\n",
- delimiter_tests[i].c, delimiter_tests[i].isdelimiter, result);
+ ok(result == delimiter_tests[i].isdelimiter,
+ "wanted ISDELIMITER_A(0x%x) %d, got %d\n",
+ delimiter_tests[i].c, delimiter_tests[i].isdelimiter,result);
}
DestroyWindow(hwndRichEdit);
}
--
1.7.6
--------------070302000303000206030106--
More information about the wine-patches
mailing list