You are viewing a plain text version of this content. The canonical link for it is here.
Posted to doxia-commits@maven.apache.org by hb...@apache.org on 2009/08/14 18:38:50 UTC
svn commit: r804288 -
/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoSink.java
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 ) );
}
}