]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/tokenzr.cpp
Unicode overview added
[wxWidgets.git] / src / common / tokenzr.cpp
index eb992377113bf19e711d9f2a2b8b9eb9af21398e..6b5d18e1782e9d1ffc391af338850937840a66ea 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-#pragma implementation "tokenzr.h"
+    #pragma implementation "tokenzr.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
 #endif
 
-#include "wx/object.h"
-#include "wx/string.h"
 #include "wx/tokenzr.h"
 
 wxStringTokenizer::wxStringTokenizer(const wxString& to_tokenize,
                                      const wxString& delims,
-                                    bool ret_delims)
-  : wxObject()
+                                     bool ret_delims)
 {
-  m_string = to_tokenize;
-  m_delims = delims;
-  m_retdelims = ret_delims;
+    m_string = to_tokenize;
+    m_delims = delims;
+    m_retdelims = ret_delims;
 }
 
 wxStringTokenizer::~wxStringTokenizer()
 {
 }
 
-off_t wxStringTokenizer::FindDelims(const wxString& str, const wxString& delims)
+off_t wxStringTokenizer::FindDelims(const wxString& str, const wxString& delims) const
 {
-  int i, j;
-  register int s_len = str.Length(),
-               len = delims.Length();
-
-  for (i=0;i<s_len;i++) {
-    register char c = str[i];
-
-    for (j=0;j<len;j++)
-      if (delims[j] == c)
-        return i;
-  }
-  return -1;
+    for ( size_t i = 0; i < str.Length(); i++ )
+    {
+        wxChar c = str[i];
+
+        for ( size_t j = 0; j < delims.Length() ; j++ )
+        {
+            if ( delims[j] == c )
+                return i;
+        }
+    }
+
+    return -1;
 }
 
-int wxStringTokenizer::CountTokens()
+int wxStringTokenizer::CountTokens() const
 {
-  wxString p_string = m_string;
-  bool found = TRUE;
-  int pos, count = 1; 
-
-  if (p_string.Length() == 0)
-    return 0;
-
-  while (found) {
-    pos = FindDelims(p_string, m_delims);
-    if (pos != -1) {
-      count++;
-      p_string = p_string(0, pos);
-    } else
-      found = FALSE;
-  }
-  return count;
+    wxString p_string = m_string;
+    bool found = TRUE;
+    int pos, count = 1;
+
+    if (p_string.Length() == 0)
+        return 0;
+
+    while (found)
+    {
+        pos = FindDelims(p_string, m_delims);
+        if (pos != -1)
+        {
+            count++;
+            p_string = p_string(pos+1, p_string.Length());
+        }
+        else
+        {
+            found = FALSE;
+        }
+    }
+
+    return count;
 }
 
-bool wxStringTokenizer::HasMoreToken()
+bool wxStringTokenizer::HasMoreTokens()
 {
-  return (m_string.Length() != 0);
+    return !m_string.IsEmpty();
 }
 
-wxString wxStringTokenizer::NextToken()
+// needed to fix leading whitespace / mult. delims bugs
+void wxStringTokenizer::EatLeadingDelims()
 {
-  register off_t pos, pos2;
-  wxString r_string;
+    int pos;
 
-  if (m_string.IsNull())
-    return m_string;
+    // while leading delims trim 'em from the left
+    while ( ( pos = FindDelims(m_string, m_delims)) == 0 )
+    {
+        m_string = m_string.Mid((size_t)1);
+    }
+}
+
+wxString wxStringTokenizer::NextToken()
+{
+    off_t pos, pos2;
+    wxString r_string;
+
+    if ( m_string.IsEmpty() )
+        return m_string;
+
+    if ( !m_retdelims )
+        EatLeadingDelims();
+
+    pos = FindDelims(m_string, m_delims);
+    if (pos == -1)
+    {
+        r_string = m_string;
+        m_string = wxEmptyString;
+
+        return r_string;
+    }
+
+    if (m_retdelims)
+    {
+        if (!pos)
+        {
+            pos++;
+            pos2 = 1;
+        }
+        else
+        {
+            pos2 = pos;
+        }
+    }
+    else
+    {
+        pos2 = pos + 1;
+    }
+
+    r_string = m_string.Left((size_t)pos);
+    m_string = m_string.Mid((size_t)pos2);
 
-  pos = FindDelims(m_string, m_delims);
-  if (pos == -1) {
-    r_string = m_string;
-    m_string = (char *)NULL;
-    
     return r_string;
-  }
-
-  if (m_retdelims) {
-    if (!pos) {
-      pos++;
-      pos2 = 1;
-    } else
-      pos2 = pos;
-  } else
-      pos2 = pos + 1;
-  
-  r_string = m_string.Left((size_t)pos);
-  m_string = m_string.Mid((size_t)pos2);
-
-  return r_string;
 }