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 vs...@apache.org on 2009/06/03 13:57:23 UTC
svn commit: r781348 - in
/maven/doxia/doxia/trunk/doxia-modules/doxia-module-itext/src:
main/java/org/apache/maven/doxia/module/itext/ITextSink.java
test/java/org/apache/maven/doxia/module/itext/ITextSinkTestCase.java
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" ) ) );
+ }
}