]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/tokenzr.cpp
Fixes for previous fixes
[wxWidgets.git] / src / common / tokenzr.cpp
index 64f49e5822f465ff504d1a628ce48faf1fbc25ac..937987241c2445765a4ea05f433ae3bd86ed7720 100644 (file)
@@ -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
 
 #endif
 
 #include "wx/tokenzr.h"
+#include "wx/arrstr.h"
+
+// Required for wxIs... functions
+#include <ctype.h>
 
 // ============================================================================
 // implementation
@@ -102,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
     {
@@ -193,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;
+}