示例#1
0
 public static void AddImaginaryBlock(this DiffFile file, DiffInfo textInfo)
 {
     file.AppendDiffBlock(textInfo.BlockPosition, textInfo.TextOffset,
                          DiffBlockType.Imaginary);
     textInfo.BlockPosition++;
     textInfo.TextOffset++;
 }
示例#2
0
        private void AddModifiedBlock(DiffInfo oldTextInfo, DiffFile oldFile,
                                      DiffInfo newTextInfo, DiffFile newFile)
        {
            oldFile.AddDiffBlock(oldTextInfo, DiffBlockType.Modified);

            newFile.AddDiffBlock(newTextInfo, DiffBlockType.Modified);
        }
示例#3
0
        private static void AddBlockWithImagineryPart(DiffInfo imagineryTextInfo, DiffFile imagineryBlockFile,
                                                      DiffInfo textInfo, DiffFile file, DiffBlockType nonImagineryBlockType)
        {
            imagineryBlockFile.AddImaginaryBlock(imagineryTextInfo);

            file.AddDiffBlock(textInfo, nonImagineryBlockType);
        }
示例#4
0
 public static void AddUnchangedBlocks(this DiffFile diffFile, DiffInfo textInfo)
 {
     while (textInfo.BlockPosition - textInfo.TextOffset < textInfo.HighBound)
     {
         diffFile.AppendDiffBlock(textInfo.BlockPosition,
                                  textInfo.TextOffset,
                                  DiffBlockType.Unchanged);
         textInfo.BlockPosition++;
     }
 }
示例#5
0
        private DiffResult GetChangesCore(IEnumerable <DiffItem> diffItems)
        {
            var oldFile = new DiffFile();
            var newFile = new DiffFile();

            oldFile.Lines = oldLines;
            newFile.Lines = newLines;

            var oldTextInfo = new DiffInfo();
            var newTextInfo = new DiffInfo();

            foreach (DiffItem diffItem in diffItems)
            {
                oldTextInfo.HighBound = diffItem.StartA;
                newTextInfo.HighBound = diffItem.StartB;

                oldFile.AddUnchangedBlocks(oldTextInfo);
                newFile.AddUnchangedBlocks(newTextInfo);

                diffItem.ProcessBlocks(
                    () =>
                {
                    this.AddModifiedBlock(oldTextInfo, oldFile, newTextInfo, newFile);
                },
                    () =>
                {
                    AddBlockWithImagineryPart(newTextInfo, newFile, oldTextInfo, oldFile, DiffBlockType.Deleted);
                },
                    () =>
                {
                    AddBlockWithImagineryPart(oldTextInfo, oldFile, newTextInfo, newFile, DiffBlockType.Inserted);
                });
            }

            oldTextInfo.HighBound = this.oldLines.Count;
            newTextInfo.HighBound = this.newLines.Count;

            oldFile.AddUnchangedBlocks(oldTextInfo);
            newFile.AddUnchangedBlocks(newTextInfo);

            return(new DiffResult(oldFile, newFile));
        }
示例#6
0
 public static void AddDiffBlock(this DiffFile file, DiffInfo textInfo, DiffBlockType diffBlockType)
 {
     file.AppendDiffBlock(textInfo.BlockPosition, textInfo.TextOffset,
                          diffBlockType);
     textInfo.BlockPosition++;
 }