use of org.suigeneris.jrcs.diff.delta.Chunk in project xwiki-platform by xwiki.
the class DiffPlugin method getDifferencesAsHTML.
/**
* Return an html blocks representing line diffs between text1 and text2
*
* @param text1 original content
* @param text2 revised content
* @param allDoc show all document
* @return list of Delta objects
*/
public String getDifferencesAsHTML(String text1, String text2, boolean allDoc) throws XWikiException {
StringBuilder html = new StringBuilder("<div class=\"diff\">");
if (text1 == null) {
text1 = "";
}
if (text2 == null) {
text2 = "";
}
List list = getDifferencesAsList(text1, text2);
String[] lines = ToString.stringToArray(text1);
int cursor = 0;
boolean addBR = false;
for (int i = 0; i < list.size(); i++) {
if (addBR) {
addBR = false;
}
Delta delta = (Delta) list.get(i);
int position = delta.getOriginal().anchor();
// First we fill in all text that has not been changed
while (cursor < position) {
if (allDoc) {
html.append("<div class=\"diffunmodifiedline\">");
String text = escape(lines[cursor]);
if (text.equals("")) {
text = " ";
}
html.append(text);
html.append("</div>");
}
cursor++;
}
// Then we fill in what has been removed
Chunk orig = delta.getOriginal();
Chunk rev = delta.getRevised();
int j1 = 0;
if (orig.size() > 0) {
List chunks = orig.chunk();
int j2 = 0;
for (int j = 0; j < chunks.size(); j++) {
String origline = (String) chunks.get(j);
if (origline.equals("")) {
cursor++;
continue;
}
// if (j>0)
// html.append("<br/>");
List revchunks = rev.chunk();
String revline = "";
while ("".equals(revline)) {
revline = (j2 >= revchunks.size()) ? null : (String) revchunks.get(j2);
j2++;
j1++;
}
if (revline != null) {
html.append(getWordDifferencesAsHTML(origline, revline));
} else {
html.append("<div class=\"diffmodifiedline\">");
html.append("<span class=\"diffremoveword\">");
html.append(escape(origline));
html.append("</span></div>");
}
addBR = true;
cursor++;
}
}
// Then we fill in what has been added
if (rev.size() > 0) {
List chunks = rev.chunk();
for (int j = j1; j < chunks.size(); j++) {
// if (j>0)
// html.append("<br/>");
html.append("<div class=\"diffmodifiedline\">");
html.append("<span class=\"diffaddword\">");
html.append(escape((String) chunks.get(j)));
html.append("</span></div>");
}
addBR = true;
}
}
// First we fill in all text that has not been changed
if (allDoc) {
while (cursor < lines.length) {
html.append("<div class=\"diffunmodifiedline\">");
String text = escape(lines[cursor]);
if (text.equals("")) {
text = " ";
}
html.append(text);
html.append("</div>");
cursor++;
}
}
html.append("</div>");
return html.toString();
}
use of org.suigeneris.jrcs.diff.delta.Chunk in project xwiki-platform by xwiki.
the class DiffPlugin method getWordDifferencesAsHTML.
/**
* Return an html blocks representing word diffs between text1 and text2
*
* @param text1 original content
* @param text2 revised content
* @return list of Delta objects
*/
public String getWordDifferencesAsHTML(String text1, String text2) throws XWikiException {
text1 = "~~PLACEHOLDER~~" + text1 + "~~PLACEHOLDER~~";
text2 = "~~PLACEHOLDER~~" + text2 + "~~PLACEHOLDER~~";
StringBuilder html = new StringBuilder("<div class=\"diffmodifiedline\">");
List list = getWordDifferencesAsList(text1, text2);
String[] words = StringUtils.splitPreserveAllTokens(text1, ' ');
int cursor = 0;
boolean addSpace = false;
for (int i = 0; i < list.size(); i++) {
if (addSpace) {
html.append(" ");
addSpace = false;
}
Delta delta = (Delta) list.get(i);
int position = delta.getOriginal().anchor();
// First we fill in all text that has not been changed
while (cursor < position) {
html.append(escape(words[cursor]));
html.append(" ");
cursor++;
}
// Then we fill in what has been removed
Chunk orig = delta.getOriginal();
if (orig.size() > 0) {
html.append("<span class=\"diffremoveword\">");
List chunks = orig.chunk();
for (int j = 0; j < chunks.size(); j++) {
if (j > 0) {
html.append(" ");
}
html.append(escape((String) chunks.get(j)));
cursor++;
}
html.append("</span>");
addSpace = true;
}
// Then we fill in what has been added
Chunk rev = delta.getRevised();
if (rev.size() > 0) {
html.append("<span class=\"diffaddword\">");
List chunks = rev.chunk();
for (int j = 0; j < chunks.size(); j++) {
if (j > 0) {
html.append(" ");
}
html.append(escape((String) chunks.get(j)));
}
html.append("</span>");
addSpace = true;
}
}
// First we fill in all text that has not been changed
while (cursor < words.length) {
if (addSpace) {
html.append(" ");
}
html.append(escape(words[cursor]));
addSpace = true;
cursor++;
}
html.append("</div>");
return html.toString().replaceAll("~~PLACEHOLDER~~", "");
}
use of org.suigeneris.jrcs.diff.delta.Chunk in project xwiki-platform by xwiki.
the class DiffTest method testSimpleWordDiff2.
@Test
public void testSimpleWordDiff2() throws XWikiException {
String text1 = "I love Paris and London";
String text2 = "I live in Paris and London";
List diffs = this.plugin.getWordDifferencesAsList(text1, text2);
assertEquals("There should be two differences", 1, diffs.size());
Delta delta1 = (Delta) diffs.get(0);
Chunk orig1 = delta1.getOriginal();
Chunk revised1 = delta1.getRevised();
assertEquals("Original 1 should be", "love", orig1.toString());
assertEquals("Revised 1 should be", "livein", revised1.toString());
}
use of org.suigeneris.jrcs.diff.delta.Chunk in project xwiki-platform by xwiki.
the class DiffTest method testSimpleWordDiff.
@Test
public void testSimpleWordDiff() throws XWikiException {
String text1 = "I love Paris";
String text2 = "I live in Paris";
List diffs = this.plugin.getWordDifferencesAsList(text1, text2);
assertEquals("There should be two differences", 1, diffs.size());
Delta delta1 = (Delta) diffs.get(0);
Chunk orig1 = delta1.getOriginal();
Chunk revised1 = delta1.getRevised();
Delta delta2 = (Delta) diffs.get(0);
Chunk orig2 = delta2.getOriginal();
Chunk revised2 = delta2.getRevised();
assertEquals("Original 1 should be", "love", orig1.toString());
assertEquals("Revised 1 should be", "livein", revised1.toString());
}
use of org.suigeneris.jrcs.diff.delta.Chunk in project xwiki-platform by xwiki.
the class DiffTest method testSimpleWordDiff3.
@Test
public void testSimpleWordDiff3() throws XWikiException {
String text1 = "I love Paris and London";
String text2 = "I love London and Paris";
List diffs = this.plugin.getWordDifferencesAsList(text1, text2);
assertEquals("There should be two differences", 2, diffs.size());
Delta delta1 = (Delta) diffs.get(0);
Chunk orig1 = delta1.getOriginal();
Chunk revised1 = delta1.getRevised();
Delta delta2 = (Delta) diffs.get(1);
Chunk orig2 = delta2.getOriginal();
Chunk revised2 = delta2.getRevised();
assertEquals("Original 1 should be", "Parisand", orig1.toString());
assertEquals("Revised 1 should be", "", revised1.toString());
assertEquals("Original 2 should be", "", orig2.toString());
assertEquals("Revised 2 should be", "andParis", revised2.toString());
}
Aggregations