// 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
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "tokenzr.h"
#endif
#endif
#include "wx/tokenzr.h"
+#include "wx/arrstr.h"
+
+// Required for wxIs... functions
+#include <ctype.h>
// ============================================================================
// implementation
// do we have more of them?
bool wxStringTokenizer::HasMoreTokens() const
{
- wxCHECK_MSG( IsOk(), FALSE, _T("you should call SetString() first") );
+ wxCHECK_MSG( IsOk(), false, _T("you should call SetString() first") );
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
{
// there are non delimiter characters left, hence we do have more
// tokens
- return TRUE;
+ return true;
}
}
// no more tokens in this string, even in wxTOKEN_RET_EMPTY_ALL
// mode (we will return the trailing one right now in this case)
- m_hasMore = FALSE;
+ 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;
+}