Author: ltheussl
Date: Tue Oct 9 12:39:07 2007
New Revision: 583267
URL: http://svn.apache.org/viewvc?rev=583267&view=rev
Log:
DOXIA-137, DOXIA-154, DOXIA-155: Add comments to sink API. Make XmlParsers
recognize CDATA, entities and comments. Add script tag to XdocParser.
Modified:
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/SinkAdapter.java
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/WellformednessCheckingSink.java
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/SinkTestDocument.java
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/TextSink.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
maven/doxia/doxia/trunk/doxia-sink-api/src/main/java/org/apache/maven/doxia/sink/Sink.java
Modified:
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java
(original)
+++
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java
Tue Oct 9 12:39:07 2007
@@ -97,24 +97,20 @@
}
else if ( eventType == XmlPullParser.CDSECT )
{
- // TODO: handle CDATA sections
- // handleCdsect( parser, sink );
+ handleCdsect( parser, sink );
}
else if ( eventType == XmlPullParser.COMMENT )
{
- // TODO: handle comments, see DOXIA-137
- // handleComment( parser, sink );
+ handleComment( parser, sink );
}
else if ( eventType == XmlPullParser.ENTITY_REF )
{
- // TODO: handle entities
- // handleEntity( parser, sink );
+ handleEntity( parser, sink );
}
try
{
- // TODO: use nextToken() to report CDSECT, COMMENT and
ENTITY_REF
- eventType = parser.next();
+ eventType = parser.nextToken();
}
catch ( IOException io )
{
@@ -154,4 +150,35 @@
*/
protected abstract void handleText( XmlPullParser parser, Sink sink )
throws XmlPullParserException;
+
+ /**
+ * Handles CDATA sections.
+ *
+ * @param parser A parser.
+ * @param sink the sink to receive the events.
+ * @throws XmlPullParserException if there's a problem parsing the model
+ */
+ protected abstract void handleCdsect( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException;
+
+ /**
+ * Handles comments.
+ *
+ * @param parser A parser.
+ * @param sink the sink to receive the events.
+ * @throws XmlPullParserException if there's a problem parsing the model
+ */
+ protected abstract void handleComment( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException;
+
+ /**
+ * Handles entities.
+ *
+ * @param parser A parser.
+ * @param sink the sink to receive the events.
+ * @throws XmlPullParserException if there's a problem parsing the model
+ */
+ protected abstract void handleEntity( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException;
+
}
Modified:
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/SinkAdapter.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/SinkAdapter.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/SinkAdapter.java
(original)
+++
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/SinkAdapter.java
Tue Oct 9 12:39:07 2007
@@ -553,6 +553,12 @@
}
/** [EMAIL PROTECTED] */
+ public void comment( String comment )
+ {
+ // nop
+ }
+
+ /** [EMAIL PROTECTED] */
public void flush()
{
// nop
Modified:
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/WellformednessCheckingSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/WellformednessCheckingSink.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/WellformednessCheckingSink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/WellformednessCheckingSink.java
Tue Oct 9 12:39:07 2007
@@ -486,6 +486,11 @@
{
}
+ /** [EMAIL PROTECTED] */
+ public void comment( String comment )
+ {
+ }
+
public void flush()
{
}
Modified:
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/SinkTestDocument.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/SinkTestDocument.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/SinkTestDocument.java
(original)
+++
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/SinkTestDocument.java
Tue Oct 9 12:39:07 2007
@@ -138,6 +138,8 @@
sink.body_();
+ sink.comment( "A comment!" );
+
sink.flush();
}
Modified:
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/TextSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/TextSink.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/TextSink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/TextSink.java
Tue Oct 9 12:39:07 2007
@@ -568,6 +568,12 @@
}
/** [EMAIL PROTECTED] */
+ public void comment( String comment )
+ {
+ write( "comment: " + comment );
+ }
+
+ /** [EMAIL PROTECTED] */
public void flush()
{
try
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-apt/src/main/java/org/apache/maven/doxia/module/apt/AptSink.java
Tue Oct 9 12:39:07 2007
@@ -853,6 +853,13 @@
write( text );
}
+ /** [EMAIL PROTECTED] */
+ public void comment( String comment )
+ {
+ rawText( EOL + "~~ " + comment );
+ }
+
+
/**
* Write text to output.
*
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookParser.java
Tue Oct 9 12:39:07 2007
@@ -683,9 +683,51 @@
protected void handleText( XmlPullParser parser, Sink sink )
throws XmlPullParserException
{
- sink.text( parser.getText() );
+ String text = parser.getText();
+
+ if ( !"".equals( text.trim() ) )
+ {
+ sink.text( text );
+ }
+ }
+
+ /** [EMAIL PROTECTED] */
+ protected void handleCdsect( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
+ {
+ String text = parser.getText();
+
+ sink.rawText( text );
+ }
+
+ /** [EMAIL PROTECTED] */
+ protected void handleComment( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
+ {
+ String text = parser.getText();
+
+ sink.comment( text );
}
+ /** [EMAIL PROTECTED] */
+ protected void handleEntity( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
+ {
+ String text = parser.getText();
+
+ int[] holder = new int[] {0, 0};
+ char[] chars = parser.getTextCharacters( holder );
+ String textChars = String.valueOf( chars, holder[0], holder[1] );
+
+ if ( "#x00A0".equals( textChars ) )
+ {
+ sink.nonBreakingSpace();
+ }
+ else
+ {
+ sink.text( text );
+ }
+ }
// ----------------------------------------------------------------------
//
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-docbook-simple/src/main/java/org/apache/maven/doxia/module/docbook/DocBookSink.java
Tue Oct 9 12:39:07 2007
@@ -1495,6 +1495,12 @@
}
}
+ /** [EMAIL PROTECTED] */
+ public void comment( String comment )
+ {
+ markup( "<!--" + comment + "-->" );
+ }
+
// -----------------------------------------------------------------------
/**
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocParser.java
Tue Oct 9 12:39:07 2007
@@ -63,6 +63,9 @@
/** Used to distinguish <a href=""> from <a name="">. */
private boolean isAnchor;
+ /** True if a <script></script> block is read. CDATA sections within are
handles as rawText. */
+ private boolean scriptBlock;
+
/** Empty elements don't write a closing tag. */
private boolean isEmptyElement;
@@ -124,6 +127,10 @@
{
sink.author();
}
+ else if ( parser.getName().equals( DATE_TAG.toString() ) )
+ {
+ sink.date();
+ }
else if ( parser.getName().equals( Tag.BODY.toString() ) )
{
sink.body();
@@ -425,6 +432,11 @@
sink.figure_();
}
+ else if ( parser.getName().equals( Tag.SCRIPT.toString() ) )
+ {
+ handleRawText( sink, parser );
+ scriptBlock = true;
+ }
else
{
handleRawText( sink, parser );
@@ -448,6 +460,10 @@
{
sink.author_();
}
+ else if ( parser.getName().equals( DATE_TAG.toString() ) )
+ {
+ sink.date_();
+ }
else if ( parser.getName().equals( Tag.BODY.toString() ) )
{
closeOpenSections( 0, sink );
@@ -619,8 +635,22 @@
{
sink.sectionTitle5_();
}
+ else if ( parser.getName().equals( Tag.SCRIPT.toString() ) )
+ {
+ // TODO: this is HTML specific, factor out into a specialized
parser
+
+ sink.rawText( String.valueOf( LESS_THAN ) + String.valueOf( SLASH
) );
+
+ sink.rawText( parser.getName() );
+
+ sink.rawText( String.valueOf( GREATER_THAN ) );
+
+ scriptBlock = false;
+ }
else if ( !isEmptyElement )
{
+ // TODO: this is HTML specific, factor out into a specialized
parser
+
sink.rawText( String.valueOf( LESS_THAN ) + String.valueOf( SLASH
) );
sink.rawText( parser.getName() );
@@ -645,6 +675,51 @@
}
}
+ /** [EMAIL PROTECTED] */
+ protected void handleCdsect( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
+ {
+ String text = parser.getText();
+
+ if ( scriptBlock )
+ {
+ sink.rawText( text );
+ }
+ else
+ {
+ sink.text( text );
+ }
+ }
+
+ /** [EMAIL PROTECTED] */
+ protected void handleComment( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
+ {
+ String text = parser.getText();
+
+ sink.comment( text );
+ }
+
+ /** [EMAIL PROTECTED] */
+ protected void handleEntity( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
+ {
+ String text = parser.getText();
+
+ int[] holder = new int[] {0, 0};
+ char[] chars = parser.getTextCharacters( holder );
+ String textChars = String.valueOf( chars, holder[0], holder[1] );
+
+ if ( "#160".equals( textChars ) )
+ {
+ sink.nonBreakingSpace();
+ }
+ else
+ {
+ sink.text( text );
+ }
+ }
+
// ----------------------------------------------------------------------
// Private methods
// ----------------------------------------------------------------------
@@ -654,6 +729,7 @@
*
* @param sink the sink to receive the events.
* @param parser A parser.
+ * @todo this is HTML specific, factor out into a specialized parser
*/
private void handleRawText( Sink sink, XmlPullParser parser )
{
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xdoc/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
Tue Oct 9 12:39:07 2007
@@ -1026,6 +1026,13 @@
}
}
+ /** [EMAIL PROTECTED] */
+ public void comment( String comment )
+ {
+ markup( "<!--" + comment + "-->" );
+ }
+
+
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlParser.java
Tue Oct 9 12:39:07 2007
@@ -186,13 +186,13 @@
if ( title != null )
{
sink.figureCaption();
- text( sink, title );
+ sink.text( title );
sink.figureCaption_();
}
else if ( alt != null )
{
sink.figureCaption();
- text( sink, alt );
+ sink.text( alt );
sink.figureCaption_();
}
sink.figure_();
@@ -319,38 +319,55 @@
protected void handleText( XmlPullParser parser, Sink sink )
throws XmlPullParserException
{
- text( sink, parser.getText() );
+ String text = parser.getText();
+
+ if ( !"".equals( text.trim() ) )
+ {
+ sink.text( text );
+ }
}
- // ----------------------------------------------------------------------
- // Private methods
- // ----------------------------------------------------------------------
+ /** [EMAIL PROTECTED] */
+ protected void handleCdsect( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
+ {
+ String text = parser.getText();
+
+ sink.rawText( text );
+ }
+
+ /** [EMAIL PROTECTED] */
+ protected void handleComment( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
+ {
+ String text = parser.getText();
- /**
- * Sends the text to the sink, utilizing the nonBreakingspace of the sink.
- * @param sink
- * @param text
- */
- private static void text( Sink sink, String text )
+ sink.comment( text );
+ }
+
+ /** [EMAIL PROTECTED] */
+ protected void handleEntity( XmlPullParser parser, Sink sink )
+ throws XmlPullParserException
{
- if( text.startsWith( " " ) )
+ String text = parser.getText();
+
+ int[] holder = new int[] {0, 0};
+ char[] chars = parser.getTextCharacters( holder );
+ String textChars = String.valueOf( chars, holder[0], holder[1] );
+
+ if ( "#160".equals( textChars ) )
{
sink.nonBreakingSpace();
}
- String[] s = text.split( " " );
- for( int i = 0; i < s.length; i++ )
+ else
{
- sink.text( s[i] );
- if( i + 1 < s.length )
- {
- sink.nonBreakingSpace();
- }
- }
- if( text.endsWith( " " ) )
- {
- sink.nonBreakingSpace();
+ sink.text( text );
}
}
+
+ // ----------------------------------------------------------------------
+ // Private methods
+ // ----------------------------------------------------------------------
private void closeSubordinatedSections( String level, Sink sink )
{
Modified:
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-modules/doxia-module-xhtml/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
Tue Oct 9 12:39:07 2007
@@ -1194,6 +1194,12 @@
}
/** [EMAIL PROTECTED] */
+ public void comment( String comment )
+ {
+ rawText( "<!--" + comment + "-->" );
+ }
+
+ /** [EMAIL PROTECTED] */
public void flush()
{
writer.flush();
Modified:
maven/doxia/doxia/trunk/doxia-sink-api/src/main/java/org/apache/maven/doxia/sink/Sink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-sink-api/src/main/java/org/apache/maven/doxia/sink/Sink.java?rev=583267&r1=583266&r2=583267&view=diff
==============================================================================
---
maven/doxia/doxia/trunk/doxia-sink-api/src/main/java/org/apache/maven/doxia/sink/Sink.java
(original)
+++
maven/doxia/doxia/trunk/doxia-sink-api/src/main/java/org/apache/maven/doxia/sink/Sink.java
Tue Oct 9 12:39:07 2007
@@ -583,6 +583,13 @@
void rawText( String text );
/**
+ * Add a comment.
+ *
+ * @param comment The comment to write.
+ */
+ void comment( String comment );
+
+ /**
* Flush the writer or the stream, if needed.
*/
void flush();