richedit-test-please-ignore

James McKenzie jjmckenzie51 at gmail.com
Mon Aug 1 22:09:44 CDT 2011


---
 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..414d76f 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   ||  /* ANSI space */
+      c == 0xf020     /* MS private for CP_SYMBOL round trip?, see kb897872 */
+  );
+}
 
 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 77ce09e..36f6eb3 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


--------------000309090305090902020902--



More information about the wine-patches mailing list