Beispiel #1
0
        static DiffStringItem[] CreateStringDiffs(DiffItem[] items, string[] lineListA, string[] lineListB)
        {
            var result = new List <DiffStringItem>();

            for (int index = 0; index < items.Length; index++)
            {
                var item = new DiffStringItem();
                item.StartA    = items[index].StartA;
                item.StartB    = items[index].StartB;
                item.DeletedA  = items[index].DeletedA;
                item.InsertedB = items[index].InsertedB;
                if (item.InsertedB > 0)
                {
                    item.Inserted = new string[item.InsertedB];
                    for (int i = 0; i < item.InsertedB; i++)
                    {
                        item.Inserted[i] = (string)lineListB[item.StartB + i].Clone();
                    }
                }
                else
                {
                    item.Inserted = null;
                }
                if (item.DeletedA > 0)
                {
                    item.Deleted = new string[item.DeletedA];
                    for (int i = 0; i < item.DeletedA; i++)
                    {
                        item.Deleted[i] = (string)lineListA[item.StartA + i].Clone();
                    }
                }
                else
                {
                    item.Deleted = null;
                }
                if (result.Count > 0)
                {
                    int            prevDiffPos        = result.Count - 1;
                    DiffStringItem prevDiff           = result[prevDiffPos];
                    int            nonDiffItemStartA  = prevDiff.StartA + prevDiff.DeletedA;
                    int            nonDiffItemLengthA = item.StartA - nonDiffItemStartA;
                    int            nonDiffItemStartB  = prevDiff.StartB + prevDiff.InsertedB;
                    int            nonDiffItemLengthB = item.StartB - nonDiffItemStartB;
                    if (EmptyLinesOnly(lineListA, nonDiffItemStartA, nonDiffItemLengthA) && EmptyLinesOnly(lineListB, nonDiffItemStartB, nonDiffItemLengthB))
                    {
                        result.Add(GlueDiffStringItems(prevDiff, item, lineListA, lineListB));
                        result.RemoveAt(prevDiffPos);
                        continue;
                    }
                }
                result.Add(item);
            }
            return(result.ToArray());
        }
Beispiel #2
0
        static DiffStringItem GlueDiffStringItems(DiffStringItem prevDiff, DiffStringItem diff, string[] linesA, string[] linesB)
        {
            var result = new DiffStringItem();

            result.DeletedA = diff.StartA + diff.DeletedA - prevDiff.StartA;
            result.Deleted  = new string[result.DeletedA];
            Array.Copy(linesA, prevDiff.StartA, result.Deleted, 0, result.DeletedA);
            result.InsertedB = diff.StartB + diff.InsertedB - prevDiff.StartB;
            result.Inserted  = new string[result.InsertedB];
            Array.Copy(linesB, prevDiff.StartB, result.Inserted, 0, result.InsertedB);
            result.StartA = prevDiff.StartA;
            result.StartB = prevDiff.StartB;
            return(result);
        }