From 48b9ab37ac8029c4bb6625db976c166cacabc27d Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Mon, 4 Feb 2013 09:53:38 +0000 Subject: [PATCH] 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 b5b618b2ffd..4c7ee8a746f 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 f01494cd5ab..de1a7bc4a25 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 1c0da2419e3..8db1a3be471 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); -- 2.11.4.GIT