From afc16fc2d120e780220cddc03350122ad8e672fc Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Sun, 23 Dec 2012 19:45:46 +0000 Subject: remove html tags (thx Robyer) git-svn-id: http://svn.miranda-ng.org/main/trunk@2819 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Skype/src/skype.h | 1 + protocols/Skype/src/skype_events.cpp | 2 +- protocols/Skype/src/skype_proto.h | 19 +++++++ protocols/Skype/src/skype_utils.cpp | 100 ++++++++++++++++++++++++++--------- 4 files changed, 95 insertions(+), 27 deletions(-) (limited to 'protocols/Skype') diff --git a/protocols/Skype/src/skype.h b/protocols/Skype/src/skype.h index e9011fc3ec..8e357b1efd 100644 --- a/protocols/Skype/src/skype.h +++ b/protocols/Skype/src/skype.h @@ -6,6 +6,7 @@ #include #include #include +#include //#pragma warning(push) //# pragma warning(disable:4312) diff --git a/protocols/Skype/src/skype_events.cpp b/protocols/Skype/src/skype_events.cpp index 9b1e442133..7ae3583906 100644 --- a/protocols/Skype/src/skype_events.cpp +++ b/protocols/Skype/src/skype_events.cpp @@ -109,7 +109,7 @@ void CSkypeProto::OnMessageReceived(CConversation::Ref conversation, CMessage::R (DWORD)timestamp, sid, nick, - text); + CSkypeProto::RemoveHtml(text)); } else { diff --git a/protocols/Skype/src/skype_proto.h b/protocols/Skype/src/skype_proto.h index bd2f8ed109..cce9a776f2 100644 --- a/protocols/Skype/src/skype_proto.h +++ b/protocols/Skype/src/skype_proto.h @@ -115,6 +115,23 @@ const SettingItem setting[]={ {LPGENT("About"), "About", DBVT_WCHAR, LI_STRING} }; +struct HtmlEntity +{ + const char *entity; + char symbol; +}; + +const HtmlEntity htmlEntities[]={ + {"nbsp", ' '}, + {"amp", '&'}, + {"quot", '"'}, + {"lt", '<'}, + {"gt", '>'}, + {"apos", '\''}, + {"copy", '©'}, + // TODO: add more +}; + struct InviteChatParam { char *id; @@ -358,6 +375,8 @@ protected: static char CharBase64[]; static ULONG Base64Encode(char *inputString, char *outputBuffer, SIZE_T nMaxLength); + static char *RemoveHtml(char *data); + // instances static LIST instanceList; static int CompareProtos(const CSkypeProto *p1, const CSkypeProto *p2); diff --git a/protocols/Skype/src/skype_utils.cpp b/protocols/Skype/src/skype_utils.cpp index 5fdcb0dff1..008f295cae 100644 --- a/protocols/Skype/src/skype_utils.cpp +++ b/protocols/Skype/src/skype_utils.cpp @@ -1,32 +1,32 @@ #include "skype_proto.h" wchar_t* CSkypeProto::LogoutReasons[] = -{ - LPGENW("LOGOUT_CALLED") /* LOGOUT_CALLED */, - LPGENW("HTTPS_PROXY_AUTH_FAILED") /* HTTPS_PROXY_AUTH_FAILED */, - LPGENW("SOCKS_PROXY_AUTH_FAILED") /* SOCKS_PROXY_AUTH_FAILED */, - LPGENW("P2P_CONNECT_FAILED") /* P2P_CONNECT_FAILED */, - LPGENW("SERVER_CONNECT_FAILED") /* SERVER_CONNECT_FAILED */, - LPGENW("SERVER_OVERLOADED") /* SERVER_OVERLOADED */, - LPGENW("DB_IN_USE") /* DB_IN_USE */, - LPGENW("Invalid skypename") /* INVALID_SKYPENAME */, - LPGENW("Invalid email") /* INVALID_EMAIL */, - LPGENW("Unacceptable password") /* UNACCEPTABLE_PASSWORD */, - LPGENW("SKYPENAME_TAKEN") /* SKYPENAME_TAKEN */, - LPGENW("REJECTED_AS_UNDERAGE") /* REJECTED_AS_UNDERAGE */, - LPGENW("NO_SUCH_IDENTITY") /* NO_SUCH_IDENTITY */, - LPGENW("Incorrect password") /* INCORRECT_PASSWORD */, - LPGENW("Too many login attempts") /* TOO_MANY_LOGIN_ATTEMPTS */, - LPGENW("PASSWORD_HAS_CHANGED") /* PASSWORD_HAS_CHANGED */, - LPGENW("PERIODIC_UIC_UPDATE_FAILED") /* PERIODIC_UIC_UPDATE_FAILED */, - LPGENW("DB_DISK_FULL") /* DB_DISK_FULL */, - LPGENW("DB_IO_ERROR") /* DB_IO_ERROR */, - LPGENW("DB_CORRUPT") /* DB_CORRUPT */, - LPGENW("DB_FAILURE") /* DB_FAILURE */, - LPGENW("INVALID_APP_ID") /* INVALID_APP_ID */, - LPGENW("APP_ID_FAILURE") /* APP_ID_FAILURE */, - LPGENW("UNSUPPORTED_VERSION") /* UNSUPPORTED_VERSION */, - LPGENW("ATO (Account TakeOver) detected, account blocked") /* ATO_BLOCKED */, +{ + LPGENW("LOGOUT_CALLED") /* LOGOUT_CALLED */, + LPGENW("HTTPS_PROXY_AUTH_FAILED") /* HTTPS_PROXY_AUTH_FAILED */, + LPGENW("SOCKS_PROXY_AUTH_FAILED") /* SOCKS_PROXY_AUTH_FAILED */, + LPGENW("P2P_CONNECT_FAILED") /* P2P_CONNECT_FAILED */, + LPGENW("SERVER_CONNECT_FAILED") /* SERVER_CONNECT_FAILED */, + LPGENW("SERVER_OVERLOADED") /* SERVER_OVERLOADED */, + LPGENW("DB_IN_USE") /* DB_IN_USE */, + LPGENW("Invalid skypename") /* INVALID_SKYPENAME */, + LPGENW("Invalid email") /* INVALID_EMAIL */, + LPGENW("Unacceptable password") /* UNACCEPTABLE_PASSWORD */, + LPGENW("SKYPENAME_TAKEN") /* SKYPENAME_TAKEN */, + LPGENW("REJECTED_AS_UNDERAGE") /* REJECTED_AS_UNDERAGE */, + LPGENW("NO_SUCH_IDENTITY") /* NO_SUCH_IDENTITY */, + LPGENW("Incorrect password") /* INCORRECT_PASSWORD */, + LPGENW("Too many login attempts") /* TOO_MANY_LOGIN_ATTEMPTS */, + LPGENW("PASSWORD_HAS_CHANGED") /* PASSWORD_HAS_CHANGED */, + LPGENW("PERIODIC_UIC_UPDATE_FAILED") /* PERIODIC_UIC_UPDATE_FAILED */, + LPGENW("DB_DISK_FULL") /* DB_DISK_FULL */, + LPGENW("DB_IO_ERROR") /* DB_IO_ERROR */, + LPGENW("DB_CORRUPT") /* DB_CORRUPT */, + LPGENW("DB_FAILURE") /* DB_FAILURE */, + LPGENW("INVALID_APP_ID") /* INVALID_APP_ID */, + LPGENW("APP_ID_FAILURE") /* APP_ID_FAILURE */, + LPGENW("UNSUPPORTED_VERSION") /* UNSUPPORTED_VERSION */, + LPGENW("ATO (Account TakeOver) detected, account blocked") /* ATO_BLOCKED */, LPGENW("Logout from another instance") /* REMOTE_LOGOUT */, LPGENW("") /* ACCESS_TOKEN_RENEWAL_FAILED */ }; @@ -524,4 +524,52 @@ ULONG CSkypeProto::Base64Encode(char *inputString, char *outputBuffer, SIZE_T nM outputBuffer[outpos] = 0; return outpos; +} + +char *CSkypeProto::RemoveHtml(char *text) +{ + std::string new_string = ""; + std::string data = text; + + for (std::string::size_type i = 0; i < data.length(); i++) + { + if (data.at(i) == '<' && data.at(i+1) != ' ') + { + i = data.find(">", i); + if (i == std::string::npos) + break; + + continue; + } + + if (data.at(i) == '&') { + std::string::size_type begin = i; + i = data.find(";", i); + if (i == std::string::npos) { + i = begin; + } else { + std::string entity = data.substr(begin+1, i-begin-1); + + bool found = false; + for (int j=0; j