diff --git a/diff2html.js b/diff2html.js
index b023506..b278bdf 100644
--- a/diff2html.js
+++ b/diff2html.js
@@ -220,24 +220,32 @@ var generateFileHtml = function (file) {
" \n" +
"\n";
-
var oldLines = [], newLines = [];
var processedOldLines = [], processedNewLines = [];
for (var i = 0; i < block.lines.length; i++) {
var line = block.lines[i];
+ var escapedLine = escape(line.content);
- if (line.type == LINE_TYPE.DELETES && !newLines.length) {
+ if (line.type == LINE_TYPE.CONTEXT && !oldLines.length && !newLines.length) {
+ lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine);
+ } else if (line.type == LINE_TYPE.INSERTS && !oldLines.length && !newLines.length) {
+ lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine);
+ } else if (line.type == LINE_TYPE.DELETES && !newLines.length) {
oldLines.push(line);
} else if (line.type == LINE_TYPE.INSERTS && oldLines.length > newLines.length) {
newLines.push(line);
} else {
+ var j = 0;
+ var oldLine, newLine;
+ var oldEscapedLine, newEscapedLine;
+
if (oldLines.length === newLines.length) {
- for (var j = 0; j < oldLines.length; j++) {
- var oldLine = oldLines[j];
- var newLine = newLines[j];
- var oldEscapedLine = escape(oldLine.content);
- var newEscapedLine = escape(newLine.content);
+ for (j = 0; j < oldLines.length; j++) {
+ oldLine = oldLines[j];
+ newLine = newLines[j];
+ oldEscapedLine = escape(oldLine.content);
+ newEscapedLine = escape(newLine.content);
var diff = diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff);
@@ -246,14 +254,25 @@ var generateFileHtml = function (file) {
}
lines += processedOldLines + processedNewLines;
-
- oldLines = [];
- newLines = [];
- processedOldLines = [];
- processedNewLines = []
} else {
- lines += generateLineHtml(line.type, line.oldNumber, line.newNumber, escape(line.content));
+ for (j = 0; j < oldLines.length; j++) {
+ oldLine = oldLines[j];
+ oldEscapedLine = escape(oldLine.content);
+ lines += generateLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, oldEscapedLine);
+ }
+
+ for (j = 0; j < newLines.length; j++) {
+ newLine = newLines[j];
+ newEscapedLine = escape(newLine.content);
+ lines += generateLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, newEscapedLine);
+ }
}
+
+ oldLines = [];
+ newLines = [];
+ processedOldLines = [];
+ processedNewLines = [];
+ i--;
}
}
@@ -336,39 +355,65 @@ var generateSideBySideFileHtml = function (file) {
" \n" +
"\n";
+ var oldLines = [], newLines = [];
+
for (var i = 0; i < block.lines.length; i++) {
- var prevLine = block.lines[i - 1];
var line = block.lines[i];
- var newLine = block.lines[i + 1];
- var nextNewLine = block.lines[i + 2];
-
- var isOpositeTypeTwoLineBlock = line.type == LINE_TYPE.DELETES && newLine && newLine.type == LINE_TYPE.INSERTS &&
- (!nextNewLine || nextNewLine && nextNewLine.type != LINE_TYPE.INSERTS) &&
- (!prevLine || prevLine && prevLine.type != LINE_TYPE.DELETES);
-
var escapedLine = escape(line.content);
- if (isOpositeTypeTwoLineBlock) {
- var nextEscapedLine = escape(newLine.content);
-
- var diff = diffHighlight(escapedLine, nextEscapedLine, file.isTripleDiff);
-
- fileHtml.left += generateSingleLineHtml(line.type, line.oldNumber, diff.o);
- fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, diff.n);
-
- i++;
- } else if (line.type == LINE_TYPE.DELETES) {
+ if (line.type == LINE_TYPE.CONTEXT && !oldLines.length && !newLines.length) {
fileHtml.left += generateSingleLineHtml(line.type, line.oldNumber, escapedLine);
- fileHtml.right += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
- } else if (line.type == LINE_TYPE.INSERTS) {
+ fileHtml.right += generateSingleLineHtml(line.type, line.newNumber, escapedLine);
+ } else if (line.type == LINE_TYPE.INSERTS && !oldLines.length && !newLines.length) {
fileHtml.left += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
fileHtml.right += generateSingleLineHtml(line.type, line.newNumber, escapedLine);
+ } else if (line.type == LINE_TYPE.DELETES && !newLines.length) {
+ oldLines.push(line);
+ } else if (line.type == LINE_TYPE.INSERTS && oldLines.length > newLines.length) {
+ newLines.push(line);
} else {
- fileHtml.left += generateSingleLineHtml(line.type, line.oldNumber, escapedLine);
- fileHtml.right += generateSingleLineHtml(line.type, line.newNumber, escapedLine);
+ var j = 0;
+ var oldLine, newLine;
+ var oldEscapedLine, newEscapedLine;
+
+ if (oldLines.length === newLines.length) {
+ for (j = 0; j < oldLines.length; j++) {
+ oldLine = oldLines[j];
+ newLine = newLines[j];
+ oldEscapedLine = escape(oldLine.content);
+ newEscapedLine = escape(newLine.content);
+
+ var diff = diffHighlight(oldEscapedLine, newEscapedLine, file.isTripleDiff);
+
+ fileHtml.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, diff.o);
+ fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, diff.n);
+ }
+ } else {
+ var maxLinesNumber = Math.max(oldLines.length, newLines.length);
+ for (j = 0; j < maxLinesNumber; j++) {
+ oldLine = oldLines[j];
+ newLine = newLines[j];
+
+ if (oldLine && newLine) {
+ fileHtml.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, escape(oldLine.content));
+ fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, escape(newLine.content));
+ } else if (oldLine) {
+ fileHtml.left += generateSingleLineHtml(oldLine.type, oldLine.oldNumber, escape(oldLine.content));
+ fileHtml.right += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
+ } else if (newLine) {
+ fileHtml.left += generateSingleLineHtml(LINE_TYPE.CONTEXT, "", "", "");
+ fileHtml.right += generateSingleLineHtml(newLine.type, newLine.newNumber, escape(newLine.content));
+ } else {
+ console.error("How did it get here?");
+ }
+ }
+ }
+
+ oldLines = [];
+ newLines = [];
+ i--;
}
}
-
});
return fileHtml;