X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..062dfc9a96dc9e796c53544f41ff92dc47f26e82:/src/html/htmlfilt.cpp
diff --git a/src/html/htmlfilt.cpp b/src/html/htmlfilt.cpp
index d3f951a88d..0baea69675 100644
--- a/src/html/htmlfilt.cpp
+++ b/src/html/htmlfilt.cpp
@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
-// Name: htmlfilt.cpp
+// Name: src/html/htmlfilt.cpp
// Purpose: wxHtmlFilter - input filter for translating into HTML format
// Author: Vaclav Slavik
// RCS-ID: $Id$
@@ -9,50 +9,29 @@
#include "wx/wxprec.h"
-#include "wx/defs.h"
-#if wxUSE_HTML && wxUSE_STREAMS
-
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
-#ifndef WXPRECOMP
+#if wxUSE_HTML && wxUSE_STREAMS
+
+#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/intl.h"
#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);
}
/*
@@ -166,7 +145,7 @@ wxString wxHtmlFilterHTML::ReadFile(const wxFSFile& file) const
// tag if we used Content-Type header).
#if wxUSE_UNICODE
int charsetPos;
- if ((charsetPos = file.GetMimeType().Find(_T("; charset="))) != wxNOT_FOUND)
+ if ((charsetPos = file.GetMimeType().Find(wxT("; charset="))) != wxNOT_FOUND)
{
wxString charset = file.GetMimeType().Mid(charsetPos + 10);
wxCSConv conv(charset);
@@ -174,15 +153,19 @@ wxString wxHtmlFilterHTML::ReadFile(const wxFSFile& file) const
}
else
{
- wxString tmpdoc;
- ReadString(tmpdoc, s, wxConvISO8859_1);
+ size_t size = s->GetSize();
+ wxCharBuffer buf( size+1 );
+ s->Read( buf.data(), size );
+ *(buf.data() + size) = 0;
+ wxString tmpdoc( buf, wxConvISO8859_1);
+
wxString charset = wxHtmlParser::ExtractCharsetInformation(tmpdoc);
if (charset.empty())
doc = tmpdoc;
else
{
wxCSConv conv(charset);
- doc = wxString(tmpdoc.mb_str(wxConvISO8859_1), conv);
+ doc = wxString( buf, conv );
}
}
#else // !wxUSE_UNICODE
@@ -192,7 +175,7 @@ wxString wxHtmlFilterHTML::ReadFile(const wxFSFile& file) const
{
wxString hdr;
wxString mime = file.GetMimeType();
- hdr.Printf(_T(""), mime.c_str());
+ hdr.Printf(wxT(""), mime.c_str());
return hdr+doc;
}
#endif