Index: third_party/WebKit/Source/devtools/front_end/diff/Diff.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/diff/Diff.js b/third_party/WebKit/Source/devtools/front_end/diff/Diff.js |
index 9b844ad8b435192c4b3f78e686c85cf416e10328..13fc91d1d158fd6ff2df04404b43fce479fd74b3 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/diff/Diff.js |
+++ b/third_party/WebKit/Source/devtools/front_end/diff/Diff.js |
@@ -47,10 +47,53 @@ WebInspector.Diff = { |
return text; |
} |
}, |
+ |
+ /** |
+ * @param {!Array.<!{0: number, 1: string}>} diff |
+ * @return {!Array<!Array<number>>} |
+ */ |
+ convertToEditDiff: function(diff) |
+ { |
+ var normalized = []; |
+ var added = 0; |
+ var removed = 0; |
+ for (var i = 0; i < diff.length; ++i) { |
+ var token = diff[i]; |
+ if (token[0] === WebInspector.Diff.Operation.Equal) { |
+ flush(); |
+ normalized.push([WebInspector.Diff.Operation.Equal, token[1].length]); |
+ } else if (token[0] === WebInspector.Diff.Operation.Delete) { |
+ removed += token[1].length; |
+ } else { |
+ added += token[1].length; |
+ } |
+ } |
+ flush(); |
+ return normalized; |
+ |
+ function flush() |
+ { |
+ if (added && removed) { |
+ var min = Math.min(added, removed); |
+ normalized.push([WebInspector.Diff.Operation.Edit, min]); |
+ added -= min; |
+ removed -= min; |
+ } |
+ if (added || removed) { |
+ var balance = added - removed; |
+ var type = balance < 0 ? WebInspector.Diff.Operation.Delete : WebInspector.Diff.Operation.Insert; |
+ normalized.push([type, Math.abs(balance)]); |
+ added = 0; |
+ removed = 0; |
+ } |
+ } |
+ } |
+ |
} |
WebInspector.Diff.Operation = { |
Equal: 0, |
Insert: 1, |
- Delete: -1 |
+ Delete: -1, |
+ Edit: 2 |
} |