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:
@@ -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
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user