From b704d40ce31495e604c62863aa052b1aa3b5cb55 Mon Sep 17 00:00:00 2001 From: "akkana%netscape.com" Date: Tue, 6 Jul 1999 23:13:15 +0000 Subject: [PATCH] Fix formatted plaintext output -- it wasn't following prettyprint or wrap length git-svn-id: svn://10.0.0.236/trunk@38461 18797224-902f-48f8-a5cc-f745e15eee43 --- .../content/base/src/nsDocumentEncoder.cpp | 3 ++- mozilla/editor/base/nsTextEditor.cpp | 4 ++- .../htmlparser/src/nsHTMLToTXTSinkStream.cpp | 25 ++++++++----------- .../htmlparser/src/nsHTMLToTXTSinkStream.h | 1 - mozilla/layout/base/src/nsDocumentEncoder.cpp | 3 ++- .../htmlparser/src/nsHTMLToTXTSinkStream.cpp | 25 ++++++++----------- .../htmlparser/src/nsHTMLToTXTSinkStream.h | 1 - 7 files changed, 29 insertions(+), 33 deletions(-) diff --git a/mozilla/content/base/src/nsDocumentEncoder.cpp b/mozilla/content/base/src/nsDocumentEncoder.cpp index 7272ffb200a..c3f0eac0959 100644 --- a/mozilla/content/base/src/nsDocumentEncoder.cpp +++ b/mozilla/content/base/src/nsDocumentEncoder.cpp @@ -456,7 +456,8 @@ nsTextEncoder::EncodeToString(nsString& aOutputString) { nsIHTMLContentSink* sink = nsnull; - rv = NS_New_HTMLToTXT_SinkStream(&sink, &aOutputString, mPrettyPrint); + rv = NS_New_HTMLToTXT_SinkStream(&sink, &aOutputString, + mWrapColumn, mPrettyPrint); if (sink && NS_SUCCEEDED(rv)) { diff --git a/mozilla/editor/base/nsTextEditor.cpp b/mozilla/editor/base/nsTextEditor.cpp index e3b11385411..a5b8c34f8ca 100644 --- a/mozilla/editor/base/nsTextEditor.cpp +++ b/mozilla/editor/base/nsTextEditor.cpp @@ -152,6 +152,7 @@ nsTextEditor::nsTextEditor() // NS_INIT_REFCNT(); mRules = nsnull; mMaxTextLength = -1; + mWrapColumn = 72; } nsTextEditor::~nsTextEditor() @@ -1566,7 +1567,8 @@ NS_IMETHODIMP nsTextEditor::OutputTextToString(nsString& aOutputString, PRBool a wc = 0; else wc = (PRUint32)mWrapColumn; - (void)encoder->SetWrapColumn(wc); + if (mWrapColumn > 0) + (void)encoder->SetWrapColumn(wc); } rv = encoder->EncodeToString(aOutputString); diff --git a/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.cpp b/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.cpp index 9d6c95957d5..72b882166ed 100644 --- a/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.cpp +++ b/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.cpp @@ -224,8 +224,7 @@ nsHTMLToTXTSinkStream::nsHTMLToTXTSinkStream(nsIOutputStream* aStream, mStream = aStream; mString = aString; mPrettyPrint = PR_FALSE; - mPreformatted = PR_FALSE; - mWrapColumn = 72; // XXX magic number, obviously needs to be settable + mWrapColumn = 72; // XXX magic number, we expect someone to reset this // initialize the tag stack to zero: mTagStack = new nsHTMLTag[TagStackSize]; @@ -677,7 +676,6 @@ nsHTMLToTXTSinkStream::OpenContainer(const nsIParserNode& aNode) mIndent += gTabSize; else if (type == eHTMLTag_pre) { - mPreformatted = PR_TRUE; nsString temp(NS_LINEBREAK); Write(temp); mColPos = 0; @@ -733,9 +731,6 @@ nsHTMLToTXTSinkStream::CloseContainer(const nsIParserNode& aNode) if (mTagStackIndex > 0) --mTagStackIndex; - if (type == eHTMLTag_pre) - mPreformatted = PR_FALSE; - else if (type == eHTMLTag_ol) --mOLStackIndex; @@ -819,20 +814,22 @@ nsHTMLToTXTSinkStream::AddLeaf(const nsIParserNode& aNode) // Otherwise, either we're collapsing to minimal text, or we're // prettyprinting to mimic the html format, and in neither case // does the formatting of the html source help us. - else if (mPrettyPrint && mPreformatted && type == eHTMLTag_whitespace) + else if (mPrettyPrint + && (mTagStackIndex > 0) + && (mTagStack[mTagStackIndex-1] == eHTMLTag_pre)) { - if (mPrettyPrint) + if (type == eHTMLTag_whitespace) { text = aNode.GetText(); Write(text); mColPos += text.Length(); } - } - else if (mPrettyPrint && mPreformatted && type == eHTMLTag_newline) - { - nsString temp(NS_LINEBREAK); - Write(temp); - mColPos = 0; + else if (type == eHTMLTag_newline) + { + nsString temp(NS_LINEBREAK); + Write(temp); + mColPos = 0; + } } return NS_OK; diff --git a/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.h b/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.h index f6140a4e2ba..2dec091416c 100644 --- a/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.h +++ b/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.h @@ -130,7 +130,6 @@ protected: PRInt32 mIndent; PRInt32 mColPos; PRBool mDoOutput; - PRBool mPreformatted; PRBool mPrettyPrint; PRUint32 mWrapColumn; diff --git a/mozilla/layout/base/src/nsDocumentEncoder.cpp b/mozilla/layout/base/src/nsDocumentEncoder.cpp index 7272ffb200a..c3f0eac0959 100644 --- a/mozilla/layout/base/src/nsDocumentEncoder.cpp +++ b/mozilla/layout/base/src/nsDocumentEncoder.cpp @@ -456,7 +456,8 @@ nsTextEncoder::EncodeToString(nsString& aOutputString) { nsIHTMLContentSink* sink = nsnull; - rv = NS_New_HTMLToTXT_SinkStream(&sink, &aOutputString, mPrettyPrint); + rv = NS_New_HTMLToTXT_SinkStream(&sink, &aOutputString, + mWrapColumn, mPrettyPrint); if (sink && NS_SUCCEEDED(rv)) { diff --git a/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.cpp b/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.cpp index 9d6c95957d5..72b882166ed 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.cpp @@ -224,8 +224,7 @@ nsHTMLToTXTSinkStream::nsHTMLToTXTSinkStream(nsIOutputStream* aStream, mStream = aStream; mString = aString; mPrettyPrint = PR_FALSE; - mPreformatted = PR_FALSE; - mWrapColumn = 72; // XXX magic number, obviously needs to be settable + mWrapColumn = 72; // XXX magic number, we expect someone to reset this // initialize the tag stack to zero: mTagStack = new nsHTMLTag[TagStackSize]; @@ -677,7 +676,6 @@ nsHTMLToTXTSinkStream::OpenContainer(const nsIParserNode& aNode) mIndent += gTabSize; else if (type == eHTMLTag_pre) { - mPreformatted = PR_TRUE; nsString temp(NS_LINEBREAK); Write(temp); mColPos = 0; @@ -733,9 +731,6 @@ nsHTMLToTXTSinkStream::CloseContainer(const nsIParserNode& aNode) if (mTagStackIndex > 0) --mTagStackIndex; - if (type == eHTMLTag_pre) - mPreformatted = PR_FALSE; - else if (type == eHTMLTag_ol) --mOLStackIndex; @@ -819,20 +814,22 @@ nsHTMLToTXTSinkStream::AddLeaf(const nsIParserNode& aNode) // Otherwise, either we're collapsing to minimal text, or we're // prettyprinting to mimic the html format, and in neither case // does the formatting of the html source help us. - else if (mPrettyPrint && mPreformatted && type == eHTMLTag_whitespace) + else if (mPrettyPrint + && (mTagStackIndex > 0) + && (mTagStack[mTagStackIndex-1] == eHTMLTag_pre)) { - if (mPrettyPrint) + if (type == eHTMLTag_whitespace) { text = aNode.GetText(); Write(text); mColPos += text.Length(); } - } - else if (mPrettyPrint && mPreformatted && type == eHTMLTag_newline) - { - nsString temp(NS_LINEBREAK); - Write(temp); - mColPos = 0; + else if (type == eHTMLTag_newline) + { + nsString temp(NS_LINEBREAK); + Write(temp); + mColPos = 0; + } } return NS_OK; diff --git a/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.h b/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.h index f6140a4e2ba..2dec091416c 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.h +++ b/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.h @@ -130,7 +130,6 @@ protected: PRInt32 mIndent; PRInt32 mColPos; PRBool mDoOutput; - PRBool mPreformatted; PRBool mPrettyPrint; PRUint32 mWrapColumn;