private void Format(EditList edits, Text a, Text b) { for (int curIdx = 0; curIdx < edits.Count;) { Edit curEdit = edits[curIdx]; int endIdx = FindCombinedEnd(edits, curIdx); Edit endEdit = edits[endIdx]; int aCur = Math.Max(0, curEdit.GetBeginA() - Context); int bCur = Math.Max(0, curEdit.GetBeginB() - Context); int aEnd = Math.Min(a.Size(), endEdit.GetEndA() + Context); int bEnd = Math.Min(b.Size(), endEdit.GetEndB() + Context); WriteHunkHeader(aCur, aEnd, bCur, bEnd); while (aCur < aEnd || bCur < bEnd) { if (aCur < curEdit.GetBeginA() || endIdx + 1 < curIdx) { WriteContextLine(a, aCur); if (IsEndOfLineMissing(a, aCur)) { _out.Append(NoNewLine); } aCur++; bCur++; } else { if (aCur < curEdit.GetEndA()) { WriteRemovedLine(a, aCur); if (IsEndOfLineMissing(a, aCur)) { _out.Append(NoNewLine); } aCur++; } else { if (bCur < curEdit.GetEndB()) { WriteAddedLine(b, bCur); if (IsEndOfLineMissing(b, bCur)) { _out.Append(NoNewLine); } bCur++; } } } if (End(curEdit, aCur, bCur) && ++curIdx < edits.Count) { curEdit = edits[curIdx]; } } } }
private void Format(EditList edits, Text a, Text b, List <TextMarker> leftMarkers, List <TextMarker> rightMarkers, StringBuilder leftOut, StringBuilder rightOut) { int curA = 0; int offset = 0; foreach (var edit in edits) { for (int i = curA; i < edit.GetBeginA(); i++) { WriteContextLine(a, i, leftOut, rightOut); offset++; } _markers.Add(new DiffMarker( GetMarkerType(edit.GetType()), offset, Math.Max(edit.GetLengthA(), edit.GetLengthB()), edit.GetLengthA(), edit.GetLengthB() )); for (curA = edit.GetBeginA(); curA < edit.GetEndA(); curA++) { WriteLine(leftOut, leftMarkers, a, curA, edit.GetType()); } for (int curB = edit.GetBeginB(); curB < edit.GetEndB(); curB++) { WriteLine(rightOut, rightMarkers, b, curB, edit.GetType()); offset++; } for (int i = edit.GetLengthB() - edit.GetLengthA(); i > 0; i--) { WriteEmptyLine(leftOut, leftMarkers); } for (int i = edit.GetLengthA() - edit.GetLengthB(); i > 0; i--) { WriteEmptyLine(rightOut, rightMarkers); offset++; } } for (; curA < a.Size(); curA++) { WriteContextLine(a, curA, leftOut, rightOut); offset++; } }
private void Format(EditList edits, Text a, Text b, List<TextMarker> leftMarkers, List<TextMarker> rightMarkers, StringBuilder leftOut, StringBuilder rightOut) { int curA = 0; int offset = 0; foreach (var edit in edits) { for (int i = curA; i < edit.GetBeginA(); i++) { WriteContextLine(a, i, leftOut, rightOut); offset++; } _markers.Add(new DiffMarker( GetMarkerType(edit.GetType()), offset, Math.Max(edit.GetLengthA(), edit.GetLengthB()), edit.GetLengthA(), edit.GetLengthB() )); for (curA = edit.GetBeginA(); curA < edit.GetEndA(); curA++) { WriteLine(leftOut, leftMarkers, a, curA, edit.GetType()); } for (int curB = edit.GetBeginB(); curB < edit.GetEndB(); curB++) { WriteLine(rightOut, rightMarkers, b, curB, edit.GetType()); offset++; } for (int i = edit.GetLengthB() - edit.GetLengthA(); i > 0; i--) { WriteEmptyLine(leftOut, leftMarkers); } for (int i = edit.GetLengthA() - edit.GetLengthB(); i > 0; i--) { WriteEmptyLine(rightOut, rightMarkers); offset++; } } for (; curA < a.Size(); curA++) { WriteContextLine(a, curA, leftOut, rightOut); offset++; } }
private bool IsEndOfLineMissing(Text text, int line) { return(line + 1 == text.Size() && text.IsMissingNewlineAtEnd()); }
private bool IsEndOfLineMissing(Text text, int line) { return line + 1 == text.Size() && text.IsMissingNewlineAtEnd(); }
private void Format(EditList edits, Text a, Text b) { for (int curIdx = 0; curIdx < edits.Count; ) { Edit curEdit = edits[curIdx]; int endIdx = FindCombinedEnd(edits, curIdx); Edit endEdit = edits[endIdx]; int aCur = Math.Max(0, curEdit.GetBeginA() - Context); int bCur = Math.Max(0, curEdit.GetBeginB() - Context); int aEnd = Math.Min(a.Size(), endEdit.GetEndA() + Context); int bEnd = Math.Min(b.Size(), endEdit.GetEndB() + Context); WriteHunkHeader(aCur, aEnd, bCur, bEnd); while (aCur < aEnd || bCur < bEnd) { if (aCur < curEdit.GetBeginA() || endIdx + 1 < curIdx) { WriteContextLine(a, aCur); if (IsEndOfLineMissing(a, aCur)) { _out.Append(NoNewLine); } aCur++; bCur++; } else { if (aCur < curEdit.GetEndA()) { WriteRemovedLine(a, aCur); if (IsEndOfLineMissing(a, aCur)) { _out.Append(NoNewLine); } aCur++; } else { if (bCur < curEdit.GetEndB()) { WriteAddedLine(b, bCur); if (IsEndOfLineMissing(b, bCur)) { _out.Append(NoNewLine); } bCur++; } } } if (End(curEdit, aCur, bCur) && ++curIdx < edits.Count) { curEdit = edits[curIdx]; } } } }