From dcf36bc803916561f01febeedb76501d3fe3f729 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Sun, 26 Sep 2010 21:46:33 +0300 Subject: modified: messages.cpp modified: options.cpp modified: replacer.suo --- messages.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'messages.cpp') diff --git a/messages.cpp b/messages.cpp index 16cac57..7b2424e 100644 --- a/messages.cpp +++ b/messages.cpp @@ -43,6 +43,8 @@ int RecvMsgSvc(WPARAM w, LPARAM l) return CallService(MS_PROTO_CHAINRECV, w, l); } +char *send_msg = NULL; + int SendMsgSvc(WPARAM w, LPARAM l) { CCSDATA *ccs = (CCSDATA*)l; @@ -55,6 +57,71 @@ int SendMsgSvc(WPARAM w, LPARAM l) HANDLE hContact = ccs->hContact; if(isProtoMetaContacts(hContact)) hContact = metaGetMostOnline(hContact); + + TCHAR *tmp = mir_a2t(msg); + wstring str = tmp; + mir_free(tmp); + + int i = 0; + char setting[32]; + mir_snprintf(setting, 31, "szSourceWord%d", i); + TCHAR *buf = UniGetContactSettingUtf(NULL, szReplacerModuleName, setting, _T("")); + wstring::size_type p1 = 0; + while(_tcslen(buf) > 0) + { + mir_snprintf(setting, 31, "szTargetWords%d", i); + TCHAR *buf2 = UniGetContactSettingUtf(NULL, szReplacerModuleName, setting, _T("")); + wstring tmp = buf2; + mir_free(buf2); + wstring::size_type p1 = 0, p2 = 0, end = 0; + p1 = tmp.find(_T("†")); //nice delimiter + int c = 0; + TCHAR *words[1024]; //fucked msvc does not support variable massive size ( + for(;;) + { + if(p1 == wstring::npos) + break; + if(!c) + { + words[c] = mir_wstrdup(tmp.substr(0, p1).c_str()); + p2 = end = p1; + } + else + { + p2 = tmp.find(_T("†"), p1+1); + if(p2 < end || p2 == p1) + break; + else if(p2 == wstring::npos) + break; + p1++; + words[c] = mir_wstrdup(tmp.substr(p1, p2-p1).c_str()); + end = p2; + } + p1 = p2; + c++; + } + if(c) + { + p1 = 0; + wstring::size_type end = 0; + while((p1 = str.find(buf), p1) != wstring::npos) + { + if(p1 < end) + break; + int p = (c>1)?(rand()%(c-1)):0; + str.replace(p1, (wstring::size_type)_tcslen(buf), words[p]); + p1+=_tcslen(words[p]); + end = p1; + } + } + mir_free(buf); + for(int cc = 0; cc < c; cc++) + mir_free(words[cc]); + i++; + mir_snprintf(setting, 31, "szSourceWord%d", i); + buf = UniGetContactSettingUtf(NULL, szReplacerModuleName, setting, _T("")); + } + ccs->lParam = (LPARAM)mir_utf8encodeW(str.c_str()); return CallService(MS_PROTO_CHAINSEND, w, l); } -- cgit v1.2.3