public static void AddImaginaryBlock(this DiffFile file, DiffInfo textInfo) { file.AppendDiffBlock(textInfo.BlockPosition, textInfo.TextOffset, DiffBlockType.Imaginary); textInfo.BlockPosition++; textInfo.TextOffset++; }
private void AddModifiedBlock(DiffInfo oldTextInfo, DiffFile oldFile, DiffInfo newTextInfo, DiffFile newFile) { oldFile.AddDiffBlock(oldTextInfo, DiffBlockType.Modified); newFile.AddDiffBlock(newTextInfo, DiffBlockType.Modified); }
private static void AddBlockWithImagineryPart(DiffInfo imagineryTextInfo, DiffFile imagineryBlockFile, DiffInfo textInfo, DiffFile file, DiffBlockType nonImagineryBlockType) { imagineryBlockFile.AddImaginaryBlock(imagineryTextInfo); file.AddDiffBlock(textInfo, nonImagineryBlockType); }
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++; } }
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)); }
public static void AddDiffBlock(this DiffFile file, DiffInfo textInfo, DiffBlockType diffBlockType) { file.AppendDiffBlock(textInfo.BlockPosition, textInfo.TextOffset, diffBlockType); textInfo.BlockPosition++; }