From 57d2fa8d15883e16942ef241681f595b2a7573e4 Mon Sep 17 00:00:00 2001 From: "bzbarsky%mit.edu" Date: Mon, 7 Aug 2006 03:27:49 +0000 Subject: [PATCH] Don't convert non-breaking spaces to spaces in text controls. Bug 218277, patch by jst and jpl24 , r=bryner, sr=dbaron git-svn-id: svn://10.0.0.236/trunk@206701 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/content/base/public/nsIDocumentEncoder.idl | 9 ++++++++- mozilla/content/base/src/nsPlainTextSerializer.cpp | 13 +++++++------ mozilla/layout/forms/nsTextControlFrame.cpp | 6 +++--- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/mozilla/content/base/public/nsIDocumentEncoder.idl b/mozilla/content/base/public/nsIDocumentEncoder.idl index 7e751f87077..78068ca57f2 100644 --- a/mozilla/content/base/public/nsIDocumentEncoder.idl +++ b/mozilla/content/base/public/nsIDocumentEncoder.idl @@ -58,7 +58,7 @@ interface nsIDocumentEncoderNodeFixup : nsISupports nsIDOMNode fixupNode(in nsIDOMNode aNode); }; -[scriptable, uuid(9e732561-e720-409a-a93c-6754b44b311a)] +[scriptable, uuid(f85c5a20-258d-11db-a98b-0800200c9a66)] interface nsIDocumentEncoder : nsISupports { // Output methods flag bits. There are a frightening number of these, @@ -186,6 +186,13 @@ interface nsIDocumentEncoder : nsISupports */ const unsigned long OutputEncodeHTMLEntities = (1 << 16); + /** + * Normally &npsp; is replaced with a space character when + * encoding data as plain text, set this flag if that's + * not desired. + */ + const unsigned long OutputPersistNBSP = (1 << 17); + /** * Initialize with a pointer to the document and the mime type. * @param aDocument Document to encode. diff --git a/mozilla/content/base/src/nsPlainTextSerializer.cpp b/mozilla/content/base/src/nsPlainTextSerializer.cpp index e3072f8508b..d86e93860f1 100644 --- a/mozilla/content/base/src/nsPlainTextSerializer.cpp +++ b/mozilla/content/base/src/nsPlainTextSerializer.cpp @@ -1239,12 +1239,13 @@ nsPlainTextSerializer::Output(nsString& aString) mStartedOutput = PR_TRUE; } - // First, replace all nbsp characters with spaces, - // which the unicode encoder won't do for us. - static PRUnichar nbsp = 160; - static PRUnichar space = ' '; - aString.ReplaceChar(nbsp, space); - + if (!(mFlags & nsIDocumentEncoder::OutputPersistNBSP)) { + // First, replace all nbsp characters with spaces, + // which the unicode encoder won't do for us. + static PRUnichar nbsp = 160; + static PRUnichar space = ' '; + aString.ReplaceChar(nbsp, space); + } mOutputString->Append(aString); } diff --git a/mozilla/layout/forms/nsTextControlFrame.cpp b/mozilla/layout/forms/nsTextControlFrame.cpp index ac7d1caa05d..2a820c7f9cb 100644 --- a/mozilla/layout/forms/nsTextControlFrame.cpp +++ b/mozilla/layout/forms/nsTextControlFrame.cpp @@ -2606,15 +2606,15 @@ nsTextControlFrame::GetValue(nsAString& aValue, PRBool aIgnoreWrap) const if (mEditor && mUseEditor) { - PRUint32 flags = nsIDocumentEncoder::OutputLFLineBreak;; + PRUint32 flags = (nsIDocumentEncoder::OutputLFLineBreak | + nsIDocumentEncoder::OutputPreformatted | + nsIDocumentEncoder::OutputPersistNBSP); if (PR_TRUE==IsPlainTextControl()) { flags |= nsIDocumentEncoder::OutputBodyOnly; } - flags |= nsIDocumentEncoder::OutputPreformatted; - if (!aIgnoreWrap) { nsHTMLTextWrap wrapProp; if (::GetWrapPropertyEnum(mContent, wrapProp) &&