+ last.rightEnd(); rightEnd = changeRangeEnd - last.ancestorEnd() + last.rightEnd(); kind = RangeDifference.LEFT; } else { .get(myIter.fRange.size() - 1); rightStart = changeRangeStart - f.fLeftStart + f.fRightStart; rightEnd = changeRangeEnd - l.leftEnd() + l.rightEnd(); .get(yourIter.fRange.size() - 1); leftStart = changeRangeStart - f.fLeftStart + f.fRightStart; leftEnd = changeRangeEnd - l.leftEnd() + l.rightEnd();
mstart = es.rightEnd(); ystart = es.leftEnd();
for (int k = rdi.rightStart() ; k< rdi.rightEnd() ; k++) { if (rdi.kind()==rdi.CHANGE) {
mstart = es.rightEnd(); ystart = es.leftEnd(); astart = es.ancestorEnd();
case RangeDifference.NOCHANGE: case RangeDifference.RIGHT: for (int j= rd.rightStart(); j < rd.rightEnd(); j++) { String s= o.getLine(j); output.write(s.getBytes(outputEncoding));
private List<RangeDifference> preProcess(RangeDifference[] differences, int span) { List<RangeDifference> newRanges = new LinkedList<RangeDifference>(); for (int i = 0; i < differences.length; i++) { int leftStart = differences[i].leftStart(); int leftEnd = differences[i].leftEnd(); int rightStart = differences[i].rightStart(); int rightEnd = differences[i].rightEnd(); int kind = differences[i].kind(); while (i + 1 < differences.length && differences[i + 1].kind() == kind && differences[i + 1].leftStart() <= leftEnd + span && differences[i + 1].rightStart() <= rightEnd + span) { leftEnd = differences[i + 1].leftEnd(); rightEnd = differences[i + 1].rightEnd(); i++; } newRanges.add(new RangeDifference(kind, rightStart, rightEnd - rightStart, leftStart, leftEnd - leftStart)); } return newRanges; }
rightStart= changeRangeStart - last.ancestorEnd() + last.rightEnd(); rightEnd= changeRangeEnd - last.ancestorEnd() + last.rightEnd(); kind= RangeDifference.LEFT; } else { RangeDifference l= (RangeDifference) myIter.fRange.get(myIter.fRange.size() - 1); rightStart= changeRangeStart - f.fLeftStart + f.fRightStart; rightEnd= changeRangeEnd - l.leftEnd() + l.rightEnd(); RangeDifference l= (RangeDifference) yourIter.fRange.get(yourIter.fRange.size() - 1); leftStart= changeRangeStart - f.fLeftStart + f.fRightStart; leftEnd= changeRangeEnd - l.leftEnd() + l.rightEnd();
rightStart= changeRangeStart - last.ancestorEnd() + last.rightEnd(); rightEnd= changeRangeEnd - last.ancestorEnd() + last.rightEnd(); kind= RangeDifference.LEFT; } else { RangeDifference l= (RangeDifference) myIter.fRange.get(myIter.fRange.size() - 1); rightStart= changeRangeStart - f.leftStart + f.rightStart; rightEnd= changeRangeEnd - l.leftEnd() + l.rightEnd(); RangeDifference l= (RangeDifference) yourIter.fRange.get(yourIter.fRange.size() - 1); leftStart= changeRangeStart - f.leftStart + f.rightStart; leftEnd= changeRangeEnd - l.leftEnd() + l.rightEnd();
mstart= es.rightEnd(); ystart= es.leftEnd();
mstart= es.rightEnd(); ystart= es.leftEnd();
mstart = es.rightEnd(); ystart = es.leftEnd();
mstart = es.rightEnd(); ystart = es.leftEnd();
private List<RangeDifference> preProcess(RangeDifference[] differences) { List<RangeDifference> newRanges = new LinkedList<RangeDifference>(); for (int i = 0; i < differences.length; i++) { int ancestorStart = differences[i].ancestorStart(); int ancestorEnd = differences[i].ancestorEnd(); int leftStart = differences[i].leftStart(); int leftEnd = differences[i].leftEnd(); int rightStart = differences[i].rightStart(); int rightEnd = differences[i].rightEnd(); int kind = differences[i].kind(); int ancestorLength = ancestorEnd - ancestorStart; int leftLength = leftEnd - leftStart; int rightLength = rightEnd - rightStart; while (i + 1 < differences.length && differences[i + 1].kind() == kind && score(leftLength, differences[i + 1].leftLength(), rightLength, differences[i + 1].rightLength()) > (differences[i + 1] .leftStart() - leftEnd)) { leftEnd = differences[i + 1].leftEnd(); rightEnd = differences[i + 1].rightEnd(); ancestorEnd = differences[i + 1].ancestorEnd(); leftLength = leftEnd - leftStart; rightLength = rightEnd - rightStart; ancestorLength = ancestorEnd - ancestorStart; i++; } newRanges.add(new RangeDifference(kind, rightStart, rightLength, leftStart, leftLength, ancestorStart, ancestorLength)); } return newRanges; }
if (curr.kind() == RangeDifference.CHANGE && curr.rightLength() > 0) { int startLine= curr.rightStart(); int endLine= curr.rightEnd() - 1;
if (curr.kind() == RangeDifference.CHANGE && curr.rightLength() > 0) { int startLine= curr.rightStart(); int endLine= curr.rightEnd() - 1;
mstart= es.rightEnd(); ystart= es.leftEnd(); astart= es.ancestorEnd();
mstart= es.rightEnd(); ystart= es.leftEnd(); astart= es.ancestorEnd();
public TextChange createChange() throws Exception { TextChange change = oldFile == null ? new DocumentChange(label, oldDocument) : new TextFileChange(label, oldFile); // change.setSaveMode(TextFileChange.FORCE_SAVE); change.setEdit(new MultiTextEdit()); Object leftSide = new LineComparator(oldDocument); Object rightSide = new LineComparator(newDocument); RangeDifference[] differences = RangeDifferencer.findDifferences((IRangeComparator) leftSide, (IRangeComparator) rightSide); for(int i = 0; i < differences.length; i++ ) { RangeDifference curr = differences[i]; if(curr.leftLength() == 0 && curr.rightLength() == 0) continue; int rightOffset = newDocument.getLineOffset(curr.rightStart()); int rightLength = curr.rightLength() == 0 ? 0 : newDocument.getLineOffset(curr.rightEnd() - 1) - rightOffset + newDocument.getLineLength(curr.rightEnd() - 1); int leftOffset = oldDocument.getLineOffset(curr.leftStart()); int leftLength = curr.leftLength() == 0 ? 0 : oldDocument.getLineOffset(curr.leftEnd() - 1) - leftOffset + oldDocument.getLineLength(curr.leftEnd() - 1); String newText = newDocument.get(rightOffset, rightLength); addEdit(change, curr.leftStart(), new ReplaceEdit(leftOffset, leftLength, newText)); } return change; }