From: Jactry Zeng Subject: [PATCH 2/4] riched20: Use codepage in ME_ToUnicode. (try 4) Message-Id: <5229ABBE.7000604@gmail.com> Date: Fri, 06 Sep 2013 18:17:34 +0800 From 63e76d99d789288c0829aec6c4f67cd4cb799168 Mon Sep 17 00:00:00 2001 From: Jactry Zeng Date: Fri, 6 Sep 2013 10:59:50 +0800 Subject: [PATCH 2/4] riched20: Use codepage in ME_ToUnicode. To: wine-patches Reply-To: wine-devel --- dlls/riched20/editor.c | 23 ++++++++++++----------- dlls/riched20/editor.h | 5 +++-- dlls/riched20/string.c | 12 ++++++------ 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index e4d0434..819eb64 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -1918,7 +1918,7 @@ static int ME_GetTextEx(ME_TextEditor *editor, GETTEXTEX *ex, LPARAM pText) ME_SetCursorToStart(editor, &start); nChars = INT_MAX; } - if (ex->codepage == 1200) + if (ex->codepage == CP_UNICODE) { return ME_GetTextW(editor, (LPWSTR)pText, ex->cb / sizeof(WCHAR) - 1, &start, nChars, ex->flags & GT_USECRLF); @@ -3288,7 +3288,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, * we know it isn't unicode. */ bRtf = (lParam && (!strncmp((char *)lParam, "{\\rtf", 5) || !strncmp((char *)lParam, "{\\urtf", 6))); - bUnicode = !bRtf && pStruct->codepage == 1200; + bUnicode = !bRtf && pStruct->codepage == CP_UNICODE; TRACE("EM_SETTEXTEX - %s, flags %d, cp %d\n", bUnicode ? debugstr_w((LPCWSTR)lParam) : debugstr_a((LPCSTR)lParam), @@ -3314,10 +3314,9 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, len = lParam ? strlen((char *)lParam) : 0; } } else { - /* FIXME: make use of pStruct->codepage in the to unicode translation */ - wszText = lParam ? ME_ToUnicode(bUnicode, (void *)lParam, &len) : NULL; + wszText = lParam ? ME_ToUnicode(pStruct->codepage, (void *)lParam, &len) : NULL; ME_InsertTextFromCursor(editor, 0, wszText, len, style); - ME_EndToUnicode(bUnicode, wszText); + ME_EndToUnicode(pStruct->codepage, wszText); } if (bSelection) { @@ -3505,7 +3504,8 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, int from, to, nStartCursor; ME_Style *style; int len = 0; - LPWSTR wszText = lParam ? ME_ToUnicode(unicode, (void *)lParam, &len) : NULL; + LONG codepage = unicode ? CP_UNICODE : CP_ACP; + LPWSTR wszText = lParam ? ME_ToUnicode(codepage, (void *)lParam, &len) : NULL; TRACE("EM_REPLACESEL - %s\n", debugstr_w(wszText)); nStartCursor = ME_GetSelectionOfs(editor, &from, &to); @@ -3520,7 +3520,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, */ if (len>0 && wszText[len-1] == '\n') ME_ClearTempStyle(editor); - ME_EndToUnicode(unicode, wszText); + ME_EndToUnicode(codepage, wszText); ME_CommitUndo(editor); ME_UpdateSelectionLinkAttribute(editor); if (!wParam) @@ -3576,7 +3576,8 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, else { int textLen; - LPWSTR wszText = ME_ToUnicode(unicode, (void *)lParam, &textLen); + LONG codepage = unicode ? CP_UNICODE : CP_ACP; + LPWSTR wszText = ME_ToUnicode(codepage, (void *)lParam, &textLen); TRACE("WM_SETTEXT - %s\n", debugstr_w(wszText)); /* debugstr_w() */ if (textLen > 0) { @@ -3593,7 +3594,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, } ME_InsertTextFromCursor(editor, 0, wszText, len, editor->pBuffer->pDefaultStyle); } - ME_EndToUnicode(unicode, wszText); + ME_EndToUnicode(codepage, wszText); } } else @@ -3641,7 +3642,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, /* CR/LF conversion required in 2.0 mode, verbatim in 1.0 mode */ how.flags = GTL_CLOSE | (editor->bEmulateVersion10 ? 0 : GTL_USECRLF) | GTL_NUMCHARS; - how.codepage = unicode ? 1200 : CP_ACP; + how.codepage = unicode ? CP_UNICODE : CP_ACP; return ME_GetTextLengthEx(editor, &how); } case EM_GETTEXTLENGTHEX: @@ -3651,7 +3652,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, GETTEXTEX ex; ex.cb = wParam * (unicode ? sizeof(WCHAR) : sizeof(CHAR)); ex.flags = GT_USECRLF; - ex.codepage = unicode ? 1200 : CP_ACP; + ex.codepage = unicode ? CP_UNICODE : CP_ACP; ex.lpDefaultChar = NULL; ex.lpUsedDefChar = NULL; return ME_GetTextEx(editor, &ex, lParam); diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h index 5893051..69760c8 100644 --- a/dlls/riched20/editor.h +++ b/dlls/riched20/editor.h @@ -108,9 +108,10 @@ int ME_CallWordBreakProc(ME_TextEditor *editor, WCHAR *str, INT len, INT start, void ME_StrDeleteV(ME_String *s, int nVChar, int nChars) DECLSPEC_HIDDEN; BOOL ME_InsertString(ME_String *s, int ofs, const WCHAR *insert, int len) DECLSPEC_HIDDEN; +#define CP_UNICODE 1200 /* smart helpers for A<->W conversions, they reserve/free memory and call MultiByte<->WideChar functions */ -LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz, INT *len) DECLSPEC_HIDDEN; -void ME_EndToUnicode(BOOL unicode, LPVOID psz) DECLSPEC_HIDDEN; +LPWSTR ME_ToUnicode(LONG codepage, LPVOID psz, INT *len) DECLSPEC_HIDDEN; +void ME_EndToUnicode(LONG codepage, LPVOID psz) DECLSPEC_HIDDEN; static inline int ME_IsWSpace(WCHAR ch) { diff --git a/dlls/riched20/string.c b/dlls/riched20/string.c index 66c0cab..7162b84 100644 --- a/dlls/riched20/string.c +++ b/dlls/riched20/string.c @@ -172,18 +172,18 @@ ME_CallWordBreakProc(ME_TextEditor *editor, WCHAR *str, INT len, INT start, INT } } -LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz, INT *len) +LPWSTR ME_ToUnicode(LONG codepage, LPVOID psz, INT *len) { assert(psz != NULL); - if (unicode) + if (codepage == CP_UNICODE) { if(len) *len = lstrlenW(psz); return psz; } else { WCHAR *tmp; - int nChars = MultiByteToWideChar(CP_ACP, 0, psz, -1, NULL, 0); + int nChars = MultiByteToWideChar(codepage, 0, psz, -1, NULL, 0); if(!nChars) { @@ -192,14 +192,14 @@ LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz, INT *len) } if((tmp = ALLOC_N_OBJ(WCHAR, nChars)) != NULL) - MultiByteToWideChar(CP_ACP, 0, psz, -1, tmp, nChars); + MultiByteToWideChar(codepage, 0, psz, -1, tmp, nChars); if(len) *len = nChars - 1; return tmp; } } -void ME_EndToUnicode(BOOL unicode, LPVOID psz) +void ME_EndToUnicode(LONG codepage, LPVOID psz) { - if (!unicode) + if (codepage != CP_UNICODE) FREE_OBJ(psz); } -- 1.7.10.4