diff options
author | Shawn O. Pearce <sop@google.com> | 2010-02-24 17:20:46 -0800 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2010-02-24 17:20:46 -0800 |
commit | f0d4e413d831e8f772cf34f20586b3d2fb3bbeb5 (patch) | |
tree | 9421cdc1e831556c383cf6d673420e2dcc128cd8 /gerrit-prettify | |
parent | 898c9eb3acdfc24a7f358345708afbbdc92dd811 (diff) | |
download | gerrit-f0d4e413d831e8f772cf34f20586b3d2fb3bbeb5.tar.gz |
Cleanup CSS for side-by-side view when there are character differences
We no longer have gaps, but instead have a nice contiguous
coloring region. The visual difference is night-and-day.
Change-Id: I3e80a5860e62472713424dece49a018d584b3b65
Signed-off-by: Shawn O. Pearce <sop@google.com>
Diffstat (limited to 'gerrit-prettify')
-rw-r--r-- | gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/PrettyFormatter.java | 33 | ||||
-rw-r--r-- | gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/SparseHtmlFile.java | 5 |
2 files changed, 30 insertions, 8 deletions
diff --git a/gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/PrettyFormatter.java b/gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/PrettyFormatter.java index f6966837..49f71f74 100644 --- a/gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/PrettyFormatter.java +++ b/gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/PrettyFormatter.java @@ -21,7 +21,9 @@ import org.eclipse.jgit.diff.Edit; import org.eclipse.jgit.diff.ReplaceEdit; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; public abstract class PrettyFormatter implements SparseHtmlFile { public static abstract class EditFilter { @@ -70,6 +72,7 @@ public abstract class PrettyFormatter implements SparseHtmlFile { protected EditFilter side; protected List<Edit> edits; protected PrettySettings settings; + protected Set<Integer> trailingEdits; private int col; private int lineIdx; @@ -89,6 +92,11 @@ public abstract class PrettyFormatter implements SparseHtmlFile { return content.contains(idx); } + @Override + public boolean hasTrailingEdit(int idx) { + return trailingEdits.contains(idx); + } + public void setEditFilter(EditFilter f) { side = f; } @@ -110,6 +118,7 @@ public abstract class PrettyFormatter implements SparseHtmlFile { public void format(SparseFileContent src) { content = new SparseFileContent(); content.setSize(src.size()); + trailingEdits = new HashSet<Integer>(); String html = toHTML(src); @@ -368,23 +377,33 @@ public abstract class PrettyFormatter implements SparseHtmlFile { final Edit edit = charEdits.get(lastIdx); final int b = side.getBegin(edit) - lastPos; final int e = side.getEnd(edit) - lastPos; + final int modLen = Math.min(e, line.length()); if (c < b) { // There is text at the start of this line that is common // with the other side. Copy it with no style around it. // - final int n = Math.min(b, line.length()); - buf.append(line.substring(c, n)); - c = n; + final int cmnLen = Math.min(b, line.length()); + if (modLen == line.length()) { + buf.openSpan(); + buf.setStyleName("wdc"); + } + buf.append(line.substring(c, cmnLen)); + if (modLen == line.length()) { + buf.closeSpan(); + } + c = cmnLen; } - if (c < e) { - final int n = Math.min(e, line.length()); + if (c < e && c < modLen) { buf.openSpan(); buf.setStyleName(side.getStyleName()); - buf.append(line.substring(c, n)); + buf.append(line.substring(c, modLen)); buf.closeSpan(); - c = n; + if (modLen == line.length()) { + trailingEdits.add(index); + } + c = modLen; } if (e <= c) { diff --git a/gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/SparseHtmlFile.java b/gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/SparseHtmlFile.java index 27e9c237..ebe0855b 100644 --- a/gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/SparseHtmlFile.java +++ b/gerrit-prettify/src/main/java/com/google/gerrit/prettify/common/SparseHtmlFile.java @@ -24,5 +24,8 @@ public interface SparseHtmlFile { public int size(); /** @return true if the line is valid in this sparse list. */ - public boolean contains(final int idx); + public boolean contains(int idx); + + /** @return true if this line ends in the middle of a character edit span. */ + public boolean hasTrailingEdit(int idx); } |