class WXDLLEXPORT wxTextInputStream {
 public:
-  wxTextInputStream(wxInputStream& s);
+  wxTextInputStream(wxInputStream& s,  const wxChar &sep=wxT(' '));
   ~wxTextInputStream();
 
   wxUint32 Read32();
   wxUint16 Read16();
-  wxUint8 Read8();
-  double ReadDouble();
-  wxString ReadString();
+  wxUint8  Read8();
+  double   ReadDouble();
+  wxString ReadString();  // deprecated use ReadLine or ReadWord instead
+  wxString ReadLine();
+  wxString ReadWord();
+
+  wxChar GetStringSeparator() const          { return m_string_separator;}
+  void   SetStringSeparator(const wxChar &c) { m_string_separator=c;}
 
   // Operators
-  wxTextInputStream& operator>>(wxString& line);
+  wxTextInputStream& operator>>(wxString& word);
   wxTextInputStream& operator>>(wxChar& c);
   wxTextInputStream& operator>>(wxInt16& i);
   wxTextInputStream& operator>>(wxInt32& i);
   
  protected:
   wxInputStream *m_input;
+  wxChar m_string_separator;
   
   wxChar NextNonWhiteSpace();
   void SkipIfEndOfLine( wxChar c );
 
 // wxTextInputStream
 // ----------------------------------------------------------------------------
 
-wxTextInputStream::wxTextInputStream(wxInputStream& s)
-  : m_input(&s)
+wxTextInputStream::wxTextInputStream(wxInputStream& s, const wxChar &sep)
+  : m_input(&s), m_string_separator(sep)
 {
 }
 
 }
 
 wxString wxTextInputStream::ReadString()
+{
+  return ReadLine();
+}
+
+wxString wxTextInputStream::ReadLine()
 {
     wxChar c;
     wxString line;
     return line;
 }
 
-wxTextInputStream& wxTextInputStream::operator>>(wxString& line)
+wxString wxTextInputStream::ReadWord()
+{
+    wxChar c;
+    wxString word;
+
+    if (m_string_separator==wxT(' ')) c=NextNonWhiteSpace();
+    else c = m_input->GetC();
+
+    for (;;)
+    {
+        if (!m_input) break;
+       
+        if (c == m_string_separator)
+         break;
+       
+        if (c == wxT('\n'))
+        {
+           // eat on UNIX
+           break;
+       }
+       
+        if (c == wxT('\r'))
+        {
+            // eat on both Mac and DOS
+       
+            wxChar c2 = m_input->GetC();
+           if (!m_input) break;
+       
+           if (c2 == wxT('\n'))
+            {
+               // eat on DOS
+               break;
+           }
+            else
+           {
+               // Don't eat on Mac
+                m_input->Ungetch( c2 );
+               break;
+           }
+        }
+       
+        word += c;
+        c = m_input->GetC();
+    }
+
+    return word;
+}
+
+wxTextInputStream& wxTextInputStream::operator>>(wxString& word)
 {
-  line = ReadString();
+  word = ReadWord();
   return *this;
 }