diff options
author | mnikolenko <none@none> | 2017-04-03 02:21:18 +0300 |
---|---|---|
committer | mnikolenko <none@none> | 2017-04-03 02:21:18 +0300 |
commit | c27dbc62148f51ff5848f63573f5816235f0cc35 (patch) | |
tree | 67afa02b1f2e30ab0d49388826cee3e507bf81dd | |
parent | 7980dedc3205d2c1a7596d4cad3fa3f7fff383a5 (diff) |
MAINT-6404 FIXED When pasting text with mac linebreak into a notecard, it shouldn't be removed
-rw-r--r-- | indra/llcommon/llstring.h | 23 | ||||
-rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 2 |
2 files changed, 24 insertions, 1 deletions
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index a40db0f8cc..2255e638c2 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -336,6 +336,7 @@ public: static void addCRLF(string_type& string); static void removeCRLF(string_type& string); + static void removeWindowsCR(string_type& string); static void replaceTabsWithSpaces( string_type& string, size_type spaces_per_tab ); static void replaceNonstandardASCII( string_type& string, T replacement ); @@ -1322,6 +1323,28 @@ void LLStringUtilBase<T>::removeCRLF(string_type& string) //static template<class T> +void LLStringUtilBase<T>::removeWindowsCR(string_type& string) +{ + const T LF = 10; + const T CR = 13; + + size_type cr_count = 0; + size_type len = string.size(); + size_type i; + for( i = 0; i < len - cr_count - 1; i++ ) + { + if( string[i+cr_count] == CR && string[i+cr_count+1] == LF) + { + cr_count++; + } + + string[i] = string[i+cr_count]; + } + string.erase(i, cr_count); +} + +//static +template<class T> void LLStringUtilBase<T>::replaceChar( string_type& string, T target, T replacement ) { size_type found_pos = 0; diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 321792eb14..b5ed53fd4f 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2801,7 +2801,7 @@ BOOL LLWindowWin32::pasteTextFromClipboard(LLWString &dst) if (utf16str) { dst = utf16str_to_wstring(utf16str); - LLWStringUtil::removeCRLF(dst); + LLWStringUtil::removeWindowsCR(dst); GlobalUnlock(h_data); success = TRUE; } |