Author: knguyen
Date: Fri Jun 8 12:28:05 2007
New Revision: 17517
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D17517&repname=
=3Djahia
Log:
JAHIA-1454 : fix diff highlight with bigtext
Modified:
branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/textdiff/Hun=
kTextDiffVisitor.java
Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/textdi=
ff/HunkTextDiffVisitor.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/utils/textdiff/HunkTextDiffVisitor.java&rev=
=3D17517&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/textdiff/Hun=
kTextDiffVisitor.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/textdiff/Hun=
kTextDiffVisitor.java Fri Jun 8 12:28:05 2007
@@ -152,30 +152,62 @@
=
int size =3D this.hunks.size();
Hunk hunk =3D null;
+
+ String val =3D null;
+ String rawVal =3D null;
for ( int i=3D0; i<size ; i++ ){
tmpOldValue =3D oldValueBuff.toString();
tmpNewValue =3D newValueBuff.toString();
tmpMergedValue =3D mergedValueBuff.toString();
- int tmpOldValuePos =3D oldValuePos;
- int tmpNewValuePos =3D newValuePos;
=
hunk =3D (Hunk)this.hunks.get(i);
if ( hunk instanceof HunkAdd ){
oldValueBuff.append(this.oldText.substring(oldValuePos,hun=
k.lowLine(0)));
newValueBuff.append(this.newText.substring(newValuePos,hun=
k.lowLine(1)-1));
mergedValueBuff.append(this.oldText.substring(oldValuePos,=
hunk.lowLine(0)));
-
StringBuffer buff =3D new StringBuffer();
buff.append("<span class=3D'compareAddedDifference' ");
if ( compareAddedDifferenceStyle !=3D null && !"".equals(c=
ompareAddedDifferenceStyle) ){
buff.append("style=3D'").append(compareAddedDifference=
Style).append("'");
}
buff.append(">");
- buff.append(this.newText.substring(hunk.lowLine(1)-1,hunk.=
highLine(1)));
- buff.append("</span>");
+ val =3D this.newText.substring(hunk.lowLine(1)-1,hunk.high=
Line(1));
+ rawVal =3D val;
+ if ( openTag(val,'<') ){
+ int pos =3D val.lastIndexOf("<");
+ if ( pos =3D=3D 0 ){
+ buff.append("</span>");
+ buff.append(val);
+ } else {
+ buff.append(val.substring(0,pos-1));
+ buff.append("</span>");
+ buff.append(val.substring(pos));
+ }
+ } else if ( openTag(val,'>') ){
+ int pos =3D val.lastIndexOf(">");
+ if ( pos =3D=3D val.length()-1 ){
+ buff.append(val);
+ buff.append("</span>");
+ } else {
+ buff.insert(0,val.substring(0,pos+1));
+ buff.append(val.substring(pos+1));
+ buff.append("</span>");
+ }
+ } else {
+ buff.append(val);
+ buff.append("</span>");
+ }
+ if ( openTag(mergedValueBuff.toString(),'<') ){
+ mergedValueBuff.append(rawVal);
+ } else {
+ mergedValueBuff.append(buff.toString());
+ }
+ if ( openTag(newValueBuff.toString(),'<') ){
+ newValueBuff.append(rawVal);
+ } else {
+ newValueBuff.append(buff.toString());
+ }
=
- mergedValueBuff.append(buff.toString());
- newValueBuff.append(buff.toString());
oldValuePos =3D hunk.highLine(0);
newValuePos =3D hunk.highLine(1);
=
@@ -191,10 +223,37 @@
buff.append("style=3D'").append(compareChangedDifferen=
ceStyle).append("'");
}
buff.append(">");
- buff.append(this.oldText.substring(hunk.lowLine(0)-1,hunk.=
highLine(0)));
- buff.append("</span>");
- oldValueBuff.append(buff.toString());
-
+ val =3D this.oldText.substring(hunk.lowLine(0)-1,hunk.high=
Line(0));
+ rawVal =3D val;
+ if ( openTag(val,'<') ){
+ int pos =3D val.lastIndexOf("<");
+ if ( pos =3D=3D 0 ){
+ buff.append("</span>");
+ buff.append(val);
+ } else {
+ buff.append(val.substring(0,pos-1));
+ buff.append("</span>");
+ buff.append(val.substring(pos));
+ }
+ } else if ( openTag(val,'>') ){
+ int pos =3D val.lastIndexOf(">");
+ if ( pos =3D=3D val.length()-1 ){
+ buff.append(val);
+ buff.append("</span>");
+ } else {
+ buff.insert(0,val.substring(0,pos+1));
+ buff.append(val.substring(pos+1));
+ buff.append("</span>");
+ }
+ } else {
+ buff.append(val);
+ buff.append("</span>");
+ }
+ if ( openTag(mergedValueBuff.toString(),'<') ){
+ oldValueBuff.append(rawVal);
+ } else {
+ oldValueBuff.append(buff.toString());
+ }
// new
buff =3D new StringBuffer();
buff.append("<span class=3D'compareChangedDifference' ");
@@ -202,11 +261,42 @@
buff.append("style=3D'").append(compareChangedDifferen=
ceStyle).append("'");
}
buff.append(">");
- buff.append(this.newText.substring(hunk.lowLine(1)-1,hunk.=
highLine(1)));
- buff.append("</span>");
- mergedValueBuff.append(buff.toString());
- newValueBuff.append(buff.toString());
-
+ val =3D this.newText.substring(hunk.lowLine(1)-1,hunk.high=
Line(1));
+ rawVal =3D val;
+ if ( openTag(val,'<') ){
+ int pos =3D val.lastIndexOf("<");
+ if ( pos =3D=3D 0 ){
+ buff.append("</span>");
+ buff.append(val);
+ } else {
+ buff.append(val.substring(0,pos-1));
+ buff.append("</span>");
+ buff.append(val.substring(pos));
+ }
+ } else if ( openTag(val,'>') ){
+ int pos =3D val.lastIndexOf(">");
+ if ( pos =3D=3D val.length()-1 ){
+ buff.append(val);
+ buff.append("</span>");
+ } else {
+ buff.insert(0,val.substring(0,pos+1));
+ buff.append(val.substring(pos+1));
+ buff.append("</span>");
+ }
+ } else {
+ buff.append(val);
+ buff.append("</span>");
+ }
+ if ( openTag(mergedValueBuff.toString(),'<') ){
+ mergedValueBuff.append(rawVal);
+ } else {
+ mergedValueBuff.append(buff.toString());
+ }
+ if ( openTag(newValueBuff.toString(),'<') ){
+ newValueBuff.append(rawVal);
+ } else {
+ newValueBuff.append(buff.toString());
+ }
oldValuePos =3D hunk.highLine(0);
newValuePos =3D hunk.highLine(1);
=
@@ -221,13 +311,44 @@
buff.append("style=3D'").append(compareDeletedDifferen=
ceStyle).append("'");
}
buff.append(">");
- buff.append(this.oldText.substring(hunk.lowLine(0)-1,hunk.=
highLine(0)));
- buff.append("</span>");
+ val =3D this.oldText.substring(hunk.lowLine(0)-1,hunk.high=
Line(0));
+ rawVal =3D val;
+ if ( openTag(val,'<') ){
+ int pos =3D val.lastIndexOf("<");
+ if ( pos =3D=3D 0 ){
+ buff.append("</span>");
+ buff.append(val);
+ } else {
+ buff.append(val.substring(0,pos-1));
+ buff.append("</span>");
+ buff.append(val.substring(pos));
+ }
+ } else if ( openTag(val,'>') ){
+ int pos =3D val.lastIndexOf(">");
+ if ( pos =3D=3D val.length()-1 ){
+ buff.append(val);
+ buff.append("</span>");
+ } else {
+ buff.insert(0,val.substring(0,pos+1));
+ buff.append(val.substring(pos+1));
+ buff.append("</span>");
+ }
+ } else {
+ buff.append(val);
+ buff.append("</span>");
+ }
=
// old
- oldValueBuff.append(buff.toString());
- mergedValueBuff.append(buff.toString());
-
+ if ( openTag(oldValueBuff.toString(),'<') ){
+ oldValueBuff.append(rawVal);
+ } else {
+ oldValueBuff.append(buff.toString());
+ }
+ if ( openTag(mergedValueBuff.toString(),'<') ){
+ mergedValueBuff.append(rawVal);
+ } else {
+ mergedValueBuff.append(buff.toString());
+ }
oldValuePos =3D hunk.highLine(0);
newValuePos =3D hunk.highLine(1);
}
@@ -263,9 +384,34 @@
}
this.mergedDiffText.append(">").append(this.highlightedNewText=
.toString()+"</span>");
}
+ this.mergedDiffText =3D mergedValueBuff;
=
}
=
+ protected boolean openTag(String input, char openChar){
+ if ( input =3D=3D null || "".equals(input.trim()) ){
+ return false;
+ }
+ if ( openChar =3D=3D '<' ){
+ int lastOpenTag =3D input.lastIndexOf('<');
+ if ( lastOpenTag =3D=3D -1 ){
+ return false;
+ }
+ if ( lastOpenTag > input.lastIndexOf('>') ){
+ return true;
+ }
+ } else {
+ int lastOpenTag =3D input.indexOf('>');
+ if ( lastOpenTag =3D=3D -1 ){
+ return false;
+ }
+ if ( lastOpenTag < input.indexOf('<') ){
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
*
* @return
_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list