private void OnTextChanged(TextChangedEventArgs e) { if (TextChanged != null) { TextChanged(this, e); } }
private void HandleTextChanged(object sender, TextChangedEventArgs e) { TryParsing(e); UpdateFormatting(); ConsistencyCheck(); }
private void TryParsing(TextChangedEventArgs e) { if (_parseTree == null || _parseTree.EndPosition <= e.Start || _parseTree.StartPosition >= e.Start) { Console.WriteLine("Complete Reparse."); _text.SetText(""); string text = _editor.GetText(0, _editor.Length); int pos = 0; foreach (char ch in text) { _text.InsertChar(ch, pos); pos ++; } CompleteReparse(); } else { // TODO: Add multiple char deletion and insertion to parse nodes and TWC. // Also add unit tests for them. switch (e.Operation) { case TextChangedEventArgs.OperationType.Insertion: for (int i = 0; i < e.Length; i++) { _parseTree = _parseTree.CharInsertedAt(e.Text[i], e.Start + i); } // Console.WriteLine(">>> After insert:"); break; case TextChangedEventArgs.OperationType.Deletion: // Console.WriteLine(">>> TWC is: {0}", _text.TestRender()); for (int i = 0; i < e.Length; i++) { _parseTree = _parseTree.CharDeletedAt(e.Start); } // Console.WriteLine(">>> After delete:"); break; default: // Console.WriteLine("Unknown text change operation."); break; } // Console.WriteLine(">>> Code tree is:{0}{1}", // Environment.NewLine, // _parseTree.ToStringAsTree()); // Console.WriteLine(">>> TWC is: {1}: {0}", // _text.TestRender(), // _text.GetHashCode()); // Console.WriteLine(">>> Old code is '{0}'.", _parseTree.ToStringAsCode(true)); // Console.WriteLine(">>> New code is '{0}'.", _parseTree.ToStringAsCode(false)); } }
private void OnTextChanged(TextChangedEventArgs.OperationType operation, int start, int length, string text) { if (TextChanged != null) { TextChanged(this, new TextChangedEventArgs(operation, start, length, text)); } }