From a6d2b7a42f1a70963bb11651ed4de068f74c1c77 Mon Sep 17 00:00:00 2001 From: "bzbarsky%mit.edu" Date: Sat, 1 May 2004 05:39:54 +0000 Subject: [PATCH] ReadWhitespace should convert lone \r to \r\n so callers see it as a newline. Bug 103833, r=choess, sr=peterv git-svn-id: svn://10.0.0.236/trunk@155797 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/htmlparser/src/nsScanner.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/mozilla/htmlparser/src/nsScanner.cpp b/mozilla/htmlparser/src/nsScanner.cpp index 532d1e013dd..7135aaf8a0d 100644 --- a/mozilla/htmlparser/src/nsScanner.cpp +++ b/mozilla/htmlparser/src/nsScanner.cpp @@ -935,19 +935,27 @@ nsresult nsScanner::ReadWhitespace(nsString& aString, while(!done && current != end) { switch(theChar) { case '\n': - case '\r': ++aNewlinesSkipped; - case ' ' : - case '\b': - case '\t': + case '\r': { + ++aNewlinesSkipped; PRUnichar thePrevChar = theChar; theChar = (++current != end) ? *current : '\0'; if ((thePrevChar == '\r' && theChar == '\n') || (thePrevChar == '\n' && theChar == '\r')) { theChar = (++current != end) ? *current : '\0'; // CRLF == LFCR => LF + } else if (thePrevChar == '\r') { + // Lone CR becomes CRLF; callers should know to remove extra CRs + AppendUnicodeTo(origin, current, aString); + aString.Append(PRUnichar('\n')); + origin = current; } } break; + case ' ' : + case '\b': + case '\t': + theChar = (++current != end) ? *current : '\0'; + break; default: done = PR_TRUE; AppendUnicodeTo(origin, current, aString); @@ -964,6 +972,8 @@ nsresult nsScanner::ReadWhitespace(nsString& aString, return result; } +//XXXbz callers of this have to manage their lone '\r' themselves if they want +//it to work. Good thing they're all in view-source and it deals. nsresult nsScanner::ReadWhitespace(nsScannerIterator& aStart, nsScannerIterator& aEnd, PRInt32& aNewlinesSkipped) {