public static string CalculateLongestCommonWhitespacePrefix()

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;
        }