public void OptimizeTypedUndo ()
{
if (undoStack.Count == 0)
return;
UndoOperation top = undoStack.Pop ();
if (top.Args == null || top.Args.InsertedText == null || top.Args.InsertionLength != 1 || (top is KeyboardStackUndo && ((KeyboardStackUndo)top).IsClosed)) {
undoStack.Push (top);
return;
}
if (undoStack.Count == 0 || !(undoStack.Peek () is KeyboardStackUndo))
undoStack.Push (new KeyboardStackUndo ());
var keyUndo = (KeyboardStackUndo)undoStack.Pop ();
if (keyUndo.IsClosed) {
undoStack.Push (keyUndo);
keyUndo = new KeyboardStackUndo ();
}
if (keyUndo.Args != null && keyUndo.Args.Offset + 1 != top.Args.Offset || !char.IsLetterOrDigit (top.Args.InsertedText.GetCharAt (0))) {
keyUndo.IsClosed = true;
undoStack.Push (keyUndo);
keyUndo = new KeyboardStackUndo ();
}
keyUndo.Add (top);
undoStack.Push (keyUndo);
}