private void Button_DeDent_Click(object sender, RoutedEventArgs e) { bool isFirstLine = true; int dedentedAmount = 0; int firstLine = 0, lastLine = 0; int savedSelectionLength = TextBox_Code.SelectionLength; int newSelectionStart = TextBox_Code.SelectionStart; int charCount = 0; SwapTabsForSpaces(); string[] lines = ToArray(TextBox_Code.Text); GetLineRange(lines, ref firstLine, ref lastLine); for (int i = 0; i < lines.Length; i++) { if (i >= firstLine && i <= lastLine) { int leadingCount = GetLeadingWhiteSpaceCount(lines[i]); if (leadingCount >= TAB_SIZE) { lines[i] = lines[i].Substring(TAB_SIZE); dedentedAmount = TAB_SIZE; } else if (leadingCount > 0) { lines[i] = lines[i].Substring(leadingCount); dedentedAmount = leadingCount; } charCount += lines[i].Length + Environment.NewLine.Length; if (isFirstLine) { newSelectionStart = (charCount - (lines[i].Length + Environment.NewLine.Length)) + GetLeadingWhiteSpaceCount(lines[i]); isFirstLine = false; } else { if (savedSelectionLength > dedentedAmount) { savedSelectionLength -= dedentedAmount; } } dedentedAmount = 0; } else { charCount += lines[i].Length + Environment.NewLine.Length; } } TextBox_Code.Text = ToText(lines); TextBox_Code.SelectionStart = newSelectionStart; TextBox_Code.SelectionLength = savedSelectionLength; TextBox_Code.Focus(); }
private void Button_FixIndentation_Click(object sender, RoutedEventArgs e) { SwapTabsForSpaces(); if (TextBox_Code.LineCount > 1) { string[] lines = ToArray(TextBox_Code.Text); int firsLineOffset = GetLeadingWhiteSpaceCount(lines[0]); if (firsLineOffset > 0) { DeDent(firsLineOffset); } lines = ToArray(TextBox_Code.Text); int lastLineOffset = GetLeadingWhiteSpaceCount(lines[lines.Length - 1]); if (lastLineOffset > 0) { DeDent(lastLineOffset); } } TextBox_Code.Focus(); }