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

Reply via email to