]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
added support for fo:basic-link
authorPeter Herweg <pherweg@apache.org>
Thu, 1 Jan 2004 21:19:55 +0000 (21:19 +0000)
committerPeter Herweg <pherweg@apache.org>
Thu, 1 Jan 2004 21:19:55 +0000 (21:19 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197087 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/FOInputHandler.java
src/java/org/apache/fop/fo/FOTreeHandler.java
src/java/org/apache/fop/fo/flow/BasicLink.java
src/java/org/apache/fop/render/mif/MIFHandler.java
src/java/org/apache/fop/render/rtf/RTFHandler.java
src/java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfHyperLink.java
src/java/org/apache/fop/render/rtf/rtflib/rtfdoc/RtfTextrun.java

index 3e20006855caae71160aa939dd0781c61392f08a..49c99bf0656e006c2ac3d01813c14d4fc19aad28 100644 (file)
@@ -55,6 +55,7 @@ import org.apache.avalon.framework.logger.AbstractLogEnabled;
 
 // FOP
 import org.apache.fop.apps.FOPException;
+import org.apache.fop.fo.flow.BasicLink;
 import org.apache.fop.fo.flow.Block;
 import org.apache.fop.fo.flow.ExternalGraphic;
 import org.apache.fop.fo.flow.Inline;
@@ -337,8 +338,9 @@ public abstract class FOInputHandler extends AbstractLogEnabled {
 
     /**
      * Process start of a Link.
+     * @param basicLink BasicLink that is ending
      */
-    public abstract void startLink();
+    public abstract void startLink(BasicLink basicLink);
 
     /**
      * Process end of a Link.
index d1dbab1d6722db003ba19391f4cde50ceb2d03a4..25ddc66a1f0d619df90a077ce94fe59ee0669986 100644 (file)
@@ -59,6 +59,7 @@ import org.xml.sax.SAXException;
 
 // FOP
 import org.apache.fop.apps.FOPException;
+import org.apache.fop.fo.flow.BasicLink;
 import org.apache.fop.fo.flow.Block;
 import org.apache.fop.fo.flow.ExternalGraphic;
 import org.apache.fop.fo.flow.InstreamForeignObject;
@@ -415,9 +416,9 @@ public class FOTreeHandler extends FOInputHandler {
     }
 
     /**
-     * @see org.apache.fop.fo.FOInputHandler#startLink()
+     * @see org.apache.fop.fo.FOInputHandler#startLink(BasicLink basicLink)
      */
-    public void startLink() {
+    public void startLink(BasicLink basicLink) {
     }
 
     /**
index 4d237ebcd442954b9769723fcef9e94707083ffe..ed5a847cc430d567c9aa1c30a91ac52dd0f59435 100644 (file)
  */
 package org.apache.fop.fo.flow;
 
+// XML
+import org.xml.sax.Attributes;
+
 // FOP
+import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FOTreeVisitor;
 import org.apache.fop.fo.properties.CommonAccessibility;
@@ -157,4 +161,21 @@ public class BasicLink extends Inline {
         fotv.serveBasicLink(this);
     }
 
+    /**
+     * @see org.apache.fop.fo.FObj#handleAttrs
+     */
+    public void handleAttrs(Attributes attlist) throws FOPException {
+        super.handleAttrs(attlist);
+
+        getFOTreeControl().getFOInputHandler().startLink(this);
+    }
+    
+    /**
+     * @see org.apache.fop.fo.FONode#end
+     */
+    public void end() {
+        super.end();
+        
+        getFOTreeControl().getFOInputHandler().endLink();
+    }
 }
index a7cf15117e2ba40d2ac831855ee2c5967562d977..63eab22a056e9f9fc97854e32511544211dc9412 100644 (file)
@@ -57,6 +57,7 @@ import java.io.OutputStream;
 import org.apache.fop.apps.Document;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FOInputHandler;
+import org.apache.fop.fo.flow.BasicLink;
 import org.apache.fop.fo.flow.Block;
 import org.apache.fop.fo.flow.ExternalGraphic;
 import org.apache.fop.fo.flow.InstreamForeignObject;
@@ -398,9 +399,9 @@ public class MIFHandler extends FOInputHandler {
     }
 
     /**
-     * @see org.apache.fop.fo.FOInputHandler#startLink()
+     * @see org.apache.fop.fo.FOInputHandler#startLink(BasicLink basicLink)
      */
-    public void startLink() {
+    public void startLink(BasicLink basicLink) {
     }
 
     /**
index d1bf6e58fa5c8b9a674a631ea17444da78f0d572..f3122b3324e314f2717222a1609f4e55fef9d7f7 100644 (file)
@@ -61,6 +61,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.EnumProperty;
 import org.apache.fop.fo.FOInputHandler;
 import org.apache.fop.datatypes.FixedLength;
+import org.apache.fop.fo.flow.BasicLink;
 import org.apache.fop.fo.flow.Block;
 import org.apache.fop.fo.flow.ExternalGraphic;
 import org.apache.fop.fo.flow.Inline;
@@ -81,6 +82,7 @@ import org.apache.fop.fo.pagination.SimplePageMaster;
 import org.apache.fop.fo.Constants;
 import org.apache.fop.fo.Property;
 import org.apache.fop.fo.LengthProperty;
+import org.apache.fop.fo.StringProperty;
 import org.apache.fop.apps.Document;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.ITableAttributes;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.IRtfAfterContainer;
@@ -94,6 +96,7 @@ import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfDocumentArea;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfElement;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfExternalGraphic;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfFile;
+import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfHyperLink;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfList;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfListItem;
 import org.apache.fop.render.rtf.rtflib.rtfdoc.RtfListItem.RtfListItemLabel;
@@ -730,15 +733,45 @@ public class RTFHandler extends FOInputHandler {
     }
 
     /**
-     * @see org.apache.fop.fo.FOInputHandler#startLink()
+     * @see org.apache.fop.fo.FOInputHandler#startLink(BasicLink basicLink)
      */
-    public void startLink() {
+    public void startLink(BasicLink basicLink) {
+        try {
+            IRtfTextrunContainer container
+                = (IRtfTextrunContainer)builderContext.getContainer(
+                    IRtfTextrunContainer.class, true, this);
+            
+            RtfTextrun textrun=container.getTextrun();
+            
+            RtfHyperLink link=textrun.addHyperlink(new RtfAttributes());
+            
+            StringProperty internal
+                = (StringProperty)basicLink.propertyList.get(Constants.PR_INTERNAL_DESTINATION);
+            StringProperty external
+                = (StringProperty)basicLink.propertyList.get(Constants.PR_EXTERNAL_DESTINATION);
+            
+            if(external != null) {
+                link.setExternalURL(external.getString());
+            } else if(internal != null) {
+                link.setInternalURL(internal.getString());
+            }
+            
+            builderContext.pushContainer(link);
+            
+        } catch (IOException ioe) {
+            log.error("startLink:" + ioe.getMessage());
+            throw new Error(ioe.getMessage());
+        } catch (Exception e) {
+            log.error("startLink: " + e.getMessage());
+            throw new Error(e.getMessage());
+        }
     }
 
     /**
      * @see org.apache.fop.fo.FOInputHandler#endLink()
      */
     public void endLink() {
+        builderContext.popContainer();
     }
 
     /**
index f1862ed3f307241f1a3b6853c64dcb976aab5499..213c10d11333d3664056d32b1aa535797adc40c4 100644 (file)
@@ -68,7 +68,10 @@ import java.io.IOException;
  *
  * {\field {\*\fldinst HYPERLINK "http://www.test.de"   }{\fldrslt Joe Smith}}
  */
-public class RtfHyperLink extends RtfContainer implements IRtfTextContainer {
+public class RtfHyperLink
+extends RtfContainer
+implements IRtfTextContainer,
+           IRtfTextrunContainer {
 
     //////////////////////////////////////////////////
     // @@ Members
@@ -99,6 +102,11 @@ public class RtfHyperLink extends RtfContainer implements IRtfTextContainer {
         super ((RtfContainer) parent, writer, attr);
         new RtfText (this, writer, str, attr);
     }
+    
+    public RtfHyperLink (RtfTextrun parent, Writer writer, RtfAttributes attr)
+        throws IOException {
+        super ((RtfContainer) parent, writer, attr);
+    }
 
 
     //////////////////////////////////////////////////
@@ -240,4 +248,10 @@ public class RtfHyperLink extends RtfContainer implements IRtfTextContainer {
     public boolean isEmpty () {
         return false;
     }
+    
+    public RtfTextrun getTextrun()
+    throws IOException {
+        RtfTextrun textrun = RtfTextrun.getTextrun(this, writer, null);
+        return textrun;
+    }
 }
index 161f29f52dcd13422d18dadf2acdc9ac1f697977..378b98db2f6b4eb64277d5ea84a542a422fe35c2 100644 (file)
@@ -172,6 +172,10 @@ public class RtfTextrun extends RtfContainer {
         RtfPageNumber r = new RtfPageNumber(this, writer, attr);
     }
     
+    public RtfHyperLink addHyperlink(RtfAttributes attr) throws IOException {
+        return new RtfHyperLink(this, writer, attr);
+    }
+    
     public RtfExternalGraphic newImage() throws IOException {
         return new RtfExternalGraphic(this, writer);
     }