(diff)
| 563 | } |
| 564 | |
| 565 | function getChunks(diff) { |
| 566 | var chunks = []; |
| 567 | var startEdit = 0, startOrig = 0; |
| 568 | var edit = Pos(0, 0), orig = Pos(0, 0); |
| 569 | for (var i = 0; i < diff.length; ++i) { |
| 570 | var part = diff[i], tp = part[0]; |
| 571 | if (tp == DIFF_EQUAL) { |
| 572 | var startOff = startOfLineClean(diff, i) ? 0 : 1; |
| 573 | var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff; |
| 574 | moveOver(edit, part[1], null, orig); |
| 575 | var endOff = endOfLineClean(diff, i) ? 1 : 0; |
| 576 | var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff; |
| 577 | if (cleanToEdit > cleanFromEdit) { |
| 578 | if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig, |
| 579 | editFrom: startEdit, editTo: cleanFromEdit}); |
| 580 | startEdit = cleanToEdit; startOrig = cleanToOrig; |
| 581 | } |
| 582 | } else { |
| 583 | moveOver(tp == DIFF_INSERT ? edit : orig, part[1]); |
| 584 | } |
| 585 | } |
| 586 | if (startEdit <= edit.line || startOrig <= orig.line) |
| 587 | chunks.push({origFrom: startOrig, origTo: orig.line + 1, |
| 588 | editFrom: startEdit, editTo: edit.line + 1}); |
| 589 | return chunks; |
| 590 | } |
| 591 | |
| 592 | function endOfLineClean(diff, i) { |
| 593 | if (i == diff.length - 1) return true; |
no test coverage detected