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]

Reply via email to