public static List <Diff> GenerateDiffCache(string textA, string textB) { diff_match_patch dmp = new diff_match_patch(); (string chars1, string chars2, List <string> lines)a = dmp.diff_linesToChars(textA, textB); List <Diff> diffs = dmp.diff_main(a.chars1, a.chars2, true); // Convert the diff back to original text. dmp.diff_charsToLines(diffs, a.lines); // Eliminate freak matches (e.g. blank lines) // dmp.diff_cleanupSemantic(diffs); return(diffs); }
public static string GetDiffMessage(object currentSnapshot, object newSnapshot) { var currentSnapshotJObject = JObjectHelper.FromObject(currentSnapshot); var newSnapshotJObject = JObjectHelper.FromObject(newSnapshot); var dmp = new diff_match_patch(); var a = dmp.diff_linesToChars(currentSnapshotJObject.ToString(), newSnapshotJObject.ToString()); var lineText1 = (string)a[0]; var lineText2 = (string)a[1]; var lineArray = (List <string>)a[2]; var diffs = dmp.diff_main(lineText1, lineText2, false); dmp.diff_charsToLines(diffs, lineArray); dmp.diff_cleanupEfficiency(diffs); var builder = new StringBuilder(Environment.NewLine); builder.AppendLine("Snapshots do not match"); builder.AppendLine(RemovedLegendString); builder.AppendLine(AddedLegendString); builder.AppendLine(Environment.NewLine); for (var i = 0; i < diffs.Count; i++) { var diff = diffs[i]; var lines = GetLines(diff.text); switch (diff.operation) { case Operation.DELETE: lines.ForEach(l => builder.AppendLine($"- {l}")); break; case Operation.INSERT: lines.ForEach(l => builder.AppendLine($"+ {l}")); break; case Operation.EQUAL: GetEqualLines(lines, i == 0, i == diffs.Count - 1).ForEach(l => builder.AppendLine(l)); break; } } return(builder.ToString()); }
private void ShowDifferencesInBrowser(string build1Text, string build2Text) { var diff = new diff_match_patch(); var linesResult = diff.diff_linesToChars(build1Text, build2Text); var lineText1 = linesResult[0]; var lineText2 = linesResult[1]; var lineArray = linesResult[2] as List <string>; var diffs = diff.diff_main(lineText1.ToString(), lineText2.ToString(), true); diff.diff_charsToLines(diffs, lineArray); var diffPrettyHtml = diff.diff_prettyHtmlSidebySide(diffs); var mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); using (var outputFile = new StreamWriter(mydocpath + @"\CompareBuilds.html")) { outputFile.WriteLine(diffPrettyHtml); } Process.Start("IExplore.exe", mydocpath + @"\CompareBuilds.html"); }
private void GenerateDiff(MarkdownPage page, string newPage) { var diffEngine = new diff_match_patch(); var a = diffEngine.diff_linesToChars(page.Content, newPage); var text1 = (string)a[0]; var text2 = (string)a[1]; var lineArray = (List <string>)a[2]; var diff = diffEngine.diff_main(text1, text2, false); diffEngine.diff_charsToLines(diff, lineArray); diffEngine.diff_cleanupSemantic(diff); var htmlDiff = diffEngine.diff_prettyHtml(diff); Frame.Navigate(typeof(ImportDiffPage), Tuple.Create(diff, Page.Id)); }
private static string GetDiffMessage(JToken old, JToken @new) { var dmp = new diff_match_patch(); var a = dmp.diff_linesToChars(old.ToString(), @new.ToString()); var lineText1 = (string)a[0]; var lineText2 = (string)a[1]; var lineArray = (List <string>)a[2]; var diffs = dmp.diff_main(lineText1, lineText2, false); dmp.diff_charsToLines(diffs, lineArray); dmp.diff_cleanupEfficiency(diffs); var builder = new StringBuilder("\n"); builder.AppendLine("- Snapshot"); builder.AppendLine("+ Receieved\n\n"); for (var i = 0; i < diffs.Count; i++) { var diff = diffs[i]; var lines = GetLines(diff.text); switch (diff.operation) { case Operation.DELETE: lines.ForEach(l => builder.AppendLine($"- {l}")); break; case Operation.INSERT: lines.ForEach(l => builder.AppendLine($"+ {l}")); break; case Operation.EQUAL: GetEqualLines(lines, i == 0, i == diffs.Count - 1).ForEach(l => builder.AppendLine(l)); break; } } return(builder.ToString()); }