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]