add possibility to specify the conversion to use in wxStringOutputStream; use it instead of reimplementing the same logic erroneously in wxHTML (bug 1711476)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53179 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -59,9 +59,14 @@ class WXDLLIMPEXP_BASE wxStringOutputStream : public wxOutputStream
|
||||
public:
|
||||
// The stream will write data either to the provided string or to an
|
||||
// internal string which can be retrieved using GetString()
|
||||
wxStringOutputStream(wxString *pString = NULL)
|
||||
//
|
||||
// Note that the conversion object should have the life time greater than
|
||||
// this stream.
|
||||
wxStringOutputStream(wxString *pString = NULL,
|
||||
wxMBConv& conv = wxConvUTF8)
|
||||
: m_conv(conv)
|
||||
#if wxUSE_UNICODE_WCHAR
|
||||
: m_unconv(0)
|
||||
, m_unconv(0)
|
||||
#endif // wxUSE_UNICODE_WCHAR
|
||||
{
|
||||
m_str = pString ? pString : &m_strInternal;
|
||||
@@ -85,12 +90,10 @@ private:
|
||||
// position in the stream in bytes, *not* in chars
|
||||
size_t m_pos;
|
||||
|
||||
#if wxUSE_WCHAR_T
|
||||
// string encoding converter (UTF8 is the standard)
|
||||
wxMBConvUTF8 m_conv;
|
||||
#else
|
||||
wxMBConv m_conv;
|
||||
#endif
|
||||
// converter to use: notice that with the default UTF-8 one the input
|
||||
// stream must contain valid UTF-8 data, use wxConvISO8859_1 to work with
|
||||
// arbitrary 8 bit data
|
||||
wxMBConv& m_conv;
|
||||
|
||||
#if wxUSE_UNICODE_WCHAR
|
||||
// unconverted data from the last call to OnSysWrite()
|
||||
|
@@ -44,20 +44,29 @@ class wxStringOutputStream : public wxOutputStream
|
||||
{
|
||||
public:
|
||||
/**
|
||||
Construct a new stream object writing the data to a string.
|
||||
|
||||
If the provided pointer is non-@NULL, data will be written to it.
|
||||
Otherwise, an internal string is used for the data written to this stream, use
|
||||
GetString() to get access to it.
|
||||
Otherwise, an internal string is used for the data written to this
|
||||
stream, use GetString() to get access to it.
|
||||
|
||||
If @a str is used, data written to the stream is appended to the current
|
||||
contents of it, i.e. the string is not cleared here. However if it is not
|
||||
empty, the positions returned by wxOutputStream::TellO will be
|
||||
offset by the initial string length, i.e. initial stream position will be the
|
||||
initial length of the string and not 0.
|
||||
|
||||
Notice that the life time of @a conv must be greater than the life time
|
||||
of this object itself as it stores a reference to it. Also notice that
|
||||
with default value of this argument the data written to the stream must
|
||||
be valid UTF-8, pass @c wxConvISO8859_1 to deal with arbitrary 8 bit
|
||||
data.
|
||||
*/
|
||||
wxStringOutputStream(wxString str = NULL);
|
||||
wxStringOutputStream(wxString str = NULL, wxMBConv& conv = wxConvUTF8);
|
||||
|
||||
/**
|
||||
Returns the string containing all the data written to the stream so far.
|
||||
*/
|
||||
const wxString GetString() const;
|
||||
const wxString& GetString() const;
|
||||
};
|
||||
|
||||
|
@@ -21,37 +21,17 @@
|
||||
#endif
|
||||
|
||||
#include "wx/strconv.h"
|
||||
#include "wx/sstream.h"
|
||||
#include "wx/html/htmlfilt.h"
|
||||
#include "wx/html/htmlwin.h"
|
||||
|
||||
// utility function: read a wxString from a wxInputStream
|
||||
// utility function: read entire contents of an wxInputStream into a wxString
|
||||
//
|
||||
// TODO: error handling?
|
||||
static void ReadString(wxString& str, wxInputStream* s, wxMBConv& conv)
|
||||
{
|
||||
size_t streamSize = s->GetSize();
|
||||
|
||||
if (streamSize == ~(size_t)0)
|
||||
{
|
||||
const size_t bufSize = 4095;
|
||||
char buffer[bufSize+1];
|
||||
size_t lastRead;
|
||||
|
||||
do
|
||||
{
|
||||
s->Read(buffer, bufSize);
|
||||
lastRead = s->LastRead();
|
||||
buffer[lastRead] = 0;
|
||||
str.Append(wxString(buffer, conv));
|
||||
}
|
||||
while (lastRead == bufSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
char* src = new char[streamSize+1];
|
||||
s->Read(src, streamSize);
|
||||
src[streamSize] = 0;
|
||||
str = wxString(src, conv);
|
||||
delete[] src;
|
||||
}
|
||||
wxStringOutputStream out(&str, conv);
|
||||
s->Read(out);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user