Huw Davies : riched20: Pass the character ptr and string length directly to the break proc helper .

Alexandre Julliard julliard at winehq.org
Tue Feb 5 13:25:25 CST 2013


Module: wine
Branch: master
Commit: 48b9ab37ac8029c4bb6625db976c166cacabc27d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=48b9ab37ac8029c4bb6625db976c166cacabc27d

Author: Huw Davies <huw at codeweavers.com>
Date:   Mon Feb  4 09:53:38 2013 +0000

riched20: Pass the character ptr and string length directly to the break proc helper.

---

 dlls/riched20/caret.c  |   22 ++++++++++++----------
 dlls/riched20/editor.h |    2 +-
 dlls/riched20/string.c |   10 +++++-----
 3 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index b5b618b..4c7ee8a 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -680,19 +680,21 @@ ME_MoveCursorWords(ME_TextEditor *editor, ME_Cursor *cursor, int nRelOfs)
     /* Backward movement */
     while (TRUE)
     {
-      nOffset = ME_CallWordBreakProc(editor, pRun->member.run.strText,
-                                     nOffset, WB_MOVEWORDLEFT);
+      nOffset = ME_CallWordBreakProc(editor, get_text( &pRun->member.run, 0 ),
+                                     pRun->member.run.len, nOffset, WB_MOVEWORDLEFT);
       if (nOffset)
         break;
       pOtherRun = ME_FindItemBack(pRun, diRunOrParagraph);
       if (pOtherRun->type == diRun)
       {
-        if (ME_CallWordBreakProc(editor, pOtherRun->member.run.strText,
+        if (ME_CallWordBreakProc(editor, get_text( &pOtherRun->member.run, 0 ),
+                                 pOtherRun->member.run.len,
                                  pOtherRun->member.run.len - 1,
                                  WB_ISDELIMITER)
             && !(pRun->member.run.nFlags & MERF_ENDPARA)
             && !(cursor->pRun == pRun && cursor->nOffset == 0)
-            && !ME_CallWordBreakProc(editor, pRun->member.run.strText, 0,
+            && !ME_CallWordBreakProc(editor, get_text( &pRun->member.run, 0 ),
+                                     pRun->member.run.len, 0,
                                      WB_ISDELIMITER))
           break;
         pRun = pOtherRun;
@@ -724,18 +726,18 @@ ME_MoveCursorWords(ME_TextEditor *editor, ME_Cursor *cursor, int nRelOfs)
     
     while (TRUE)
     {
-      if (last_delim && !ME_CallWordBreakProc(editor, pRun->member.run.strText,
-                                              nOffset, WB_ISDELIMITER))
+      if (last_delim && !ME_CallWordBreakProc(editor, get_text( &pRun->member.run, 0 ),
+                                              pRun->member.run.len, nOffset, WB_ISDELIMITER))
         break;
-      nOffset = ME_CallWordBreakProc(editor, pRun->member.run.strText,
-                                     nOffset, WB_MOVEWORDRIGHT);
+      nOffset = ME_CallWordBreakProc(editor, get_text( &pRun->member.run, 0 ),
+                                     pRun->member.run.len, nOffset, WB_MOVEWORDRIGHT);
       if (nOffset < pRun->member.run.len)
         break;
       pOtherRun = ME_FindItemFwd(pRun, diRunOrParagraphOrEnd);
       if (pOtherRun->type == diRun)
       {
-        last_delim = ME_CallWordBreakProc(editor, pRun->member.run.strText,
-                                          nOffset - 1, WB_ISDELIMITER);
+        last_delim = ME_CallWordBreakProc(editor, get_text( &pRun->member.run, 0 ),
+                                          pRun->member.run.len, nOffset - 1, WB_ISDELIMITER);
         pRun = pOtherRun;
         nOffset = 0;
       }
diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
index f01494c..de1a7bc 100644
--- a/dlls/riched20/editor.h
+++ b/dlls/riched20/editor.h
@@ -105,7 +105,7 @@ void ME_DestroyString(ME_String *s) DECLSPEC_HIDDEN;
 void ME_AppendString(ME_String *s1, const ME_String *s2) DECLSPEC_HIDDEN;
 ME_String *ME_VSplitString(ME_String *orig, int nVPos) DECLSPEC_HIDDEN;
 int ME_FindNonWhitespaceV(const ME_String *s, int nVChar) DECLSPEC_HIDDEN;
-int ME_CallWordBreakProc(ME_TextEditor *editor, ME_String *str, INT start, INT code) DECLSPEC_HIDDEN;
+int ME_CallWordBreakProc(ME_TextEditor *editor, WCHAR *str, INT len, INT start, INT code) DECLSPEC_HIDDEN;
 void ME_StrDeleteV(ME_String *s, int nVChar, int nChars) DECLSPEC_HIDDEN;
 /* smart helpers for A<->W conversions, they reserve/free memory and call MultiByte<->WideChar functions */
 LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz) DECLSPEC_HIDDEN;
diff --git a/dlls/riched20/string.c b/dlls/riched20/string.c
index 1c0da24..8db1a3b 100644
--- a/dlls/riched20/string.c
+++ b/dlls/riched20/string.c
@@ -180,20 +180,20 @@ ME_WordBreakProc(LPWSTR s, INT start, INT len, INT code)
 
 
 int
-ME_CallWordBreakProc(ME_TextEditor *editor, ME_String *str, INT start, INT code)
+ME_CallWordBreakProc(ME_TextEditor *editor, WCHAR *str, INT len, INT start, INT code)
 {
   if (!editor->pfnWordBreak) {
-    return ME_WordBreakProc(str->szData, start, str->nLen*sizeof(WCHAR), code);
+    return ME_WordBreakProc(str, start, len * sizeof(WCHAR), code);
   } else if (!editor->bEmulateVersion10) {
     /* MSDN lied about the third parameter for EditWordBreakProc being the number
      * of characters, it is actually the number of bytes of the string. */
-    return editor->pfnWordBreak(str->szData, start, str->nLen*sizeof(WCHAR), code);
+    return editor->pfnWordBreak(str, start, len * sizeof(WCHAR), code);
   } else {
     int result;
-    int buffer_size = WideCharToMultiByte(CP_ACP, 0, str->szData, str->nLen,
+    int buffer_size = WideCharToMultiByte(CP_ACP, 0, str, len,
                                           NULL, 0, NULL, NULL);
     char *buffer = heap_alloc(buffer_size);
-    WideCharToMultiByte(CP_ACP, 0, str->szData, str->nLen,
+    WideCharToMultiByte(CP_ACP, 0, str, len,
                         buffer, buffer_size, NULL, NULL);
     result = editor->pfnWordBreak((WCHAR*)buffer, start, buffer_size, code);
     heap_free(buffer);




More information about the wine-cvs mailing list