diff --git a/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp b/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp
index 13dd02d8705..56cda843a60 100644
--- a/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp
+++ b/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp
@@ -29,18 +29,18 @@
#include "nsHTMLContentSinkStream.h"
-#include "nsHTMLTokens.h"
+#include "nsIParserNode.h"
#include
#include "nsString.h"
#include "nsIParser.h"
-#include "nsHTMLEntities.h"
-#include "nsCRT.h"
-#include "nsIDocumentEncoder.h" // for output flags
-
-#include "nsIUnicodeEncoder.h"
#include "nsICharsetAlias.h"
#include "nsIServiceManager.h"
-#include "nsICharsetConverterManager.h"
+#include "nsISaveAsCharset.h"
+#include "nsIEntityConverter.h"
+#include "nsCRT.h"
+#include "nsIDocumentEncoder.h" // for output flags
+#include "nshtmlpars.h"
+
#include "nsIOutputStream.h"
#include "nsFileStream.h"
@@ -49,8 +49,7 @@ static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kIContentSinkIID, NS_ICONTENT_SINK_IID);
static NS_DEFINE_IID(kIHTMLContentSinkIID, NS_IHTML_CONTENT_SINK_IID);
static NS_DEFINE_IID(kIHTMLContentSinkStreamIID, NS_IHTMLCONTENTSINKSTREAM_IID);
-
-static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID);
+static NS_DEFINE_CID(kSaveAsCharsetCID, NS_SAVEASCHARSET_CID);
static char* gHeaderComment = "";
static char* gDocTypeHeader = "";
@@ -245,56 +244,6 @@ NS_IMPL_ADDREF(nsHTMLContentSinkStream)
NS_IMPL_RELEASE(nsHTMLContentSinkStream)
-/**
- * Inits the encoder instance variable for the sink based on the charset
- *
- * @update gpk 4/21/99
- * @param aCharset
- * @return NS_xxx error result
- */
-nsresult nsHTMLContentSinkStream::InitEncoder(const nsString& aCharset)
-{
-
- nsresult res = NS_OK;
-
- nsICharsetAlias* calias = nsnull;
- res = nsServiceManager::GetService(kCharsetAliasCID,
- kICharsetAliasIID,
- (nsISupports**)&calias);
-
- NS_ASSERTION( nsnull != calias, "cannot find charet alias");
- nsAutoString charsetName = aCharset;
- if( NS_SUCCEEDED(res) && (nsnull != calias))
- {
- res = calias->GetPreferred(aCharset, charsetName);
- nsServiceManager::ReleaseService(kCharsetAliasCID, calias);
-
- if(NS_FAILED(res))
- {
- // failed - unknown alias , fallback to ISO-8859-1
- charsetName = "ISO-8859-1";
- }
-
- nsICharsetConverterManager * ccm = nsnull;
- res = nsServiceManager::GetService(kCharsetConverterManagerCID,
- nsCOMTypeInfo::GetIID(),
- (nsISupports**)&ccm);
- if(NS_SUCCEEDED(res) && (nsnull != ccm))
- {
- nsIUnicodeEncoder * encoder = nsnull;
- res = ccm->GetUnicodeEncoder(&charsetName, &encoder);
- if(NS_SUCCEEDED(res) && (nsnull != encoder))
- {
- NS_IF_RELEASE(mUnicodeEncoder);
- mUnicodeEncoder = encoder;
- }
- nsServiceManager::ReleaseService(kCharsetConverterManagerCID, ccm);
- }
- }
- return res;
-}
-
-
/**
* Construct a content sink stream.
* @update gess7/7/98
@@ -309,11 +258,10 @@ nsHTMLContentSinkStream::nsHTMLContentSinkStream()
mHTMLStackPos = 0;
mColPos = 0;
mIndent = 0;
- mUnicodeEncoder = nsnull;
mInBody = PR_FALSE;
mBuffer = nsnull;
- mBufferSize=0;
- mBufferLength=0;
+ mBufferSize = 0;
+ mBufferLength = 0;
}
NS_IMETHODIMP
@@ -332,7 +280,7 @@ nsHTMLContentSinkStream::Initialize(nsIOutputStream* aOutStream,
mStream = aOutStream;
mString = aOutString;
if (aCharsetOverride != nsnull)
- mCharsetOverride = *aCharsetOverride;
+ mCharsetOverride.Assign(*aCharsetOverride);
return NS_OK;
}
@@ -377,85 +325,89 @@ nsHTMLContentSinkStream::EndContext(PRInt32 aPosition)
return NS_OK;
}
-
-/*
- * Entities are represented in the dom as single elements.
- * Substitute them back into entity for (e.g. ´) here.
+/**
+ * Initialize the Unicode encoder with our current mCharsetOverride.
*/
-void nsHTMLContentSinkStream::UnicodeToHTMLString(const nsString& aSrc,
- nsString& aDst)
+NS_IMETHODIMP
+nsHTMLContentSinkStream::InitEncoder()
{
- PRInt32 length = aSrc.Length();
- PRUnichar ch;
-
- if (mUnicodeEncoder == nsnull)
- InitEncoder("");
-
- if (length > 0)
- {
- // Convert anything that maps to character entity
- // to the entity value
- EnsureBufferSize(length);
-
- for (PRInt32 i = 0; i < length; i++)
- {
- ch = aSrc.CharAt(i);
-
- const nsCString& entity = nsHTMLEntities::UnicodeToEntity(ch);
- if (0 < entity.Length())
- {
- aDst.Append('&');
- aDst.Append(entity);
- aDst.Append(';');
- }
- else
- {
- aDst.Append(ch);
- }
- }
+ nsAutoString charsetName = mCharsetOverride;
+ nsresult res;
+ nsICharsetAlias* calias = nsnull;
+ res = nsServiceManager::GetService(kCharsetAliasCID,
+ kICharsetAliasIID,
+ (nsISupports**)&calias);
+
+ NS_ASSERTION(nsnull != calias, "cannot find charset alias");
+ if(NS_SUCCEEDED(res) && (nsnull != calias))
+ {
+ res = calias->GetPreferred(mCharsetOverride, charsetName);
+ nsServiceManager::ReleaseService(kCharsetAliasCID, calias);
}
+ if (NS_FAILED(res))
+ {
+ // failed - unknown alias , fallback to ISO-8859-1
+ charsetName = "ISO-8859-1";
+ }
+
+ res = nsComponentManager::CreateInstance(kSaveAsCharsetCID, NULL,
+ nsISaveAsCharset::GetIID(),
+ getter_AddRefs(mUnicodeEncoder));
+ if (NS_FAILED(res))
+ return res;
+ // SaveAsCharset requires a const char* in its first argument:
+ nsCAutoString charsetCString (charsetName);
+ res = mUnicodeEncoder->Init(charsetCString,
+ nsISaveAsCharset::attr_EntityBeforeCharsetConv
+ | nsISaveAsCharset::attr_FallbackDecimalNCR,
+ nsIEntityConverter::html40);
+ return res;
}
-
-void nsHTMLContentSinkStream::EncodeToBuffer(const nsString& aSrc)
+/**
+ * Use mUnicodeEncoder to encode to the buffer;
+ * this also encodes entities, so it's useful even for the default charset.
+ *
+ * @param aSrc - the string to be encoded.
+ */
+void
+nsHTMLContentSinkStream::EncodeToBuffer(const nsString& aSrc)
{
- nsString htmlstr;
- UnicodeToHTMLString(aSrc, htmlstr);
+ char *encodedBuffer = nsnull;
+ nsresult res;
- NS_VERIFY(mUnicodeEncoder != nsnull,"The unicode encoder needs to be initialized");
- if (mUnicodeEncoder == nsnull)
- return;
+ // Initialize the encoder if we haven't already
+ if (!mUnicodeEncoder)
+ InitEncoder();
- PRInt32 length = htmlstr.Length();
- nsresult result;
+// if (mBuffer)
+// nsAllocator::Free(mBuffer);
- if (mUnicodeEncoder != nsnull && length > 0)
+ if (mUnicodeEncoder)
{
- EnsureBufferSize(length);
- mBufferLength = mBufferSize;
-
- mUnicodeEncoder->Reset();
- result = mUnicodeEncoder->Convert(htmlstr.GetUnicode(), &length,
- mBuffer, &mBufferLength);
- mBuffer[mBufferLength] = 0;
- PRInt32 temp = mBufferLength;
-
- if (NS_SUCCEEDED(result))
- result = mUnicodeEncoder->Finish(mBuffer,&temp);
-
-#if 0
- // Do some conversions to make up for the unicode encoder's foibles:
- PRInt32 nbsp = nsHTMLEntities::EntityToUnicode(nsCAutoString("nbsp"));
- PRInt32 quot = nsHTMLEntities::EntityToUnicode(nsCAutoString("quot"));
- for (PRInt32 i = 0; i < mBufferLength; i++)
+ // Call the converter to convert to the target charset.
+ // Convert() takes a char* output param even though it's writing unicode.
+ res = mUnicodeEncoder->Convert(aSrc.GetUnicode(), &encodedBuffer);
+ if (!NS_SUCCEEDED(res))
{
- if (mBuffer[i] == quot)
- mBuffer[i] = '"';
- // I don't know why this nbsp mapping was here ...
- else if (mBuffer[i] == nbsp)
- mBuffer[i] = ' ';
- }
+#ifdef DEBUG_akkana
+ printf("Unicode convert didn't work!\n");
#endif
+ encodedBuffer = aSrc.ToNewUTF8String();
+ }
+ }
+ else
+ {
+#ifdef DEBUG_akkana
+ printf("Unicode convert didn't work!\n");
+#endif
+ encodedBuffer = aSrc.ToNewCString();
+ }
+ mBufferLength = 0;
+ if (encodedBuffer) {
+ mBufferLength = nsCRT::strlen(encodedBuffer);
+ EnsureBufferSize(mBufferLength+1);
+ nsCRT::memcpy(mBuffer, encodedBuffer, mBufferLength+1);
}
}
@@ -474,7 +426,7 @@ void nsHTMLContentSinkStream::Write(const nsString& aString)
// Now handle the stream case:
nsOutputStream out(mStream);
- // If a encoder is being used then convert first convert the input string
+ // If an encoder is being used then convert first convert the input string
if (mUnicodeEncoder)
{
EncodeToBuffer(aString);
@@ -527,9 +479,10 @@ void nsHTMLContentSinkStream::Write(char aData)
* @param
* @return
*/
-nsHTMLContentSinkStream::~nsHTMLContentSinkStream() {
- NS_IF_RELEASE(mUnicodeEncoder);
- if(mBuffer) delete [] mBuffer;
+nsHTMLContentSinkStream::~nsHTMLContentSinkStream()
+{
+ if (mBuffer)
+ nsAllocator::Free(mBuffer);
}
@@ -984,8 +937,9 @@ void nsHTMLContentSinkStream::AddEndTag(const nsIParserNode& aNode)
if (tag == eHTMLTag_body)
mInBody = PR_FALSE;
-
- if ((mDoFormat && BreakAfterClose(tag)) || tag == eHTMLTag_html)
+
+ if ((mDoFormat && BreakAfterClose(tag))
+ || tag == eHTMLTag_body || tag == eHTMLTag_html)
{
Write(NS_LINEBREAK);
mColPos = 0;
@@ -1206,9 +1160,8 @@ nsHTMLContentSinkStream::OpenContainer(const nsIParserNode& aNode){
if (key.Equals("charset"))
{
if (mCharsetOverride.Length() == 0)
- InitEncoder(value);
- else
- InitEncoder(mCharsetOverride);
+ mCharsetOverride.Assign(value);
+ InitEncoder();
}
}
}
diff --git a/mozilla/htmlparser/src/nsHTMLContentSinkStream.h b/mozilla/htmlparser/src/nsHTMLContentSinkStream.h
index 87a34578b8c..d430e34c7d5 100644
--- a/mozilla/htmlparser/src/nsHTMLContentSinkStream.h
+++ b/mozilla/htmlparser/src/nsHTMLContentSinkStream.h
@@ -39,12 +39,10 @@
#ifndef NS_TXTCONTENTSINK_STREAM
#define NS_TXTCONTENTSINK_STREAM
-#include "nsIParserNode.h"
#include "nsIHTMLContentSink.h"
-#include "nshtmlpars.h"
-#include "nsHTMLTokens.h"
#include "nsParserCIID.h"
#include "nsCOMPtr.h"
+#include "nsHTMLTokens.h" // for eHTMLTags
#define NS_IHTMLCONTENTSINKSTREAM_IID \
{0xa39c6bff, 0x15f0, 0x11d2, \
@@ -54,7 +52,8 @@
class ostream;
#endif
-class nsIUnicodeEncoder;
+class nsIParserNode;
+class nsISaveAsCharset;
class nsIOutputStream;
class nsIHTMLContentSinkStream : public nsIHTMLContentSink {
@@ -149,10 +148,8 @@ protected:
void AddIndent();
void EnsureBufferSize(PRInt32 aNewSize);
- nsresult InitEncoder(const nsString& aCharset);
-
- void UnicodeToHTMLString(const nsString& aSrc, nsString& aDst);
void EncodeToBuffer(const nsString& aString);
+ NS_IMETHOD InitEncoder();
void Write(const nsString& aString);
void Write(const char* aCharBuffer);
@@ -180,8 +177,8 @@ protected:
PRBool mDoHeader;
PRBool mBodyOnly;
- nsIUnicodeEncoder* mUnicodeEncoder;
- nsString mCharsetOverride;
+ nsCOMPtr mUnicodeEncoder;
+ nsCAutoString mCharsetOverride;
};
diff --git a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp
index 13dd02d8705..56cda843a60 100644
--- a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp
+++ b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp
@@ -29,18 +29,18 @@
#include "nsHTMLContentSinkStream.h"
-#include "nsHTMLTokens.h"
+#include "nsIParserNode.h"
#include
#include "nsString.h"
#include "nsIParser.h"
-#include "nsHTMLEntities.h"
-#include "nsCRT.h"
-#include "nsIDocumentEncoder.h" // for output flags
-
-#include "nsIUnicodeEncoder.h"
#include "nsICharsetAlias.h"
#include "nsIServiceManager.h"
-#include "nsICharsetConverterManager.h"
+#include "nsISaveAsCharset.h"
+#include "nsIEntityConverter.h"
+#include "nsCRT.h"
+#include "nsIDocumentEncoder.h" // for output flags
+#include "nshtmlpars.h"
+
#include "nsIOutputStream.h"
#include "nsFileStream.h"
@@ -49,8 +49,7 @@ static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kIContentSinkIID, NS_ICONTENT_SINK_IID);
static NS_DEFINE_IID(kIHTMLContentSinkIID, NS_IHTML_CONTENT_SINK_IID);
static NS_DEFINE_IID(kIHTMLContentSinkStreamIID, NS_IHTMLCONTENTSINKSTREAM_IID);
-
-static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID);
+static NS_DEFINE_CID(kSaveAsCharsetCID, NS_SAVEASCHARSET_CID);
static char* gHeaderComment = "";
static char* gDocTypeHeader = "";
@@ -245,56 +244,6 @@ NS_IMPL_ADDREF(nsHTMLContentSinkStream)
NS_IMPL_RELEASE(nsHTMLContentSinkStream)
-/**
- * Inits the encoder instance variable for the sink based on the charset
- *
- * @update gpk 4/21/99
- * @param aCharset
- * @return NS_xxx error result
- */
-nsresult nsHTMLContentSinkStream::InitEncoder(const nsString& aCharset)
-{
-
- nsresult res = NS_OK;
-
- nsICharsetAlias* calias = nsnull;
- res = nsServiceManager::GetService(kCharsetAliasCID,
- kICharsetAliasIID,
- (nsISupports**)&calias);
-
- NS_ASSERTION( nsnull != calias, "cannot find charet alias");
- nsAutoString charsetName = aCharset;
- if( NS_SUCCEEDED(res) && (nsnull != calias))
- {
- res = calias->GetPreferred(aCharset, charsetName);
- nsServiceManager::ReleaseService(kCharsetAliasCID, calias);
-
- if(NS_FAILED(res))
- {
- // failed - unknown alias , fallback to ISO-8859-1
- charsetName = "ISO-8859-1";
- }
-
- nsICharsetConverterManager * ccm = nsnull;
- res = nsServiceManager::GetService(kCharsetConverterManagerCID,
- nsCOMTypeInfo::GetIID(),
- (nsISupports**)&ccm);
- if(NS_SUCCEEDED(res) && (nsnull != ccm))
- {
- nsIUnicodeEncoder * encoder = nsnull;
- res = ccm->GetUnicodeEncoder(&charsetName, &encoder);
- if(NS_SUCCEEDED(res) && (nsnull != encoder))
- {
- NS_IF_RELEASE(mUnicodeEncoder);
- mUnicodeEncoder = encoder;
- }
- nsServiceManager::ReleaseService(kCharsetConverterManagerCID, ccm);
- }
- }
- return res;
-}
-
-
/**
* Construct a content sink stream.
* @update gess7/7/98
@@ -309,11 +258,10 @@ nsHTMLContentSinkStream::nsHTMLContentSinkStream()
mHTMLStackPos = 0;
mColPos = 0;
mIndent = 0;
- mUnicodeEncoder = nsnull;
mInBody = PR_FALSE;
mBuffer = nsnull;
- mBufferSize=0;
- mBufferLength=0;
+ mBufferSize = 0;
+ mBufferLength = 0;
}
NS_IMETHODIMP
@@ -332,7 +280,7 @@ nsHTMLContentSinkStream::Initialize(nsIOutputStream* aOutStream,
mStream = aOutStream;
mString = aOutString;
if (aCharsetOverride != nsnull)
- mCharsetOverride = *aCharsetOverride;
+ mCharsetOverride.Assign(*aCharsetOverride);
return NS_OK;
}
@@ -377,85 +325,89 @@ nsHTMLContentSinkStream::EndContext(PRInt32 aPosition)
return NS_OK;
}
-
-/*
- * Entities are represented in the dom as single elements.
- * Substitute them back into entity for (e.g. ´) here.
+/**
+ * Initialize the Unicode encoder with our current mCharsetOverride.
*/
-void nsHTMLContentSinkStream::UnicodeToHTMLString(const nsString& aSrc,
- nsString& aDst)
+NS_IMETHODIMP
+nsHTMLContentSinkStream::InitEncoder()
{
- PRInt32 length = aSrc.Length();
- PRUnichar ch;
-
- if (mUnicodeEncoder == nsnull)
- InitEncoder("");
-
- if (length > 0)
- {
- // Convert anything that maps to character entity
- // to the entity value
- EnsureBufferSize(length);
-
- for (PRInt32 i = 0; i < length; i++)
- {
- ch = aSrc.CharAt(i);
-
- const nsCString& entity = nsHTMLEntities::UnicodeToEntity(ch);
- if (0 < entity.Length())
- {
- aDst.Append('&');
- aDst.Append(entity);
- aDst.Append(';');
- }
- else
- {
- aDst.Append(ch);
- }
- }
+ nsAutoString charsetName = mCharsetOverride;
+ nsresult res;
+ nsICharsetAlias* calias = nsnull;
+ res = nsServiceManager::GetService(kCharsetAliasCID,
+ kICharsetAliasIID,
+ (nsISupports**)&calias);
+
+ NS_ASSERTION(nsnull != calias, "cannot find charset alias");
+ if(NS_SUCCEEDED(res) && (nsnull != calias))
+ {
+ res = calias->GetPreferred(mCharsetOverride, charsetName);
+ nsServiceManager::ReleaseService(kCharsetAliasCID, calias);
}
+ if (NS_FAILED(res))
+ {
+ // failed - unknown alias , fallback to ISO-8859-1
+ charsetName = "ISO-8859-1";
+ }
+
+ res = nsComponentManager::CreateInstance(kSaveAsCharsetCID, NULL,
+ nsISaveAsCharset::GetIID(),
+ getter_AddRefs(mUnicodeEncoder));
+ if (NS_FAILED(res))
+ return res;
+ // SaveAsCharset requires a const char* in its first argument:
+ nsCAutoString charsetCString (charsetName);
+ res = mUnicodeEncoder->Init(charsetCString,
+ nsISaveAsCharset::attr_EntityBeforeCharsetConv
+ | nsISaveAsCharset::attr_FallbackDecimalNCR,
+ nsIEntityConverter::html40);
+ return res;
}
-
-void nsHTMLContentSinkStream::EncodeToBuffer(const nsString& aSrc)
+/**
+ * Use mUnicodeEncoder to encode to the buffer;
+ * this also encodes entities, so it's useful even for the default charset.
+ *
+ * @param aSrc - the string to be encoded.
+ */
+void
+nsHTMLContentSinkStream::EncodeToBuffer(const nsString& aSrc)
{
- nsString htmlstr;
- UnicodeToHTMLString(aSrc, htmlstr);
+ char *encodedBuffer = nsnull;
+ nsresult res;
- NS_VERIFY(mUnicodeEncoder != nsnull,"The unicode encoder needs to be initialized");
- if (mUnicodeEncoder == nsnull)
- return;
+ // Initialize the encoder if we haven't already
+ if (!mUnicodeEncoder)
+ InitEncoder();
- PRInt32 length = htmlstr.Length();
- nsresult result;
+// if (mBuffer)
+// nsAllocator::Free(mBuffer);
- if (mUnicodeEncoder != nsnull && length > 0)
+ if (mUnicodeEncoder)
{
- EnsureBufferSize(length);
- mBufferLength = mBufferSize;
-
- mUnicodeEncoder->Reset();
- result = mUnicodeEncoder->Convert(htmlstr.GetUnicode(), &length,
- mBuffer, &mBufferLength);
- mBuffer[mBufferLength] = 0;
- PRInt32 temp = mBufferLength;
-
- if (NS_SUCCEEDED(result))
- result = mUnicodeEncoder->Finish(mBuffer,&temp);
-
-#if 0
- // Do some conversions to make up for the unicode encoder's foibles:
- PRInt32 nbsp = nsHTMLEntities::EntityToUnicode(nsCAutoString("nbsp"));
- PRInt32 quot = nsHTMLEntities::EntityToUnicode(nsCAutoString("quot"));
- for (PRInt32 i = 0; i < mBufferLength; i++)
+ // Call the converter to convert to the target charset.
+ // Convert() takes a char* output param even though it's writing unicode.
+ res = mUnicodeEncoder->Convert(aSrc.GetUnicode(), &encodedBuffer);
+ if (!NS_SUCCEEDED(res))
{
- if (mBuffer[i] == quot)
- mBuffer[i] = '"';
- // I don't know why this nbsp mapping was here ...
- else if (mBuffer[i] == nbsp)
- mBuffer[i] = ' ';
- }
+#ifdef DEBUG_akkana
+ printf("Unicode convert didn't work!\n");
#endif
+ encodedBuffer = aSrc.ToNewUTF8String();
+ }
+ }
+ else
+ {
+#ifdef DEBUG_akkana
+ printf("Unicode convert didn't work!\n");
+#endif
+ encodedBuffer = aSrc.ToNewCString();
+ }
+ mBufferLength = 0;
+ if (encodedBuffer) {
+ mBufferLength = nsCRT::strlen(encodedBuffer);
+ EnsureBufferSize(mBufferLength+1);
+ nsCRT::memcpy(mBuffer, encodedBuffer, mBufferLength+1);
}
}
@@ -474,7 +426,7 @@ void nsHTMLContentSinkStream::Write(const nsString& aString)
// Now handle the stream case:
nsOutputStream out(mStream);
- // If a encoder is being used then convert first convert the input string
+ // If an encoder is being used then convert first convert the input string
if (mUnicodeEncoder)
{
EncodeToBuffer(aString);
@@ -527,9 +479,10 @@ void nsHTMLContentSinkStream::Write(char aData)
* @param
* @return
*/
-nsHTMLContentSinkStream::~nsHTMLContentSinkStream() {
- NS_IF_RELEASE(mUnicodeEncoder);
- if(mBuffer) delete [] mBuffer;
+nsHTMLContentSinkStream::~nsHTMLContentSinkStream()
+{
+ if (mBuffer)
+ nsAllocator::Free(mBuffer);
}
@@ -984,8 +937,9 @@ void nsHTMLContentSinkStream::AddEndTag(const nsIParserNode& aNode)
if (tag == eHTMLTag_body)
mInBody = PR_FALSE;
-
- if ((mDoFormat && BreakAfterClose(tag)) || tag == eHTMLTag_html)
+
+ if ((mDoFormat && BreakAfterClose(tag))
+ || tag == eHTMLTag_body || tag == eHTMLTag_html)
{
Write(NS_LINEBREAK);
mColPos = 0;
@@ -1206,9 +1160,8 @@ nsHTMLContentSinkStream::OpenContainer(const nsIParserNode& aNode){
if (key.Equals("charset"))
{
if (mCharsetOverride.Length() == 0)
- InitEncoder(value);
- else
- InitEncoder(mCharsetOverride);
+ mCharsetOverride.Assign(value);
+ InitEncoder();
}
}
}
diff --git a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.h b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.h
index 87a34578b8c..d430e34c7d5 100644
--- a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.h
+++ b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.h
@@ -39,12 +39,10 @@
#ifndef NS_TXTCONTENTSINK_STREAM
#define NS_TXTCONTENTSINK_STREAM
-#include "nsIParserNode.h"
#include "nsIHTMLContentSink.h"
-#include "nshtmlpars.h"
-#include "nsHTMLTokens.h"
#include "nsParserCIID.h"
#include "nsCOMPtr.h"
+#include "nsHTMLTokens.h" // for eHTMLTags
#define NS_IHTMLCONTENTSINKSTREAM_IID \
{0xa39c6bff, 0x15f0, 0x11d2, \
@@ -54,7 +52,8 @@
class ostream;
#endif
-class nsIUnicodeEncoder;
+class nsIParserNode;
+class nsISaveAsCharset;
class nsIOutputStream;
class nsIHTMLContentSinkStream : public nsIHTMLContentSink {
@@ -149,10 +148,8 @@ protected:
void AddIndent();
void EnsureBufferSize(PRInt32 aNewSize);
- nsresult InitEncoder(const nsString& aCharset);
-
- void UnicodeToHTMLString(const nsString& aSrc, nsString& aDst);
void EncodeToBuffer(const nsString& aString);
+ NS_IMETHOD InitEncoder();
void Write(const nsString& aString);
void Write(const char* aCharBuffer);
@@ -180,8 +177,8 @@ protected:
PRBool mDoHeader;
PRBool mBodyOnly;
- nsIUnicodeEncoder* mUnicodeEncoder;
- nsString mCharsetOverride;
+ nsCOMPtr mUnicodeEncoder;
+ nsCAutoString mCharsetOverride;
};