private void FixOnPreviewTextInput(TextCompositionEventArgs e) { var index = this.CaretOffset; var input = e.Text; var prev = this.PreviousChar.ToString(); var next = this.NextChar.ToString(); e.Handled = false; switch (input) { case "'": case "\"": if (this.IsSelectedSingleLine || (this.IsSelectedMultiLine && this.ExtendedOptions.EncloseMultiLine)) { if (this.ExtendedOptions.EncloseSelection) { e.Handled = true; this.BeginChange(); this.Document.Insert(this.SelectionStart, input); this.Document.Insert(this.SelectionStart + this.SelectionLength, input); this.EndChange(); } break; } if (this.IsSelectedMultiLine && !this.ExtendedOptions.EncloseMultiLine) { break; } if (next == input && prev == input) { e.Handled = true; this.CaretOffset++; break; } if (this.ExtendedOptions.BracketCompletion && ("\t\r\n \0".Contains(next) || ("({[".Contains(prev) && "]})".Contains(next)))) { e.Handled = true; this.Document.Insert(index, input + input); if (this.IsSelectedMultiLine) { this.CaretOffset++; } else { this.CaretOffset--; } break; } break; case "(": case "{": case "[": var closeBracket = StringChecker.GetCloseBracket(input).ToString(); if (this.IsSelectedSingleLine || (this.IsSelectedMultiLine && this.ExtendedOptions.EncloseMultiLine)) { if (this.ExtendedOptions.EncloseSelection) { e.Handled = true; this.BeginChange(); this.Document.Insert(this.SelectionStart, input); this.Document.Insert(this.SelectionStart + this.SelectionLength, closeBracket); this.EndChange(); } break; } if (this.IsSelectedMultiLine && !this.ExtendedOptions.EncloseMultiLine) { break; } if (this.ExtendedOptions.BracketCompletion && ("\t\r\n \0".Contains(next) || ("({[".Contains(prev) && "]})".Contains(next)))) { e.Handled = true; this.Document.Insert(index, input + closeBracket); if (this.IsSelectedMultiLine) { this.CaretOffset++; } else { this.CaretOffset--; } break; } break; case ")": case "}": case "]": if (next == input && prev == StringChecker.GetOpenBracket(input).ToString()) { e.Handled = true; this.CaretOffset++; break; } break; default: break; } }