X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3f8e5072f7391db2158f44c6b9209bbb3db6eb06..9c54e4ae1f401a9c337b97b588e5a356d79cbe82:/src/common/tokenzr.cpp diff --git a/src/common/tokenzr.cpp b/src/common/tokenzr.cpp index b6272da149..937987241c 100644 --- a/src/common/tokenzr.cpp +++ b/src/common/tokenzr.cpp @@ -2,7 +2,7 @@ // Name: tokenzr.cpp // Purpose: String tokenizer // Author: Guilhem Lavaux -// Modified by: Vadim Zeitlin +// Modified by: Vadim Zeitlin (almost full rewrite) // Created: 04/22/98 // RCS-ID: $Id$ // Copyright: (c) Guilhem Lavaux @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "tokenzr.h" #endif @@ -29,6 +29,7 @@ #endif #include "wx/tokenzr.h" +#include "wx/arrstr.h" // Required for wxIs... functions #include @@ -105,10 +106,16 @@ bool wxStringTokenizer::HasMoreTokens() const if ( m_string.find_first_not_of(m_delims) == wxString::npos ) { - // no non empty tokens left, but in wxTOKEN_RET_EMPTY_ALL mode we - // still may return TRUE if GetNextToken() wasn't called yet for the - // last trailing empty token - return m_mode == wxTOKEN_RET_EMPTY_ALL ? m_hasMore : FALSE; + // no non empty tokens left, but in 2 cases we still may return TRUE if + // GetNextToken() wasn't called yet for this empty token: + // + // a) in wxTOKEN_RET_EMPTY_ALL mode we always do it + // b) in wxTOKEN_RET_EMPTY mode we do it in the special case of a + // string containing only the delimiter: then there is an empty + // token just before it + return (m_mode == wxTOKEN_RET_EMPTY_ALL) || + (m_mode == wxTOKEN_RET_EMPTY && m_pos == 0) + ? m_hasMore : FALSE; } else { @@ -196,3 +203,21 @@ wxString wxStringTokenizer::GetNextToken() return token; } + +// ---------------------------------------------------------------------------- +// public functions +// ---------------------------------------------------------------------------- + +wxArrayString wxStringTokenize(const wxString& str, + const wxString& delims, + wxStringTokenizerMode mode) +{ + wxArrayString tokens; + wxStringTokenizer tk(str, delims, mode); + while ( tk.HasMoreTokens() ) + { + tokens.Add(tk.GetNextToken()); + } + + return tokens; +}