[prev in list] [next in list] [prev in thread] [next in thread]
List: fop-cvs
Subject: cvs commit: xml-fop/src/java/org/apache/fop/layoutmgr AbstractLayoutManager.java BlockContainerLayou
From: spepping () apache ! org
Date: 2005-02-20 19:50:47
Message-ID: 20050220195047.64890.qmail () minotaur ! apache ! org
[Download RAW message or body]
spepping 2005/02/20 11:50:47
Modified: src/java/org/apache/fop/area PageViewport.java
src/java/org/apache/fop/layoutmgr AbstractLayoutManager.java
BlockContainerLayoutManager.java
BlockLayoutManager.java ContentLayoutManager.java
LayoutManager.java PageSequenceLayoutManager.java
Log:
Corrected the logic of adding markers. LayoutManagers are responsible
for correctly setting is-first and is-last on the BreakPoss and from
there in the arguments of the addMarkers method. Implemented this for
BlockLM. Also made a small change in the retrieval of markers from
preceding pages.
Revision Changes Path
1.12 +47 -20 xml-fop/src/java/org/apache/fop/area/PageViewport.java
Index: PageViewport.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/PageViewport.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- PageViewport.java 6 Feb 2005 20:48:47 -0000 1.11
+++ PageViewport.java 20 Feb 2005 19:50:47 -0000 1.12
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
*/
/* $Id$ */
-
+
package org.apache.fop.area;
import java.awt.geom.Rectangle2D;
@@ -27,6 +27,9 @@
import java.util.HashMap;
import java.util.Iterator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.fo.Constants;
/**
@@ -38,7 +41,7 @@
* The page (reference area) is then rendered inside the page object
*/
public class PageViewport implements Resolvable, Cloneable {
-
+
private Page page;
private Rectangle2D viewArea;
private boolean clip = false;
@@ -51,7 +54,7 @@
// once an idref is resolved it is removed
// when this is empty the page can be rendered
private HashMap unresolvedIDRefs = new HashMap();
-
+
private Map pendingResolved = null;
// hashmap of markers for this page
@@ -63,6 +66,11 @@
private Map markerLastAny = null;
/**
+ * logging instance
+ */
+ protected static Log log = LogFactory.getLog(PageViewport.class);
+
+ /**
* Create a page viewport.
* @param p the page reference area that holds the contents
* @param bounds the bounds of this viewport
@@ -206,11 +214,14 @@
* Should this logic be placed in the Page layout manager.
*
* @param marks the map of markers to add
- * @param start if the area being added is starting or ending
- * @param isfirst isfirst or islast flag
- */
- public void addMarkers(Map marks, boolean start, boolean isfirst) {
- if (start) {
+ * @param starting if the area being added is starting or ending
+ * @param isfirst if the area being added has is-first trait
+ * @param islast if the area being added has is-last trait
+ */
+ public void addMarkers(Map marks, boolean starting,
+ boolean isfirst, boolean islast) {
+ // at the start of the area, register is-first and any areas
+ if (starting) {
if (isfirst) {
if (markerFirstStart == null) {
markerFirstStart = new HashMap();
@@ -218,47 +229,54 @@
if (markerFirstAny == null) {
markerFirstAny = new HashMap();
}
- // only put in new values, leave current
+ // first on page: only put in new values, leave current
for (Iterator iter = marks.keySet().iterator(); iter.hasNext();) {
Object key = iter.next();
if (!markerFirstStart.containsKey(key)) {
markerFirstStart.put(key, marks.get(key));
+ log.trace("page " + pageNumberString + ": " + "Adding \
marker " + key + " to FirstStart"); }
if (!markerFirstAny.containsKey(key)) {
markerFirstAny.put(key, marks.get(key));
+ log.trace("page " + pageNumberString + ": " + "Adding \
marker " + key + " to FirstAny"); }
}
if (markerLastStart == null) {
markerLastStart = new HashMap();
}
- // replace all
+ // last on page: replace all
markerLastStart.putAll(marks);
-
+ log.trace("page " + pageNumberString + ": " + "Adding all markers \
to LastStart"); } else {
if (markerFirstAny == null) {
markerFirstAny = new HashMap();
}
- // only put in new values, leave current
+ // first on page: only put in new values, leave current
for (Iterator iter = marks.keySet().iterator(); iter.hasNext();) {
Object key = iter.next();
if (!markerFirstAny.containsKey(key)) {
markerFirstAny.put(key, marks.get(key));
+ log.trace("page " + pageNumberString + ": " + "Adding \
marker " + key + " to FirstAny"); }
}
}
- } else {
- if (!isfirst) {
+ }
+ // at the end of the area, register is-last and any areas
+ else {
+ if (islast) {
if (markerLastEnd == null) {
markerLastEnd = new HashMap();
}
- // replace all
+ // last on page: replace all
markerLastEnd.putAll(marks);
+ log.trace("page " + pageNumberString + ": " + "Adding all markers \
to LastEnd"); }
if (markerLastAny == null) {
markerLastAny = new HashMap();
}
- // replace all
+ // last on page: replace all
markerLastAny.putAll(marks);
+ log.trace("page " + pageNumberString + ": " + "Adding all markers to \
LastAny"); }
}
@@ -273,38 +291,47 @@
*/
public Object getMarker(String name, int pos) {
Object mark = null;
+ String posName = null;
switch (pos) {
case Constants.EN_FSWP:
if (markerFirstStart != null) {
mark = markerFirstStart.get(name);
+ posName = "FSWP";
}
if (mark == null && markerFirstAny != null) {
mark = markerFirstAny.get(name);
+ posName = "FirstAny after " + posName;
}
break;
case Constants.EN_FIC:
if (markerFirstAny != null) {
mark = markerFirstAny.get(name);
+ posName = "FIC";
}
break;
case Constants.EN_LSWP:
if (markerLastStart != null) {
mark = markerLastStart.get(name);
+ posName = "LSWP";
}
if (mark == null && markerLastAny != null) {
mark = markerLastAny.get(name);
+ posName = "LastAny after " + posName;
}
break;
case Constants.EN_LEWP:
if (markerLastEnd != null) {
mark = markerLastEnd.get(name);
+ posName = "LEWP";
}
if (mark == null && markerLastAny != null) {
mark = markerLastAny.get(name);
+ posName = "LastAny after " + posName;
}
break;
}
- return mark;
+ log.trace("page " + pageNumberString + ": " + "Retrieving marker " + name \
+ "at position " + posName); + return mark;
}
/**
@@ -361,7 +388,7 @@
public void clear() {
page = null;
}
-
+
/**
* @see java.lang.Object#toString()
*/
@@ -371,4 +398,4 @@
sb.append(getPageNumberString());
return sb.toString();
}
-}
+}
\ No newline at end of file
1.40 +4 -4 \
xml-fop/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
Index: AbstractLayoutManager.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- AbstractLayoutManager.java 17 Feb 2005 00:27:54 -0000 1.39
+++ AbstractLayoutManager.java 20 Feb 2005 19:50:47 -0000 1.40
@@ -358,10 +358,10 @@
/**
* Add the markers when adding an area.
*/
- protected void addMarkers(boolean start, boolean isfirst) {
+ protected void addMarkers(boolean starting, boolean isfirst, boolean islast) {
// add markers
if (markers != null) {
- addMarkerMap(markers, start, isfirst);
+ addMarkerMap(markers, starting, isfirst, islast);
}
}
@@ -370,8 +370,8 @@
*
* @see org.apache.fop.layoutmgr.LayoutManager
*/
- public void addMarkerMap(Map marks, boolean start, boolean isfirst) {
- parentLM.addMarkerMap(marks, start, isfirst);
+ public void addMarkerMap(Map marks, boolean starting, boolean isfirst, boolean \
islast) { + parentLM.addMarkerMap(marks, starting, isfirst, islast);
}
/**
1.35 +3 -2 \
xml-fop/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
Index: BlockContainerLayoutManager.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- BlockContainerLayoutManager.java 26 Jan 2005 15:00:04 -0000 1.34
+++ BlockContainerLayoutManager.java 20 Feb 2005 19:50:47 -0000 1.35
@@ -449,8 +449,9 @@
foBlockSpaceBefore = null;
}*/
+ BreakPoss bp1 = (BreakPoss)parentIter.peekNext();
addID(fobj.getId());
- addMarkers(true, true);
+ addMarkers(true, bp1.isFirstArea(), bp1.isLastArea());
LayoutManager childLM;
int iStartPos = 0;
@@ -468,7 +469,7 @@
}
flush();
- addMarkers(true, true);
+ addMarkers(true, bp1.isFirstArea(), bp1.isLastArea());
/*
if (!isAbsoluteOrFixed()) {
1.42 +13 -2 \
xml-fop/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
Index: BlockLayoutManager.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- BlockLayoutManager.java 7 Feb 2005 11:01:36 -0000 1.41
+++ BlockLayoutManager.java 20 Feb 2005 19:50:47 -0000 1.42
@@ -70,6 +70,8 @@
/** The list of child BreakPoss instances. */
protected List childBreaks = new java.util.ArrayList();
+ private boolean isfirst = true;
+
/**
* Creates a new BlockLayoutManager.
* @param inBlock the block FO object to create the layout manager for.
@@ -269,12 +271,21 @@
breakPoss.setFlag(BreakPoss.NEXT_OVERFLOWS, true);
}
breakPoss.setStackingSize(stackSize);
+ if (isfirst && breakPoss.getStackingSize().opt > 0) {
+ breakPoss.setFlag(BreakPoss.ISFIRST, true);
+ isfirst = false;
+ }
+ if (isFinished()) {
+ breakPoss.setFlag(BreakPoss.ISLAST, true);
+ }
return breakPoss;
}
}
setFinished(true);
BreakPoss breakPoss = new BreakPoss(new LeafPosition(this, \
FINISHED_LEAF_POS)); breakPoss.setStackingSize(stackSize);
+ breakPoss.setFlag(BreakPoss.ISFIRST, isfirst);
+ breakPoss.setFlag(BreakPoss.ISLAST, true);
return breakPoss;
}
@@ -295,7 +306,7 @@
if (!isBogus()) {
addID(fobj.getId());
- addMarkers(true, true);
+ addMarkers(true, bp1.isFirstArea(), bp1.isLastArea());
}
try {
@@ -317,7 +328,7 @@
}
} finally {
if (!isBogus()) {
- addMarkers(false, true);
+ addMarkers(false, bp1.isFirstArea(), bp1.isLastArea());
}
flush();
1.21 +2 -2 \
xml-fop/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java
Index: ContentLayoutManager.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/ContentLayoutManager.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- ContentLayoutManager.java 17 Feb 2005 00:27:54 -0000 1.20
+++ ContentLayoutManager.java 20 Feb 2005 19:50:47 -0000 1.21
@@ -254,8 +254,8 @@
}
/** @see org.apache.fop.layoutmgr.LayoutManager */
- public void addMarkerMap(Map marks, boolean start, boolean isfirst) {
- parentLM.addMarkerMap(marks, start, isfirst);
+ public void addMarkerMap(Map marks, boolean starting, boolean isfirst, boolean \
islast) { + parentLM.addMarkerMap(marks, starting, isfirst, islast);
}
/** @see org.apache.fop.layoutmgr.LayoutManager */
1.20 +4 -3 xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManager.java
Index: LayoutManager.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/LayoutManager.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- LayoutManager.java 17 Feb 2005 00:27:54 -0000 1.19
+++ LayoutManager.java 20 Feb 2005 19:50:47 -0000 1.20
@@ -207,10 +207,11 @@
* method is used to add those markers to the page.
*
* @param name the marker class name
- * @param start true if the formatting object is starting false is finishing
- * @param isfirst a flag for is first
+ * @param starting if the area being added is starting or ending
+ * @param isfirst if the area being added has is-first trait
+ * @param islast if the area being added has is-last trait
*/
- void addMarkerMap(Map marks, boolean start, boolean isfirst);
+ void addMarkerMap(Map marks, boolean starting, boolean isfirst, boolean \
islast);
/**
* Retrieve a marker.
1.37 +10 -7 \
xml-fop/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
Index: PageSequenceLayoutManager.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- PageSequenceLayoutManager.java 19 Feb 2005 03:56:58 -0000 1.36
+++ PageSequenceLayoutManager.java 20 Feb 2005 19:50:47 -0000 1.37
@@ -335,14 +335,12 @@
/**
* Add the marker to the page layout manager.
*
- * @param name the marker class name
- * @param lm the layout manager for the marker contents
- * @param start true if starting marker area, false for ending
+ * @see org.apache.fop.layoutmgr.LayoutManager
*/
- public void addMarkerMap(Map marks, boolean start, boolean isfirst) {
+ public void addMarkerMap(Map marks, boolean starting, boolean isfirst, boolean \
islast) { //getLogger().debug("adding markers: " + marks + ":" + start);
// add markers to page on area tree
- curPage.addMarkers(marks, start, isfirst);
+ curPage.addMarkers(marks, starting, isfirst, islast);
}
/**
@@ -351,6 +349,11 @@
* current page. For page-sequence and document it will
* lookup preceding pages from the area tree and try to find
* a marker.
+ * If we retrieve a marker from a preceding page,
+ * then the containing page does not have a qualifying area,
+ * and all qualifying areas have ended.
+ * Therefore we use last-ending-within-page (Constants.EN_LEWP)
+ * as the position.
*
* @param name the marker class name to lookup
* @param pos the position to locate the marker
@@ -372,7 +375,7 @@
}
while (page >= 0) {
PageViewport pv = areaTreeModel.getPage(seq, page);
- mark = (Marker)pv.getMarker(name, pos);
+ mark = (Marker)pv.getMarker(name, Constants.EN_LEWP);
if (mark != null) {
return mark;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic