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();