Author: gvanmatre
Date: Sat Sep  3 08:42:54 2005
New Revision: 267474

URL: http://svn.apache.org/viewcvs?rev=267474&view=rev
Log:
Bug#:  35839 [shale] Clay processes components inside HTML comments

Modified:
    
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/Parser.java
    
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/parser/ParserTestCase.java

Modified: 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/Parser.java
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/Parser.java?rev=267474&r1=267473&r2=267474&view=diff
==============================================================================
--- 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/Parser.java
 (original)
+++ 
struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/Parser.java
 Sat Sep  3 08:42:54 2005
@@ -457,8 +457,7 @@
         new Rule('-', true, 3, true),
         new Rule('>', false, -1, true),
         new Rule('-', false, -2, true),
-        new Rule('-', false, -3, true),
-        new Rule(' ', false, -4, true)};
+        new Rule('-', false, -3, true)};
     
     /**
      * <p>Declare an array of [EMAIL PROTECTED] Rule}s that validate a begin 
comment [EMAIL PROTECTED] Token}.</p>
@@ -473,8 +472,7 @@
      */    
     public static Rule[] END_COMMENT_TAG_RULES = {new Rule('>', false, -1, 
true),
         new Rule('-', false, -2, true),
-        new Rule('-', false, -3, true),
-        new Rule(' ', false, -4, true)};
+        new Rule('-', false, -3, true)};
     
     /**
      * <p>Declare an array of [EMAIL PROTECTED] Rule}s that validate document 
type [EMAIL PROTECTED] Token}.</p>
@@ -517,6 +515,9 @@
         
         nextShape: for (int i = 0; i < NODE_SHAPES.length; i++) {
             
+            int maxBeginOffset = 0;
+            int minEndOffset = Integer.MAX_VALUE;
+            
             Shape shape = NODE_SHAPES[i];
             
             Rule[] rules = shape.getRules();
@@ -525,6 +526,12 @@
                 // use the begin or end token offset 
                 int n = (rules[j].isBegin ? token.getBeginOffset() : 
token.getEndOffset()) + rules[j].getOffset();
                 
+                if (rules[j].isBegin)
+                   maxBeginOffset = Math.max(n, maxBeginOffset);    
+                else
+                   minEndOffset = Math.min(n, minEndOffset);
+                    
+                
                 // if out of document range, look for the next shape
                 if (n > token.getDocument().length() || n < 0) 
                     continue nextShape;
@@ -539,6 +546,10 @@
                 if (!match) 
                     continue nextShape;    
             }
+            
+            //make sure the compared token delimiters don't overlap <!-->
+            if (minEndOffset <= maxBeginOffset)
+                continue nextShape;
             
             node.setStart(shape.isStart());
             node.setEnd(shape.isEnd());

Modified: 
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/parser/ParserTestCase.java
URL: 
http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/parser/ParserTestCase.java?rev=267474&r1=267473&r2=267474&view=diff
==============================================================================
--- 
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/parser/ParserTestCase.java
 (original)
+++ 
struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/parser/ParserTestCase.java
 Sat Sep  3 08:42:54 2005
@@ -55,13 +55,12 @@
 
         doc1.append("<p><!-- self contained comment -->").append(
                 "<!--<input type=text size=10 maxsize=10 id=username>").append(
-                "<input type=text size=10 maxsize=10 id=password> -->").append(
-                "</p>").append("<!--This is a test.  Just a test -->").append(
-                "<!--<p>Testing <b>123</b></p> -->" +
-                "<!---> -->");
+                "<input type=text size=10 maxsize=10 id=password>-->").append(
+                "</p>").append("<!--This is a test.  Just a test-->").append(
+                "<!--<p>Testing <b>123</b></p> -->");
 
         List nodes1 = p.parse(doc1);
-        assertTrue("Has 4 root nodes", nodes1.size() == 4);
+        assertTrue("Has 3 root nodes", nodes1.size() == 3);
 
         Node node = (Node) nodes1.get(0);
         assertTrue("first paragraph has 2 node", node.getChildren().size() == 
2);
@@ -74,10 +73,6 @@
         assertTrue("third comment has 7 child nodes", node.getChildren()
                 .size() == 7);
 
-        node = (Node) nodes1.get(3);
-        assertTrue("forth comment has 1 child node", node.getChildren()
-                .size() == 1);
-
         
         // truncate the buffer
         doc1.setLength(0);
@@ -96,6 +91,37 @@
         node = (Node) node.getChildren().get(0);
         assertTrue("comment has 5 child nodes", node.getChildren().size() == 
5);
 
+        // truncate the buffer
+        doc1.setLength(0);
+        doc1.append("<!--A Comment-->");
+        
+        nodes1 = p.parse(doc1);
+        assertTrue("one root node", nodes1.size() == 1);
+        
+        node = (Node) nodes1.get(0);
+        assertTrue("node is a valid comment", node.isComment());
+
+        // truncate the buffer
+        doc1.setLength(0);
+        doc1.append("<!-->-->");
+        
+        nodes1 = p.parse(doc1);
+        assertTrue("one root node", nodes1.size() == 1);
+        
+        node = (Node) nodes1.get(0);
+        assertTrue("node is a valid comment", node.isComment());
+
+        // truncate the buffer
+        doc1.setLength(0);
+        doc1.append("<!--<-->");
+        
+        nodes1 = p.parse(doc1);
+        assertTrue("one root node", nodes1.size() == 1);
+        
+        node = (Node) nodes1.get(0);
+        assertTrue("node is a valid comment", node.isComment());
+        
+        
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to