diff --git a/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.cpp b/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.cpp
index cc136e6f614..478597970b0 100644
--- a/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.cpp
+++ b/mozilla/htmlparser/src/nsHTMLToTXTSinkStream.cpp
@@ -458,35 +458,51 @@ nsHTMLToTXTSinkStream::OpenContainer(const nsIParserNode& aNode)
// it, but better than nothing.
// Also set mWrapColumn to the value given there
// (which arguably we should only do if told to do so).
- nsString value;
- if(NS_SUCCEEDED(GetValueOfAttribute(aNode, "style", value)) &&
- (-1 != value.Find("-moz-pre-wrap")))
+ nsString style;
+ PRInt32 whitespace;
+ if(NS_SUCCEEDED(GetValueOfAttribute(aNode, "style", style)) &&
+ (-1 != (whitespace = style.Find("white-space:"))))
{
- mPreFormatted = PR_TRUE;
- mCacheLine = PR_TRUE;
- PRInt32 widthOffset = value.Find("width:");
- if (widthOffset >= 0)
+ if (-1 != style.Find("-moz-pre-wrap", PR_TRUE, whitespace))
{
- // We have to search for the ch before the semicolon,
- // not for the semicolon itself, because nsString::ToInteger()
- // considers 'c' to be a valid numeric char (even if radix=10)
- // but then gets confused if it sees it next to the number
- // when the radix specified was 10, and returns an error code.
- PRInt32 semiOffset = value.Find("ch", widthOffset+6);
- PRInt32 length = (semiOffset > 0 ? semiOffset - widthOffset - 6
- : value.Length() - widthOffset);
- nsString widthstr;
- value.Mid(widthstr, widthOffset+6, length);
- PRInt32 err;
- PRInt32 col = widthstr.ToInteger(&err);
- if (NS_SUCCEEDED(err))
- {
- SetWrapColumn((PRUint32)col);
#ifdef DEBUG_akkana
- printf("Set wrap column to %d based on style\n", mWrapColumn);
+ printf("Set mPreFormatted based on style moz-pre-wrap\n");
#endif
+ mPreFormatted = PR_TRUE;
+ mCacheLine = PR_TRUE;
+ PRInt32 widthOffset = style.Find("width:");
+ if (widthOffset >= 0)
+ {
+ // We have to search for the ch before the semicolon,
+ // not for the semicolon itself, because nsString::ToInteger()
+ // considers 'c' to be a valid numeric char (even if radix=10)
+ // but then gets confused if it sees it next to the number
+ // when the radix specified was 10, and returns an error code.
+ PRInt32 semiOffset = style.Find("ch", widthOffset+6);
+ PRInt32 length = (semiOffset > 0 ? semiOffset - widthOffset - 6
+ : style.Length() - widthOffset);
+ nsString widthstr;
+ style.Mid(widthstr, widthOffset+6, length);
+ PRInt32 err;
+ PRInt32 col = widthstr.ToInteger(&err);
+ if (NS_SUCCEEDED(err))
+ {
+ SetWrapColumn((PRUint32)col);
+#ifdef DEBUG_akkana
+ printf("Set wrap column to %d based on style\n", mWrapColumn);
+#endif
+ }
}
}
+ else if (-1 != style.Find("pre", PR_TRUE, whitespace))
+ {
+#ifdef DEBUG_akkana
+ printf("Set mPreFormatted based on style pre\n");
+#endif
+ mPreFormatted = PR_TRUE;
+ mCacheLine = PR_TRUE;
+ SetWrapColumn(0);
+ }
} else {
mPreFormatted = PR_FALSE;
mCacheLine = PR_TRUE; // Cache lines unless something else tells us not to
@@ -633,10 +649,11 @@ nsHTMLToTXTSinkStream::CloseContainer(const nsIParserNode& aNode)
// We want the output to end with a new line,
// but in preformatted areas like text fields,
// we can't emit newlines that weren't there.
- if (mPreFormatted || (mFlags & nsIDocumentEncoder::OutputPreformatted))
- FlushLine();
- else
+ // So add the newline only in the case of formatted output.
+ if (mFlags & nsIDocumentEncoder::OutputFormatted)
EnsureVerticalSpace(0);
+ else
+ FlushLine();
} else if ((type == eHTMLTag_tr) ||
(type == eHTMLTag_li) ||
(type == eHTMLTag_pre) ||
diff --git a/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.cpp b/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.cpp
index cc136e6f614..478597970b0 100644
--- a/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.cpp
+++ b/mozilla/parser/htmlparser/src/nsHTMLToTXTSinkStream.cpp
@@ -458,35 +458,51 @@ nsHTMLToTXTSinkStream::OpenContainer(const nsIParserNode& aNode)
// it, but better than nothing.
// Also set mWrapColumn to the value given there
// (which arguably we should only do if told to do so).
- nsString value;
- if(NS_SUCCEEDED(GetValueOfAttribute(aNode, "style", value)) &&
- (-1 != value.Find("-moz-pre-wrap")))
+ nsString style;
+ PRInt32 whitespace;
+ if(NS_SUCCEEDED(GetValueOfAttribute(aNode, "style", style)) &&
+ (-1 != (whitespace = style.Find("white-space:"))))
{
- mPreFormatted = PR_TRUE;
- mCacheLine = PR_TRUE;
- PRInt32 widthOffset = value.Find("width:");
- if (widthOffset >= 0)
+ if (-1 != style.Find("-moz-pre-wrap", PR_TRUE, whitespace))
{
- // We have to search for the ch before the semicolon,
- // not for the semicolon itself, because nsString::ToInteger()
- // considers 'c' to be a valid numeric char (even if radix=10)
- // but then gets confused if it sees it next to the number
- // when the radix specified was 10, and returns an error code.
- PRInt32 semiOffset = value.Find("ch", widthOffset+6);
- PRInt32 length = (semiOffset > 0 ? semiOffset - widthOffset - 6
- : value.Length() - widthOffset);
- nsString widthstr;
- value.Mid(widthstr, widthOffset+6, length);
- PRInt32 err;
- PRInt32 col = widthstr.ToInteger(&err);
- if (NS_SUCCEEDED(err))
- {
- SetWrapColumn((PRUint32)col);
#ifdef DEBUG_akkana
- printf("Set wrap column to %d based on style\n", mWrapColumn);
+ printf("Set mPreFormatted based on style moz-pre-wrap\n");
#endif
+ mPreFormatted = PR_TRUE;
+ mCacheLine = PR_TRUE;
+ PRInt32 widthOffset = style.Find("width:");
+ if (widthOffset >= 0)
+ {
+ // We have to search for the ch before the semicolon,
+ // not for the semicolon itself, because nsString::ToInteger()
+ // considers 'c' to be a valid numeric char (even if radix=10)
+ // but then gets confused if it sees it next to the number
+ // when the radix specified was 10, and returns an error code.
+ PRInt32 semiOffset = style.Find("ch", widthOffset+6);
+ PRInt32 length = (semiOffset > 0 ? semiOffset - widthOffset - 6
+ : style.Length() - widthOffset);
+ nsString widthstr;
+ style.Mid(widthstr, widthOffset+6, length);
+ PRInt32 err;
+ PRInt32 col = widthstr.ToInteger(&err);
+ if (NS_SUCCEEDED(err))
+ {
+ SetWrapColumn((PRUint32)col);
+#ifdef DEBUG_akkana
+ printf("Set wrap column to %d based on style\n", mWrapColumn);
+#endif
+ }
}
}
+ else if (-1 != style.Find("pre", PR_TRUE, whitespace))
+ {
+#ifdef DEBUG_akkana
+ printf("Set mPreFormatted based on style pre\n");
+#endif
+ mPreFormatted = PR_TRUE;
+ mCacheLine = PR_TRUE;
+ SetWrapColumn(0);
+ }
} else {
mPreFormatted = PR_FALSE;
mCacheLine = PR_TRUE; // Cache lines unless something else tells us not to
@@ -633,10 +649,11 @@ nsHTMLToTXTSinkStream::CloseContainer(const nsIParserNode& aNode)
// We want the output to end with a new line,
// but in preformatted areas like text fields,
// we can't emit newlines that weren't there.
- if (mPreFormatted || (mFlags & nsIDocumentEncoder::OutputPreformatted))
- FlushLine();
- else
+ // So add the newline only in the case of formatted output.
+ if (mFlags & nsIDocumentEncoder::OutputFormatted)
EnsureVerticalSpace(0);
+ else
+ FlushLine();
} else if ((type == eHTMLTag_tr) ||
(type == eHTMLTag_li) ||
(type == eHTMLTag_pre) ||