arved 01/07/22 18:58:56
Modified: src/org/apache/fop/fo/flow RetrieveMarker.java
Log:
AHS: continued work on fo:marker support
Revision Changes Path
1.3 +54 -19 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RetrieveMarker.java 2001/07/16 10:43:51 1.2
+++ RetrieveMarker.java 2001/07/23 01:58:56 1.3
@@ -1,4 +1,4 @@
-/*-- $Id: RetrieveMarker.java,v 1.2 2001/07/16 10:43:51 arved Exp $-- */
+/*-- $Id: RetrieveMarker.java,v 1.3 2001/07/23 01:58:56 arved Exp $-- */
/*
* Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
* For details on use and redistribution please refer to the
@@ -48,44 +48,72 @@
// 'retrieve-boundary'. Initially we will always check
// the containing page
Page containingPage = area.getPage();
- Marker bestMarker = searchPage(containingPage);
+ Marker bestMarker = searchPage(containingPage, true);
// if marker not yet found, and 'retrieve-boundary' permits,
// search forward by Page
- /* insert code for searching forward by Page, if allowed */
+ 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;
+ }
+ }
Status status = new Status(Status.AREA_FULL_NONE);
if (null != bestMarker) {
- // System.out.println("Laying out marker in area '" + 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;
}
- private Marker searchPage(Page page) throws FOPException {
+ private Marker searchPage(Page page, boolean isContainingPage)
+ throws FOPException {
Vector pageMarkers = page.getMarkers();
- if (pageMarkers.isEmpty())
+ 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.elementAt(c-1);
+ if
(currentMarker.getMarkerClassName().equals(retrieveClassName)) {
+ return currentMarker;
+ }
+ }
+ }
+
// 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))
+ 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)
+ if (currentMarker.getRegistryArea().isFirst) {
return currentMarker;
- else if (null == fallback)
- fallback = currentMarker;
+ }
}
}
@@ -93,10 +121,9 @@
for (int c = pageMarkers.size(); c > 0; c--) {
Marker currentMarker =
(Marker)pageMarkers.elementAt(c-1);
if
(currentMarker.getMarkerClassName().equals(retrieveClassName)) {
- if (currentMarker.getRegistryArea().isFirst)
+ if (currentMarker.getRegistryArea().isFirst) {
return currentMarker;
- else if (null == fallback)
- fallback = currentMarker;
+ }
}
}
@@ -104,16 +131,24 @@
for (int c = pageMarkers.size(); c > 0; c--) {
Marker currentMarker =
(Marker)pageMarkers.elementAt(c-1);
if
(currentMarker.getMarkerClassName().equals(retrieveClassName)) {
- if (currentMarker.getRegistryArea().isLast)
+ if (currentMarker.getRegistryArea().isLast) {
return currentMarker;
- else if (null == fallback)
- fallback = currentMarker;
+ }
}
}
} else {
throw new FOPException("Illegal 'retrieve-position' value");
}
- return fallback;
+ 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);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]