Exemplo n.º 1
0
        private void FindMatchingBlocks(int startInOld, int endInOld, int startInNew, int endInNew, List <DiffMatch> matchingBlocks)
        {
            DiffMatch item = FindMatch(startInOld, endInOld, startInNew, endInNew);

            if (item != null)
            {
                if ((startInOld < item.StartInOld) && (startInNew < item.StartInNew))
                {
                    FindMatchingBlocks(startInOld, item.StartInOld, startInNew, item.StartInNew, matchingBlocks);
                }
                matchingBlocks.Add(item);
                if ((item.EndInOld < endInOld) && (item.EndInNew < endInNew))
                {
                    FindMatchingBlocks(item.EndInOld, endInOld, item.EndInNew, endInNew, matchingBlocks);
                }
            }
        }
Exemplo n.º 2
0
        private List <DiffOperation> Operations()
        {
            int startInOld             = 0;
            int startInNew             = 0;
            List <DiffOperation> list  = new List <DiffOperation>();
            List <DiffMatch>     list2 = MatchingBlocks();

            list2.Add(new DiffMatch(oldWords.Length, newWords.Length, 0));
            for (int i = 0; i < list2.Count; i++)
            {
                DiffMatch  match = list2[i];
                bool       flag  = startInOld == match.StartInOld;
                bool       flag2 = startInNew == match.StartInNew;
                DiffAction none  = DiffAction.none;
                if (!flag && !flag2)
                {
                    none = DiffAction.replace;
                }
                else if (flag && !flag2)
                {
                    none = DiffAction.insert;
                }
                else if (!flag)
                {
                    none = DiffAction.delete;
                }
                else
                {
                    none = DiffAction.none;
                }
                if (none != DiffAction.none)
                {
                    list.Add(new DiffOperation(none, startInOld, match.StartInOld, startInNew, match.StartInNew));
                }
                if (match.Size != 0)
                {
                    list.Add(new DiffOperation(DiffAction.equal, match.StartInOld, match.EndInOld, match.StartInNew, match.EndInNew));
                }
                startInOld = match.EndInOld;
                startInNew = match.EndInNew;
            }
            return(list);
        }