You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/05/22 21:08:59 UTC

svn commit: r1126167 - /tapestry/tapestry5/trunk/tapestry-javadoc/src/main/java/org/apache/tapestry5/javadoc/XDocStreamer.java

Author: hlship
Date: Sun May 22 19:08:59 2011
New Revision: 1126167

URL: http://svn.apache.org/viewvc?rev=1126167&view=rev
Log:
TAP5-1528: Handle <source> elements and <![CDATA[]> blocks

Modified:
    tapestry/tapestry5/trunk/tapestry-javadoc/src/main/java/org/apache/tapestry5/javadoc/XDocStreamer.java

Modified: tapestry/tapestry5/trunk/tapestry-javadoc/src/main/java/org/apache/tapestry5/javadoc/XDocStreamer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-javadoc/src/main/java/org/apache/tapestry5/javadoc/XDocStreamer.java?rev=1126167&r1=1126166&r2=1126167&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-javadoc/src/main/java/org/apache/tapestry5/javadoc/XDocStreamer.java (original)
+++ tapestry/tapestry5/trunk/tapestry-javadoc/src/main/java/org/apache/tapestry5/javadoc/XDocStreamer.java Sun May 22 19:08:59 2011
@@ -68,7 +68,7 @@ public class XDocStreamer
 
     enum ParserState
     {
-        IGNORING, COPYING
+        IGNORING, COPYING, COPYING_CDATA
     };
 
     class SaxHandler implements ContentHandler, LexicalHandler
@@ -95,12 +95,26 @@ public class XDocStreamer
 
         public void startCDATA() throws SAXException
         {
-            // TODO: Update state
+            if (state == ParserState.IGNORING)
+            {
+                endElementHandlers.push(NO_OP);
+                return;
+            }
+
+            state = ParserState.COPYING_CDATA;
+
+            endElementHandlers.push(new Runnable()
+            {
+                public void run()
+                {
+                    state = ParserState.COPYING;
+                }
+            });
         }
 
         public void endCDATA() throws SAXException
         {
-            // TODO: Restore state
+            endElementHandlers.pop().run();
         }
 
         /** Does nothing; comments are always stripped out. */
@@ -154,7 +168,12 @@ public class XDocStreamer
                 return;
             }
 
-            // TODO: <source> element
+            if (localName.equals("source"))
+            {
+                write("<pre>");
+                endElementHandlers.push(writeClose("pre"));
+                return;
+            }
 
             write("<");
             write(localName);
@@ -178,7 +197,7 @@ public class XDocStreamer
         {
             String name = getAttribute(atts, "name");
 
-            write(String.format("<%s>%s<%1$s>", elementName, name));
+            write(String.format("<%s>%s</%1$s>", elementName, name));
 
             endElementHandlers.push(NO_OP);
             return;
@@ -202,17 +221,44 @@ public class XDocStreamer
 
         public void characters(char[] ch, int start, int length) throws SAXException
         {
-            if (state != ParserState.IGNORING)
+            try
             {
-                try
-                {
-                    writer.write(ch, start, length);
-                }
-                catch (IOException ex)
+                switch (state)
                 {
-                    throw new SAXException(ex);
+                    case IGNORING:
+                        break;
+
+                    case COPYING:
+                        writer.write(ch, start, length);
+                        break;
+
+                    case COPYING_CDATA:
+
+                        for (int i = start; i < start + length; i++)
+                        {
+                            switch (ch[i])
+                            {
+                                case '<':
+                                    write("&lt;");
+                                    break;
+                                case '>':
+                                    write("&gt;");
+                                    break;
+                                case '&':
+                                    write("&amp;");
+                                    break;
+                                default:
+                                    writer.write(ch[i]);
+                            }
+                        }
+
+                        break;
                 }
             }
+            catch (IOException ex)
+            {
+                throw new SAXException(ex);
+            }
         }
 
         public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException