Author: vsiveton Date: Wed Jun 3 11:57:22 2009 New Revision: 781348 URL: http://svn.apache.org/viewvc?rev=781348&view=rev Log: DOXIA-329: Itext needs local destination
o added a workaround for empty anchor o added test case Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/module/itext/ITextSinkTestCase.java Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java?rev=781348&r1=781347&r2=781348&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/main/java/org/apache/maven/doxia/module/itext/ITextSink.java Wed Jun 3 11:57:22 2009 @@ -108,6 +108,10 @@ private String tableCaption = null; + /** Flag to know if an anchor is defined or not. Used as workaround for iText which needs a defined local + * destination. */ + private boolean anchorDefined = false; + /** Map of warn messages with a String as key to describe the error type and a Set as value. * Using to reduce warn messages. */ private Map warnMessages; @@ -1328,6 +1332,18 @@ /** {...@inheritdoc} */ public void anchor_() { + if ( !anchorDefined ) + { + // itext needs a defined local destination, we put an invisible text + writeAddAttribute( ElementTags.BLUE, "255" ); + writeAddAttribute( ElementTags.GREEN, "255" ); + writeAddAttribute( ElementTags.RED, "255" ); + + write( "_" ); + } + + anchorDefined = false; + writeEndElement(); // ElementTags.ANCHOR actionContext.release(); @@ -1495,8 +1511,9 @@ case SinkActionContext.UNDEFINED: break; - case SinkActionContext.PARAGRAPH: case SinkActionContext.ANCHOR: + anchorDefined = true; + case SinkActionContext.PARAGRAPH: case SinkActionContext.LINK: case SinkActionContext.TABLE_CELL: case SinkActionContext.TABLE_HEADER_CELL: Modified: maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/module/itext/ITextSinkTestCase.java URL: http://svn.apache.org/viewvc/maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/module/itext/ITextSinkTestCase.java?rev=781348&r1=781347&r2=781348&view=diff ============================================================================== --- maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/module/itext/ITextSinkTestCase.java (original) +++ maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src/test/java/org/apache/maven/doxia/module/itext/ITextSinkTestCase.java Wed Jun 3 11:57:22 2009 @@ -113,4 +113,43 @@ ITextUtil.writeRtf( new FileInputStream( getGeneratedFile( "test_model", "xml" ) ), new FileOutputStream( getGeneratedFile( "test_model", "rtf" ) ) ); } + + /** + * Test empty anchor DOXIA-329 + * @throws Exception if any + */ + public void testEmptyAnchor() + throws Exception + { + Sink sink = createSink( getXmlTestWriter( "empty_anchor", "xml" ) ); + + SinkTestDocument.generateHead( sink ); + + sink.body(); + + sink.anchor( "empty_local_anchor" ); + sink.anchor_(); + sink.lineBreak(); + sink.link( "#empty_local_anchor" ); + sink.text( "link to empty local anchor" ); + sink.link_(); + + sink.lineBreak(); + + sink.anchor( "defined_local_anchor" ); + sink.text( "defined local anchor" ); + sink.anchor_(); + sink.lineBreak(); + sink.link( "#defined_local_anchor" ); + sink.text( "link to defined local anchor" ); + sink.link_(); + + sink.body_(); + + sink.flush(); + sink.close(); + + ITextUtil.writePdf( new FileInputStream( getGeneratedFile( "empty_anchor", "xml" ) ), + new FileOutputStream( getGeneratedFile( "empty_anchor", "pdf" ) ) ); + } }