Example #1
0
        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());
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }
Example #4
0
 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));
 }
Example #5
0
 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));
 }