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 );
|
WXDLLEXPORT wxTextOutputStream &endl( wxTextOutputStream &stream );
|
||||||
|
|
||||||
|
|
||||||
class WXDLLEXPORT wxTextInputStream
|
class WXDLLEXPORT wxTextInputStream
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
wxTextInputStream(wxInputStream& s, const wxString &sep=wxT(" \t"), wxMBConv& conv = wxConvUTF8 );
|
||||||
|
#else
|
||||||
wxTextInputStream(wxInputStream& s, const wxString &sep=wxT(" \t") );
|
wxTextInputStream(wxInputStream& s, const wxString &sep=wxT(" \t") );
|
||||||
|
#endif
|
||||||
~wxTextInputStream();
|
~wxTextInputStream();
|
||||||
|
|
||||||
wxUint32 Read32();
|
wxUint32 Read32();
|
||||||
@@ -61,12 +66,17 @@ protected:
|
|||||||
wxInputStream &m_input;
|
wxInputStream &m_input;
|
||||||
wxString m_separators;
|
wxString m_separators;
|
||||||
|
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
wxMBConv &m_conv;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool EatEOL(const wxChar &c);
|
bool EatEOL(const wxChar &c);
|
||||||
wxChar NextNonSeparators();
|
wxChar NextNonSeparators();
|
||||||
void SkipIfEndOfLine( wxChar c );
|
void SkipIfEndOfLine( wxChar c );
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
wxEOL_NATIVE,
|
wxEOL_NATIVE,
|
||||||
wxEOL_UNIX,
|
wxEOL_UNIX,
|
||||||
wxEOL_MAC,
|
wxEOL_MAC,
|
||||||
@@ -76,7 +86,11 @@ typedef enum {
|
|||||||
class WXDLLEXPORT wxTextOutputStream
|
class WXDLLEXPORT wxTextOutputStream
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
wxTextOutputStream( wxOutputStream& s, wxEOL mode = wxEOL_NATIVE, wxMBConv& conv = wxConvUTF8 );
|
||||||
|
#else
|
||||||
wxTextOutputStream( wxOutputStream& s, wxEOL mode = wxEOL_NATIVE );
|
wxTextOutputStream( wxOutputStream& s, wxEOL mode = wxEOL_NATIVE );
|
||||||
|
#endif
|
||||||
virtual ~wxTextOutputStream();
|
virtual ~wxTextOutputStream();
|
||||||
|
|
||||||
void SetMode( wxEOL mode = wxEOL_NATIVE );
|
void SetMode( wxEOL mode = wxEOL_NATIVE );
|
||||||
@@ -103,6 +117,11 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
wxOutputStream &m_output;
|
wxOutputStream &m_output;
|
||||||
wxEOL m_mode;
|
wxEOL m_mode;
|
||||||
|
|
||||||
|
#if wxUSE_UNICODE
|
||||||
|
wxMBConv &m_conv;
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -38,10 +38,17 @@
|
|||||||
// wxTextInputStream
|
// 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)
|
wxTextInputStream::wxTextInputStream(wxInputStream &s, const wxString &sep)
|
||||||
: m_input(s), m_separators(sep)
|
: m_input(s), m_separators(sep)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
wxTextInputStream::~wxTextInputStream()
|
wxTextInputStream::~wxTextInputStream()
|
||||||
{
|
{
|
||||||
@@ -234,12 +241,23 @@ wxString wxTextInputStream::ReadString()
|
|||||||
|
|
||||||
wxString wxTextInputStream::ReadLine()
|
wxString wxTextInputStream::ReadLine()
|
||||||
{
|
{
|
||||||
wxChar c;
|
|
||||||
wxString line;
|
wxString line;
|
||||||
|
|
||||||
while ( !m_input.Eof() )
|
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 )
|
if ( !m_input )
|
||||||
break;
|
break;
|
||||||
@@ -343,8 +361,15 @@ wxTextInputStream& wxTextInputStream::operator>>(float& f)
|
|||||||
return *this;
|
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)
|
wxTextOutputStream::wxTextOutputStream(wxOutputStream& s, wxEOL mode)
|
||||||
: m_output(s)
|
: m_output(s)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
m_mode = mode;
|
m_mode = mode;
|
||||||
if (m_mode == wxEOL_NATIVE)
|
if (m_mode == wxEOL_NATIVE)
|
||||||
@@ -445,8 +470,13 @@ void wxTextOutputStream::WriteString(const wxString& string)
|
|||||||
out << c;
|
out << c;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NB: we don't need to write the trailing NUL here
|
// We must not write the trailing NULL here
|
||||||
m_output.Write(out.c_str(), out.length() * sizeof(wxChar));
|
#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)
|
wxTextOutputStream& wxTextOutputStream::operator<<(const wxChar *string)
|
||||||
|
Reference in New Issue
Block a user