keiron 2003/02/27 15:30:51 Modified: src/org/apache/fop/area PageViewport.java src/org/apache/fop/layoutmgr AbstractLayoutManager.java LayoutManager.java BlockLayoutManager.java BlockContainerLayoutManager.java StaticContentLayoutManager.java PageLayoutManager.java ContentLayoutManager.java Log: improvement on markers, don't know if it is correct Revision Changes Path 1.15 +68 -43 xml-fop/src/org/apache/fop/area/PageViewport.java Index: PageViewport.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/PageViewport.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- PageViewport.java 20 Feb 2003 02:47:44 -0000 1.14 +++ PageViewport.java 27 Feb 2003 23:30:47 -0000 1.15 @@ -47,8 +47,9 @@ // start and end are added by the fo that contains the markers private Map markerFirstStart = null; private Map markerLastStart = null; - private Map markerFirstEnd = null; + private Map markerFirstAny = null; private Map markerLastEnd = null; + private Map markerLastAny = null; /** * Create a page viewport. @@ -185,8 +186,8 @@ * For "first-starting-within-page" it adds the markers * that are starting only if the marker class name is not * already added. - * For "first-including-carryover" it adds any marker if - * the marker class name is not already added. + * For "first-including-carryover" it adds any starting marker + * if the marker class name is not already added. * For "last-starting-within-page" it adds all marks that * are starting, replacing earlier markers. * For "last-ending-within-page" it adds all markers that @@ -196,44 +197,58 @@ * * @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) { + public void addMarkers(Map marks, boolean start, boolean isfirst) { if (start) { - if (markerFirstStart == null) { - markerFirstStart = new HashMap(); - } - if (markerLastStart == null) { - markerLastStart = new HashMap(); - } - if (markerFirstEnd == null) { - markerFirstEnd = new HashMap(); - } - // 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)); + if (isfirst) { + if (markerFirstStart == null) { + markerFirstStart = new HashMap(); } - if (!markerFirstEnd.containsKey(key)) { - markerFirstEnd.put(key, marks.get(key)); + if (markerFirstAny == null) { + markerFirstAny = new HashMap(); + } + // 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)); + } + if (!markerFirstAny.containsKey(key)) { + markerFirstAny.put(key, marks.get(key)); + } + } + if (markerLastStart == null) { + markerLastStart = new HashMap(); + } + // replace all + markerLastStart.putAll(marks); + + } else { + if (markerFirstAny == null) { + markerFirstAny = new HashMap(); + } + // 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)); + } } } - markerLastStart.putAll(marks); } else { - if (markerFirstEnd == null) { - markerFirstEnd = new HashMap(); - } - if (markerLastEnd == null) { - markerLastEnd = new HashMap(); - } - // only put in new values, leave current - for (Iterator iter = marks.keySet().iterator(); iter.hasNext();) { - Object key = iter.next(); - if (!markerFirstEnd.containsKey(key)) { - markerFirstEnd.put(key, marks.get(key)); + if (!isfirst) { + if (markerLastEnd == null) { + markerLastEnd = new HashMap(); } + // replace all + markerLastEnd.putAll(marks); + } + if (markerLastAny == null) { + markerLastAny = new HashMap(); } - markerLastEnd.putAll(marks); + // replace all + markerLastAny.putAll(marks); } } @@ -247,29 +262,39 @@ * @return Object the marker found or null */ public Object getMarker(String name, int pos) { + Object mark = null; switch (pos) { case RetrievePosition.FSWP: if (markerFirstStart != null) { - return markerFirstStart.get(name); + mark = markerFirstStart.get(name); + } + if (mark == null && markerFirstAny != null) { + mark = markerFirstAny.get(name); } break; case RetrievePosition.FIC: - if (markerFirstStart != null) { - return markerFirstEnd.get(name); + if (markerFirstAny != null) { + mark = markerFirstAny.get(name); } break; case RetrievePosition.LSWP: - if (markerFirstStart != null) { - return markerLastStart.get(name); + if (markerLastStart != null) { + mark = markerLastStart.get(name); + } + if (mark == null && markerLastAny != null) { + mark = markerLastAny.get(name); } break; case RetrievePosition.LEWP: - if (markerFirstStart != null) { - return markerLastEnd.get(name); + if (markerLastEnd != null) { + mark = markerLastEnd.get(name); + } + if (mark == null && markerLastAny != null) { + mark = markerLastAny.get(name); } break; } - return null; + return mark; } /** @@ -321,7 +346,7 @@ /** * Clear the page contents to save memory. * This object is kept for the life of the area tree since - * it holds id information and is used as a key. + * it holds id and marker information and is used as a key. */ public void clear() { page = null; 1.22 +7 -6 xml-fop/src/org/apache/fop/layoutmgr/AbstractLayoutManager.java Index: AbstractLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/AbstractLayoutManager.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- AbstractLayoutManager.java 19 Feb 2003 05:49:28 -0000 1.21 +++ AbstractLayoutManager.java 27 Feb 2003 23:30:48 -0000 1.22 @@ -174,7 +174,8 @@ curChildLM.resetPosition(null); curChildLM = (LayoutManager) childLMiter.previous(); } - childLMiter.next(); // Otherwise next returns same object + // Otherwise next returns same object + childLMiter.next(); } if(curChildLM != null) { curChildLM.resetPosition(pos); @@ -324,10 +325,10 @@ /** * Add the markers when adding an area. */ - protected void addMarkers(boolean start) { + protected void addMarkers(boolean start, boolean isfirst) { // add markers if (markers != null) { - addMarkerMap(markers, start); + addMarkerMap(markers, start, isfirst); } } @@ -336,8 +337,8 @@ * * @see org.apache.fop.layoutmgr.LayoutManager */ - public void addMarkerMap(Map marks, boolean start) { - parentLM.addMarkerMap(marks, start); + public void addMarkerMap(Map marks, boolean start, boolean isfirst) { + parentLM.addMarkerMap(marks, start, isfirst); } /** 1.16 +4 -4 xml-fop/src/org/apache/fop/layoutmgr/LayoutManager.java Index: LayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/LayoutManager.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- LayoutManager.java 19 Feb 2003 05:49:28 -0000 1.15 +++ LayoutManager.java 27 Feb 2003 23:30:48 -0000 1.16 @@ -9,6 +9,7 @@ import org.apache.fop.fo.FOUserAgent; import org.apache.fop.fo.FObj; + import org.apache.fop.fo.flow.Marker; import org.apache.fop.area.Area; @@ -193,10 +194,10 @@ * method is used to add those markers to the page. * * @param name the marker class name - * @param lm the layout manager of the marker child * @param start true if the formatting object is starting false is finishing + * @param isfirst a flag for is first */ - public void addMarkerMap(Map marks, boolean start); + public void addMarkerMap(Map marks, boolean start, boolean isfirst); /** * Retrieve a marker. @@ -208,5 +209,4 @@ * @return the layout manaager of the retrieved marker if any */ public Marker retrieveMarker(String name, int pos, int boundary); - } 1.30 +3 -3 xml-fop/src/org/apache/fop/layoutmgr/BlockLayoutManager.java Index: BlockLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/BlockLayoutManager.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- BlockLayoutManager.java 20 Feb 2003 02:47:45 -0000 1.29 +++ BlockLayoutManager.java 27 Feb 2003 23:30:49 -0000 1.30 @@ -220,7 +220,7 @@ addBlockSpacing(adjust, layoutProps.spaceBefore.space); addID(); - addMarkers(true); + addMarkers(true, true); LayoutManager childLM ; LayoutContext lc = new LayoutContext(0); @@ -242,7 +242,7 @@ } - addMarkers(false); + addMarkers(false, true); flush(); 1.11 +3 -7 xml-fop/src/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java Index: BlockContainerLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- BlockContainerLayoutManager.java 19 Feb 2003 05:49:28 -0000 1.10 +++ BlockContainerLayoutManager.java 27 Feb 2003 23:30:49 -0000 1.11 @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.awt.geom.Rectangle2D; @@ -203,7 +202,7 @@ getParentArea(null); addID(); - addMarkers(true); + addMarkers(true, true); LayoutManager childLM ; int iStartPos = 0; @@ -221,6 +220,7 @@ } flush(); + addMarkers(true, true); childBreaks.clear(); viewportBlockArea = null; @@ -296,10 +296,6 @@ if (resetPos == null) { reset(null); } - } - - public void addMarkerMap(Map marks, boolean start) { - parentLM.addMarkerMap(marks, start); } } 1.11 +3 -2 xml-fop/src/org/apache/fop/layoutmgr/StaticContentLayoutManager.java Index: StaticContentLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/StaticContentLayoutManager.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- StaticContentLayoutManager.java 19 Feb 2003 05:49:28 -0000 1.10 +++ StaticContentLayoutManager.java 27 Feb 2003 23:30:50 -0000 1.11 @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * LayoutManager for an fo:flow object. @@ -102,7 +103,7 @@ * * @see org.apache.fop.layoutmgr.LayoutManager */ - public void addMarker(String name, LayoutManager lm, boolean start) { + public void addMarker(Map marks, boolean start, boolean isfirst) { // error markers not allowed in static getLogger().error("Cannot add marker to static areas"); } 1.31 +3 -3 xml-fop/src/org/apache/fop/layoutmgr/PageLayoutManager.java Index: PageLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/PageLayoutManager.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- PageLayoutManager.java 20 Feb 2003 02:47:45 -0000 1.30 +++ PageLayoutManager.java 27 Feb 2003 23:30:50 -0000 1.31 @@ -268,10 +268,10 @@ * @param lm the layout manager for the marker contents * @param start true if starting marker area, false for ending */ - public void addMarkerMap(Map marks, boolean start) { + public void addMarkerMap(Map marks, boolean start, boolean isfirst) { //getLogger().debug("adding markers: " + marks + ":" + start); // add markers to page on area tree - curPage.addMarkers(marks, start); + curPage.addMarkers(marks, start, isfirst); } /** 1.15 +3 -3 xml-fop/src/org/apache/fop/layoutmgr/ContentLayoutManager.java Index: ContentLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/ContentLayoutManager.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- ContentLayoutManager.java 19 Feb 2003 05:49:28 -0000 1.14 +++ ContentLayoutManager.java 27 Feb 2003 23:30:51 -0000 1.15 @@ -214,8 +214,8 @@ } /** @see org.apache.fop.layoutmgr.LayoutManager */ - public void addMarkerMap(Map marks, boolean start) { - parentLM.addMarkerMap(marks, start); + public void addMarkerMap(Map marks, boolean start, boolean isfirst) { + parentLM.addMarkerMap(marks, start, isfirst); } /** @see org.apache.fop.layoutmgr.LayoutManager */
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]