maven-doxia-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vsive...@apache.org
Subject svn commit: r735477 - in /maven/doxia/doxia/trunk/doxia-core/src: main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java
Date Sun, 18 Jan 2009 15:59:51 GMT
Author: vsiveton
Date: Sun Jan 18 07:59:51 2009
New Revision: 735477

URL: http://svn.apache.org/viewvc?rev=735477&view=rev
Log:
DOXIA-177: Invalid XHTML because of wrong position of table caption

o using a tempWriter to prewrite the xhtml content. The close() performs the change in the
writer.
o fixed test case

Modified:
    maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java
    maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java

Modified: maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java?rev=735477&r1=735476&r2=735477&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java
(original)
+++ maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/sink/XhtmlBaseSink.java
Sun Jan 18 07:59:51 2009
@@ -28,6 +28,7 @@
 import javax.swing.text.html.HTML.Tag;
 
 import org.apache.maven.doxia.markup.HtmlMarkup;
+import org.apache.maven.doxia.markup.Markup;
 import org.apache.maven.doxia.util.DoxiaUtils;
 import org.apache.maven.doxia.util.HtmlTools;
 import org.codehaus.plexus.util.StringUtils;
@@ -51,6 +52,10 @@
     /** The PrintWriter to write the result. */
     private PrintWriter writer;
 
+    /** The StringWriter to write the result temporary, so we could play with the output
and fix XHTML
+     * like DOXIA-177. Calling the method {@link #close()} is needed to perform the changes
in the {@link #writer}. */
+    private StringWriter tempWriter;
+
     /** Used to collect text events. */
     private StringBuffer buffer = new StringBuffer();
 
@@ -90,9 +95,6 @@
     /** Indicates that an image is part of a figure. */
     private boolean inFigure;
 
-    /** The StringWriter to write the table content (DOXIA-177). */
-    private StringWriter tableWriter;
-
     // ----------------------------------------------------------------------
     // Constructor
     // ----------------------------------------------------------------------
@@ -105,6 +107,7 @@
     public XhtmlBaseSink( Writer out )
     {
         this.writer = new PrintWriter( out );
+        this.tempWriter = new StringWriter();
     }
 
     // ----------------------------------------------------------------------
@@ -1085,8 +1088,6 @@
             paragraph_();
         }
 
-        tableWriter = new StringWriter();
-
         // start table with tableRows
         if ( attributes == null )
         {
@@ -1107,36 +1108,49 @@
     {
         writeEndTag( Tag.TABLE );
 
-        if ( tableWriter == null )
+        String content = tempWriter.toString();
+
+        String startTable =
+            new StringBuffer().append( Markup.LESS_THAN ).append( Tag.TABLE.toString() ).toString();
+
+        if ( content.lastIndexOf( startTable ) == -1 )
         {
-            throw new IllegalArgumentException( "table( SinkEventAttributes attributes )
was not called before." );
+            if ( getLog().isDebugEnabled() )
+            {
+                getLog().debug( "table() NOT call firstly" );
+            }
+            return;
         }
 
-        String content = tableWriter.toString();
-        tableWriter = null;
+        content = content.substring( content.lastIndexOf( startTable ) );
 
-        String startCaption = "<" + Tag.CAPTION.toString() + ">";
-        String endCaption = "</" + Tag.CAPTION.toString() + ">";
+        String startCaption =
+            new StringBuffer().append( Markup.LESS_THAN ).append( Tag.CAPTION.toString()
)
+                              .append( Markup.GREATER_THAN ).toString();
+        String endCaption =
+            new StringBuffer().append( Markup.LESS_THAN ).append( Markup.SLASH ).append(
Tag.CAPTION.toString() )
+                              .append( Markup.GREATER_THAN ).toString();
 
-        if ( content.indexOf( startCaption ) == -1 && content.indexOf( endCaption
) == -1 )
-        {
-            write( content );
-        }
-        else
+        if ( content.indexOf( startCaption ) != -1 && content.indexOf( endCaption
) != -1 )
         {
             // DOXIA-177
             int iStartCaption = content.indexOf( startCaption );
             int iEndCaption = content.indexOf( endCaption ) + endCaption.length();
 
             String captionTag = content.substring( iStartCaption, iEndCaption );
-            content = StringUtils.replace( content, captionTag, "" );
+            String contentWithoutCaption = StringUtils.replace( content, captionTag, "" );
+
+            String startTr =
+                new StringBuffer().append( Markup.LESS_THAN ).append( Tag.TR.toString() ).toString();
 
             StringBuffer text = new StringBuffer();
-            text.append( content.substring( 0, content.indexOf( "<" + Tag.TR.toString()
) ) );
+            text.append( contentWithoutCaption.substring( 0, contentWithoutCaption.indexOf(
startTr ) ) );
             text.append( captionTag );
-            text.append( content.substring( content.indexOf( "<" + Tag.TR.toString() )
) );
+            text.append( contentWithoutCaption.substring( contentWithoutCaption.indexOf(
startTr ) ) );
 
-            write( text.toString() );
+            String contentWithCaption = tempWriter.toString();
+            tempWriter = new StringWriter();
+            tempWriter.write( StringUtils.replace( contentWithCaption, content, text.toString()
) );
         }
     }
 
@@ -1784,6 +1798,8 @@
     /** {@inheritDoc} */
     public void close()
     {
+        writer.write( tempWriter.toString() );
+        tempWriter = new StringWriter();
         writer.close();
     }
 
@@ -1838,14 +1854,7 @@
     /** {@inheritDoc} */
     protected void write( String text )
     {
-        if ( tableWriter == null )
-        {
-            writer.write( unifyEOLs( text ) );
-        }
-        else
-        {
-            tableWriter.write( unifyEOLs( text ) );
-        }
+        tempWriter.write( unifyEOLs( text ) );
     }
 
 }

Modified: maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java
URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java?rev=735477&r1=735476&r2=735477&view=diff
==============================================================================
--- maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java
(original)
+++ maven/doxia/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/sink/XhtmlBaseSinkTest.java
Sun Jan 18 07:59:51 2009
@@ -41,10 +41,9 @@
         // DOXIA-189
         XhtmlBaseSink sink = null;
 
+        Writer writer =  new StringWriter();
         try
         {
-            Writer writer =  new StringWriter();
-
             sink = new XhtmlBaseSink( writer );
 
             sink.paragraph();
@@ -54,11 +53,6 @@
             sink.italic_();
             sink.text( "." );
             sink.paragraph_();
-
-            String actual = writer.toString();
-            String expected = "<p>There should be no space before the <i>period</i>.</p>";
-
-            assertEquals( expected, actual );
         }
         finally
         {
@@ -67,6 +61,11 @@
                 sink.close();
             }
         }
+
+        String actual = writer.toString();
+        String expected = "<p>There should be no space before the <i>period</i>.</p>";
+
+        assertEquals( expected, actual );
     }
 
     /** @throws Exception */
@@ -75,41 +74,44 @@
     {
         // DOXIA-177
         XhtmlBaseSink sink = null;
+        Writer writer =  new StringWriter();
 
         try
         {
-            Writer writer =  new StringWriter();
-
             sink = new XhtmlBaseSink( writer );
 
             sink.table();
             sink.tableRows( new int[] {0}, false );
+            sink.tableCaption();
+            sink.text( "caption1" );
+            sink.tableCaption_();
+            sink.tableRow();
+            sink.tableCell();
+            sink.table();
+            sink.tableRows( new int[] {0}, false );
             sink.tableRow();
             sink.tableCell();
-// FIXME: include nested table
-//            sink.table();
-//            sink.tableRows( new int[] {0}, false );
-//            sink.tableRow();
-//            sink.tableCell();
-//            sink.text( "nestedTableCell" );
-//            sink.tableCell_();
-//            sink.tableRow_();
-//            sink.tableRows_();
-//            sink.table_();
+            sink.text( "nestedTableCell" );
+            sink.tableCell_();
+            sink.tableRow_();
+            sink.tableRows_();
+            sink.tableCaption();
+            sink.text( "caption2" );
+            sink.tableCaption_();
+            sink.table_();
             sink.tableCell_();
             sink.tableRow_();
             sink.tableRows_();
             sink.table_();
-
-            String actual = writer.toString();
-            //assertTrue( actual.indexOf( "nestedTableCell" ) != 1 );
         }
         finally
         {
-            if ( sink != null )
-            {
-                sink.close();
-            }
+            sink.close();
         }
+
+        String actual = writer.toString();
+        assertTrue( actual.indexOf( "nestedTableCell" ) != 1 );
+        assertTrue( actual.indexOf( "class=\"bodyTable\"><caption>caption1</caption><tr"
) != 1 );
+        assertTrue( actual.indexOf( "class=\"bodyTable\"><caption>caption2</caption><tr"
) != 1 );
     }
 }



Mime
View raw message