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