diff --git a/mozilla/parser/htmlparser/src/nsScanner.cpp b/mozilla/parser/htmlparser/src/nsScanner.cpp
index bf63e2fb331..1e0430749d4 100644
--- a/mozilla/parser/htmlparser/src/nsScanner.cpp
+++ b/mozilla/parser/htmlparser/src/nsScanner.cpp
@@ -936,19 +936,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);
@@ -965,6 +973,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) {