internal static string DoSinglePageDiff(string SourceText, string DestinationText) { DiffResult DResult = Tools.Diff(SourceText, DestinationText); int TotalDestLines = DResult.UnChanged.Count + DResult.Inserted.Count; StringBuilder Result = new StringBuilder(@"{\rtf1{\colortbl ;\red50\green205\blue50;\red255\green165\blue0;}"); for (int i = 0; i < TotalDestLines; i++) { int LineNo = i + 1; string LineNoString = GetLineNoString(LineNo); if (DResult.UnChanged.Contains(LineNo)) { Result.Append(LineNoString); Result.Append(Tools.RtfSafe(DResult.UnChangedSections[DResult.UnChanged.IndexOf(LineNo)])); Result.Append(@" \par "); } if (DResult.MissingAt.Contains(LineNo)) { int Pointer = 0; while ((Pointer = DResult.MissingAt.IndexOf(LineNo, Pointer)) > -1) { Result.Append(" "); Result.Append(@"\highlight2 "); Result.Append(Tools.RtfSafe(DResult.DeletedSections[Pointer])); Result.Append(@" \highlight0 \par "); Pointer++; } } if (DResult.Inserted.Contains(i + 1)) { Result.Append(LineNoString); Result.Append(@"\highlight1 "); Result.Append(Tools.RtfSafe(DResult.InsertedSections[DResult.Inserted.IndexOf(LineNo)])); Result.Append(@" \highlight0 \par "); } } return(Result.ToString()); }
internal static DiffResult GetDiff(Mathertel.Diff.Item[] Results, string Source, string Destination, char Splitter) { DiffResult DResult = new DiffResult(); int n = 0; string[] aLines = Source.Split(Splitter); string[] bLines = Destination.Split(Splitter); foreach (Diff.Item Result in Results) { Diff.Item aItem = Result; // write unchanged lines while ((n < aItem.StartB) && (n < bLines.Length)) { DResult.UnChanged.Add(n + 1); DResult.UnChangedSections.Add(bLines[n]); n++; } // while // write deleted lines for (int m = 0; m < aItem.deletedA; m++) { DResult.Deleted.Add(aItem.StartA + m + 1); DResult.MissingAt.Add(n + 1); DResult.DeletedSections.Add(aLines[aItem.StartA + m]); } // for // write inserted lines while (n < aItem.StartB + aItem.insertedB) { DResult.Inserted.Add(n + 1); DResult.InsertedSections.Add(bLines[n]); n++; } // while } // while // write rest of unchanged lines while (n < bLines.Length) { DResult.UnChanged.Add(n + 1); DResult.UnChangedSections.Add(bLines[n]); n++; } // while return(DResult); }
internal static DiffResult GetDiff(Mathertel.Diff.Item[] Results, string Source, string Destination, char Splitter) { DiffResult DResult = new DiffResult(); int n = 0; string[] aLines = Source.Split(Splitter); string[] bLines = Destination.Split(Splitter); foreach (Diff.Item Result in Results) { Diff.Item aItem = Result; // write unchanged lines while ((n < aItem.StartB) && (n < bLines.Length)) { DResult.UnChanged.Add(n + 1); DResult.UnChangedSections.Add(bLines[n]); n++; } // while // write deleted lines for (int m = 0; m < aItem.deletedA; m++) { DResult.Deleted.Add(aItem.StartA + m + 1); DResult.MissingAt.Add(n + 1); DResult.DeletedSections.Add(aLines[aItem.StartA + m]); } // for // write inserted lines while (n < aItem.StartB + aItem.insertedB) { DResult.Inserted.Add(n + 1); DResult.InsertedSections.Add(bLines[n]); n++; } // while } // while // write rest of unchanged lines while (n < bLines.Length) { DResult.UnChanged.Add(n + 1); DResult.UnChangedSections.Add(bLines[n]); n++; } // while return DResult; }
public static DiffResult DiffLine(string Source, string Destination) { Mathertel.Diff.Item[] Results = Mathertel.Diff.DiffText(Source.Replace(' ', '\n'), Destination.Replace(' ', '\n'), false, false, false); return(DiffResult.GetLineDiff(Results, Source, Destination)); }
public static DiffResult Diff(string Source, string Destination) { Mathertel.Diff.Item[] Results = Mathertel.Diff.DiffText(Source, Destination, false, false, false); return(DiffResult.GetStringDiff(Results, Source, Destination)); }