RangeDifference es = in[i]; rd = new RangeDifference(RangeDifference.NOCHANGE, mstart, es .rightStart() - mstart, ystart, es.leftStart() - ystart, astart, es .ancestorStart() - astart); if (rd.maxLength() > 0) out.add(rd); mstart = es.rightEnd(); ystart = es.leftEnd(); astart = es.ancestorEnd(); rd = new RangeDifference(RangeDifference.NOCHANGE, mstart, right .getRangeCount() - mstart, ystart, left.getRangeCount() - ystart, astart, ancestor.getRangeCount() - astart); if (rd.maxLength() > 0) out.add(rd);
for (int i=0; i<rd.length; i++ ) { RangeDifference rdi = rd[i]; log.debug( rdi.kindString() + " left " + rdi.leftStart() + "," + rdi.leftLength() + " right " + rdi.rightStart() + "," + rdi.rightLength() ); if (rdi.leftStart() > leftIdx) { for (int k = leftIdx ; k< rdi.leftStart() ; k++) { leftIdx = rdi.leftStart(); for (int k = rdi.leftStart() ; k< rdi.leftEnd() ; k++) { if (rdi.kind()==rdi.CHANGE) { for (int k = rdi.rightStart() ; k< rdi.rightEnd() ; k++) { if (rdi.kind()==rdi.CHANGE) { leftIdx = rdi.leftEnd(); for (int k = rd[rd.length-1].leftEnd(); k < leftESC.getRangeCount(); k++ ) {
RangeDifference es = in[i]; rd = new RangeDifference(RangeDifference.NOCHANGE, mstart, es .rightStart() - mstart, ystart, es.leftStart() - ystart); if (rd.maxLength() != 0) out.add(rd); mstart = es.rightEnd(); ystart = es.leftEnd(); rd = new RangeDifference(RangeDifference.NOCHANGE, mstart, right .getRangeCount() - mstart, ystart, left.getRangeCount() - ystart); if (rd.maxLength() > 0) out.add(rd);
rightStart = changeRangeStart - last.ancestorEnd() + 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(); leftStart = changeRangeStart - last.ancestorEnd() + last.leftEnd(); leftEnd = changeRangeEnd - last.ancestorEnd() + last.leftEnd(); kind = RangeDifference.RIGHT; } else { .get(yourIter.fRange.size() - 1); leftStart = changeRangeStart - f.fLeftStart + f.fRightStart; leftEnd = changeRangeEnd - l.leftEnd() + l.rightEnd(); kind = RangeDifference.CONFLICT; return new RangeDifference(kind, rightStart, rightEnd - rightStart, leftStart, leftEnd - leftStart, changeRangeStart, changeRangeEnd - changeRangeStart);
for (int i= 0; i < e.length; i++) { RangeDifference es= e[i]; int kind= es.kind(); if (kind != RangeDifference.NOCHANGE) { int ancestorEnd2= ancestorStart; if (ancestorDoc != null) { ancestorStart2 += sa.getTokenStart(es.ancestorStart()); ancestorEnd2 += getTokenEnd(sa, es.ancestorStart(), es.ancestorLength()); int leftStart2= leftStart + sy.getTokenStart(es.leftStart()); int leftEnd2= leftStart + getTokenEnd(sy, es.leftStart(), es.leftLength()); int rightStart2= rightStart + sm.getTokenStart(es.rightStart()); int rightEnd2= rightStart + getTokenEnd(sm, es.rightStart(), es.rightLength());
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; }
parseNoChange(leftAtom, pdifferences.get(i).leftStart(), rightAtom, pdifferences.get(i).rightStart(), leftComparator, rightComparator); .leftStart(), pdifferences.get(i).leftEnd()); String rightString = rightComparator.substring(pdifferences.get(i) .rightStart(), pdifferences.get(i).rightEnd()); if (pdifferences.get(i).leftLength() > 0) output.addRemovedPart(leftString); if (pdifferences.get(i).rightLength() > 0) output.addAddedPart(rightString); rightAtom = pdifferences.get(i).rightEnd(); leftAtom = pdifferences.get(i).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; }
for (int x=0; x<rd.length; x++) { log.debug ( toRangeString( left, rd[x].leftStart(), rd[x].leftLength(), true ) + rd[x].kindString() + toRangeString( right, rd[x].rightStart(), rd[x].rightLength(), true ) ); pRightReplacement.add(currentRightStructure); if (rd[x].kind() == RangeDifference.NOCHANGE) { log.debug("NOCHANGE"); for (int i=rd[x].leftStart(); // left and right are identical i<(rd[x].leftStart()+rd[x].leftLength()); i++) { } else if (rd[x].kind() == RangeDifference.CHANGE) { log.debug("CHANGE"); for (int i=rd[x].leftStart(); i<(rd[x].leftStart()+rd[x].leftLength()); i++) { for (int i=rd[x].rightStart(); i<(rd[x].rightStart()+rd[x].rightLength()); i++) {
for (int i= 0; i < differences.length; i++) { RangeDifference curr= differences[i]; if (curr.kind() == RangeDifference.CHANGE && curr.rightLength() > 0) { int startLine= curr.rightStart(); int endLine= curr.rightEnd() - 1;
for (int i= 0; i < differences.length; i++) { RangeDifference curr= differences[i]; int start= ((JavaTokenComparator)leftSide).getTokenStart(curr.leftStart()); int end= ((JavaTokenComparator)leftSide).getTokenStart(curr.leftEnd()); if (curr.kind() == RangeDifference.CHANGE && curr.leftLength() > 0) { buf.append("<b>"); //$NON-NLS-1$ appendContent(previewContent, start, end, buf, false); buf.append("</b>"); //$NON-NLS-1$ } else if (curr.kind() == RangeDifference.NOCHANGE) { appendContent(previewContent, start, end, buf, true);
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(); leftStart= changeRangeStart - last.ancestorEnd() + last.leftEnd(); leftEnd= changeRangeEnd - last.ancestorEnd() + last.leftEnd(); kind= RangeDifference.RIGHT; } else { RangeDifference l= (RangeDifference) yourIter.fRange.get(yourIter.fRange.size() - 1); leftStart= changeRangeStart - f.leftStart + f.rightStart; leftEnd= changeRangeEnd - l.leftEnd() + l.rightEnd();
diff3.add(new RangeDifference(RangeDifference.ERROR)); // add a changeRangeEnd = startThread.fDifference.leftEnd(); while (other.fDifference != null && other.fDifference.fLeftStart <= changeRangeEnd) { int newMax = other.fDifference.leftEnd(); other.next(); if (newMax >= changeRangeEnd) {
public double getMatchRatio(StringComparator other) { LCSSettings settings = new LCSSettings(); settings.setUseGreedyMethod(true); settings.setPowLimit(1.5); settings.setTooLong(150 * 150); RangeDifference[] differences = RangeDifferencer.findDifferences( settings, other, this); int distanceOther = 0; for (RangeDifference d : differences) { distanceOther += d.leftLength(); } int distanceThis = 0; for (RangeDifference d : differences) { distanceThis += d.rightLength(); } return ((0.0 + distanceOther) / other.getRangeCount() + (0.0 + distanceThis) / getRangeCount()) / 2; } }
int length = getLength(); if (length == 0) { differences.add(new RangeDifference(RangeDifference.CHANGE, 0, comparator2.getRangeCount(), 0, comparator1 .getRangeCount())); differences.add(new RangeDifference( RangeDifference.CHANGE, 0, end2, 0, end1)); } else if (end1 != s1 + 1 || end2 != s2 + 1) { differences.add(new RangeDifference( RangeDifference.CHANGE, rightStart, rightLength, leftStart, leftLength)); : s2; differences.add(new RangeDifference(RangeDifference.CHANGE, rightStart, comparator2.getRangeCount() - (s2 + 1), leftStart, comparator1.getRangeCount() - (s1 + 1)));
for (int i= 0; i < e.length; i++) { RangeDifference es= e[i]; int kind= es.kind(); if (kind != RangeDifference.NOCHANGE) { int ancestorEnd2= ancestorStart; if (ancestorDoc != null) { ancestorStart2 += sa.getTokenStart(es.ancestorStart()); ancestorEnd2 += getTokenEnd(sa, es.ancestorStart(), es.ancestorLength()); int leftStart2= leftStart + sy.getTokenStart(es.leftStart()); int leftEnd2= leftStart + getTokenEnd(sy, es.leftStart(), es.leftLength()); int rightStart2= rightStart + sm.getTokenStart(es.rightStart()); int rightEnd2= rightStart + getTokenEnd(sm, es.rightStart(), es.rightLength());
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 temp = leftEnd; boolean connecting = true; && differences[i + 1].kind() == kind) { while (temp < differences[i + 1].leftStart() && (leftComparator.getAtom(temp) instanceof DelimiterAtom || (bridgelength-- > 0))) { if (temp == differences[i + 1].leftStart()) { leftEnd = differences[i + 1].leftEnd(); rightEnd = differences[i + 1].rightEnd(); temp = leftEnd; i++; newRanges.add(new RangeDifference(kind, rightStart, rightEnd - rightStart, leftStart, leftEnd - leftStart));
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; }
for (RangeDifference d : pdifferences) { int tempKind = d.kind(); if (tempKind == RangeDifference.ANCESTOR) { if (d.leftStart() > currentIndexLeft) { ancestorComparator.handlePossibleChangedPart(currentIndexLeft, d .leftStart(), currentIndexAncestor, d.ancestorStart(), leftComparator); if (d.rightStart() > currentIndexRight) { ancestorComparator.handlePossibleChangedPart(currentIndexRight, d .rightStart(), currentIndexAncestor, d.ancestorStart(), rightComparator); if (d.leftLength() > 0) { ancestorComparator.markAsDeleted(d.leftStart(), d.leftEnd(), leftComparator, d.ancestorStart(), d.ancestorEnd(), ModificationType.ADDED); if (d.rightLength() > 0) { ancestorComparator.markAsDeleted(d.rightStart(), d.rightEnd(), rightComparator, d.ancestorStart(), d.ancestorEnd(), ModificationType.ADDED); ancestorComparator.markAsNew(d.ancestorStart(), d.ancestorEnd(), ModificationType.REMOVED); currentIndexAncestor = d.ancestorEnd(); currentIndexLeft = d.leftEnd(); currentIndexRight = d.rightEnd();