ReadWhitespace should convert lone \r to \r\n so callers see it as a newline.

Bug 103833, r=choess, sr=peterv
This commit is contained in:
bzbarsky%mit.edu 2004-05-01 05:39:54 +00:00
parent 1d5fa21a52
commit 90e88ce116

View File

@ -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) {