From 28c3b8768765633339a79b03882c5d6ab3d08892 Mon Sep 17 00:00:00 2001 From: "pinkerton%netscape.com" Date: Mon, 10 Jan 2000 23:04:24 +0000 Subject: [PATCH] fixing bug 21414 the right way, reverting api's to their previous ways. git-svn-id: svn://10.0.0.236/trunk@57303 18797224-902f-48f8-a5cc-f745e15eee43 --- .../content/base/src/nsDocumentEncoder.cpp | 2 +- .../htmlparser/src/nsHTMLToTXTSinkStream.h | 9 +-- mozilla/htmlparser/tests/outsinks/Convert.cpp | 2 +- mozilla/layout/base/src/nsDocumentEncoder.cpp | 2 +- .../htmlparser/src/nsHTMLToTXTSinkStream.h | 9 +-- .../htmlparser/tests/outsinks/Convert.cpp | 2 +- .../src/xpwidgets/nsXIFFormatConverter.cpp | 65 ++++++++++++------- 7 files changed, 51 insertions(+), 40 deletions(-) diff --git a/mozilla/content/base/src/nsDocumentEncoder.cpp b/mozilla/content/base/src/nsDocumentEncoder.cpp index e61b98b19a3..ca880f78f2c 100644 --- a/mozilla/content/base/src/nsDocumentEncoder.cpp +++ b/mozilla/content/base/src/nsDocumentEncoder.cpp @@ -195,7 +195,7 @@ nsTextEncoder::EncodeToString(nsString& aOutputString) rv = NS_New_HTML_ContentSinkStream(&sink, &aOutputString, mFlags); else // default to text/plain - rv = NS_New_HTMLToTXT_SinkStream(&sink, &aOutputString, nsnull, + rv = NS_New_HTMLToTXT_SinkStream(&sink, &aOutputString, mWrapColumn, mFlags); if (sink && NS_SUCCEEDED(rv)) diff --git a/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.h b/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.h index 8eecb84f880..c632f16b27c 100644 --- a/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.h +++ b/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.h @@ -224,7 +224,6 @@ NS_New_HTMLToTXT_SinkStream(nsIHTMLContentSink** aInstancePtrResult, inline nsresult NS_New_HTMLToTXT_SinkStream(nsIHTMLContentSink** aInstancePtrResult, nsString* aOutString, - const nsString* aCharsetOverride=nsnull, PRUint32 aWrapColumn=0, PRUint32 aFlags=0) { nsCOMPtr it; @@ -239,12 +238,8 @@ NS_New_HTMLToTXT_SinkStream(nsIHTMLContentSink** aInstancePtrResult, if (NS_SUCCEEDED(rv)) { it->SetWrapColumn(aWrapColumn); - if ( aCharsetOverride ) - it->SetCharsetOverride(aCharsetOverride); - else { - nsAutoString ucs2("ucs2"); - it->SetCharsetOverride(&ucs2); - } + nsAutoString ucs2("ucs2"); + it->SetCharsetOverride(&ucs2); rv = it->QueryInterface(nsIHTMLContentSink::GetIID(), (void**)aInstancePtrResult); } diff --git a/mozilla/htmlparser/tests/outsinks/Convert.cpp b/mozilla/htmlparser/tests/outsinks/Convert.cpp index 0ebb02a6d79..9ebb7113bbe 100644 --- a/mozilla/htmlparser/tests/outsinks/Convert.cpp +++ b/mozilla/htmlparser/tests/outsinks/Convert.cpp @@ -105,7 +105,7 @@ HTML2text(nsString& inString, nsString& inType, nsString& outType, rv = NS_New_HTML_ContentSinkStream(&sink, &outString, flags); else // default to plaintext - rv = NS_New_HTMLToTXT_SinkStream(&sink, &outString, nsnull, wrapCol, flags); + rv = NS_New_HTMLToTXT_SinkStream(&sink, &outString, wrapCol, flags); if (NS_FAILED(rv)) { diff --git a/mozilla/layout/base/src/nsDocumentEncoder.cpp b/mozilla/layout/base/src/nsDocumentEncoder.cpp index e61b98b19a3..ca880f78f2c 100644 --- a/mozilla/layout/base/src/nsDocumentEncoder.cpp +++ b/mozilla/layout/base/src/nsDocumentEncoder.cpp @@ -195,7 +195,7 @@ nsTextEncoder::EncodeToString(nsString& aOutputString) rv = NS_New_HTML_ContentSinkStream(&sink, &aOutputString, mFlags); else // default to text/plain - rv = NS_New_HTMLToTXT_SinkStream(&sink, &aOutputString, nsnull, + rv = NS_New_HTMLToTXT_SinkStream(&sink, &aOutputString, mWrapColumn, mFlags); if (sink && NS_SUCCEEDED(rv)) diff --git a/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.h b/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.h index 8eecb84f880..c632f16b27c 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.h +++ b/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.h @@ -224,7 +224,6 @@ NS_New_HTMLToTXT_SinkStream(nsIHTMLContentSink** aInstancePtrResult, inline nsresult NS_New_HTMLToTXT_SinkStream(nsIHTMLContentSink** aInstancePtrResult, nsString* aOutString, - const nsString* aCharsetOverride=nsnull, PRUint32 aWrapColumn=0, PRUint32 aFlags=0) { nsCOMPtr it; @@ -239,12 +238,8 @@ NS_New_HTMLToTXT_SinkStream(nsIHTMLContentSink** aInstancePtrResult, if (NS_SUCCEEDED(rv)) { it->SetWrapColumn(aWrapColumn); - if ( aCharsetOverride ) - it->SetCharsetOverride(aCharsetOverride); - else { - nsAutoString ucs2("ucs2"); - it->SetCharsetOverride(&ucs2); - } + nsAutoString ucs2("ucs2"); + it->SetCharsetOverride(&ucs2); rv = it->QueryInterface(nsIHTMLContentSink::GetIID(), (void**)aInstancePtrResult); } diff --git a/mozilla/parser/htmlparser/tests/outsinks/Convert.cpp b/mozilla/parser/htmlparser/tests/outsinks/Convert.cpp index 0ebb02a6d79..9ebb7113bbe 100644 --- a/mozilla/parser/htmlparser/tests/outsinks/Convert.cpp +++ b/mozilla/parser/htmlparser/tests/outsinks/Convert.cpp @@ -105,7 +105,7 @@ HTML2text(nsString& inString, nsString& inType, nsString& outType, rv = NS_New_HTML_ContentSinkStream(&sink, &outString, flags); else // default to plaintext - rv = NS_New_HTMLToTXT_SinkStream(&sink, &outString, nsnull, wrapCol, flags); + rv = NS_New_HTMLToTXT_SinkStream(&sink, &outString, wrapCol, flags); if (NS_FAILED(rv)) { diff --git a/mozilla/widget/src/xpwidgets/nsXIFFormatConverter.cpp b/mozilla/widget/src/xpwidgets/nsXIFFormatConverter.cpp index 534796a524e..99f4b18dd01 100644 --- a/mozilla/widget/src/xpwidgets/nsXIFFormatConverter.cpp +++ b/mozilla/widget/src/xpwidgets/nsXIFFormatConverter.cpp @@ -45,19 +45,21 @@ #include "nsHTMLContentSinkStream.h" #include "nsHTMLToTXTSinkStream.h" #include "nsXIFDTD.h" +#include "nsIStringStream.h" #include "nsString.h" #include "nsWidgetsCID.h" #include "nsXIFFormatConverter.h" + // unicode conversion #define NS_IMPL_IDS -#include "nsIPlatformCharset.h" + #include "nsIPlatformCharset.h" #undef NS_IMPL_IDS #include "nsISaveAsCharset.h" -static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); +static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID); // don't panic. NS_PARSER_IID just has the wrong name. NS_IMPL_ADDREF(nsXIFFormatConverter) NS_IMPL_RELEASE(nsXIFFormatConverter) @@ -302,35 +304,51 @@ nsXIFFormatConverter::Convert(const char *aFromDataFlavor, nsISupports *aFromDat -/** - * - * - */ +// +// ConvertFromXIFToText +// +// Takes XIF and converts it to plain text using the correct charset for the platform/OS/language. +// NS_IMETHODIMP nsXIFFormatConverter::ConvertFromXIFToText(const nsAutoString & aFromStr, nsAutoString & aToStr) { - // we may cache it since the platform charset will not change through application life - nsAutoString aCharset; - nsCOMPtr platformCharset; - nsresult rv = nsComponentManager::CreateInstance(NS_PLATFORMCHARSET_PROGID, nsnull, - NS_GET_IID(nsIPlatformCharset), - getter_AddRefs(platformCharset)); - if (NS_SUCCEEDED(rv)) - rv = platformCharset->GetCharset(kPlatformCharsetSel_PlainTextInClipboard, aCharset); - if (NS_FAILED(rv)) - aCharset.SetString("ISO-8859-1"); - + // Figure out the correct charset we need to use. We are guaranteed that this does not change + // so we cache it. + static nsAutoString platformCharset; + static PRBool hasDeterminedCharset = PR_FALSE; + if ( !hasDeterminedCharset ) { + nsCOMPtr platformCharsetService; + nsresult res = nsComponentManager::CreateInstance(NS_PLATFORMCHARSET_PROGID, nsnull, + NS_GET_IID(nsIPlatformCharset), + getter_AddRefs(platformCharsetService)); + if (NS_SUCCEEDED(res)) + res = platformCharsetService->GetCharset(kPlatformCharsetSel_PlainTextInClipboard, platformCharset); + if (NS_FAILED(res)) + platformCharset.SetString("ISO-8859-1"); + + hasDeterminedCharset = PR_TRUE; + } + + // create the parser to do the conversion. aToStr = ""; nsCOMPtr parser; - rv = nsComponentManager::CreateInstance(kCParserCID, - nsnull, - nsIParser::GetIID(), - getter_AddRefs(parser)); + nsresult rv = nsComponentManager::CreateInstance(kCParserCID, nsnull, NS_GET_IID(nsIParser), + getter_AddRefs(parser)); if ( !parser ) return rv; + // create a string stream to hold the converted text in the appropriate charset. The stream + // owns the char buffer it creates, so we don't have to worry about it. + nsCOMPtr stream; + char* buffer = nsnull; + rv = NS_NewCharOutputStream ( getter_AddRefs(stream), &buffer ); // owns |buffer| + if ( !stream ) + return rv; + nsCOMPtr outStream ( do_QueryInterface(stream) ); + + // convert it! nsCOMPtr sink; - rv = NS_New_HTMLToTXT_SinkStream(getter_AddRefs(sink),&aToStr,&aCharset); + rv = NS_New_HTMLToTXT_SinkStream(getter_AddRefs(sink),outStream,&platformCharset); if ( sink ) { parser->SetContentSink(sink); @@ -341,6 +359,9 @@ nsXIFFormatConverter::ConvertFromXIFToText(const nsAutoString & aFromStr, nsAuto parser->Parse(aFromStr, 0, "text/xif",PR_FALSE,PR_TRUE); } } + + // assign the data back into our out param. + aToStr = buffer; return NS_OK; }