// 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
#endif
#include "wx/tokenzr.h"
+#include "wx/arrstr.h"
+
+// Required for wxIs... functions
+#include <ctype.h>
// ============================================================================
// implementation
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
{
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;
+}