in src/CopyAsHtml/CopyAsHtml/HtmlMarkupProvider.cs [198:286]
public static string CalculateLongestCommonWhitespacePrefix(string text)
{
int longest = int.MaxValue;
int current = 0;
ScanState state = ScanState.Beginning;
var whitespaceKind = WhitespaceKind.Unknown;
for (int i = 0; i < text.Length; i++)
{
if (text[i] == ' ')
{
if (state == ScanState.Beginning)
{
if (whitespaceKind == WhitespaceKind.Unknown || whitespaceKind == WhitespaceKind.Spaces)
{
whitespaceKind = WhitespaceKind.Spaces;
current++;
}
else
{
whitespaceKind = WhitespaceKind.Mixed;
state = ScanState.NonWhitespace;
if (longest > current)
{
longest = current;
}
}
}
}
else if (text[i] == '\t')
{
if (state == ScanState.Beginning)
{
if (whitespaceKind == WhitespaceKind.Unknown || whitespaceKind == WhitespaceKind.Tabs)
{
whitespaceKind = WhitespaceKind.Tabs;
current++;
}
else
{
whitespaceKind = WhitespaceKind.Mixed;
state = ScanState.NonWhitespace;
if (longest > current)
{
longest = current;
}
}
}
}
else if (text[i] == '\r')
{
state = ScanState.Beginning;
current = 0;
}
else if (text[i] == '\n')
{
state = ScanState.Beginning;
current = 0;
}
else
{
state = ScanState.NonWhitespace;
if (longest > current)
{
longest = current;
}
}
}
if (longest > text.Length)
{
longest = text.Length;
}
string result = null;
if (longest > 0)
{
if (whitespaceKind == WhitespaceKind.Spaces)
{
result = new string(' ', longest);
}
else if (whitespaceKind == WhitespaceKind.Tabs)
{
result = new string('\t', longest);
}
}
return result;
}