X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..8e19f54e55255ddef1df49acde530102f5db2492:/src/common/string.cpp diff --git a/src/common/string.cpp b/src/common/string.cpp index b0ab44d21c..f94a551e4f 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -113,7 +113,7 @@ extern const wxChar WXDLLEXPORT *wxEmptyString = &g_strEmpty.dummy; // function wxVsnprintfA (A for ANSI), should also find one for Unicode // strings in Unicode build #ifdef __WXMSW__ - #if defined(__VISUALC__) || wxUSE_NORLANDER_HEADERS + #if defined(__VISUALC__) || (defined(__MINGW32__) && wxUSE_NORLANDER_HEADERS) #define wxVsnprintfA _vsnprintf #endif #else // !Windows @@ -986,14 +986,22 @@ wxString& wxString::MakeLower() // trimming and padding // --------------------------------------------------------------------------- +// some compilers (VC++ 6.0 not to name them) return TRUE for a call to +// isspace('ê') in the C locale which seems to be broken to me, but we have to +// live with this by checking that the character is a 7 bit one - even if this +// may fail to detect some spaces (I don't know if Unicode doesn't have +// space-like symbols somewhere except in the first 128 chars), it is arguably +// still better than trimming away accented letters +inline int wxSafeIsspace(wxChar ch) { return (ch < 127) && wxIsspace(ch); } + // trims spaces (in the sense of isspace) from left or right side wxString& wxString::Trim(bool bFromRight) { // first check if we're going to modify the string at all if ( !IsEmpty() && ( - (bFromRight && wxIsspace(GetChar(Len() - 1))) || - (!bFromRight && wxIsspace(GetChar(0u))) + (bFromRight && wxSafeIsspace(GetChar(Len() - 1))) || + (!bFromRight && wxSafeIsspace(GetChar(0u))) ) ) { @@ -1004,7 +1012,7 @@ wxString& wxString::Trim(bool bFromRight) { // find last non-space character wxChar *psz = m_pchData + GetStringData()->nDataLength - 1; - while ( wxIsspace(*psz) && (psz >= m_pchData) ) + while ( wxSafeIsspace(*psz) && (psz >= m_pchData) ) psz--; // truncate at trailing space start @@ -1015,7 +1023,7 @@ wxString& wxString::Trim(bool bFromRight) { // find first non-space character const wxChar *psz = m_pchData; - while ( wxIsspace(*psz) ) + while ( wxSafeIsspace(*psz) ) psz++; // fix up data and length @@ -1536,8 +1544,34 @@ int wxString::sprintf(const wxChar *pszFormat, ...) // --------------------------------------------------------------------------- // standard C++ library string functions // --------------------------------------------------------------------------- + #ifdef wxSTD_STRING_COMPATIBILITY +void wxString::resize(size_t nSize, wxChar ch) +{ + size_t len = length(); + + if ( nSize < len ) + { + Truncate(nSize); + } + else if ( nSize > len ) + { + *this += wxString(ch, len - nSize); + } + //else: we have exactly the specified length, nothing to do +} + +void wxString::swap(wxString& str) +{ + // this is slightly less efficient than fiddling with m_pchData directly, + // but it is still quite efficient as we don't copy the string here because + // ref count always stays positive + wxString tmp = str; + str = *this; + *this = str; +} + wxString& wxString::insert(size_t nPos, const wxString& str) { wxASSERT( str.GetStringData()->IsValid() );