pietsch     2002/07/18 17:30:14

  Modified:    src/org/apache/fop/apps Tag: fop-0_20_2-maintain
                        StreamRenderer.java
               src/org/apache/fop/fo/flow Tag: fop-0_20_2-maintain
                        RetrieveMarker.java
  Log:
  Fixed marker retrival to a large degree. It works
  now for arbitrary retrival boundaries as long as
  the referenced page is still in the renderer queue
  (could be enforced by forward referencing page
  number citation)
  Markers which are immediate children of a flow
  still don't work.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.6.2.6   +46 -33    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.5
  retrieving revision 1.6.2.6
  diff -u -r1.6.2.5 -r1.6.2.6
  --- StreamRenderer.java       18 Jul 2002 22:47:41 -0000      1.6.2.5
  +++ StreamRenderer.java       19 Jul 2002 00:30:13 -0000      1.6.2.6
  @@ -318,42 +318,55 @@
           }
       }
   
  -       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
  -                        .elementAt(pageIndex + 1)).getPage();
  -            if (isWithinPageSequence
  -                    
&&!nextPage.getPageSequence().equals(current.getPageSequence())) {
  -                nextPage = null;
  -            }
  -        }
  -        return nextPage;
  -    }
  +  // 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
  +//                          .elementAt(pageIndex + 1)).getPage();
  +//              if (isWithinPageSequence
  +//                      
&&!nextPage.getPageSequence().equals(current.getPageSequence())) {
  +//                  nextPage = null;
  +//              }
  +//          }
  +//          return nextPage;
  +//      }
   
       public Page getPreviousPage(Page current, boolean isWithinPageSequence,
                                   boolean isFirstCall) {
  -        Page previousPage = null;
  -        int pageIndex = 0;
  -        if (isFirstCall)
  -            pageIndex = renderQueue.size();
  -        else
  -            pageIndex = renderQueue.indexOf(current);
  -        if ((pageIndex - 1) >= 0) {
  -            previousPage = ((RenderQueueEntry)renderQueue
  -                            .elementAt(pageIndex - 1)).getPage();
  -            PageSequence currentPS = current.getPageSequence();
  -            PageSequence previousPS = previousPage.getPageSequence();
  -            if (isWithinPageSequence &&!previousPS.equals(currentPS)) {
  -                previousPage = null;
  +        if (isFirstCall) {
  +            int pageIndex = renderQueue.size();
  +            if (pageIndex > 0) {
  +                Page previousPage = ((RenderQueueEntry)renderQueue
  +                                     .elementAt(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
  +                             .elementAt(pageIndex)).getPage();
  +                if (current.equals(page)) {
  +                    Page previousPage = ((RenderQueueEntry)renderQueue
  +                                         .elementAt(pageIndex - 1)).getPage();
  +                    PageSequence currentPS = current.getPageSequence();
  +                    PageSequence previousPS = previousPage.getPageSequence();
  +                    if (!isWithinPageSequence || previousPS.equals(currentPS)) {
  +                        return previousPage;
  +                    }
  +                    return null;
  +                }
               }
           }
  -        return previousPage;
  +        return null;
       }
   }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.6.2.2   +26 -23    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.1
  retrieving revision 1.6.2.2
  diff -u -r1.6.2.1 -r1.6.2.2
  --- RetrieveMarker.java       8 Jan 2002 07:49:33 -0000       1.6.2.1
  +++ RetrieveMarker.java       19 Jul 2002 00:30:13 -0000      1.6.2.2
  @@ -55,32 +55,35 @@
           Marker bestMarker = searchPage(containingPage, true);
   
           // if marker not yet found, and 'retrieve-boundary' permits,
  -        // search forward by Page
  -        if ((null == bestMarker)
  -                && (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;
  -                // System.out.println("Previous page = '" + previousPage + "'");
  -                bestMarker = searchPage(previousPage, false);
  -                currentPage = previousPage;
  +        // 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 new Status(Status.OK);
  +                    }
  +                }
  +            } else {
  +                return new Status(Status.OK);
               }
           }
   
           Status status = new Status(Status.OK);
  -        if (null != bestMarker) {
  -            // 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);
  -        }
  -
  +        // 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;
       }
   
  
  
  

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

Reply via email to