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" ) ) );
+ }
}