]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
add and retrive markers
authorKeiron Liddle <keiron@apache.org>
Wed, 19 Feb 2003 05:49:29 +0000 (05:49 +0000)
committerKeiron Liddle <keiron@apache.org>
Wed, 19 Feb 2003 05:49:29 +0000 (05:49 +0000)
use trait setter for area traits
some style cleanups

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195971 13f79535-47bb-0310-9956-ffa450edef68

27 files changed:
src/org/apache/fop/layoutmgr/AbstractLayoutManager.java
src/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
src/org/apache/fop/layoutmgr/BlockLayoutManager.java
src/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java
src/org/apache/fop/layoutmgr/BreakPossPosIter.java
src/org/apache/fop/layoutmgr/ContentLayoutManager.java
src/org/apache/fop/layoutmgr/FlowLayoutManager.java
src/org/apache/fop/layoutmgr/InlineStackingLayoutManager.java
src/org/apache/fop/layoutmgr/LayoutManager.java
src/org/apache/fop/layoutmgr/LeafNodeLayoutManager.java
src/org/apache/fop/layoutmgr/LineLayoutManager.java
src/org/apache/fop/layoutmgr/MinOptMax.java
src/org/apache/fop/layoutmgr/PageLayoutManager.java
src/org/apache/fop/layoutmgr/RetrieveMarkerLayoutManager.java [new file with mode: 0644]
src/org/apache/fop/layoutmgr/StaticContentLayoutManager.java
src/org/apache/fop/layoutmgr/TextLayoutManager.java
src/org/apache/fop/layoutmgr/TraitSetter.java
src/org/apache/fop/layoutmgr/list/Item.java
src/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java
src/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
src/org/apache/fop/layoutmgr/table/Body.java
src/org/apache/fop/layoutmgr/table/Caption.java
src/org/apache/fop/layoutmgr/table/Cell.java
src/org/apache/fop/layoutmgr/table/Column.java
src/org/apache/fop/layoutmgr/table/Row.java
src/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java
src/org/apache/fop/layoutmgr/table/TableLayoutManager.java

index 24165c597a3171e0853c1b09c32e0e2e79efe0a8..33b7feaca02bb9199f1e9155a0035fcca9c883a8 100644 (file)
@@ -9,18 +9,16 @@ package org.apache.fop.layoutmgr;
 
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FOUserAgent;
+import org.apache.fop.fo.flow.Marker;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Resolveable;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.fo.PropertyManager;
-import org.apache.fop.area.Trait;
-import org.apache.fop.layout.BorderAndPadding;
-import org.apache.fop.layout.BackgroundProps;
-import org.apache.fop.traits.BorderProps;
 
 import org.apache.avalon.framework.logger.Logger;
 
 import java.util.ListIterator;
+import java.util.Map;
 
 /**
  * The base class for all LayoutManagers.
@@ -30,6 +28,7 @@ public abstract class AbstractLayoutManager implements LayoutManager {
     protected LayoutManager parentLM = null;
     protected FObj fobj;
     protected String foID = null;
+    protected Map markers = null;
 
     /** True if this LayoutManager has handled all of its content. */
     private boolean bFinished = false;
@@ -37,7 +36,6 @@ public abstract class AbstractLayoutManager implements LayoutManager {
     protected ListIterator childLMiter;
     protected boolean bInited = false;
 
-
     /**
      * Abstract layout manager.
      */
@@ -52,6 +50,7 @@ public abstract class AbstractLayoutManager implements LayoutManager {
     public void setFObj(FObj fo) {
         this.fobj = fo;
         foID = fobj.getID();
+        markers = fobj.getMarkers();
         childLMiter = new LMiter(fobj.getChildren());
     }
 
@@ -64,6 +63,11 @@ public abstract class AbstractLayoutManager implements LayoutManager {
         userAgent = ua;
     }
 
+    /**
+     * Get the user agent.
+     *
+     * @see org.apache.fop.layoutmgr.LayoutManager#getUserAgent()
+     */
     public FOUserAgent getUserAgent() {
         return userAgent;
     }
@@ -317,13 +321,23 @@ public abstract class AbstractLayoutManager implements LayoutManager {
         parentLM.addUnresolvedArea(id, res);
     }
 
+    /**
+     * Add the markers when adding an area.
+     */
+    protected void addMarkers(boolean start) {
+        // add markers
+        if (markers != null) {
+            addMarkerMap(markers, start);
+        }
+    }
+
     /**
      * Delegate adding marker to the parent layout manager.
      *
      * @see org.apache.fop.layoutmgr.LayoutManager
      */
-    public void addMarker(String name, LayoutManager lm, boolean start) {
-        parentLM.addMarker(name, lm, start);
+    public void addMarkerMap(Map marks, boolean start) {
+        parentLM.addMarkerMap(marks, start);
     }
 
     /**
@@ -331,65 +345,9 @@ public abstract class AbstractLayoutManager implements LayoutManager {
      *
      * @see org.apache.fop.layoutmgr.LayoutManager
      */
-    public LayoutManager retrieveMarker(String name, int pos, int boundary) {
+    public Marker retrieveMarker(String name, int pos, int boundary) {
         return parentLM.retrieveMarker(name, pos, boundary);
     }
 
-    /**
-     * Add borders to an area.
-     * Layout managers that create areas with borders can use this to
-     * add the borders to the area.
-     */
-    public static void addBorders(Area curBlock, BorderAndPadding bordProps) {
-        BorderProps bps = getBorderProps(bordProps, BorderAndPadding.TOP);
-        if(bps.width != 0) {
-            curBlock.addTrait(Trait.BORDER_BEFORE, bps);
-        }
-        bps = getBorderProps(bordProps, BorderAndPadding.BOTTOM);
-        if(bps.width != 0) {
-            curBlock.addTrait(Trait.BORDER_AFTER, bps);
-        }
-        bps = getBorderProps(bordProps, BorderAndPadding.LEFT);
-        if(bps.width != 0) {
-            curBlock.addTrait(Trait.BORDER_START, bps);
-        }
-        bps = getBorderProps(bordProps, BorderAndPadding.RIGHT);
-        if(bps.width != 0) {
-            curBlock.addTrait(Trait.BORDER_END, bps);
-        }
-    }
-
-    private static BorderProps getBorderProps(BorderAndPadding bordProps, int side) {
-        BorderProps bps;
-        bps = new BorderProps(bordProps.getBorderStyle(side),
-                              bordProps.getBorderWidth(side, false),
-                              bordProps.getBorderColor(side));
-        return bps;
-    }
-
-    /**
-     * Add background to an area.
-     * Layout managers that create areas with a background can use this to
-     * add the background to the area.
-     */
-    public static void addBackground(Area curBlock, BackgroundProps backProps) {
-        Trait.Background back = new Trait.Background();
-        back.color = backProps.backColor;
-
-        if(backProps.backImage != null) {
-            back.url = backProps.backImage;
-            back.repeat = backProps.backRepeat;
-            if(backProps.backPosHorizontal != null) {
-                back.horiz = backProps.backPosHorizontal.mvalue();
-            }
-            if(backProps.backPosVertical != null) {
-                back.vertical = backProps.backPosVertical.mvalue();
-            }
-        }
-
-        if(back.color != null || back.url != null) {
-            curBlock.addTrait(Trait.BACKGROUND, back);
-        }
-    }
 }
 
index 47074efe482a5c2612ab3b44b6f8392b349603bc..af0837d2c26a84e72f10f7302f186cf219a8d780 100644 (file)
@@ -7,13 +7,9 @@
 
 package org.apache.fop.layoutmgr;
 
-import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.TextInfo;
 import org.apache.fop.area.Area;
-import org.apache.fop.area.BlockParent;
 import org.apache.fop.area.BlockViewport;
 import org.apache.fop.area.Block;
-import org.apache.fop.area.LineArea;
 import org.apache.fop.fo.PropertyManager;
 import org.apache.fop.layout.AbsolutePositionProps;
 import org.apache.fop.fo.properties.AbsolutePosition;
@@ -22,9 +18,9 @@ import org.apache.fop.fo.PropertyList;
 import org.apache.fop.area.CTM;
 import org.apache.fop.datatypes.FODimension;
 
-import java.util.ListIterator;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import java.awt.geom.Rectangle2D;
 
@@ -45,6 +41,9 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
     int overflow;
     PropertyManager propManager;
 
+    /**
+     * Create a new block container layout manager.
+     */
     public BlockContainerLayoutManager() {
     }
 
@@ -203,6 +202,9 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                          LayoutContext layoutContext) {
         getParentArea(null);
 
+        addID();
+        addMarkers(true);
+
         LayoutManager childLM ;
         int iStartPos = 0;
         LayoutContext lc = new LayoutContext(0);
@@ -225,6 +227,13 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
         curBlockArea = null;
     }
 
+    /**
+     * Get the parent area for children of this block container.
+     * This returns the current block container area
+     * and creates it if required.
+     *
+     * @see org.apache.fop.layoutmgr.LayoutManager#getParentArea(Area)
+     */
     public Area getParentArea(Area childArea) {
         if (curBlockArea == null) {
             viewportBlockArea = new BlockViewport();
@@ -272,7 +281,11 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
         return curBlockArea;
     }
 
-
+    /**
+     * Add the child to the block container.
+     *
+     * @see org.apache.fop.layoutmgr.LayoutManager#addChild(Area)
+     */
     public void addChild(Area childArea) {
         if (curBlockArea != null) {
             curBlockArea.addBlock((Block) childArea);
@@ -285,8 +298,8 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
         }
     }
 
-    public void addMarker(String name, LayoutManager lm, boolean start) {
-        parentLM.addMarker(name, lm, start);
+    public void addMarkerMap(Map marks, boolean start) {
+        parentLM.addMarkerMap(marks, start);
     }
 
 }
index 080321b21f8855fdcfc7199c428ef1d177f80d62..3d83e5d20465a83da1923b48d68145d9a9969784 100644 (file)
@@ -11,15 +11,11 @@ import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.TextInfo;
 import org.apache.fop.fo.PropertyManager;
 import org.apache.fop.area.Area;
-import org.apache.fop.area.BlockParent;
 import org.apache.fop.area.Block;
 import org.apache.fop.area.LineArea;
-import org.apache.fop.area.Trait;
 import org.apache.fop.traits.LayoutProps;
 import org.apache.fop.layout.BorderAndPadding;
 import org.apache.fop.layout.BackgroundProps;
-import org.apache.fop.traits.SpaceVal;
-import org.apache.fop.traits.BorderProps;
 
 import java.util.ListIterator;
 import java.util.ArrayList;
@@ -80,6 +76,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
             inlines.add(firstlm);
             while (proxy.hasNext()) {
                 lm = (LayoutManager) proxy.next();
+                lm.setParentLM(BlockLayoutManager.this);
                 if (lm.generatesInlineAreas()) {
                     inlines.add(lm);
                 } else {
@@ -222,6 +219,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
         addBlockSpacing(adjust, layoutProps.spaceBefore.space);
 
         addID();
+        addMarkers(true);
 
         LayoutManager childLM ;
         LayoutContext lc = new LayoutContext(0);
@@ -265,8 +263,8 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
             curBlockArea = new Block();
 
             // set traits
-            addBorders(curBlockArea, borderProps);
-            addBackground(curBlockArea, backgroundProps);
+            TraitSetter.addBorders(curBlockArea, borderProps);
+            TraitSetter.addBackground(curBlockArea, backgroundProps);
 
             // Set up dimensions
             // Must get dimensions from parent area
index fd0b50e04d91c1b06dcabdd1b653c9322cff02cb..36dcac7db06a9a59dfbcb1e137de63f08640eaf9 100644 (file)
@@ -7,13 +7,10 @@
 
 package org.apache.fop.layoutmgr;
 
-import org.apache.fop.fo.FObj;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.BlockParent;
 import org.apache.fop.area.Block;
 
-import java.util.Iterator;
-
 /**
  * Base LayoutManager class for all areas which stack their child
  * areas in the block-progression direction, such as Flow, Block, ListBlock.
index 9d9eaf5d530970e12e86d2144f3e81eeca74caf3..1e1465794cdd2b4570358e29ee1d57c356c0e774 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
+ * Copyright (C) 2001-2003 The Apache Software Foundation. All rights reserved.
  * For details on use and redistribution please refer to the
  * LICENSE file included with these sources.
  */
index e41c15ca6507c162b7cf26c47bfb6e0c3c16bfa0..639e359866e5c9635e88d16263d9c0df4b385654 100644 (file)
@@ -8,6 +8,7 @@ package org.apache.fop.layoutmgr;
 
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FOUserAgent;
+import org.apache.fop.fo.flow.Marker;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Resolveable;
 import org.apache.fop.area.PageViewport;
@@ -15,9 +16,9 @@ import org.apache.fop.area.PageViewport;
 import org.apache.avalon.framework.logger.Logger;
 
 import java.util.List;
+import java.util.Map;
 import java.util.ArrayList;
 
-
 /**
  * Content Layout Manager.
  * For use with objects that contain inline areas such as
@@ -213,12 +214,12 @@ public class ContentLayoutManager implements LayoutManager {
     }
 
     /** @see org.apache.fop.layoutmgr.LayoutManager */
-    public void addMarker(String name, LayoutManager lm, boolean start) {
-        parentLM.addMarker(name, lm, start);
+    public void addMarkerMap(Map marks, boolean start) {
+        parentLM.addMarkerMap(marks, start);
     }
 
     /** @see org.apache.fop.layoutmgr.LayoutManager */
-    public LayoutManager retrieveMarker(String name, int pos, int boundary) {
+    public Marker retrieveMarker(String name, int pos, int boundary) {
         return parentLM.retrieveMarker(name, pos, boundary);
     }
 }
index 7a6e24cf8e56bc66574bff92ed4607abe8c6b512..63947e49aca60e5d41e8cb8c19ea70526a70f172 100644 (file)
@@ -1,16 +1,15 @@
 /*
  * $Id$
- * Copyright (C) 2002 The Apache Software Foundation. All rights reserved.
+ * Copyright (C) 2002-2003 The Apache Software Foundation. All rights reserved.
  * For details on use and redistribution please refer to the
  * LICENSE file included with these sources.
  */
 
 package org.apache.fop.layoutmgr;
 
-import org.apache.fop.apps.FOPException;
-import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.properties.Constants;
-import org.apache.fop.area.*;
+import org.apache.fop.fo.flow.Marker;
+import org.apache.fop.area.Area;
+import org.apache.fop.area.BlockParent;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -28,6 +27,8 @@ public class FlowLayoutManager extends BlockStackingLayoutManager {
     /** Array of areas currently being filled stored by area class */
     private BlockParent[] currentAreas = new BlockParent[Area.CLASS_MAX];
 
+    int iStartPos = 0;
+
     /**
      * This is the top level layout manager.
      * It is created by the PageSequence FO.
@@ -90,8 +91,6 @@ public class FlowLayoutManager extends BlockStackingLayoutManager {
         return null;
     }
 
-    int iStartPos = 0;
-
     public void addAreas(PositionIterator parentIter, LayoutContext layoutContext) {
 
         LayoutManager childLM;
@@ -111,7 +110,6 @@ public class FlowLayoutManager extends BlockStackingLayoutManager {
         flush();
     }
 
-
     /**
      * Add child area to a the correct container, depending on its
      * area class. A Flow can fill at most one area container of any class
@@ -143,7 +141,7 @@ public class FlowLayoutManager extends BlockStackingLayoutManager {
      *
      * @see org.apache.fop.layoutmgr.LayoutManager
      */
-    public LayoutManager retrieveMarker(String name, int pos, int boundary) {
+    public Marker retrieveMarker(String name, int pos, int boundary) {
         // error cannot retrieve markers in flow
         getLogger().error("Cannot retrieve a marker from the flow");
         return null;
index 5377935d382cca60e9492739273b255ede2d5622..b1522bfa927866f0a0c7fce461564dbd861b909e 100644 (file)
@@ -509,10 +509,10 @@ public class InlineStackingLayoutManager extends AbstractLayoutManager {
                                            borderProps, bAreaCreated, !bIsLast);
 
         if(borderProps != null) {
-            addBorders(getCurrentArea(), borderProps);
+            TraitSetter.addBorders(getCurrentArea(), borderProps);
         }
         if(backgroundProps != null) {
-            addBackground(getCurrentArea(), backgroundProps);
+            TraitSetter.addBackground(getCurrentArea(), backgroundProps);
         }
 
         parentLM.addChild(getCurrentArea());
index 58a0adf73ff759c668ef701abed37016ee47a9b5..771c36048d900f76a830d4f4e25a24100ad8774d 100644 (file)
@@ -9,11 +9,14 @@ package org.apache.fop.layoutmgr;
 
 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;
 import org.apache.fop.area.Resolveable;
 import org.apache.fop.area.PageViewport;
 
+import java.util.Map;
+
 /**
  * The interface for all LayoutManagers.
  */
@@ -29,7 +32,8 @@ public interface LayoutManager {
     public void setFObj(FObj obj);
 
     /**
-     * Set the user agent.
+     * Set the user agent. For resolving user agent values
+     * and getting logger.
      *
      * @param ua the user agent
      */
@@ -50,6 +54,9 @@ public interface LayoutManager {
      */
     public void setParentLM(LayoutManager lm);
 
+    /**
+     * Initialise this layout manager.
+     */
     public void init();
 
     /**
@@ -64,27 +71,47 @@ public interface LayoutManager {
     /**
      * Return true if the next area which would be generated by this
      * LayoutManager could start a new line (or flow for block-level FO).
+     *
+     * @param lc the layout context
+     * @return true if can break before
      */
     public boolean canBreakBefore(LayoutContext lc);
 
     /**
      * Generate and return the next break possibility.
+     *
      * @param context The layout context contains information about pending
      * space specifiers from ancestor areas or previous areas, reference
      * area inline-progression-dimension and various other layout-related
      * information.
+     * @return the next break position
      */
     public BreakPoss getNextBreakPoss(LayoutContext context);
 
-
+    /**
+     * Reset to the position.
+     *
+     * @param position
+     */
     public void resetPosition(Position position);
 
+    /**
+     * Get the word chars between two positions and
+     * append to the string buffer. The positions could
+     * span multiple layout managers.
+     *
+     * @param sbChars the string buffer to append the word chars
+     * @param bp1 the start position
+     * @param bp2 the end position
+     */
     public void getWordChars(StringBuffer sbChars, Position bp1,
                              Position bp2);
 
     /**
      * Return a value indicating whether this LayoutManager has laid out
      * all its content (or generated BreakPossibilities for all content.)
+     *
+     * @return true if this layout manager is finished
      */
     public boolean isFinished();
 
@@ -92,16 +119,37 @@ public interface LayoutManager {
      * Set a flag indicating whether the LayoutManager has laid out all
      * its content. This is generally called by the LM itself, but can
      * be called by a parentLM when backtracking.
+     *
+     * @param isFinished the value to set the finished flag to
      */
     public void setFinished(boolean isFinished);
 
+    /**
+     * Get the parent area for an area.
+     * This should get the parent depending on the class of the
+     * area passed in.
+     *
+     * @param childArea the child area to get the parent for
+     * @return the parent Area 
+     */
     public Area getParentArea(Area childArea);
+
+    /**
+     * Add the area as a child of the current area.
+     * This is called by child layout managers to add their
+     * areas as children of the current area.
+     *
+     * @param childArea the child area to add
+     */
     public void addChild(Area childArea);
 
     /**
      * Tell the layout manager to add all the child areas implied
      * by Position objects which will be returned by the
      * Iterator.
+     *
+     * @param posIter the position iterator
+     * @param context the context
      */
     public void addAreas(PositionIterator posIter, LayoutContext context);
 
@@ -148,7 +196,7 @@ public interface LayoutManager {
      * @param lm the layout manager of the marker child
      * @param start true if the formatting object is starting false is finishing
      */
-    public void addMarker(String name, LayoutManager lm, boolean start);
+    public void addMarkerMap(Map marks, boolean start);
 
     /**
      * Retrieve a marker.
@@ -159,7 +207,6 @@ public interface LayoutManager {
      * @param boundary the boundary for retrieving the marker
      * @return the layout manaager of the retrieved marker if any
      */
-    public LayoutManager retrieveMarker(String name, int pos, int boundary);
+    public Marker retrieveMarker(String name, int pos, int boundary);
 
 }
-
index 2b7631e8e22d19a29d23be46e7b0cb16bf606660..83646046683248e14846e99ce45d888eea380eef 100644 (file)
@@ -7,7 +7,6 @@
 
 package org.apache.fop.layoutmgr;
 
-import org.apache.fop.fo.FObj;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.inline.InlineArea;
 import org.apache.fop.fo.properties.VerticalAlign;
index bbcf29436621b8f4a8bf693b365e4dd13b41a3cc..3b91ea8102160d9cc5c0949ea14372e61a4a5b03 100644 (file)
@@ -7,31 +7,21 @@
 
 package org.apache.fop.layoutmgr;
 
-
-import org.apache.fop.fo.FObj;
-import org.apache.fop.fo.TextInfo;
 import org.apache.fop.fo.PropertyManager;
 import org.apache.fop.layout.MarginProps;
 import org.apache.fop.layout.HyphenationProps;
 import org.apache.fop.layout.hyphenation.Hyphenation;
 import org.apache.fop.layout.hyphenation.Hyphenator;
 import org.apache.fop.traits.BlockProps;
-import org.apache.fop.area.Area;
 import org.apache.fop.area.LineArea;
-import org.apache.fop.area.inline.InlineArea;
 import org.apache.fop.area.Resolveable;
 import org.apache.fop.fo.properties.TextAlign;
 
-import org.apache.fop.area.inline.Word;
-import org.apache.fop.area.inline.Space;
-import org.apache.fop.area.inline.Character;
-
 import java.util.ListIterator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.ArrayList;
 
-
 /**
  * LayoutManager for lines. It builds one or more lines containing
  * inline areas generated by its sub layout managers.
index c9c02467fd35aa7a71a33a45ee8b4cdb9128830e..2bba4021d5be1da74122aff899f5e61dace9b4db 100644 (file)
@@ -20,14 +20,29 @@ public class MinOptMax implements java.io.Serializable, Cloneable {
     public int opt;
     public int max;
 
+    /**
+     * New min/opt/max with zero values.
+     */
     public MinOptMax() {
         this(0);
     }
 
+    /**
+     * New min/opt/max with one fixed value.
+     *
+     * @param val the value for min, opt and max
+     */
     public MinOptMax(int val) {
         this(val, val, val);
     }
 
+    /**
+     * New min/opt/max with the three values.
+     *
+     * @param min the minimum value
+     * @param opt the optimum value
+     * @param max the maximum value
+     */
     public MinOptMax(int min, int opt, int max) {
         this.min = min;
         this.opt = opt;
index b0c407d6b2c431295e812e6ab00d3975166e0fc1..56cfd51abdf5d1b5a2039ea41c2746ef75e4daea 100644 (file)
@@ -20,6 +20,7 @@ import org.apache.fop.area.Span;
 import org.apache.fop.area.BeforeFloat;
 import org.apache.fop.area.Footnote;
 import org.apache.fop.area.Resolveable;
+import org.apache.fop.fo.flow.Marker;
 import org.apache.fop.fo.flow.StaticContent;
 import org.apache.fop.fo.pagination.PageSequence;
 import org.apache.fop.fo.pagination.Region;
@@ -29,6 +30,7 @@ import org.apache.fop.fo.properties.Constants;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * LayoutManager for a PageSequence and its flow.
@@ -264,12 +266,10 @@ public class PageLayoutManager extends AbstractLayoutManager implements Runnable
      * @param lm the layout manager for the marker contents
      * @param start true if starting marker area, false for ending
      */
-    public void addMarker(String name, LayoutManager lm, boolean start) {
-        if (start) {
-            // add marker to page on area tree
-        } else {
-            // add end marker to page on area tree
-        }
+    public void addMarkerMap(Map marks, boolean start) {
+        getLogger().debug("adding markers: " + marks + ":" + start);
+        // add markers to page on area tree
+        curPage.addMarkers(marks, start);
     }
 
     /**
@@ -280,9 +280,10 @@ public class PageLayoutManager extends AbstractLayoutManager implements Runnable
      * @param boundary the boundary for locating the marker
      * @return the layout manager for the marker contents
      */
-    public LayoutManager retrieveMarker(String name, int pos, int boundary) {
+    public Marker retrieveMarker(String name, int pos, int boundary) {
         // get marker from the current markers on area tree
-        return null;
+        Marker mark = (Marker)curPage.getMarker(name, pos);
+        return mark;
     }
 
     /**
@@ -343,7 +344,6 @@ public class PageLayoutManager extends AbstractLayoutManager implements Runnable
     protected void placeBeforeFloat(Area area) {
     }
 
-
     protected void placeSideFloat(Area area) {
     }
 
diff --git a/src/org/apache/fop/layoutmgr/RetrieveMarkerLayoutManager.java b/src/org/apache/fop/layoutmgr/RetrieveMarkerLayoutManager.java
new file mode 100644 (file)
index 0000000..73bc4b0
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * $Id$
+ * Copyright (C) 2003 The Apache Software Foundation. All rights reserved.
+ * For details on use and redistribution please refer to the
+ * LICENSE file included with these sources.
+ */
+
+package org.apache.fop.layoutmgr;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.fop.area.Area;
+import org.apache.fop.fo.flow.Marker;
+
+/**
+ * LayoutManager for a block FO.
+ */
+public class RetrieveMarkerLayoutManager extends AbstractLayoutManager {
+    private LayoutManager replaceLM = null;
+    private boolean loaded = false;
+    private String name;
+
+    /**
+     * Create a new block container layout manager.
+     */
+    public RetrieveMarkerLayoutManager(String n, int pos, int bound) {
+        name = n;
+    }
+
+    public boolean generatesInlineAreas() {
+        loadLM();
+        if (replaceLM == null) {
+            return true;
+        }
+        return replaceLM.generatesInlineAreas();
+    }
+
+    public BreakPoss getNextBreakPoss(LayoutContext context) {
+        loadLM();
+        if (replaceLM == null) {
+            return null;
+        }
+        getLogger().debug("getting breaks");
+        return replaceLM.getNextBreakPoss(context);
+    }
+
+    public void addAreas(PositionIterator parentIter,
+                         LayoutContext layoutContext) {
+
+        loadLM();
+        addID();
+        replaceLM.addAreas(parentIter, layoutContext);
+
+    }
+
+    public boolean isFinished() {
+        if (replaceLM == null) {
+            return true;
+        }
+        return replaceLM.isFinished();
+    }
+
+    public void setFinished(boolean fin) {
+        if (replaceLM != null) {
+            replaceLM.setFinished(fin);
+        }
+    }
+
+    protected void loadLM() {
+        if (loaded) {
+            return;
+        }
+        loaded = true;
+        if (replaceLM == null) {
+            List list = new ArrayList();
+            Marker marker = retrieveMarker(name, 0, 0);
+            marker.addLayoutManager(list);
+            if (list.size() > 0) {
+                replaceLM =  (LayoutManager)list.get(0);
+                replaceLM.setParentLM(this);
+                replaceLM.init();
+                getLogger().debug("retrieved: " + replaceLM + ":" + list.size());
+            } else {
+                getLogger().debug("found no marker with name: " + name);
+            }
+        }
+    }
+
+    /**
+     * Get the parent area for children of this block container.
+     * This returns the current block container area
+     * and creates it if required.
+     *
+     * @see org.apache.fop.layoutmgr.LayoutManager#getParentArea(Area)
+     */
+    public Area getParentArea(Area childArea) {
+        return parentLM.getParentArea(childArea);
+    }
+
+    /**
+     * Add the child to the block container.
+     *
+     * @see org.apache.fop.layoutmgr.LayoutManager#addChild(Area)
+     */
+    public void addChild(Area childArea) {
+        parentLM.addChild(childArea);
+    }
+
+    public void resetPosition(Position resetPos) {
+        loadLM();
+        if (resetPos == null) {
+            reset(null);
+        }
+        if (replaceLM != null) {
+            replaceLM.resetPosition(resetPos);
+        }
+        loaded = false;
+        replaceLM = null;
+    }
+
+}
+
index afc1be872a21e0d927d2edede779ca692eff191d..25ce1ecd11e3410ae81c7f77507faffe53cf2efc 100644 (file)
@@ -7,7 +7,6 @@
 
 package org.apache.fop.layoutmgr;
 
-import org.apache.fop.fo.FObj;
 import org.apache.fop.area.RegionReference;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
index acdf6715f8b98438aa15bdc91c9d36f1ffcce27b..7223dc5df9e4161eaee413693bcfaedf29d9f37d 100644 (file)
@@ -7,22 +7,15 @@
 
 package org.apache.fop.layoutmgr;
 
-import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.TextInfo;
 import org.apache.fop.traits.SpaceVal;
-import org.apache.fop.area.Area;
-import org.apache.fop.area.LineArea;
 import org.apache.fop.area.Trait;
 import org.apache.fop.area.inline.InlineArea;
 import org.apache.fop.area.inline.Word;
 import org.apache.fop.area.inline.Space;
 import org.apache.fop.util.CharUtilities;
-import org.apache.fop.fo.properties.VerticalAlign;
-
-//import org.apache.fop.fo.properties.*;
 
 import java.util.ArrayList;
-import java.util.List;
 
 /**
  * LayoutManager for text (a sequence of characters) which generates one
index 0e2cb4f537fdbede33183907c222a0d57b575972..e2182066497ef8f25e30e1db309f453ace6621e9 100644 (file)
@@ -11,6 +11,7 @@ import org.apache.fop.layout.BorderAndPadding;
 import org.apache.fop.traits.BorderProps;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Trait;
+import org.apache.fop.layout.BackgroundProps;
 
 public class TraitSetter {
 
@@ -66,4 +67,60 @@ public class TraitSetter {
         }
     }
 
+    /**
+     * Add borders to an area.
+     * Layout managers that create areas with borders can use this to
+     * add the borders to the area.
+     */
+    public static void addBorders(Area curBlock, BorderAndPadding bordProps) {
+        BorderProps bps = getBorderProps(bordProps, BorderAndPadding.TOP);
+        if(bps.width != 0) {
+            curBlock.addTrait(Trait.BORDER_BEFORE, bps);
+        }
+        bps = getBorderProps(bordProps, BorderAndPadding.BOTTOM);
+        if(bps.width != 0) {
+            curBlock.addTrait(Trait.BORDER_AFTER, bps);
+        }
+        bps = getBorderProps(bordProps, BorderAndPadding.LEFT);
+        if(bps.width != 0) {
+            curBlock.addTrait(Trait.BORDER_START, bps);
+        }
+        bps = getBorderProps(bordProps, BorderAndPadding.RIGHT);
+        if(bps.width != 0) {
+            curBlock.addTrait(Trait.BORDER_END, bps);
+        }
+    }
+
+    private static BorderProps getBorderProps(BorderAndPadding bordProps, int side) {
+        BorderProps bps;
+        bps = new BorderProps(bordProps.getBorderStyle(side),
+                              bordProps.getBorderWidth(side, false),
+                              bordProps.getBorderColor(side));
+        return bps;
+    }
+
+    /**
+     * Add background to an area.
+     * Layout managers that create areas with a background can use this to
+     * add the background to the area.
+     */
+    public static void addBackground(Area curBlock, BackgroundProps backProps) {
+        Trait.Background back = new Trait.Background();
+        back.color = backProps.backColor;
+
+        if(backProps.backImage != null) {
+            back.url = backProps.backImage;
+            back.repeat = backProps.backRepeat;
+            if(backProps.backPosHorizontal != null) {
+                back.horiz = backProps.backPosHorizontal.mvalue();
+            }
+            if(backProps.backPosVertical != null) {
+                back.vertical = backProps.backPosVertical.mvalue();
+            }
+        }
+
+        if(back.color != null || back.url != null) {
+            curBlock.addTrait(Trait.BACKGROUND, back);
+        }
+    }
 }
index c4ef485d4258e1d7fd8d4e04debadbae83937e87..1d59a210d42160b4c4fb327a9a9446bfd09de421 100644 (file)
@@ -16,7 +16,7 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
+import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
@@ -169,10 +169,10 @@ public class Item extends BlockStackingLayoutManager {
         }
 
         if (borderProps != null) {
-            addBorders(curBlockArea, borderProps);
+            TraitSetter.addBorders(curBlockArea, borderProps);
         }
         if (backgroundProps != null) {
-            addBackground(curBlockArea, backgroundProps);
+            TraitSetter.addBackground(curBlockArea, backgroundProps);
         }
 
         flush();
index 818f085d8ca148a0c7525cedfd882fff933f72d7..d22deee0f8043ce61baab9e920c2e52a82e9d9be 100644 (file)
@@ -16,7 +16,7 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
+import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
@@ -162,10 +162,10 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager {
         }
 
         if(borderProps != null) {
-            addBorders(curBlockArea, borderProps);
+            TraitSetter.addBorders(curBlockArea, borderProps);
         }
         if(backgroundProps != null) {
-            addBackground(curBlockArea, backgroundProps);
+            TraitSetter.addBackground(curBlockArea, backgroundProps);
         }
 
         flush();
index b23455468747e7646459485cc589504a4a83b69f..4eb983d71f7a4c036a2e5da36889b64b630d2706 100644 (file)
@@ -16,7 +16,6 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
index f4094460c1c8c25e6800bd2c45bcd994bd93f282..39a4111fc45caaccebd0c4e343f461778ba3b2f8 100644 (file)
@@ -16,7 +16,7 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
+import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
@@ -258,7 +258,7 @@ public class Body extends BlockStackingLayoutManager {
         Area curBlockArea = new Block();
 
         if(backgroundProps != null) {
-            addBackground(curBlockArea, backgroundProps);
+            TraitSetter.addBackground(curBlockArea, backgroundProps);
         }
         return curBlockArea;
     }
index 0ddca6ac76bad228d8de38ade7647469665f0638..f795ed9d8fb95beea79b6e2b106b2881d33dc890 100644 (file)
@@ -15,7 +15,6 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
index 09541ca839926700f77ae182617658abe16494f8..790f9eef2ea3a906cd84d78dfaf430a26428c5fb 100644 (file)
@@ -16,7 +16,7 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
+import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
@@ -189,10 +189,10 @@ public class Cell extends BlockStackingLayoutManager {
         }
 
         if(borderProps != null) {
-            addBorders(curBlockArea, borderProps);
+            TraitSetter.addBorders(curBlockArea, borderProps);
         }
         if(backgroundProps != null) {
-            addBackground(curBlockArea, backgroundProps);
+            TraitSetter.addBackground(curBlockArea, backgroundProps);
         }
 
         curBlockArea.setHeight(height);
index f49bf9de48203d915a54b83e5dd6eb0ffccc2513..fac622e647ee8dcc03387699059ff611760c23ec 100644 (file)
@@ -13,6 +13,7 @@ import org.apache.fop.layoutmgr.AbstractLayoutManager;
 import org.apache.fop.layoutmgr.BreakPoss;
 import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
+import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.fo.flow.TableColumn;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
@@ -103,7 +104,7 @@ public class Column extends AbstractLayoutManager {
         Area curBlockArea = new Block();
 
         if(backgroundProps != null) {
-            addBackground(curBlockArea, backgroundProps);
+            TraitSetter.addBackground(curBlockArea, backgroundProps);
         }
         return curBlockArea;
     }
index a62b38654856eed8f9081e598bbf3d99a8c1694f..c703a29e09aa8fe61a4d106e1f91b9d89589f10e 100644 (file)
@@ -16,7 +16,7 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
+import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
@@ -367,7 +367,7 @@ public class Row extends BlockStackingLayoutManager {
     public Area getRowArea() {
         Area block = new Block();
         if(backgroundProps != null) {
-            addBackground(block, backgroundProps);
+            TraitSetter.addBackground(block, backgroundProps);
         }
         return block;
     }
index 2af0dea6b5abc36b8f517eb335a8c6ff6e9040ce..d96273434a4510737f2a9cfb11ea939824a7c8f3 100644 (file)
@@ -15,7 +15,6 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
index 7322d90b9c2703d87ee2a5618262aa56aa5e7f97..d3985ea35ac61708338eeeb5b7a1809e7560e028 100644 (file)
@@ -16,7 +16,7 @@ import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.BreakPossPosIter;
 import org.apache.fop.layoutmgr.Position;
-import org.apache.fop.fo.FObj;
+import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
 import org.apache.fop.layoutmgr.MinOptMax;
@@ -288,10 +288,10 @@ public class TableLayoutManager extends BlockStackingLayoutManager {
         curBlockArea.setHeight(tableHeight);
 
         if(borderProps != null) {
-            addBorders(curBlockArea, borderProps);
+            TraitSetter.addBorders(curBlockArea, borderProps);
         }
         if(backgroundProps != null) {
-            addBackground(curBlockArea, backgroundProps);
+            TraitSetter.addBackground(curBlockArea, backgroundProps);
         }
 
         flush();