Very incomplete Unicode support for wxTextStream.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17414 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2002-09-30 20:48:44 +00:00
parent b1b937339c
commit 58b5a13da5
2 changed files with 54 additions and 5 deletions

View File

@@ -28,10 +28,15 @@ typedef wxTextOutputStream& (*__wxTextOutputManip)(wxTextOutputStream&);
WXDLLEXPORT wxTextOutputStream &endl( wxTextOutputStream &stream );
class WXDLLEXPORT wxTextInputStream
{
public:
#if wxUSE_UNICODE
wxTextInputStream(wxInputStream& s, const wxString &sep=wxT(" \t"), wxMBConv& conv = wxConvUTF8 );
#else
wxTextInputStream(wxInputStream& s, const wxString &sep=wxT(" \t") );
#endif
~wxTextInputStream();
wxUint32 Read32();
@@ -60,13 +65,18 @@ public:
protected:
wxInputStream &m_input;
wxString m_separators;
#if wxUSE_UNICODE
wxMBConv &m_conv;
#endif
bool EatEOL(const wxChar &c);
wxChar NextNonSeparators();
void SkipIfEndOfLine( wxChar c );
};
typedef enum {
typedef enum
{
wxEOL_NATIVE,
wxEOL_UNIX,
wxEOL_MAC,
@@ -76,7 +86,11 @@ typedef enum {
class WXDLLEXPORT wxTextOutputStream
{
public:
#if wxUSE_UNICODE
wxTextOutputStream( wxOutputStream& s, wxEOL mode = wxEOL_NATIVE, wxMBConv& conv = wxConvUTF8 );
#else
wxTextOutputStream( wxOutputStream& s, wxEOL mode = wxEOL_NATIVE );
#endif
virtual ~wxTextOutputStream();
void SetMode( wxEOL mode = wxEOL_NATIVE );
@@ -103,6 +117,11 @@ public:
protected:
wxOutputStream &m_output;
wxEOL m_mode;
#if wxUSE_UNICODE
wxMBConv &m_conv;
#endif
};
#endif

View File

@@ -38,10 +38,17 @@
// wxTextInputStream
// ----------------------------------------------------------------------------
#if wxUSE_UNICODE
wxTextInputStream::wxTextInputStream(wxInputStream &s, const wxString &sep, wxMBConv& conv)
: m_input(s), m_separators(sep), m_conv(conv)
{
}
#else
wxTextInputStream::wxTextInputStream(wxInputStream &s, const wxString &sep)
: m_input(s), m_separators(sep)
{
}
#endif
wxTextInputStream::~wxTextInputStream()
{
@@ -234,12 +241,23 @@ wxString wxTextInputStream::ReadString()
wxString wxTextInputStream::ReadLine()
{
wxChar c;
wxString line;
while ( !m_input.Eof() )
{
c = m_input.GetC();
#if wxUSE_UNICODE
// FIXME: this is only works for single byte encodings
// How-to read a single char in an unkown encoding???
char buf[10];
buf[0] = m_input.GetC();
buf[1] = 0;
wxChar wbuf[2];
m_conv.MB2WC( wbuf, buf, 2 );
wxChar c = wbuf[0];
#else
char c = m_input.GetC();
#endif
if ( !m_input )
break;
@@ -343,8 +361,15 @@ wxTextInputStream& wxTextInputStream::operator>>(float& f)
return *this;
}
#if wxUSE_UNICODE
wxTextOutputStream::wxTextOutputStream(wxOutputStream& s, wxEOL mode, wxMBConv& conv)
: m_output(s), m_conv(conv)
#else
wxTextOutputStream::wxTextOutputStream(wxOutputStream& s, wxEOL mode)
: m_output(s)
#endif
{
m_mode = mode;
if (m_mode == wxEOL_NATIVE)
@@ -445,8 +470,13 @@ void wxTextOutputStream::WriteString(const wxString& string)
out << c;
}
// NB: we don't need to write the trailing NUL here
m_output.Write(out.c_str(), out.length() * sizeof(wxChar));
// We must not write the trailing NULL here
#if wxUSE_UNICODE
wxCharBuffer buffer = m_conv.cWC2MB( out );
m_output.Write( (const char*) buffer, strlen( (const char*) buffer ) );
#else
m_output.Write(out.c_str(), out.length() );
#endif
}
wxTextOutputStream& wxTextOutputStream::operator<<(const wxChar *string)