arved       01/07/16 03:43:51

  Modified:    src/org/apache/fop/fo/flow RetrieveMarker.java
  Log:
  AHS: initial marker support
  
  Revision  Changes    Path
  1.2       +103 -22   xml-fop/src/org/apache/fop/fo/flow/RetrieveMarker.java
  
  Index: RetrieveMarker.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/RetrieveMarker.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- RetrieveMarker.java       2001/07/13 12:36:16     1.1
  +++ RetrieveMarker.java       2001/07/16 10:43:51     1.2
  @@ -1,4 +1,5 @@
  -/*-- $Id: RetrieveMarker.java,v 1.1 2001/07/13 12:36:16 keiron Exp $ --
  +/*-- $Id: RetrieveMarker.java,v 1.2 2001/07/16 10:43:51 arved Exp $-- */
  +/*
    * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
    * For details on use and redistribution please refer to the
    * LICENSE file included with these sources.
  @@ -9,30 +10,110 @@
   // FOP
   import org.apache.fop.fo.*;
   import org.apache.fop.messaging.MessageHandler;
  -import org.apache.fop.fo.flow.*;
   import org.apache.fop.fo.properties.*;
  -import org.apache.fop.layout.AreaTree;
  +import org.apache.fop.layout.*;
  +import org.apache.fop.datatypes.*;
   import org.apache.fop.apps.FOPException;
   
  -/**
  - */
  -public class RetrieveMarker extends ToBeImplementedElement {
  +// Java
  +import java.util.Vector;
   
  -    public static class Maker extends FObj.Maker {
  -        public FObj make(FObj parent,
  -                         PropertyList propertyList) throws FOPException {
  -            return new RetrieveMarker(parent, propertyList);
  -        }
  -    }
  -
  -    public static FObj.Maker maker() {
  -        return new RetrieveMarker.Maker();
  -    }
  -
  -    protected RetrieveMarker(FObj parent,
  -                   PropertyList propertyList) throws FOPException {
  -        super(parent, propertyList);
  -        this.name = "fo:retrieve-marker";
  -    }
  +public class RetrieveMarker extends FObjMixed {
   
  +     private String retrieveClassName;
  +     private int retrievePosition;
  +     private int retrieveBoundary;
  +     
  +     public static class Maker extends FObj.Maker {
  +             public FObj make(FObj parent, PropertyList propertyList) throws 
FOPException {
  +                             return new RetrieveMarker(parent, propertyList);
  +             }
  +     }
  +
  +     public static FObj.Maker maker() {
  +             return new RetrieveMarker.Maker();
  +     }
  +
  +     public RetrieveMarker(FObj parent, PropertyList propertyList) {
  +             super(parent, propertyList);
  +             this.name = "fo:retrieve-marker";
  +     
  +             this.retrieveClassName = 
this.properties.get("retrieve-class-name").getString();
  +             this.retrievePosition = 
this.properties.get("retrieve-position").getEnum();
  +             this.retrieveBoundary = 
this.properties.get("retrieve-boundary").getEnum();
  +     }
  +
  +     public Status layout(Area area) throws FOPException {
  +             // locate qualifying areas by 'marker-class-name' and
  +             // 'retrieve-boundary'. Initially we will always check
  +             // the containing page
  +             Page containingPage = area.getPage();
  +             Marker bestMarker = searchPage(containingPage);
  +             
  +             // if marker not yet found, and 'retrieve-boundary' permits,
  +             // search forward by Page
  +             /* insert code for searching forward by Page, if allowed */
  +             
  +             Status status = new Status(Status.AREA_FULL_NONE);
  +             if (null != bestMarker) {
  +                     // System.out.println("Laying out marker in area '" + area + 
"'");
  +                     status = bestMarker.layoutMarker(area);
  +             }
  +             
  +             return status;
  +     }
  +     
  +     private Marker searchPage(Page page) throws FOPException {
  +             Vector pageMarkers = page.getMarkers();
  +             if (pageMarkers.isEmpty())
  +                     return null;
  +                     
  +             // search forward if 'first-starting-within-page' or
  +             // 'first-including-carryover'
  +             Marker fallback = null;
  +             if (retrievePosition == RetrievePosition.FIC) {
  +                     for (int c = 0; c < pageMarkers.size(); c++) {
  +                             Marker currentMarker = 
(Marker)pageMarkers.elementAt(c);
  +                             if 
(currentMarker.getMarkerClassName().equals(retrieveClassName))
  +                                     return currentMarker;
  +                     }
  +                     
  +             } else if (retrievePosition == RetrievePosition.FSWP) {
  +                     for (int c = 0; c < pageMarkers.size(); c++) {
  +                             Marker currentMarker = 
(Marker)pageMarkers.elementAt(c);
  +                             if 
(currentMarker.getMarkerClassName().equals(retrieveClassName)) {
  +                                     if (currentMarker.getRegistryArea().isFirst)
  +                                             return currentMarker;
  +                                     else if (null == fallback)
  +                                             fallback = currentMarker;
  +                             }
  +                     }
  +                     
  +             } else if (retrievePosition == RetrievePosition.LSWP) {
  +                     for (int c = pageMarkers.size(); c > 0; c--) {
  +                             Marker currentMarker = 
(Marker)pageMarkers.elementAt(c-1);
  +                             if 
(currentMarker.getMarkerClassName().equals(retrieveClassName)) {
  +                                     if (currentMarker.getRegistryArea().isFirst)
  +                                             return currentMarker;
  +                                     else if (null == fallback)
  +                                             fallback = currentMarker;
  +                             }
  +                     }       
  +                     
  +             } else if (retrievePosition == RetrievePosition.LEWP) {
  +                     for (int c = pageMarkers.size(); c > 0; c--) {
  +                             Marker currentMarker = 
(Marker)pageMarkers.elementAt(c-1);
  +                             if 
(currentMarker.getMarkerClassName().equals(retrieveClassName)) {
  +                                     if (currentMarker.getRegistryArea().isLast)
  +                                             return currentMarker;
  +                                     else if (null == fallback)
  +                                             fallback = currentMarker;
  +                             }
  +                     }       
  +                     
  +             } else {
  +                     throw new FOPException("Illegal 'retrieve-position' value");
  +             }
  +             return fallback;
  +     }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to