private static List<string> ReadLinesWithEndings(string str)
{
var lines = new List<string>();
var length = str.Length;
var i = 0;
var currentLineStart = 0;
while (i < length)
{
if (str[i] == '\r')
{
i++;
if (i < length && str[i] == '\n')
{
i++;
}
lines.Add(str.Substring(currentLineStart, i - currentLineStart));
currentLineStart = i;
}
else if (str[i] == '\n')
{
i++;
lines.Add(str.Substring(currentLineStart, i - currentLineStart));
currentLineStart = i;
}
else
{
i++;
}
}
if (currentLineStart < i)
{
lines.Add(str.Substring(currentLineStart, i - currentLineStart));
}
return lines;
}
}