diff --git a/README.md b/README.md index 2825313..dd5ef2b 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ The HTML output accepts a Javascript object with configuration. Possible options - `inputFormat`: the format of the input data: `'diff'` or `'json'`, default is `'diff'` - `outputFormat`: the format of the output data: `'line-by-line'` or `'side-by-side'`, default is `'line-by-line'` - `showFiles`: show a file list before the diff: `true` or `false`, default is `false` - - `matchWords`: matches changed words in diff output lines: `true` or `false`, default is `false` + - `matching`: matching level: `'lines'` for matching lines, `'words'` for matching lines and words or `'none'`, default is `none` - `matchWordsThreshold`: similarity threshold for word matching, default is 0.25 diff --git a/src/line-by-line-printer.js b/src/line-by-line-printer.js index c528bf3..b3ce177 100644 --- a/src/line-by-line-printer.js +++ b/src/line-by-line-printer.js @@ -71,7 +71,19 @@ var oldLines = []; var newLines = []; function processChangeBlock() { - var matches = matcher(oldLines, newLines); + var matches; + var insertType; + var deleteType; + var doMatching = config.matching === "lines" || config.matching === "words"; + if (doMatching) { + matches = matcher(oldLines, newLines); + insertType = diffParser.LINE_TYPE.INSERT_CHANGES; + deleteType = diffParser.LINE_TYPE.DELETE_CHANGES; + } else { + matches = [[oldLines,newLines]]; + insertType = diffParser.LINE_TYPE.INSERTS; + deleteType = diffParser.LINE_TYPE.DELETES; + } matches.forEach(function(match){ var oldLines = match[0]; var newLines = match[1]; @@ -89,10 +101,10 @@ var diff = printerUtils.diffHighlight(oldLine.content, newLine.content, config); processedOldLines += - generateLineHtml(diffParser.LINE_TYPE.DELETE_CHANGES, oldLine.oldNumber, oldLine.newNumber, + generateLineHtml(deleteType, oldLine.oldNumber, oldLine.newNumber, diff.first.line, diff.first.prefix); processedNewLines += - generateLineHtml(diffParser.LINE_TYPE.INSERT_CHANGES, newLine.oldNumber, newLine.newNumber, + generateLineHtml(insertType, newLine.oldNumber, newLine.newNumber, diff.second.line, diff.second.prefix); } diff --git a/src/printer-utils.js b/src/printer-utils.js index ad5eac2..6e69c07 100644 --- a/src/printer-utils.js +++ b/src/printer-utils.js @@ -71,7 +71,7 @@ var highlightedLine = ''; var changedWords = []; - if (!config.charByChar && config.matchWords) { + if (!config.charByChar && config.matching === 'words') { var treshold = 0.25; if (typeof(config.matchWordsThreshold) !== "undefined") { treshold = config.matchWordsThreshold; diff --git a/src/side-by-side-printer.js b/src/side-by-side-printer.js index 045f7a9..a4fafd5 100644 --- a/src/side-by-side-printer.js +++ b/src/side-by-side-printer.js @@ -95,7 +95,19 @@ var oldLines = []; var newLines = []; function processChangeBlock() { - var matches = matcher(oldLines, newLines); + var matches; + var insertType; + var deleteType; + var doMatching = config.matching === "lines" || config.matching === "words"; + if (doMatching) { + matches = matcher(oldLines, newLines); + insertType = diffParser.LINE_TYPE.INSERT_CHANGES; + deleteType = diffParser.LINE_TYPE.DELETE_CHANGES; + } else { + matches = [[oldLines,newLines]]; + insertType = diffParser.LINE_TYPE.INSERTS; + deleteType = diffParser.LINE_TYPE.DELETES; + } matches.forEach(function(match){ var oldLines = match[0]; var newLines = match[1]; @@ -113,10 +125,10 @@ var diff = printerUtils.diffHighlight(oldLine.content, newLine.content, config); fileHtml.left += - generateSingleLineHtml(diffParser.LINE_TYPE.DELETE_CHANGES, oldLine.oldNumber, + generateSingleLineHtml(deleteType, oldLine.oldNumber, diff.first.line, diff.first.prefix); fileHtml.right += - generateSingleLineHtml(diffParser.LINE_TYPE.INSERT_CHANGES, newLine.newNumber, + generateSingleLineHtml(insertType, newLine.newNumber, diff.second.line, diff.second.prefix); } if (max > common) {