]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Now handles page number citations
authorJordan Naftolin <jordan@apache.org>
Wed, 28 Jun 2000 17:48:14 +0000 (17:48 +0000)
committerJordan Naftolin <jordan@apache.org>
Wed, 28 Jun 2000 17:48:14 +0000 (17:48 +0000)
Now handles x position

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193442 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/datatypes/IDNode.java
src/org/apache/fop/datatypes/IDReferences.java

index 5394dd9d789627abbf8c43bd1497c3505387dd3e..2645566a4f1da50a917f6527b7f586418e31e345 100644 (file)
@@ -64,9 +64,11 @@ public class IDNode
         internalLinkGoTo;
 
     private int 
-        yPosition=0;  // position on page
+    pageNumber = -1,
+    xPosition = 0,  // x position on page
+    yPosition = 0;  // y position on page
+
 
-    
     /**
      * Constructor for IDNode
      * 
@@ -78,6 +80,28 @@ public class IDNode
     }
 
 
+    /**
+     * Sets the page number for this node
+     * 
+     * @param number page number of node
+     */
+    protected void setPageNumber(int number)
+    {        
+        pageNumber=number;     
+    }
+
+
+    /**
+     * Returns the page number of this node
+     * 
+     * @return page number of this node
+     */
+    protected String getPageNumber()
+    {             
+        return(pageNumber != -1)?new Integer(pageNumber).toString():null;
+    }
+
+
     /**
      * creates a new GoTo object for an internal link
      * 
@@ -86,7 +110,7 @@ public class IDNode
      */
     protected void createInternalLinkGoTo(int objectNumber)
     {
-        if(internalLinkGoToPageReference==null)
+        if ( internalLinkGoToPageReference==null )
         {
             internalLinkGoTo = new PDFGoTo(objectNumber,null);
         }
@@ -95,8 +119,9 @@ public class IDNode
             internalLinkGoTo = new PDFGoTo(objectNumber,internalLinkGoToPageReference);
         }
 
-        if(yPosition!=0)
+        if ( xPosition!=0 ) // if the position is known (if x is known, then y is known)
         {
+            internalLinkGoTo.setXPosition(xPosition);
             internalLinkGoTo.setYPosition(yPosition);
         }
         
@@ -113,7 +138,7 @@ public class IDNode
      */
     protected void setInternalLinkGoToPageReference(String pageReference)
     {        
-        if(internalLinkGoTo !=null)
+        if ( internalLinkGoTo !=null )
         {
             internalLinkGoTo.setPageReference(pageReference);                 
         }
@@ -173,18 +198,21 @@ public class IDNode
 
 
      /**
-      * Sets the x position of this node
+     * Sets the position of this node
       * 
       * @param x      the x position
+     * @param y      the y position
       */
-     protected void setYPosition(int y)
-     {
-         if(internalLinkGoTo !=null)
-        {            
+    protected void setPosition(int x, int y)
+    {
+        if ( internalLinkGoTo !=null )
+        {
+            internalLinkGoTo.setXPosition(x);
             internalLinkGoTo.setYPosition(y);
         }
         else
         {
+            xPosition=x;
             yPosition=y;
         }         
      }
index c610525d672886a67540c6d435a420f0aa24bc19..e2ea73c9548d9626d96d97463929ce8d3ce7d939 100644 (file)
@@ -64,8 +64,9 @@ import org.apache.fop.apps.FOPException;
 
 
 public class IDReferences {
-    private Hashtable idReferences;
-    private Vector idValidation;
+    private Hashtable 
+    idReferences,
+    idValidation;    
 
     final static int ID_PADDING = 5000; // space to add before id y position
 
@@ -75,18 +76,32 @@ public class IDReferences {
     public IDReferences()
     {
         idReferences = new Hashtable();
-        idValidation = new Vector();
+        idValidation = new Hashtable();
     }
 
 
     /**
-     * Initializes the specified id.  This should be called everytime an id is encountered
+     * Creates and configures the specified id.  
      * 
      * @param id     The id to initialize
      * @param area   The area where this id was encountered
      * @exception FOPException
      */
     public void initializeID(String id, Area area) throws FOPException
+    {
+        createID(id,area);
+        configureID(id,area);        
+    }
+
+
+    /**
+     * Creates id entry
+     * 
+     * @param id     The id to create
+     * @param area   The area where this id was encountered
+     * @exception FOPException
+     */
+    public void createID(String id, Area area) throws FOPException
     {
         if ( id!=null && !id.equals("") ) {
             if ( doesIDExist(id) ) {
@@ -95,12 +110,27 @@ public class IDReferences {
             else {
                 createNewId(id);
                 removeFromIdValidationList(id);                 
-                setYPosition(id,area.getPage().getBody().getYPosition() - area.getAbsoluteHeight()+ID_PADDING);                    
-                area.getPage().addToIDList(id);                                    
             }
+            
         }
     }
 
+
+    /**
+     * Configures this id
+     * 
+     * @param id     The id to configure
+     * @param area   The area where the id was encountered
+     */
+    public void configureID(String id, Area area)
+    {
+        if ( id!=null && !id.equals("") ) {
+            setPosition(id,area.getPage().getBody().getXPosition()-ID_PADDING,area.getPage().getBody().getYPosition() - area.getAbsoluteHeight()+ID_PADDING);                                                
+            setPageNumber(id,area.getPage().getNumber());
+                area.getPage().addToIDList(id);                                    
+            }
+        }
+
     /**
      * Adds id to validation list to be validated .  This should be used if it is unsure whether the id is valid
      * 
@@ -108,10 +138,10 @@ public class IDReferences {
      */
     public void addToIdValidationList(String id)
     {     
-        idValidation.addElement(id);
+        idValidation.put(id,"");
     }
 
-    
+
 
     /**
      * Removes id from validation list. This should be used if the id has been determined to be valid
@@ -120,7 +150,7 @@ public class IDReferences {
      */
     public void removeFromIdValidationList(String id)
     {        
-        idValidation.removeElement(id);
+        idValidation.remove(id);     
     }
 
     /**
@@ -130,7 +160,7 @@ public class IDReferences {
      */
     public boolean isEveryIdValid()
     {
-        return (idValidation.size()==0);
+        return(idValidation.size()==0);
     }
 
 
@@ -142,16 +172,8 @@ public class IDReferences {
      */
     public String getNextInvalidId()
     {
-        String id;
-        try
-        {            
-            id = idValidation.firstElement().toString();
-        }
-        catch(NoSuchElementException nsee)
-        {            
-            id=null;    // should probably report error
-        }
-        return id;
+        Enumeration enum=idValidation.keys();
+        return enum.nextElement().toString();                
     }
 
 
@@ -254,15 +276,48 @@ public class IDReferences {
 
 
     /**
-     * Sets the x position of specified id
+     * Sets the page number for the specified id
+     * 
+     * @param id     The id whose page number is being set
+     * @param pageNumber The page number of the specified id
+     */
+    public void setPageNumber(String id, int pageNumber)
+    {        
+        IDNode node=(IDNode)idReferences.get(id);                
+        node.setPageNumber(pageNumber);        
+    }
+
+
+    /**
+     * Returns the page number where the specified id is found
+     * 
+     * @param id     The id whose page number to return
+     * @return the page number of the id, or null if the id does not exist
+     */
+    public String getPageNumber(String id)
+    {        
+        if ( doesIDExist(id) ) {
+            IDNode node=(IDNode)idReferences.get(id);            
+            return node.getPageNumber();          
+        }
+        else {
+            addToIdValidationList(id);
+            return null;
+        }
+    }
+
+
+    /**
+     * Sets the x and y position of specified id
      * 
-     * @param id     the id whose x position is to be set
+     * @param id     the id whose position is to be set
+     * @param x      x position of id
      * @param y      y position of id
      */
-    public void setYPosition(String id, int y)
+    public void setPosition(String id, int x, int y)
     {
         IDNode node=(IDNode)idReferences.get(id);
-        node.setYPosition(y);
-     }
-       
+        node.setPosition(x,y);        
+    }
+
 }