Author: knopp
Date: Sat Nov  3 16:50:26 2007
New Revision: 591712

URL: http://svn.apache.org/viewvc?rev=591712&view=rev
Log:
WICKET-1087

Added:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
   (with props)
Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java?rev=591712&r1=591711&r2=591712&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java
 Sat Nov  3 16:50:26 2007
@@ -31,6 +31,7 @@
 import org.apache.wicket.markup.parser.filter.HeadForceTagIdHandler;
 import org.apache.wicket.markup.parser.filter.HtmlHandler;
 import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
+import org.apache.wicket.markup.parser.filter.OpenCloseTagExpander;
 import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler;
 import org.apache.wicket.markup.parser.filter.TagTypeHandler;
 import org.apache.wicket.markup.parser.filter.WicketLinkTagHandler;
@@ -63,7 +64,7 @@
 {
        /** Conditional comment section, which is NOT treated as a comment 
section */
        private static final Pattern CONDITIONAL_COMMENT = Pattern
-                       .compile("\\[if .+\\]>(.|\n|\r)*<!\\[endif\\]");
+               .compile("\\[if .+\\]>(.|\n|\r)*<!\\[endif\\]");
 
        /** The XML parser to use */
        private final IXmlPullParser xmlParser;
@@ -179,6 +180,7 @@
                        }
                }
 
+               appendMarkupFilter(new OpenCloseTagExpander());
                appendMarkupFilter(new RelativePathPrefixHandler());
                appendMarkupFilter(new EnclosureHandler());
        }
@@ -257,7 +259,7 @@
 
                // Initialize the xml parser
                
xmlParser.parse(markupResourceData.getResource().getInputStream(), 
markupSettings
-                               .getDefaultMarkupEncoding());
+                       .getDefaultMarkupEncoding());
 
                // parse the xml markup and tokenize it into wicket relevant 
markup
                // elements
@@ -421,7 +423,7 @@
                {
                        boolean matched = m.find();
                        String nonPre = matched ? rawMarkup.substring(lastend, 
m.start()) : rawMarkup
-                                       .substring(lastend);
+                               .substring(lastend);
                        nonPre = nonPre.replaceAll("[ \\t]+", " ");
                        nonPre = nonPre.replaceAll("( ?[\\r\\n] ?)+", "\n");
 

Added: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java?rev=591712&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
 Sat Nov  3 16:50:26 2007
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.parser.filter;
+
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.MarkupElement;
+import org.apache.wicket.markup.parser.AbstractMarkupFilter;
+import org.apache.wicket.markup.parser.XmlTag;
+
+/**
+ * MarkupFilter that expands certain open-close tag as separate open and close 
tags. Firefox, unless
+ * it gets text/xml mime type, treats these open-close tags as open tags which 
results in corrupted
+ * DOM. This happens even with xhtml doctype.
+ * 
+ * @author Matej Knopp
+ */
+public class OpenCloseTagExpander extends AbstractMarkupFilter
+{
+       ComponentTag next = null;
+       private static final List replaceForTags = Arrays.asList(new String[] { 
"div", "span", "p",
+                       "strong", "b", "e" });
+
+       public MarkupElement nextTag() throws ParseException
+       {
+               if (next != null)
+               {
+                       MarkupElement tmp = next;
+                       next = null;
+                       return tmp;
+               }
+               else
+               {
+                       ComponentTag tag = nextComponentTag();
+
+                       if (tag != null && tag.isOpenClose() &&
+                               
replaceForTags.contains(tag.getName().toLowerCase()))
+                       {
+                               tag.setType(XmlTag.OPEN);
+
+                               if (tag.getId() == null)
+                               {
+                                       
tag.setId(WicketMessageTagHandler.WICKET_MESSAGE_CONTAINER_ID);
+                                       tag.setAutoComponentTag(true);
+                               }
+
+                               next = new ComponentTag(tag.getName(), 
XmlTag.CLOSE);
+                               next.setNamespace(tag.getNamespace());
+                               next.setOpenTag(tag);
+                       }
+                       return tag;
+               }
+       }
+}

Propchange: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java?rev=591712&r1=591711&r2=591712&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
 Sat Nov  3 16:50:26 2007
@@ -62,8 +62,8 @@
        public final void testTagParsing() throws Exception
        {
                final MarkupParser parser = new MarkupParser(
-                               "This is a test <a componentName:id=\"a\" 
href=\"foo.html\"> <b componentName:id=\"b\">Bold!</b> "
-                                               + "<img 
componentName:id=\"img\" width=9 height=10 src=\"foo\"> <marker 
componentName:id=\"marker\"/> </a>");
+                       "This is a test <a componentName:id=\"a\" 
href=\"foo.html\"> <b componentName:id=\"b\">Bold!</b> "
+                               + "<img componentName:id=\"img\" width=9 
height=10 src=\"foo\"> <marker componentName:id=\"marker\"/> </a>");
                parser.setWicketNamespace("componentName");
 
                final Markup markup = parser.parse();
@@ -125,7 +125,7 @@
        public final void test() throws Exception
        {
                final MarkupParser parser = new MarkupParser(
-                               "This is a test <a componentName:id=9> 
<b>bold</b> <b componentName:id=10/></a> of the emergency broadcasting system");
+                       "This is a test <a componentName:id=9> <b>bold</b> <b 
componentName:id=10></b></a> of the emergency broadcasting system");
                parser.setWicketNamespace("componentName");
                final Markup tokens = parser.parse();
 
@@ -147,10 +147,10 @@
 
                Assert.assertEquals(10, 
b.getAttributes().getInt("componentName:id"));
 
-               final ComponentTag closeA = (ComponentTag)tokens.get(4);
+               final ComponentTag closeA = (ComponentTag)tokens.get(5);
 
                Assert.assertEquals("a", closeA.getName());
-               Assert.assertTrue(tokens.get(5).equals(" of the emergency 
broadcasting system"));
+               Assert.assertTrue(tokens.get(6).equals(" of the emergency 
broadcasting system"));
        }
 
        /**
@@ -160,10 +160,10 @@
        public final void testXhtmlDocument() throws Exception
        {
                final String docText = ""
-                               + "<?xml version='1.0' encoding='iso-8859-1' ?>"
-                               + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 
1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\";>"
-                               + "<html>" + "<head><title>Some 
Page</title></head>"
-                               + "<body><h1>XHTML Test</h1></body>" + 
"</html>";
+                       + "<?xml version='1.0' encoding='iso-8859-1' ?>"
+                       + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" 
\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\";>"
+                       + "<html>" + "<head><title>Some Page</title></head>"
+                       + "<body><h1>XHTML Test</h1></body>" + "</html>";
                final MarkupParser parser = new MarkupParser(docText);
                parser.setWicketNamespace("componentName");
                final Markup tokens = parser.parse();
@@ -178,10 +178,10 @@
        }
 
        private MarkupResourceStream newMarkupResourceStream(final 
IResourceStreamLocator locator,
-                       final Class c, final String style, final Locale locale, 
final String extension)
+               final Class c, final String style, final Locale locale, final 
String extension)
        {
                IResourceStream resource = locator.locate(c, 
c.getName().replace('.', '/'), style, locale,
-                               extension);
+                       extension);
                MarkupResourceStream res = new MarkupResourceStream(resource, 
null, null);
                return res;
        }
@@ -193,11 +193,11 @@
         * @throws IOException
         */
        public final void testFileDocument() throws ParseException, 
ResourceStreamNotFoundException,
-                       IOException
+               IOException
        {
                IResourceStreamLocator locator = new ResourceStreamLocator();
-               MarkupResourceStream resource = 
newMarkupResourceStream(locator, this.getClass(), "1",
-                               null, "html");
+               MarkupResourceStream resource = 
newMarkupResourceStream(locator, getClass(), "1", null,
+                       "html");
 
                MarkupParser parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
@@ -206,21 +206,21 @@
                log.info("tok(0)=" + tokens.get(0));
                // Assert.assertEquals(docText, tokens.get(0).toString());
 
-               resource = newMarkupResourceStream(locator, this.getClass(), 
"2", null, "html");
+               resource = newMarkupResourceStream(locator, getClass(), "2", 
null, "html");
                parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
                tokens = parser.parse();
                log.info("tok(0)=" + tokens.get(0));
                // Assert.assertEquals(docText, tokens.get(0).toString());
 
-               resource = newMarkupResourceStream(locator, this.getClass(), 
"3", null, "html");
+               resource = newMarkupResourceStream(locator, getClass(), "3", 
null, "html");
                parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
                tokens = parser.parse();
                log.info("tok(0)=" + tokens.get(0));
                // Assert.assertEquals(docText, tokens.get(0).toString());
 
-               resource = newMarkupResourceStream(locator, this.getClass(), 
"4", null, "html");
+               resource = newMarkupResourceStream(locator, getClass(), "4", 
null, "html");
                parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
                tokens = parser.parse();
@@ -235,35 +235,35 @@
                log.info("tok(0)=" + tokens.get(0));
                // Assert.assertEquals(docText, tokens.get(0).toString());
 
-               resource = newMarkupResourceStream(locator, this.getClass(), 
"5", null, "html");
+               resource = newMarkupResourceStream(locator, getClass(), "5", 
null, "html");
                parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
                tokens = parser.parse();
                log.info("tok(0)=" + tokens.get(0));
                // Assert.assertEquals(docText, tokens.get(0).toString());
 
-               resource = newMarkupResourceStream(locator, this.getClass(), 
"6", null, "html");
+               resource = newMarkupResourceStream(locator, getClass(), "6", 
null, "html");
                parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
                tokens = parser.parse();
                log.info("tok(0)=" + tokens.get(0));
                // Assert.assertEquals(docText, tokens.get(0).toString());
 
-               resource = newMarkupResourceStream(locator, this.getClass(), 
"7", null, "html");
+               resource = newMarkupResourceStream(locator, getClass(), "7", 
null, "html");
                parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
                tokens = parser.parse();
                log.info("tok(0)=" + tokens.get(0));
                // Assert.assertEquals(docText, tokens.get(0).toString());
 
-               resource = newMarkupResourceStream(locator, this.getClass(), 
"8", null, "html");
+               resource = newMarkupResourceStream(locator, getClass(), "8", 
null, "html");
                parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
                tokens = parser.parse();
                log.info("tok(0)=" + tokens.get(0));
                // Assert.assertEquals(docText, tokens.get(0).toString());
 
-               resource = newMarkupResourceStream(locator, this.getClass(), 
"9", null, "html");
+               resource = newMarkupResourceStream(locator, getClass(), "9", 
null, "html");
                parser = new MarkupParser(resource);
                parser.setWicketNamespace("wcn");
                tokens = parser.parse();
@@ -279,7 +279,7 @@
         * @throws IOException
         */
        public final void testWicketTag() throws ParseException, 
ResourceStreamNotFoundException,
-                       IOException
+               IOException
        {
                WicketTagIdentifier.registerWellKnownTagName("body");
                WicketTagIdentifier.registerWellKnownTagName("border");
@@ -312,7 +312,7 @@
                assertEquals(0, markup.size());
 
                markup = new MarkupParser("<div><wicket:remove> <span 
id=\"test\"/> </wicket:remove></div>")
-                               .parse();
+                       .parse();
                assertEquals(2, markup.size());
                assertEquals("<div>", ((RawMarkup)markup.get(0)).toString());
                assertEquals("</div>", ((RawMarkup)markup.get(1)).toString());
@@ -320,10 +320,10 @@
                try
                {
                        new MarkupParser("<wicket:remove> <wicket:remove> 
</wicket:remove> </wicket:remove>")
-                                       .parse();
+                               .parse();
                        assertTrue(
-                                       "Should have thrown an exception: 
remove regions must not contain wicket-components",
-                                       false);
+                               "Should have thrown an exception: remove 
regions must not contain wicket-components",
+                               false);
                }
                catch (MarkupException ex)
                {
@@ -331,17 +331,17 @@
                }
 
                new MarkupParser(
-                               "<wicket:component name = \"componentName\" 
class = \"classname\" param1 = \"value1\"/>")
-                               .parse();
+                       "<wicket:component name = \"componentName\" class = 
\"classname\" param1 = \"value1\"/>")
+                       .parse();
                new MarkupParser(
-                               "<wicket:component name = \"componentName\" 
class = \"classname\" param1 = \"value1\">    </wicket:component>")
-                               .parse();
+                       "<wicket:component name = \"componentName\" class = 
\"classname\" param1 = \"value1\">    </wicket:component>")
+                       .parse();
                new MarkupParser(
-                               "<wicket:component name = \"componentName\" 
class = \"classname\" param1 = \"value1\">  <span wicket:id=\"msg\">hello 
world!</span></wicket:component>")
-                               .parse();
+                       "<wicket:component name = \"componentName\" class = 
\"classname\" param1 = \"value1\">  <span wicket:id=\"msg\">hello 
world!</span></wicket:component>")
+                       .parse();
                new MarkupParser(
-                               "<wicket:panel><div 
id=\"definitionsContentBox\"><span 
wicket:id=\"contentPanel\"/></div></wicket:panel>")
-                               .parse();
+                       "<wicket:panel><div id=\"definitionsContentBox\"><span 
wicket:id=\"contentPanel\"/></div></wicket:panel>")
+                       .parse();
        }
 
        /**
@@ -352,15 +352,15 @@
         * @throws IOException
         */
        public final void testDefaultWicketTag() throws ParseException,
-                       ResourceStreamNotFoundException, IOException
+               ResourceStreamNotFoundException, IOException
        {
-               MarkupParser parser = new MarkupParser("<span 
wcn:id=\"test\"/>");
+               MarkupParser parser = new MarkupParser("<image 
wcn:id=\"test\"/>");
                parser.setWicketNamespace("wcn");
 
                Markup markup = parser.parse();
                assertEquals(1, markup.size());
 
-               markup = new MarkupParser("<span wicket:id=\"test\"/>").parse();
+               markup = new MarkupParser("<image 
wicket:id=\"test\"/>").parse();
                assertEquals(1, markup.size());
 
                WicketTagIdentifier.registerWellKnownTagName("xxx");
@@ -378,10 +378,10 @@
         * @throws IOException
         */
        public final void testScript() throws ParseException, 
ResourceStreamNotFoundException,
-                       IOException
+               IOException
        {
                final MarkupParser parser = new MarkupParser(
-                               "<html wicket:id=\"test\"><script 
language=\"JavaScript\">... <x a> ...</script></html>");
+                       "<html wicket:id=\"test\"><script 
language=\"JavaScript\">... <x a> ...</script></html>");
 
                Markup markup = parser.parse();
                assertEquals(3, markup.size());
@@ -389,7 +389,7 @@
                assertEquals("html", ((ComponentTag)markup.get(2)).getName());
                assertEquals(true, markup.get(1) instanceof RawMarkup);
                assertEquals("<script language=\"JavaScript\">... <x a> 
...</script>", ((RawMarkup)markup
-                               .get(1)).toString());
+                       .get(1)).toString());
        }
 
        /**
@@ -400,7 +400,7 @@
        public final void testBalancing() throws IOException, 
ResourceStreamNotFoundException
        {
                final MarkupParser parser = new MarkupParser(
-                               "<span wicket:id=\"span\"><img 
wicket:id=\"img\"><span wicket:id=\"span2\"></span></span>");
+                       "<span wicket:id=\"span\"><img wicket:id=\"img\"><span 
wicket:id=\"span2\"></span></span>");
 
                // Note: <img> is one of these none-balanced HTML tags
                Markup markup = parser.parse();

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html?rev=591712&r1=591711&r2=591712&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/border/BoxBorderTestPage_10.html
 Sat Nov  3 16:50:26 2007
@@ -1,5 +1,5 @@
 <html>
 <body>
-<span wicket:id="border1" />
+<image wicket:id="border1" />
 </body>
 </html>


Reply via email to