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;
}