Fix a bug in DefaultRazorSourceLineCollection.GetLineStarts
This commit is contained in:
parent
a1dd898994
commit
2c594199c3
|
|
@ -75,45 +75,31 @@ namespace Microsoft.AspNetCore.Razor.Language
|
||||||
// We always consider a document to have at least a 0th line, even if it's empty.
|
// We always consider a document to have at least a 0th line, even if it's empty.
|
||||||
starts.Add(0);
|
starts.Add(0);
|
||||||
|
|
||||||
var unprocessedCR = false;
|
|
||||||
|
|
||||||
// Length - 1 because we don't care if there was a linebreak as the last character.
|
|
||||||
var length = _document.Length;
|
var length = _document.Length;
|
||||||
for (var i = 0; i < length - 1; i++)
|
for (var i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
var c = _document[i];
|
var c = _document[i];
|
||||||
var isLineBreak = false;
|
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case '\r':
|
case '\r':
|
||||||
unprocessedCR = true;
|
if (i + 1 < length && _document[i + 1] == '\n')
|
||||||
continue;
|
{
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
starts.Add(i + 1);
|
||||||
|
break;
|
||||||
|
|
||||||
case '\n':
|
case '\n':
|
||||||
unprocessedCR = false;
|
starts.Add(i + 1);
|
||||||
isLineBreak = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '\u0085':
|
case '\u0085':
|
||||||
case '\u2028':
|
case '\u2028':
|
||||||
case '\u2029':
|
case '\u2029':
|
||||||
isLineBreak = true;
|
starts.Add(i + 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unprocessedCR)
|
|
||||||
{
|
|
||||||
// If we get here it means that we had a CR followed by something other than an LF.
|
|
||||||
// Add the CR as a line break.
|
|
||||||
starts.Add(i);
|
|
||||||
unprocessedCR = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isLineBreak)
|
|
||||||
{
|
|
||||||
starts.Add(i + 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue