pietsch     2003/02/16 16:09:44

  Modified:    src/org/apache/fop/apps Tag: fop-0_20_2-maintain
                        StreamRenderer.java
               src/org/apache/fop/fo Tag: fop-0_20_2-maintain FONode.java
                        FObj.java
               src/org/apache/fop/fo/flow Tag: fop-0_20_2-maintain
                        AbstractTableBody.java Block.java ListBlock.java
                        ListItem.java Marker.java RetrieveMarker.java
                        Table.java
               src/org/apache/fop/layout Tag: fop-0_20_2-maintain Area.java
                        AreaTree.java Page.java
               src/org/apache/fop/render/xml Tag: fop-0_20_2-maintain
                        XMLRenderer.java
               src/org/apache/fop/svg Tag: fop-0_20_2-maintain
                        PDFGraphics2D.java
  Log:
  Revamped marker handling. Retrieving markers works now always for
  all retrieve boundaries. Long markers should also work now.
  First-including-carryover does not work yet. Last-ending-within-page
  probably doesn't work yet either.
  Submitted by: Based on patch submitted by Marc C. Allman
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.6.2.9   +63 -75    xml-fop/src/org/apache/fop/apps/Attic/StreamRenderer.java
  
  Index: StreamRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/apps/Attic/StreamRenderer.java,v
  retrieving revision 1.6.2.8
  retrieving revision 1.6.2.9
  diff -u -r1.6.2.8 -r1.6.2.9
  --- StreamRenderer.java       19 Nov 2002 01:03:57 -0000      1.6.2.8
  +++ StreamRenderer.java       17 Feb 2003 00:09:42 -0000      1.6.2.9
  @@ -13,13 +13,14 @@
   
   import org.xml.sax.SAXException;
   
  -import org.apache.fop.layout.FontInfo;
  -import org.apache.fop.layout.Page;
  -import org.apache.fop.render.Renderer;
  -import org.apache.fop.layout.AreaTree;
   import org.apache.fop.datatypes.IDReferences;
   import org.apache.fop.extensions.ExtensionObj;
  +import org.apache.fop.fo.flow.Marker;
   import org.apache.fop.fo.pagination.PageSequence;
  +import org.apache.fop.layout.AreaTree;
  +import org.apache.fop.layout.FontInfo;
  +import org.apache.fop.layout.Page;
  +import org.apache.fop.render.Renderer;
   
   import org.apache.avalon.framework.logger.Logger;
   
  @@ -98,6 +99,13 @@
        */
       private ArrayList extensions = new ArrayList();
   
  +    /**
  +     * The list of markers.
  +     */
  +    private ArrayList documentMarkers;
  +    private ArrayList currentPageSequenceMarkers;
  +    private PageSequence currentPageSequence;
  +    
       private Logger log;
   
       public StreamRenderer(OutputStream outputStream, Renderer renderer) {
  @@ -126,7 +134,7 @@
           pageCount = 0;
   
           if (MEM_PROFILE_WITH_GC)
  -            System.gc();             // This takes time but gives better results
  +            System.gc();     // This takes time but gives better results
   
           initialMemory = runtime.totalMemory() - runtime.freeMemory();
           startTime = System.currentTimeMillis();
  @@ -158,7 +166,7 @@
           }
   
           if (MEM_PROFILE_WITH_GC)
  -            System.gc();             // This takes time but gives better results
  +            System.gc();     // This takes time but gives better results
   
           long memoryNow = runtime.totalMemory() - runtime.freeMemory();
           long memoryUsed = (memoryNow - initialMemory) / 1024L;
  @@ -217,33 +225,50 @@
   
       public synchronized void queuePage(Page page)
       throws FOPException, IOException {
  +
  +        // process markers
  +        PageSequence pageSequence = page.getPageSequence();
  +        if (pageSequence != currentPageSequence) {
  +            currentPageSequence = pageSequence;
  +            currentPageSequenceMarkers = null;
  +        }
  +        ArrayList markers = page.getMarkers();
  +        if (markers != null) {
  +            if (documentMarkers == null) {
  +                documentMarkers = new ArrayList();
  +            }
  +            if (currentPageSequenceMarkers == null) {
  +                currentPageSequenceMarkers = new ArrayList();
  +            }
  +            for (int i=0;i<markers.size();i++) {
  +                Marker marker = (Marker)markers.get(i);
  +                marker.releaseRegistryArea();
  +                currentPageSequenceMarkers.add(marker);
  +                documentMarkers.add(marker);
  +            }
  +        }
  +        
           /*
             Try to optimise on the common case that there are
             no pages pending and that all ID references are
             valid on the current pages. This short-cuts the
             pipeline and renders the area immediately.
           */
  -        if ((renderQueue.size() == 0) && idReferences.isEveryIdValid())
  +        if ((renderQueue.size() == 0) && idReferences.isEveryIdValid()) {
               renderer.render(page, outputStream);
  -        else
  -            addToRenderQueue(page);
  -
  +        } else {
  +            RenderQueueEntry entry = new RenderQueueEntry(page);
  +            renderQueue.add(entry);
  +            /*
  +              The just-added entry could (possibly) resolve the
  +              waiting entries, so we try to process the queue
  +              now to see.
  +            */
  +            processQueue(false);
  +        }
           pageCount++;
       }
   
  -    private synchronized void addToRenderQueue(Page page)
  -    throws FOPException, IOException {
  -        RenderQueueEntry entry = new RenderQueueEntry(page);
  -        renderQueue.add(entry);
  -
  -        /*
  -          The just-added entry could (possibly) resolve the
  -          waiting entries, so we try to process the queue
  -          now to see.
  -        */
  -        processQueue(false);
  -    }
  -
       /**
         Try to process the queue from the first entry forward.
         If an entry can't be processed, then the queue can't
  @@ -266,7 +291,7 @@
         plus a list of outstanding ID references that need to be
         resolved before the Page can be renderered.<P>
       */
  -    class RenderQueueEntry extends Object {
  +    class RenderQueueEntry {
           /*
             The Page that has outstanding ID references.
           */
  @@ -309,55 +334,18 @@
           }
       }
   
  -  // unused and broken
  -//      public Page getNextPage(Page current, boolean isWithinPageSequence,
  -//                              boolean isFirstCall) {
  -//          Page nextPage = null;
  -//          int pageIndex = 0;
  -//          if (isFirstCall)
  -//              pageIndex = renderQueue.size();
  -//          else
  -//              pageIndex = renderQueue.indexOf(current);
  -//          if ((pageIndex + 1) < renderQueue.size()) {
  -//              nextPage = ((RenderQueueEntry)renderQueue
  -//                          .get(pageIndex + 1)).getPage();
  -//              if (isWithinPageSequence
  -//                      
&&!nextPage.getPageSequence().equals(current.getPageSequence())) {
  -//                  nextPage = null;
  -//              }
  -//          }
  -//          return nextPage;
  -//      }
  -
  -    public Page getPreviousPage(Page current, boolean isWithinPageSequence,
  -                                boolean isFirstCall) {
  -        if (isFirstCall) {
  -            int pageIndex = renderQueue.size();
  -            if (pageIndex > 0) {
  -                Page previousPage = ((RenderQueueEntry)renderQueue
  -                                     .get(pageIndex - 1)).getPage();
  -                PageSequence currentPS = current.getPageSequence();
  -                PageSequence previousPS = previousPage.getPageSequence();
  -                if (!isWithinPageSequence || previousPS.equals(currentPS)) {
  -                   return previousPage;
  -                }
  -            }
  -        } else {
  -            for (int pageIndex=renderQueue.size()-1;pageIndex>0;pageIndex--) {
  -                Page page = ((RenderQueueEntry)renderQueue
  -                             .get(pageIndex)).getPage();
  -                if (current.equals(page)) {
  -                    Page previousPage = ((RenderQueueEntry)renderQueue
  -                                         .get(pageIndex - 1)).getPage();
  -                    PageSequence currentPS = current.getPageSequence();
  -                    PageSequence previousPS = previousPage.getPageSequence();
  -                    if (!isWithinPageSequence || previousPS.equals(currentPS)) {
  -                        return previousPage;
  -                    }
  -                    return null;
  -                }
  -            }
  -        }
  -        return null;
  +    // Auxillary function for retrieving markers.
  +    public ArrayList getDocumentMarkers() {
  +        return documentMarkers;
  +    }
  +
  +    // Auxillary function for retrieving markers.
  +    public PageSequence getCurrentPageSequence() {
  +        return currentPageSequence;
  +    }
  +
  +    // Auxillary function for retrieving markers.
  +    public ArrayList getCurrentPageSequenceMarkers() {
  +        return currentPageSequenceMarkers;
       }
   }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.21.2.9  +2 -1      xml-fop/src/org/apache/fop/fo/FONode.java
  
  Index: FONode.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FONode.java,v
  retrieving revision 1.21.2.8
  retrieving revision 1.21.2.9
  diff -u -r1.21.2.8 -r1.21.2.9
  --- FONode.java       22 Nov 2002 15:10:44 -0000      1.21.2.8
  +++ FONode.java       17 Feb 2003 00:09:42 -0000      1.21.2.9
  @@ -109,6 +109,7 @@
   
       public void resetMarker() {
           this.marker = START;
  +        this.areasGenerated=0;
           int numChildren = this.children.size();
           for (int i = 0; i < numChildren; i++) {
               ((FONode)children.get(i)).resetMarker();
  
  
  
  1.20.2.7  +38 -38    xml-fop/src/org/apache/fop/fo/FObj.java
  
  Index: FObj.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FObj.java,v
  retrieving revision 1.20.2.6
  retrieving revision 1.20.2.7
  diff -u -r1.20.2.6 -r1.20.2.7
  --- FObj.java 22 Nov 2002 15:10:44 -0000      1.20.2.6
  +++ FObj.java 17 Feb 2003 00:09:42 -0000      1.20.2.7
  @@ -14,7 +14,7 @@
   import org.apache.fop.fo.flow.Marker;
   
   // Java
  -import java.util.HashMap;
  +import java.util.HashSet;
   import java.util.ArrayList;
   
   /**
  @@ -32,7 +32,7 @@
       protected PropertyManager propMgr;
   
       // markers
  -    private HashMap markers;
  +    private HashSet markerClassNames;
   
       protected FObj(FObj parent, PropertyList propertyList) {
           super(parent);
  @@ -151,40 +151,40 @@
       }
   
   
  -    public void addMarker(Marker marker) throws FOPException {
  -        String mcname = marker.getMarkerClassName();
  -        if (children != null) {
  -            for (int i = 0; i < children.size(); i++) {
  -                FONode child = (FONode)children.get(i);
  -                if (!child.mayPrecedeMarker()) {
  -                  throw new FOPException("A fo:marker must be an initial child of '"
  -                                         + getName()+"'");
  -                }
  -            }
  -        }
  -        if (markers==null) {
  -            markers = new HashMap();
  -            markers.put(mcname, marker);
  -        } else if (!markers.containsKey(mcname) ) {
  -            markers.put(mcname, marker);
  -        } else {
  -            throw new FOPException("marker-class-name '"
  -                                   + mcname
  -                                   + "' already exists for this parent");
  -        }
  -    }
  -
  -    public boolean hasMarkers() {
  -        return markers!=null;
  -    }
  -
  -    public ArrayList getMarkers() {
  -        if (markers==null) {
  -            log.debug("GetMarkers failed (no markers). Should not happen.");
  -            return null;
  -        } else {
  -            return new ArrayList(markers.values());
  -        }
  -    }
  +     public void addMarker(String markerClassName) throws FOPException {
  +//         String mcname = marker.getMarkerClassName();
  +         if (children != null) {
  +             for (int i = 0; i < children.size(); i++) {
  +                 FONode child = (FONode)children.get(i);
  +                 if (!child.mayPrecedeMarker()) {
  +                   throw new FOPException("A fo:marker must be an initial child of 
'"
  +                                          + getName()+"'");
  +                 }
  +             }
  +         }
  +         if (markerClassNames==null) {
  +             markerClassNames = new HashSet();
  +             markerClassNames.add(markerClassName);
  +         } else if (!markerClassNames.contains(markerClassName) ) {
  +             markerClassNames.add(markerClassName);
  +         } else {
  +             throw new FOPException("marker-class-name '"
  +                                    + markerClassName
  +                                    + "' already exists for this parent");
  +         }
  +     }
  +
  +//     public boolean hasMarkers() {
  +//         return markers!=null;
  +//     }
  +
  +//     public ArrayList getMarkers() {
  +//         if (markers==null) {
  +//             log.debug("GetMarkers failed (no markers). Should not happen.");
  +//             return null;
  +//         } else {
  +//             return new ArrayList(markers.values());
  +//         }
  +//     }
   }
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.7   +5 -1      xml-fop/src/org/apache/fop/fo/flow/Attic/AbstractTableBody.java
  
  Index: AbstractTableBody.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Attic/AbstractTableBody.java,v
  retrieving revision 1.1.2.6
  retrieving revision 1.1.2.7
  diff -u -r1.1.2.6 -r1.1.2.7
  --- AbstractTableBody.java    1 Dec 2002 11:55:57 -0000       1.1.2.6
  +++ AbstractTableBody.java    17 Feb 2003 00:09:42 -0000      1.1.2.7
  @@ -138,6 +138,10 @@
           boolean endKeepGroup = true;
           for (int i = this.marker; i < numChildren; i++) {
               Object child = children.get(i);
  +            if (child instanceof Marker) {
  +                ((Marker)child).layout(area);
  +                continue;
  +            }
               if (!(child instanceof TableRow)) {
                   throw new FOPException("Currently only Table Rows are supported in 
table body, header and footer");
               }
  
  
  
  1.41.2.14 +4 -4      xml-fop/src/org/apache/fop/fo/flow/Block.java
  
  Index: Block.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Block.java,v
  retrieving revision 1.41.2.13
  retrieving revision 1.41.2.14
  diff -u -r1.41.2.13 -r1.41.2.14
  --- Block.java        30 Nov 2002 22:50:14 -0000      1.41.2.13
  +++ Block.java        17 Feb 2003 00:09:42 -0000      1.41.2.14
  @@ -181,11 +181,11 @@
           if (this.areasGenerated == 1)
               blockArea.isFirst(true);
           // for normal areas this should be the only pair
  -        blockArea.addLineagePair(this, this.areasGenerated);
  +//        blockArea.addLineagePair(this, this.areasGenerated);
   
           // markers
  -        if (this.hasMarkers())
  -            blockArea.addMarkers(this.getMarkers());
  +//         if (this.hasMarkers())
  +//             blockArea.addMarkers(this.getMarkers());
   
           blockArea.setParent(area);    // BasicLink needs it
           blockArea.setPage(area.getPage());
  
  
  
  1.21.2.7  +4 -4      xml-fop/src/org/apache/fop/fo/flow/ListBlock.java
  
  Index: ListBlock.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/ListBlock.java,v
  retrieving revision 1.21.2.6
  retrieving revision 1.21.2.7
  diff -u -r1.21.2.6 -r1.21.2.7
  --- ListBlock.java    22 Nov 2002 15:10:46 -0000      1.21.2.6
  +++ ListBlock.java    17 Feb 2003 00:09:42 -0000      1.21.2.7
  @@ -124,11 +124,11 @@
           if (this.areasGenerated == 1)
               blockArea.isFirst(true);
               // for normal areas this should be the only pair
  -        blockArea.addLineagePair(this, this.areasGenerated);
  +//        blockArea.addLineagePair(this, this.areasGenerated);
   
           // markers
  -        if (this.hasMarkers())
  -            blockArea.addMarkers(this.getMarkers());
  +//         if (this.hasMarkers())
  +//             blockArea.addMarkers(this.getMarkers());
   
   
           blockArea.setParent(area);
  
  
  
  1.16.2.6  +4 -4      xml-fop/src/org/apache/fop/fo/flow/ListItem.java
  
  Index: ListItem.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/ListItem.java,v
  retrieving revision 1.16.2.5
  retrieving revision 1.16.2.6
  diff -u -r1.16.2.5 -r1.16.2.6
  --- ListItem.java     22 Nov 2002 15:10:46 -0000      1.16.2.5
  +++ ListItem.java     17 Feb 2003 00:09:42 -0000      1.16.2.6
  @@ -113,11 +113,11 @@
           if (this.areasGenerated == 1)
               this.blockArea.isFirst(true);
               // for normal areas this should be the only pair
  -        this.blockArea.addLineagePair(this, this.areasGenerated);
  +//        this.blockArea.addLineagePair(this, this.areasGenerated);
   
           // markers
  -        if (this.hasMarkers())
  -            this.blockArea.addMarkers(this.getMarkers());
  +//         if (this.hasMarkers())
  +//             this.blockArea.addMarkers(this.getMarkers());
   
           blockArea.setParent(area);
           blockArea.setPage(area.getPage());
  
  
  
  1.6.2.6   +33 -4     xml-fop/src/org/apache/fop/fo/flow/Marker.java
  
  Index: Marker.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Marker.java,v
  retrieving revision 1.6.2.5
  retrieving revision 1.6.2.6
  diff -u -r1.6.2.5 -r1.6.2.6
  --- Marker.java       22 Nov 2002 15:10:46 -0000      1.6.2.5
  +++ Marker.java       17 Feb 2003 00:09:43 -0000      1.6.2.6
  @@ -18,6 +18,8 @@
   
       private String markerClassName;
       private Area registryArea;
  +    private boolean isFirst;
  +    private boolean isLast;
   
       public static class Maker extends FObj.Maker {
           public FObj make(FObj parent,
  @@ -42,7 +44,7 @@
   
           // check to ensure that no other marker with same parent
           // has this 'marker-class-name' is in addMarker() method
  -        parent.addMarker(this);
  +        parent.addMarker(this.markerClassName);
       }
   
       public String getName() {
  @@ -52,9 +54,7 @@
       public int layout(Area area) throws FOPException {
           // no layout action desired
           this.registryArea = area;
  -        area.addMarker(this);
           area.getPage().registerMarker(this);
  -        // System.out.println("Marker being registered in area '" + area + "'");
           return Status.OK;
       }
   
  @@ -87,4 +87,33 @@
       public boolean mayPrecedeMarker() {
           return true;
       }  
  +
  +    // The page the marker was registered is put into the renderer
  +    // queue. The marker is transferred to it's own marker list,
  +    // release the area for GC. We also know now whether the area is
  +    // first/last.
  +    public void releaseRegistryArea() {
  +        isFirst = registryArea.isFirst();
  +        isLast = registryArea.isLast();
  +        registryArea = null;
  +    }
  +    
  +    // This has actually nothing to do with resseting this marker,
  +    // but the 'marker' from FONode, marking layout status.
  +    // Called in case layout is to be rolled back. Unregister this
  +    // marker from the page, it isn't laid aout anyway.
  +    public void resetMarker() {
  +        if (registryArea != null ) {
  +            Page page=registryArea.getPage();
  +            if (page != null) {
  +                page.unregisterMarker(this);
  +            }
  +        }
  +    }
  +
  +    // More hackery: reset layout status marker. Called before the
  +    // content is laid out from RetrieveMarker.
  +    public void resetMarkerContent() {
  +        super.resetMarker();
  +    }
   }
  
  
  
  1.6.2.7   +58 -67    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.6.2.6
  retrieving revision 1.6.2.7
  diff -u -r1.6.2.6 -r1.6.2.7
  --- RetrieveMarker.java       22 Nov 2002 15:10:46 -0000      1.6.2.6
  +++ RetrieveMarker.java       17 Feb 2003 00:09:43 -0000      1.6.2.7
  @@ -8,10 +8,15 @@
   package org.apache.fop.fo.flow;
   
   // FOP
  -import org.apache.fop.fo.*;
  -import org.apache.fop.fo.properties.*;
  -import org.apache.fop.layout.*;
  -import org.apache.fop.datatypes.*;
  +import org.apache.fop.fo.FObj;
  +import org.apache.fop.fo.PropertyList;
  +import org.apache.fop.fo.Status;
  +import org.apache.fop.fo.pagination.PageSequence;
  +import org.apache.fop.fo.properties.RetrieveBoundary;
  +import org.apache.fop.fo.properties.RetrievePosition;
  +import org.apache.fop.layout.Area;
  +import org.apache.fop.layout.AreaTree;
  +import org.apache.fop.layout.Page;
   import org.apache.fop.apps.FOPException;
   
   // Java
  @@ -22,6 +27,7 @@
       private String retrieveClassName;
       private int retrievePosition;
       private int retrieveBoundary;
  +    private Marker bestMarker;
   
       public static class Maker extends FObj.Maker {
           public FObj make(FObj parent,
  @@ -51,69 +57,63 @@
       }
   
       public int 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, true);
  -
  -        // if marker not yet found, and 'retrieve-boundary' permits,
  -        // search backward by Page
  -        if (bestMarker == null) {
  -            if (retrieveBoundary != RetrieveBoundary.PAGE) {
  -//                System.out.println("Null bestMarker and searching...");
  -                Page currentPage = containingPage;
  -                boolean isFirstCall = true;
  -                while (bestMarker == null) {
  -                    Page previousPage = locatePreviousPage(currentPage,
  -                                                           retrieveBoundary,
  -                                                           isFirstCall);
  -                    isFirstCall = false;
  -                    if (previousPage!=null) {
  -                        bestMarker = searchPage(previousPage, false);
  -                        currentPage = previousPage;
  -                    } else {
  -                        return Status.OK;
  -                    }
  +        if (marker == START) {
  +            marker = 0;
  +            // locate qualifying areas by 'marker-class-name' and
  +            // 'retrieve-boundary'. Initially we will always check
  +            // the containing page
  +            Page containingPage = area.getPage();
  +            bestMarker = searchPage(containingPage);
  +
  +            if (bestMarker != null) {
  +                bestMarker.resetMarkerContent();
  +                return bestMarker.layoutMarker(area);
  +            }
  +            // If marker not yet found, and 'retrieve-boundary' permits,
  +            // search backward.
  +            AreaTree areaTree = containingPage.getAreaTree();
  +            if (retrieveBoundary == RetrieveBoundary.PAGE_SEQUENCE) {
  +                PageSequence pageSequence = areaTree.getCurrentPageSequence();
  +                if (pageSequence == containingPage.getPageSequence() ) {
  +                    return 
layoutBestMarker(areaTree.getCurrentPageSequenceMarkers(),area);
                   }
  +            } else if (retrieveBoundary == RetrieveBoundary.DOCUMENT) {
  +                return layoutBestMarker(areaTree.getDocumentMarkers(),area);
               } else {
  -                return Status.OK;
  +                throw new FOPException("Illegal 'retrieve-boundary' value");
               }
  +        } else if (bestMarker != null) {
  +            return bestMarker.layoutMarker(area);
           }
  -
  -        int status = Status.OK;
  -        // System.out.println("Laying out marker '" + bestMarker + "' in area '" + 
area + "'");
  -        // the 'markers' referred to in this method are internal; they have
  -        // nothing to do with fo:marker
  -        bestMarker.resetMarker();
  -        status = bestMarker.layoutMarker(area);
  -        return status;
  +        return Status.OK;
       }
   
  -    private Marker searchPage(Page page,
  -                              boolean isContainingPage) throws FOPException {
  -        ArrayList pageMarkers = page.getMarkers();
  -        if (pageMarkers.isEmpty()) {
  -            // System.out.println("No markers on page");
  -            return null;
  -        }
  -
  -        // if no longer the containing page (fo:retrieve-marker, or the page
  -        // being processed), grab the last qualifying marker on this one
  -        if (!isContainingPage) {
  -            for (int c = pageMarkers.size(); c > 0; c--) {
  -                Marker currentMarker = (Marker)pageMarkers.get(c - 1);
  +    private int layoutBestMarker(ArrayList markers, Area area)
  +        throws FOPException {
  +        if (markers!=null) {
  +            for (int i = markers.size() - 1; i >= 0; i--) {
  +                Marker currentMarker = (Marker)markers.get(i);
                   if (currentMarker.getMarkerClassName().equals(retrieveClassName)) {
  -                    return currentMarker;
  +                    bestMarker = currentMarker;
  +                    bestMarker.resetMarkerContent();
  +                    return bestMarker.layoutMarker(area);
                   }
               }
           }
  +        return Status.OK;
  +    }
  +    
  +    private Marker searchPage(Page page) throws FOPException {
  +        ArrayList pageMarkers = page.getMarkers();
  +        if (pageMarkers.isEmpty()) {
  +            return null;
  +        }
   
           // search forward if 'first-starting-within-page' or
           // 'first-including-carryover'
           if (retrievePosition == RetrievePosition.FIC) {
  -            for (int c = 0; c < pageMarkers.size(); c++) {
  -                Marker currentMarker = (Marker)pageMarkers.get(c);
  +            for (int i = 0; i < pageMarkers.size(); i++) {
  +                Marker currentMarker = (Marker)pageMarkers.get(i);
                   if (currentMarker.getMarkerClassName().equals(retrieveClassName)) {
                       return currentMarker;
                   }
  @@ -128,8 +128,8 @@
                   }
               }
           } else if (retrievePosition == RetrievePosition.LSWP) {
  -            for (int i = pageMarkers.size(); i > 0; i--) {
  -                Marker currentMarker = (Marker)pageMarkers.get(i - 1);
  +            for (int i = pageMarkers.size() - 1; i >= 0; i--) {
  +                Marker currentMarker = (Marker)pageMarkers.get(i);
                   if (currentMarker.getMarkerClassName().equals(retrieveClassName)) {
                       if (currentMarker.getRegistryArea().isFirst()) {
                           return currentMarker;
  @@ -138,8 +138,8 @@
               }
   
           } else if (retrievePosition == RetrievePosition.LEWP) {
  -            for (int c = pageMarkers.size(); c > 0; c--) {
  -                Marker currentMarker = (Marker)pageMarkers.get(c - 1);
  +            for (int i = pageMarkers.size() - 1; i >= 0; i--) {
  +                Marker currentMarker = (Marker)pageMarkers.get(i);
                   if (currentMarker.getMarkerClassName().equals(retrieveClassName)) {
                       if (currentMarker.getRegistryArea().isLast()) {
                           return currentMarker;
  @@ -151,15 +151,6 @@
               throw new FOPException("Illegal 'retrieve-position' value");
           }
           return null;
  -    }
  -
  -    private Page locatePreviousPage(Page page, int retrieveBoundary,
  -                                    boolean isFirstCall) {
  -        boolean pageWithinSequence = true;
  -        if (retrieveBoundary == RetrieveBoundary.DOCUMENT)
  -            pageWithinSequence = false;
  -        return page.getAreaTree().getPreviousPage(page, pageWithinSequence,
  -        isFirstCall);
       }
   
   }
  
  
  
  1.39.2.9  +5 -6      xml-fop/src/org/apache/fop/fo/flow/Table.java
  
  Index: Table.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Table.java,v
  retrieving revision 1.39.2.8
  retrieving revision 1.39.2.9
  diff -u -r1.39.2.8 -r1.39.2.9
  --- Table.java        24 Nov 2002 21:27:46 -0000      1.39.2.8
  +++ Table.java        17 Feb 2003 00:09:43 -0000      1.39.2.9
  @@ -200,6 +200,10 @@
           
           for (int i = this.marker; i < numChildren; i++) {
               FONode fo = (FONode)children.get(i);
  +            if (fo instanceof Marker) {
  +                 ((Marker)fo).layout(area);
  +                 continue;
  +             }
               if (fo instanceof TableHeader) {
                   if (columns.size() == 0) {
                       log.warn("current implementation of tables requires a 
table-column for each column, indicating column-width");
  @@ -342,11 +346,6 @@
           }
   
           return Status.OK;
  -    }
  -
  -    public void resetMarker() {
  -        this.areasGenerated=0;
  -        super.resetMarker();
       }
   
       protected void setupColumnHeights() {
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.24.2.6  +23 -23    xml-fop/src/org/apache/fop/layout/Attic/Area.java
  
  Index: Area.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layout/Attic/Area.java,v
  retrieving revision 1.24.2.5
  retrieving revision 1.24.2.6
  diff -u -r1.24.2.5 -r1.24.2.6
  --- Area.java 1 Dec 2002 11:54:19 -0000       1.24.2.5
  +++ Area.java 17 Feb 2003 00:09:43 -0000      1.24.2.6
  @@ -9,7 +9,7 @@
   
   // FOP
   import org.apache.fop.datatypes.*;
  -import org.apache.fop.fo.flow.Marker;
  +//import org.apache.fop.fo.flow.Marker;
   import org.apache.fop.layout.inline.InlineSpace;
   
   // Java
  @@ -55,11 +55,11 @@
   
       private IDReferences idReferences;
   
  -    protected ArrayList markers;
  +//    protected ArrayList markers;
   
       // as defined in Section 6.1.1
       protected org.apache.fop.fo.FObj generatedBy;    // corresponds to 
'generated-by' trait
  -    protected HashMap returnedBy;
  +//    protected HashMap returnedBy;
   
       // as defined in Section 6.1.1
       protected String areaClass;
  @@ -78,8 +78,8 @@
   
       public Area(FontState fontState) {
           setFontState(fontState);
  -        this.markers = new ArrayList();
  -        this.returnedBy = new HashMap();
  +//        this.markers = new ArrayList();
  +//        this.returnedBy = new HashMap();
       }
   
       /**
  @@ -96,8 +96,8 @@
           this.allocationWidth = allocationWidth;
           this.contentRectangleWidth = allocationWidth;
           this.maxHeight = maxHeight;
  -        this.markers = new ArrayList();
  -        this.returnedBy = new HashMap();
  +//        this.markers = new ArrayList();
  +//        this.returnedBy = new HashMap();
       }
   
       private void setFontState(FontState fontState) {
  @@ -399,21 +399,21 @@
           return bp;
       }
   
  -    public void addMarker(Marker marker) {
  -        markers.add(marker);
  -    }
  -
  -    public void addMarkers(ArrayList markers) {
  -        markers.addAll(markers);
  -    }
  -
  -    public void addLineagePair(org.apache.fop.fo.FObj fo, int areaPosition) {
  -        returnedBy.put(fo, new Integer(areaPosition));
  -    }
  -
  -    public ArrayList getMarkers() {
  -        return markers;
  -    }
  +//     public void addMarker(Marker marker) {
  +//         markers.add(marker);
  +//     }
  +
  +//     public void addMarkers(ArrayList markers) {
  +//         markers.addAll(markers);
  +//     }
  +
  +//     public ArrayList getMarkers() {
  +//         return markers;
  +//     }
  +
  +//     public void addLineagePair(org.apache.fop.fo.FObj fo, int areaPosition) {
  +//         returnedBy.put(fo, new Integer(areaPosition));
  +//     }
   
       public void setGeneratedBy(org.apache.fop.fo.FObj generatedBy) {
           this.generatedBy = generatedBy;
  
  
  
  1.13.2.4  +15 -11    xml-fop/src/org/apache/fop/layout/Attic/AreaTree.java
  
  Index: AreaTree.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layout/Attic/AreaTree.java,v
  retrieving revision 1.13.2.3
  retrieving revision 1.13.2.4
  diff -u -r1.13.2.3 -r1.13.2.4
  --- AreaTree.java     19 Nov 2002 01:04:08 -0000      1.13.2.3
  +++ AreaTree.java     17 Feb 2003 00:09:43 -0000      1.13.2.4
  @@ -60,16 +60,6 @@
           return this.fontInfo;
       }
   
  -//      public Page getNextPage(Page current, boolean isWithinPageSequence,
  -//                              boolean isFirstCall) {
  -//          return streamRenderer.getNextPage(current, 
isWithinPageSequence,isFirstCall);
  -//      }
  -
  -    public Page getPreviousPage(Page current, boolean isWithinPageSequence,
  -                                boolean isFirstCall) {
  -        return 
streamRenderer.getPreviousPage(current,isWithinPageSequence,isFirstCall);
  -    }
  -
       public void addPage(Page page)
       throws FOPException {
           try {
  @@ -92,4 +82,18 @@
           rootExtensions.add(obj);
       }
   
  +    // Auxillary function for retrieving markers.
  +    public ArrayList getDocumentMarkers() {
  +        return streamRenderer.getDocumentMarkers();
  +    }
  +
  +    // Auxillary function for retrieving markers.
  +    public PageSequence getCurrentPageSequence() {
  +        return streamRenderer.getCurrentPageSequence();
  +    }
  +
  +    // Auxillary function for retrieving markers.
  +    public ArrayList getCurrentPageSequenceMarkers() {
  +        return streamRenderer.getCurrentPageSequenceMarkers();
  +    }
   }
  
  
  
  1.17.2.3  +5 -1      xml-fop/src/org/apache/fop/layout/Attic/Page.java
  
  Index: Page.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layout/Attic/Page.java,v
  retrieving revision 1.17.2.2
  retrieving revision 1.17.2.3
  diff -u -r1.17.2.2 -r1.17.2.3
  --- Page.java 19 Nov 2002 01:04:08 -0000      1.17.2.2
  +++ Page.java 17 Feb 2003 00:09:43 -0000      1.17.2.3
  @@ -216,6 +216,10 @@
           markers.add(marker);
       }
   
  +    public void unregisterMarker(Marker marker) {
  +        markers.remove(marker);
  +    }
  +
       public ArrayList getMarkers() {
           return this.markers;
       }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.27.2.10 +33 -33    xml-fop/src/org/apache/fop/render/xml/XMLRenderer.java
  
  Index: XMLRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/xml/XMLRenderer.java,v
  retrieving revision 1.27.2.9
  retrieving revision 1.27.2.10
  diff -u -r1.27.2.9 -r1.27.2.10
  --- XMLRenderer.java  13 Feb 2003 15:59:20 -0000      1.27.2.9
  +++ XMLRenderer.java  17 Feb 2003 00:09:43 -0000      1.27.2.10
  @@ -273,22 +273,22 @@
           writeStartTag(baText.toString());
   
           // write out marker info
  -        List markers = area.getMarkers();
  -        if (!markers.isEmpty()) {
  -            writeStartTag("<Markers>");
  -            for (int i = 0; i < markers.size(); i++) {
  -                org.apache.fop.fo.flow.Marker marker =
  -                    (org.apache.fop.fo.flow.Marker)markers.get(i);
  -                StringBuffer maText = new StringBuffer();
  -                maText.append("<Marker marker-class-name=\""
  -                              + marker.getMarkerClassName() + "\"");
  -                maText.append(" RegisteredArea=\"" + marker.getRegistryArea()
  -                              + "\"");
  -                maText.append("/>");
  -                writeEmptyElementTag(maText.toString());
  -            }
  -            writeEndTag("</Markers>");
  -        }
  +//         List markers = area.getMarkers();
  +//         if (!markers.isEmpty()) {
  +//             writeStartTag("<Markers>");
  +//             for (int i = 0; i < markers.size(); i++) {
  +//                 org.apache.fop.fo.flow.Marker marker =
  +//                     (org.apache.fop.fo.flow.Marker)markers.get(i);
  +//                 StringBuffer maText = new StringBuffer();
  +//                 maText.append("<Marker marker-class-name=\""
  +//                               + marker.getMarkerClassName() + "\"");
  +//                 maText.append(" RegisteredArea=\"" + marker.getRegistryArea()
  +//                               + "\"");
  +//                 maText.append("/>");
  +//                 writeEmptyElementTag(maText.toString());
  +//             }
  +//             writeEndTag("</Markers>");
  +//         }
   
           List children = area.getChildren();
           for (int i = 0; i < children.size(); i++) {
  @@ -311,22 +311,22 @@
           writeStartTag(iaText.toString());
   
           // write out marker info
  -        List markers = area.getMarkers();
  -        if (!markers.isEmpty()) {
  -            writeStartTag("<Markers>");
  -            for (int i = 0; i < markers.size(); i++) {
  -                org.apache.fop.fo.flow.Marker marker =
  -                    (org.apache.fop.fo.flow.Marker)markers.get(i);
  -                StringBuffer maText = new StringBuffer();
  -                maText.append("<Marker marker-class-name=\""
  -                              + marker.getMarkerClassName() + "\"");
  -                maText.append(" RegisteredArea=\"" + marker.getRegistryArea()
  -                              + "\"");
  -                maText.append("/>");
  -                writeEmptyElementTag(maText.toString());
  -            }
  -            writeEndTag("</Markers>");
  -        }
  +//         List markers = area.getMarkers();
  +//         if (!markers.isEmpty()) {
  +//             writeStartTag("<Markers>");
  +//             for (int i = 0; i < markers.size(); i++) {
  +//                 org.apache.fop.fo.flow.Marker marker =
  +//                     (org.apache.fop.fo.flow.Marker)markers.get(i);
  +//                 StringBuffer maText = new StringBuffer();
  +//                 maText.append("<Marker marker-class-name=\""
  +//                               + marker.getMarkerClassName() + "\"");
  +//                 maText.append(" RegisteredArea=\"" + marker.getRegistryArea()
  +//                               + "\"");
  +//                 maText.append("/>");
  +//                 writeEmptyElementTag(maText.toString());
  +//             }
  +//             writeEndTag("</Markers>");
  +//         }
   
           List children = area.getChildren();
           for (int i = 0; i < children.size(); i++) {
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.20.2.11 +4 -2      xml-fop/src/org/apache/fop/svg/PDFGraphics2D.java
  
  Index: PDFGraphics2D.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/svg/PDFGraphics2D.java,v
  retrieving revision 1.20.2.10
  retrieving revision 1.20.2.11
  diff -u -r1.20.2.10 -r1.20.2.11
  --- PDFGraphics2D.java        16 Feb 2003 12:41:57 -0000      1.20.2.10
  +++ PDFGraphics2D.java        17 Feb 2003 00:09:43 -0000      1.20.2.11
  @@ -1285,9 +1285,11 @@
           }
   
           // needed for compiling under jdk1.4
  +        @jdk14codestart@
           public java.awt.image.VolatileImage createCompatibleVolatileImage(int 
width, int height) {
               return null;
           }
  +        @jdk14codeend@
       }
   
       /**
  
  
  

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

Reply via email to