Author: hboutemy
Date: Fri Aug 14 16:38:50 2009
New Revision: 804288

URL: http://svn.apache.org/viewvc?rev=804288&view=rev
Log:
avoid storing whole FO document in-memory but just table content

Modified:
    
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java

Modified: 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java?rev=804288&r1=804287&r2=804288&view=diff
==============================================================================
--- 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java
 (original)
+++ 
maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java
 Fri Aug 14 16:38:50 2009
@@ -21,6 +21,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.util.Enumeration;
@@ -65,11 +66,7 @@
     implements FoMarkup
 {
     /** For writing the result. */
-    private final Writer out;
-
-    /** The StringWriter to write the result temporary, so we could play with 
the output and fix fo.
-     * Calling the method {...@link #close()} is needed to perform the changes 
in the {...@link #out}. */
-    private StringWriter tempWriter;
+    private final PrintWriter out;
 
     /** Used to get the current position in numbered lists. */
     private final Stack listStack = new Stack();
@@ -108,6 +105,9 @@
 
     private String languageId;
 
+    /** The StringWriter to write the table result temporary, so we could play 
with the output and fix fo. */
+    private StringWriter tableContentWriter;
+
     private StringWriter tableCaptionWriter = null;
 
     private XMLWriter tableCaptionXMLWriter = null;
@@ -141,8 +141,7 @@
             throw new NullPointerException( "Null writer in FO Sink!" );
         }
 
-        this.out = writer;
-        this.tempWriter = new StringWriter();
+        this.out = new PrintWriter( writer );
         this.encoding = encoding;
         this.config = new FoConfiguration();
 
@@ -909,6 +908,7 @@
         // <fo:table-and-caption> is XSL-FO 1.0 standard but still not 
implemented in FOP 0.95
         //writeStartTag( TABLE_AND_CAPTION_TAG );
 
+        tableContentWriter = new StringWriter();
         writeStartTag( TABLE_TAG, "table.layout" );
     }
 
@@ -929,40 +929,29 @@
             tableCaptionWriter = null;
         }
 
-        String content = tempWriter.toString();
-        if ( content.lastIndexOf( "<fo:table " ) != -1 || content.lastIndexOf( 
"<fo:table>" ) != -1 )
-        {
-            StringBuffer sb = new StringBuffer();
-            // FOP hack to center the table, see
-            // 
http://xmlgraphics.apache.org/fop/fo.html#fo-center-table-horizon
-            sb.append( "<fo:table-column 
column-width=\"proportional-column-width(1)\"/>" );
-            sb.append( EOL );
+        String content = tableContentWriter.toString();
+        tableContentWriter = null;
 
-            int percent = 100 / cellCount;
-            for ( int i = 0; i < cellCount; i++ )
-            {
-                sb.append( "<fo:table-column column-width=\"" + percent + 
"%\"/>" );
-                sb.append( EOL );
-            }
+        StringBuffer sb = new StringBuffer();
+        // FOP hack to center the table, see
+        // http://xmlgraphics.apache.org/fop/fo.html#fo-center-table-horizon
+        sb.append( "<fo:table-column 
column-width=\"proportional-column-width(1)\"/>" );
+        sb.append( EOL );
 
-            sb.append( "<fo:table-column 
column-width=\"proportional-column-width(1)\"/>" );
+        int percent = 100 / cellCount;
+        for ( int i = 0; i < cellCount; i++ )
+        {
+            sb.append( "<fo:table-column column-width=\"" + percent + "%\"/>" 
);
             sb.append( EOL );
+        }
 
-            String subContent;
-            if ( content.lastIndexOf( "<fo:table " ) != -1 )
-            {
-                subContent = content.substring( content.lastIndexOf( 
"<fo:table " ) );
-            }
-            else
-            {
-                subContent = content.substring( content.lastIndexOf( 
"<fo:table>" ) );
-            }
-            String table = subContent.substring( 0, subContent.indexOf( ">" ) 
+ 1 );
-            String subContentUpdated = StringUtils.replace( subContent, table, 
table + EOL + sb.toString() );
+        sb.append( "<fo:table-column 
column-width=\"proportional-column-width(1)\"/>" );
+        sb.append( EOL );
 
-            tempWriter = new StringWriter();
-            tempWriter.write( StringUtils.replace( content, subContent, 
subContentUpdated ) );
-        }
+        int index = content.indexOf( ">" ) + 1;
+        writeln( content.substring( 0, index ) );
+        write( sb.toString() );
+        write( content.substring( index ) );
 
         writeEndTag( TABLE_TAG );
         writeEOL();
@@ -1326,29 +1315,13 @@
     /** {...@inheritdoc} */
     public void flush()
     {
-        try
-        {
-            out.flush();
-        }
-        catch ( IOException e )
-        {
-            getLog().debug( e );
-        }
+        out.flush();
     }
 
     /** {...@inheritdoc} */
     public void close()
     {
-        try
-        {
-            out.write( tempWriter.toString() );
-            tempWriter = new StringWriter();
-            out.close();
-        }
-        catch ( IOException e )
-        {
-            getLog().debug( e );
-        }
+        out.close();
 
         if ( getLog().isWarnEnabled() && this.warnMessages != null )
         {
@@ -1569,13 +1542,17 @@
      */
     protected void write( String text )
     {
-        if ( tableCaptionXMLWriter == null )
+        if ( tableCaptionXMLWriter != null )
+        {
+            tableCaptionXMLWriter.writeText( unifyEOLs( text ) );
+        }
+        else if ( tableContentWriter != null )
         {
-            tempWriter.write( unifyEOLs( text ) );
+            tableContentWriter.write( unifyEOLs( text ) );
         }
         else
         {
-            tableCaptionXMLWriter.writeText( unifyEOLs( text ) );
+            out.write( unifyEOLs( text ) );
         }
     }
 


Reply via email to