void ReloadDocument(TextDocument document, string newContent) { var diff = new MyersDiffAlgorithm(new StringSequence(document.Text), new StringSequence(newContent)); document.Replace(0, document.TextLength, newContent, diff.GetEdits().ToOffsetChangeMap()); document.UndoStack.ClearAll(); }
void SetupInitialFileState(bool update) { if (baseDocument == null) { if (update) changeList.Transform(TransformLineChangeInfo); else changeList.InsertRange(0, document.TotalNumberOfLines + 1, LineChangeInfo.EMPTY); } else { changeList.Clear(); Dictionary<string, int> hashes = new Dictionary<string, int>(); MyersDiffAlgorithm diff = new MyersDiffAlgorithm( new DocumentSequence(baseDocument, hashes), new DocumentSequence(document, hashes) ); changeList.Add(LineChangeInfo.EMPTY); int lastEndLine = 0; foreach (Edit edit in diff.GetEdits()) { int beginLine = edit.BeginB; int endLine = edit.EndB; changeList.InsertRange(changeList.Count, beginLine - lastEndLine, LineChangeInfo.EMPTY); if (endLine == beginLine) changeList[changeList.Count - 1] = new LineChangeInfo(edit.EditType, edit.BeginA, edit.EndA); else changeList.InsertRange(changeList.Count, endLine - beginLine, new LineChangeInfo(edit.EditType, edit.BeginA, edit.EndA)); lastEndLine = endLine; } changeList.InsertRange(changeList.Count, textDocument.LineCount - lastEndLine, LineChangeInfo.EMPTY); } OnChangeOccurred(EventArgs.Empty); }
void ReloadDocument(TextDocument document, string newContent) { var diff = new MyersDiffAlgorithm(new StringSequence(document.Text), new StringSequence(newContent)); document.Replace(0, document.TextLength, newContent, diff.GetEdits().ToOffsetChangeMap()); if (this.ClearUndoStackOnSwitch || documentFirstLoad) document.UndoStack.ClearAll(); if (documentFirstLoad) documentFirstLoad = false; }