From b671f9f84a415206fde423b7dbbe0c15a9ec9b47 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 27 Feb 2018 22:22:00 +0300 Subject: SmileyAdd: attempt to fix code insertion --- plugins/SmileyAdd/src/smileys.cpp | 41 +++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'plugins/SmileyAdd') diff --git a/plugins/SmileyAdd/src/smileys.cpp b/plugins/SmileyAdd/src/smileys.cpp index 8d6e69845f..16de9ebdf9 100644 --- a/plugins/SmileyAdd/src/smileys.cpp +++ b/plugins/SmileyAdd/src/smileys.cpp @@ -294,12 +294,36 @@ void SmileyPackType::AddTriggersToSmileyLookup(void) } } +///////////////////////////////////////////////////////////////////////////////////////// + +static MRegexp16 isCode(L"\\&\\#(\\d*)\\;"); + +static void replaceCodes(CMStringW &str) +{ + if (isCode.match(str) < 0) + return; + + str.Delete(isCode.getPos(), isCode.getLength()); + + uint32_t iCode = _wtoi(isCode.getGroup(1)); + wchar_t tmp[3] = { 0, 0, 0 }; + if (iCode < 0x10000) + tmp[0] = LOWORD(iCode), tmp[1] = HIWORD(iCode); + else { + iCode -= 0x10000; + tmp[0] = 0xD800 + (iCode >> 10); + tmp[1] = 0xDC00 + (iCode & 0x3FF); + } + str.Insert(isCode.getPos(), tmp); +} + void SmileyPackType::ReplaceAllSpecials(const CMStringW &Input, CMStringW &Output) { Output = Input; Output.Replace(L"%%_%%", L" "); Output.Replace(L"%%__%%", L" "); Output.Replace(L"%%''%%", L"\""); + replaceCodes(Output); } void SmileyPackType::Clear(void) @@ -842,8 +866,6 @@ void SmileyCategoryListType::AddAllProtocolsAsCategory(void) static const CMStringW testString(L"Test String"); -static MRegexp16 isCode(L"\\&\\#(\\d*)\\;"); - SmileyLookup::SmileyLookup(const CMStringW &str, const bool regexs, const int ind, const CMStringW &smpt) { m_ind = ind; @@ -857,19 +879,8 @@ SmileyLookup::SmileyLookup(const CMStringW &str, const bool regexs, const int in } } else { - if (isCode.match(str) >= 0) { - uint32_t iCode = _wtoi(isCode.getGroup(1)); - wchar_t tmp[3] = { 0, 0, 0 }; - if (iCode < 0x10000) - tmp[0] = LOWORD(iCode), tmp[1] = HIWORD(iCode); - else { - iCode -= 0x10000; - tmp[0] = 0xD800 + (iCode >> 10); - tmp[1] = 0xDC00 + (iCode & 0x3FF); - } - m_text = tmp; - } - else m_text = str; + m_text = str; + replaceCodes(m_text); m_valid = !str.IsEmpty(); } } -- cgit v1.2.3