diff options
Diffstat (limited to 'nohtml/filter.cpp')
-rw-r--r-- | nohtml/filter.cpp | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/nohtml/filter.cpp b/nohtml/filter.cpp index 4fd57cd..4e7839c 100644 --- a/nohtml/filter.cpp +++ b/nohtml/filter.cpp @@ -30,7 +30,24 @@ int FilterSendMessage(WPARAM wParam, LPARAM lParam) { if((options.apply_to & ATF_ALL)
|| ((options.apply_to & ATF_OTR) && ContactIsOTREncrypted(ccs->hContact)))
{
- if(ccs->wParam & PREF_UNICODE) {
+ if(ccs->wParam & PREF_UTF) {
+ int size = MultiByteToWideChar(CP_UTF8, 0, old_message, -1, 0, 0);
+ wchar_t *messagew = (wchar_t *)malloc(size * sizeof(wchar_t));
+ MultiByteToWideChar(CP_UTF8, 0, old_message, -1, messagew, size);
+ wchar_t* smsg=strip_carrots(messagew);
+ wchar_t* html_msg;
+ if(options.html) {
+ html_msg=bbcodes_to_html(smsg);
+ delete[] smsg;
+ } else
+ html_msg = smsg;
+
+ free(messagew);
+ size = WideCharToMultiByte(CP_UTF8, 0, html_msg, -1, 0, 0, 0, 0);
+ buf = (char *)malloc(size);
+ WideCharToMultiByte(CP_UTF8, 0, html_msg, -1, buf, size, 0, 0);
+ delete[] html_msg;
+ } else if(ccs->wParam & PREF_UNICODE) {
wchar_t *messagew = (wchar_t *)&old_message[strlen(old_message)+1];
wchar_t* smsg=strip_carrots(messagew);
wchar_t* html_msg;
@@ -83,7 +100,35 @@ int FilterRecvMessage(WPARAM wParam, LPARAM lParam) { if((options.apply_to & ATF_ALL)
|| ((options.apply_to & ATF_OTR) && ContactIsOTREncrypted(ccs->hContact)))
{
- if(pre->flags & PREF_UNICODE) {
+ if(pre->flags & PREF_UTF) {
+ LOG("Recieved a utf8 message.");
+ int size = MultiByteToWideChar(CP_UTF8, 0, old_message, -1, 0, 0);
+ wchar_t *messagew = (wchar_t *)malloc(size * sizeof(wchar_t));
+ MultiByteToWideChar(CP_UTF8, 0, old_message, -1, messagew, size);
+
+ LOGW(messagew);
+ wchar_t* st_wbuf;
+ if(options.bbcodes)
+ {
+ LOG("Converting from html to bbcodes then stripping leftover html.(U)");
+ wchar_t* bbuf=html_to_bbcodes(messagew);
+ st_wbuf=strip_html(bbuf);
+ delete[] bbuf;
+ }
+ else
+ {
+ LOG("Stripping html.(U)");
+ st_wbuf=strip_html(messagew);
+ }
+ free(messagew);
+
+ //delete[] pre->szMessage; not necessary - done in server.cpp
+ buf=(char *)malloc(wcslen(st_wbuf)*3+3);
+ WideCharToMultiByte( CP_ACP, 0,st_wbuf, -1,buf,wcslen(st_wbuf)+1, NULL, NULL);
+ memcpy(&buf[strlen(buf)+1],st_wbuf,lstrlen(buf)*2+2);
+ delete[] st_wbuf;
+ pre->szMessage = buf;
+ } else if(pre->flags & PREF_UNICODE) {
LOG("Recieved a unicode message.");
wchar_t *messagew = (wchar_t *)&old_message[strlen(old_message)+1];
//wchar_t* wbuf=(wchar_t*)&pre->szMessage[lstrlen(pre->szMessage)+1];
|