Author: rfscholte Date: Fri Mar 29 19:59:53 2013 New Revision: 1462625 URL: http://svn.apache.org/r1462625 Log: [DOXIA-455] No XML Entity Encoding (Escaping) is done in FO Footer Generation Patch contributed by Birger Zimmermann, reviewed by Robert Scholte Only code formatting has been changed
Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/pom.xml maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/pom.xml URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/pom.xml?rev=1462625&r1=1462624&r2=1462625&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/pom.xml (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/pom.xml Fri Mar 29 19:59:53 2013 @@ -50,6 +50,12 @@ under the License. <timezone>+1</timezone> </developer> </developers> + + <contributors> + <contributor> + <name>Birger Zimmermann</name> + </contributor> + </contributors> <dependencies> <!-- Doxia --> Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.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/FoAggregateSink.java?rev=1462625&r1=1462624&r2=1462625&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/main/java/org/apache/maven/doxia/module/fo/FoAggregateSink.java Fri Mar 29 19:59:53 2013 @@ -791,7 +791,7 @@ public class FoAggregateSink actualYear = Calendar.getInstance().get( Calendar.YEAR ); } - return "©" + actualYear + ", " + companyName + add; + return "©" + actualYear + ", " + escaped( companyName, false ) + add; } /** @@ -884,11 +884,11 @@ public class FoAggregateSink if ( headerText == null ) { - write( docTitle ); + text( docTitle ); } else { - write( headerText ); + text( headerText ); } writeEndTag( BLOCK_TAG ); @@ -985,7 +985,7 @@ public class FoAggregateSink atts.addAttribute( "text-align-last", "justify" ); writeStartTag( BLOCK_TAG, atts ); writeStartTag( BASIC_LINK_TAG, "internal-destination", ref ); - write( tocItem.getName() ); + text( tocItem.getName() ); writeEndTag( BASIC_LINK_TAG ); writeEmptyTag( LEADER_TAG, "toc.leader.style" ); writeStartTag( INLINE_TAG, "page.number" ); @@ -1043,7 +1043,7 @@ public class FoAggregateSink writeStartTag( BOOKMARK_TAG, "internal-destination", ref ); writeStartTag( BOOKMARK_TITLE_TAG ); - write( tocItem.getName() ); + text( tocItem.getName() ); writeEndTag( BOOKMARK_TITLE_TAG ); if ( tocItem.getItems() != null ) @@ -1192,7 +1192,7 @@ public class FoAggregateSink writeStartTag( TABLE_CELL_TAG, "number-columns-spanned", "2", "cover.border.left" ); writeStartTag( BLOCK_TAG, "cover.title" ); - write( title == null ? "" : title ); + text( title == null ? "" : title ); writeEndTag( BLOCK_TAG ); writeEndTag( TABLE_CELL_TAG ); writeEndTag( TABLE_ROW_TAG ); @@ -1204,10 +1204,10 @@ public class FoAggregateSink writeStartTag( TABLE_CELL_TAG, "number-columns-spanned", "2", "cover.border.left.bottom" ); writeStartTag( BLOCK_TAG, "cover.subtitle" ); - write( subtitle == null ? ( version == null ? "" : " v. " + version ) : subtitle ); + text( subtitle == null ? ( version == null ? "" : " v. " + version ) : subtitle ); writeEndTag( BLOCK_TAG ); writeStartTag( BLOCK_TAG, "cover.subtitle" ); - write( type == null ? "" : type ); + text( type == null ? "" : type ); writeEndTag( BLOCK_TAG ); writeEndTag( TABLE_CELL_TAG ); writeEndTag( TABLE_ROW_TAG ); @@ -1272,7 +1272,7 @@ public class FoAggregateSink att.addAttribute( "height", "0.3in" ); att.addAttribute( "text-align", "left" ); writeStartTag( BLOCK_TAG, att ); - write( compName == null ? ( cover.getAuthor() == null ? "" : cover.getAuthor() ) : compName ); + text( compName == null ? ( cover.getAuthor() == null ? "" : cover.getAuthor() ) : compName ); writeEndTag( BLOCK_TAG ); writeEndTag( TABLE_CELL_TAG ); @@ -1281,7 +1281,7 @@ public class FoAggregateSink att.addAttribute( "height", "0.3in" ); att.addAttribute( "text-align", "right" ); writeStartTag( BLOCK_TAG, att ); - write( date == null ? "" : date ); + text( date == null ? "" : date ); writeEndTag( BLOCK_TAG ); writeEndTag( TABLE_CELL_TAG ); Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java?rev=1462625&r1=1462624&r2=1462625&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-fo/src/test/java/org/apache/maven/doxia/module/fo/FoAggregateSinkTest.java Fri Mar 29 19:59:53 2013 @@ -19,9 +19,18 @@ package org.apache.maven.doxia.module.fo * under the License. */ +import java.io.File; +import java.io.IOException; import java.io.StringWriter; import java.io.Writer; +import javax.xml.transform.TransformerException; + +import org.apache.maven.doxia.document.DocumentCover; +import org.apache.maven.doxia.document.DocumentModel; +import org.codehaus.plexus.util.WriterFactory; +import org.xml.sax.SAXParseException; + import junit.framework.TestCase; /** @@ -86,6 +95,62 @@ public class FoAggregateSinkTest assertTrue( writer.toString().indexOf( "<fo:block id=\"./folder/documentName\">" ) != -1 ); } + + /** + * Test the FO PDF generation with some special characters in company name. + */ + public void testSpecialCharacters() + throws IOException, TransformerException + { + DocumentModel model = new DocumentModel(); + DocumentCover cover = new DocumentCover(); + + cover.setCompanyName( "Partner & Friends" ); + cover.setCoverTitle( "A Masterpice in Encoding Theory <>&" ); + cover.setCoverSubTitle( "Some nice Encodings & <METHODS>" ); + cover.setProjectName( "A Masterpice in Encoding Theory <>&" ); + cover.setAuthor( "Partner & Friends" ); + model.setCover( cover ); + + File foFile = File.createTempFile( "fo-test", ".fo" ); + File pdfFile = File.createTempFile( "fo-test", ".pdf" ); + try + { + + sink = new FoAggregateSink( WriterFactory.newXmlWriter( foFile ) ); + + sink.setDocumentModel( model ); + sink.setDocumentTitle( "A Masterpice in Encoding Theory <>&" ); + sink.beginDocument(); + sink.coverPage(); + // sink.toc(); + sink.endDocument(); + } + finally + { + sink.close(); + } + + try + { + FoUtils.convertFO2PDF( foFile, pdfFile, null, model ); + } + catch ( TransformerException e ) + { + if ( ( e.getCause() != null ) && ( e.getCause() instanceof SAXParseException ) ) + { + SAXParseException sax = (SAXParseException) e.getCause(); + + StringBuffer sb = new StringBuffer(); + sb.append( "Error creating PDF from " ).append( foFile.getAbsolutePath() ).append( ":" ).append( sax.getLineNumber() ).append( ":" ).append( sax.getColumnNumber() ).append( "\n" ); + sb.append( e.getMessage() ); + + throw new RuntimeException( sb.toString() ); + } + + throw new TransformerException( "Error creating PDF from " + foFile + ": " + e.getMessage() ); + } + } /** * Test of figureGraphics method, of class FoAggregateSink.