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( "&nbsp;" ) )
+        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( "&nbsp;" );
-        for( int i = 0; i < s.length; i++ )
+        else
         {
-            sink.text( s[i] );
-            if( i + 1 < s.length )
-            {
-                sink.nonBreakingSpace();
-            }
-        }
-        if( text.endsWith( "&nbsp;" ) )
-        {
-            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();


Reply via email to