/// <summary> /// Compares the text. /// </summary> /// <param name="oldText">The old text.</param> /// <param name="newText">The new text.</param> /// <param name="displayInsertedText">if set to <c>true</c> [display inserted text].</param> /// <param name="displayDeletedText">if set to <c>true</c> [display deleted text].</param> /// <param name="insertedStyle">The inserted style.</param> /// <param name="deletedStyle">The deleted style.</param> /// <returns></returns> private static string CompareText(string oldText, string newText, bool displayInsertedText, bool displayDeletedText, string insertedStyle, string deletedStyle) { var sb = new StringBuilder(); var diffs = Diff.DiffText1(oldText, newText); int pos = 0; for (int n = 0; n < diffs.Length; n++) { Diff.Item it = diffs[n]; // write unchanged chars while ((pos < it.StartB) && (pos < newText.Length)) { sb.Append(newText[pos]); pos++; } // while // write deleted chars if (displayDeletedText && it.DeletedA > 0) { sb.Append(deletedStyle); for (int m = 0; m < it.DeletedA; m++) { sb.Append(oldText[it.StartA + m]); } // for sb.Append("</span>"); } // write inserted chars if (displayInsertedText && pos < it.StartB + it.InsertedB) { sb.Append(insertedStyle); while (pos < it.StartB + it.InsertedB) { sb.Append(newText[pos]); pos++; } // while sb.Append("</span>"); } // if } // while // write rest of unchanged chars while (pos < newText.Length) { sb.Append(newText[pos]); pos++; } // while return(sb.ToString()); }