X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ce65118e6290c24828c81be08149136423daaff2..c437b3f4e47b74715a2f2385d4862972babd7802:/src/common/unichar.cpp diff --git a/src/common/unichar.cpp b/src/common/unichar.cpp index 653e33f14e..163d388744 100644 --- a/src/common/unichar.cpp +++ b/src/common/unichar.cpp @@ -40,6 +40,8 @@ wxUniChar::value_type wxUniChar::FromHi8bit(char c) { #if wxUSE_UTF8_LOCALE_ONLY wxFAIL_MSG( "invalid UTF-8 character" ); + wxUnusedVar(c); + return wxT('?'); // FIXME-UTF8: what to use as failure character? #else wchar_t buf[2]; @@ -57,6 +59,8 @@ char wxUniChar::ToHi8bit(wxUniChar::value_type c) { #if wxUSE_UTF8_LOCALE_ONLY wxFAIL_MSG( "character cannot be converted to single UTF-8 byte" ); + wxUnusedVar(c); + return '?'; // FIXME-UTF8: what to use as failure character? #else wchar_t in = c; @@ -96,14 +100,13 @@ wxUniCharRef& wxUniCharRef::operator=(const wxUniChar& c) for ( size_t i = 0; i < lenNew; ++i, ++pos ) *pos = utf[i]; } - else + else // length of character encoding in UTF-8 changed { // the worse case is when the new value has either longer or shorter // code -- in that case, we have to use wxStringImpl::replace() and // this invalidates all iterators, so we have to update them too: - wxString& str = *wx_const_cast(wxString*, m_node.m_str); - wxStringImpl& strimpl = str.m_impl; + wxStringImpl& strimpl = m_str.m_impl; int iterDiff = lenNew - lenOld; size_t posIdx = m_pos - strimpl.begin(); @@ -117,7 +120,7 @@ wxUniCharRef& wxUniCharRef::operator=(const wxUniChar& c) size_t *indexes = indexes_a; size_t iterNum = 0; wxStringIteratorNode *it; - for ( it = str.m_iterators.ptr; it; it = it->m_next, ++iterNum ) + for ( it = m_str.m_iterators.ptr; it; it = it->m_next, ++iterNum ) { wxASSERT( it->m_iter || it->m_citer ); @@ -145,10 +148,14 @@ wxUniCharRef& wxUniCharRef::operator=(const wxUniChar& c) // update the string: strimpl.replace(m_pos, m_pos + lenOld, utf, lenNew); +#if wxUSE_STRING_POS_CACHE + m_str.InvalidateCache(); +#endif // wxUSE_STRING_POS_CACHE + // finally, set the iterators to valid values again (note that this // updates m_pos as well): size_t i; - for ( i = 0, it = str.m_iterators.ptr; it; it = it->m_next, ++i ) + for ( i = 0, it = m_str.m_iterators.ptr; it; it = it->m_next, ++i ) { wxASSERT( i < iterNum ); wxASSERT( it->m_iter || it->m_citer );