\membersection{wxString::Find}\label{wxstringfind}
-\constfunc{int}{Find}{\param{wxChar}{ ch}, \param{bool}{ fromEnd = false}}
+\constfunc{int}{Find}{\param{wxUniChar}{ ch}, \param{bool}{ fromEnd = false}}
Searches for the given character. Returns the starting index, or {\tt wxNOT\_FOUND} if not found.
-\constfunc{int}{Find}{\param{const wxChar*}{ sz}}
+\constfunc{int}{Find}{\param{const wxString\&}{ sub}}
Searches for the given string. Returns the starting index, or {\tt wxNOT\_FOUND} if not found.
\membersection{wxString::Matches}\label{wxstringmatches}
-\constfunc{bool}{Matches}{\param{const wxChar*}{ szMask}}
+\constfunc{bool}{Matches}{\param{const wxString\&}{ mask}}
Returns \true if the string contents matches a mask containing '*' and '?'.
\membersection{wxString::Replace}\label{wxstringreplace}
-\func{size\_t}{Replace}{\param{const wxChar*}{ szOld}, \param{const wxChar*}{ szNew}, \param{bool}{ replaceAll = true}}
+\func{size\_t}{Replace}{\param{const wxString\&}{ strOld}, \param{const wxString\&}{ strNew}, \param{bool}{ replaceAll = true}}
Replace first (or all) occurrences of substring with another one.
// searching and replacing
// searching (return starting index, or -1 if not found)
int Find(wxUniChar ch, bool bFromEnd = false) const; // like strchr/strrchr
+ int Find(wxUniCharRef ch, bool bFromEnd = false) const
+ { return Find(wxUniChar(ch), bFromEnd); }
+ int Find(char ch, bool bFromEnd = false) const
+ { return Find(wxUniChar(ch), bFromEnd); }
+ int Find(unsigned char ch, bool bFromEnd = false) const
+ { return Find(wxUniChar(ch), bFromEnd); }
+ int Find(wchar_t ch, bool bFromEnd = false) const
+ { return Find(wxUniChar(ch), bFromEnd); }
// searching (return starting index, or -1 if not found)
- int Find(const wxChar *pszSub) const; // like strstr
+ // FIXME-UTF8: keep wxString overload only
+ int Find(const wxString& sub) const // like strstr
+ {
+ size_type idx = find(sub);
+ return (idx == npos) ? wxNOT_FOUND : (int)idx;
+ }
+ int Find(const char *sub) const // like strstr
+ {
+ size_type idx = find(sub);
+ return (idx == npos) ? wxNOT_FOUND : (int)idx;
+ }
+ int Find(const wchar_t *sub) const // like strstr
+ {
+ size_type idx = find(sub);
+ return (idx == npos) ? wxNOT_FOUND : (int)idx;
+ }
+
// replace first (or all of bReplaceAll) occurences of substring with
// another string, returns the number of replacements made
- size_t Replace(const wxChar *szOld,
- const wxChar *szNew,
+ size_t Replace(const wxString& strOld,
+ const wxString& strNew,
bool bReplaceAll = true);
// check if the string contents matches a mask containing '*' and '?'
- bool Matches(const wxChar *szMask) const;
+ bool Matches(const wxString& mask) const;
// conversion to numbers: all functions return true only if the whole
// string is a number and put the value of this number into the pointer
// use Find()
int First( wxUniChar ch ) const { return Find(ch); }
+ int First( wxUniCharRef ch ) const { return Find(ch); }
int First( char ch ) const { return Find(ch); }
int First( unsigned char ch ) const { return Find(ch); }
int First( wchar_t ch ) const { return Find(ch); }
int First( const wxChar* psz ) const { return Find(psz); }
- int First( const wxString &str ) const { return Find(str); }
+ int First( const wxString& str ) const { return Find(str); }
int Last( wxUniChar ch ) const { return Find(ch, true); }
bool Contains(const wxString& str) const { return Find(str) != wxNOT_FOUND; }
}
// replace first (or all) occurences of some substring with another one
-size_t wxString::Replace(const wxChar *szOld,
- const wxChar *szNew, bool bReplaceAll)
+size_t wxString::Replace(const wxString& strOld,
+ const wxString& strNew, bool bReplaceAll)
{
// if we tried to replace an empty string we'd enter an infinite loop below
- wxCHECK_MSG( szOld && *szOld && szNew, 0,
+ wxCHECK_MSG( !strOld.empty(), 0,
_T("wxString::Replace(): invalid parameter") );
size_t uiCount = 0; // count of replacements made
- size_t uiOldLen = wxStrlen(szOld);
- size_t uiNewLen = wxStrlen(szNew);
+ size_t uiOldLen = strOld.length();
+ size_t uiNewLen = strNew.length();
size_t dwPos = 0;
- while ( this->c_str()[dwPos] != wxT('\0') )
+ while ( (*this)[dwPos] != wxT('\0') )
{
//DO NOT USE STRSTR HERE
//this string can contain embedded null characters,
//so strstr will function incorrectly
- dwPos = find(szOld, dwPos);
+ dwPos = find(strOld, dwPos);
if ( dwPos == npos )
break; // exit the loop
else
{
//replace this occurance of the old string with the new one
- replace(dwPos, uiOldLen, szNew, uiNewLen);
+ replace(dwPos, uiOldLen, strNew, uiNewLen);
//move up pos past the string that was replaced
dwPos += uiNewLen;
return (idx == npos) ? wxNOT_FOUND : (int)idx;
}
-// find a sub-string (like strstr)
-int wxString::Find(const wxChar *pszSub) const
-{
- size_type idx = find(pszSub);
-
- return (idx == npos) ? wxNOT_FOUND : (int)idx;
-}
-
// ----------------------------------------------------------------------------
// conversion to numbers
// ----------------------------------------------------------------------------
// returns true if the string matches the pattern which may contain '*' and
// '?' metacharacters (as usual, '?' matches any character and '*' any number
// of them)
-bool wxString::Matches(const wxChar *pszMask) const
+bool wxString::Matches(const wxString& mask) const
{
// I disable this code as it doesn't seem to be faster (in fact, it seems
// to be much slower) than the old, hand-written code below and using it
#else // !wxUSE_REGEX
// TODO: this is, of course, awfully inefficient...
+ // FIXME-UTF8: implement using iterators, remove #if
+#if wxUSE_UNICODE_UTF8
+ wxWCharBuffer maskBuf = mask.wc_str();
+ wxWCharBuffer txtBuf = wc_str();
+ const wxChar *pszMask = maskBuf.data();
+ const wxChar *pszTxt = txtBuf.data();
+#else
+ const wxChar *pszMask = mask.wx_str();
// the char currently being checked
- const wxChar *pszTxt = c_str();
+ const wxChar *pszTxt = wx_str();
+#endif
// the last location where '*' matched
const wxChar *pszLastStarInText = NULL;