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("<");
+ break;
+ case '>':
+ write(">");
+ break;
+ case '&':
+ write("&");
+ 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