keiron      2002/11/15 03:56:29

  Modified:    src/org/apache/fop/apps StructureHandler.java
               src/org/apache/fop/datatypes LengthBase.java
               src/org/apache/fop/fo FONode.java FOText.java FObj.java
                        FObjMixed.java RecursiveCharIterator.java
               src/org/apache/fop/fo/flow BasicLink.java BidiOverride.java
                        Block.java BlockContainer.java Inline.java
                        InlineContainer.java Leader.java ListBlock.java
                        ListItem.java ListItemBody.java ListItemLabel.java
                        Marker.java Table.java TableAndCaption.java
                        TableBody.java TableCaption.java TableCell.java
                        Wrapper.java
               src/org/apache/fop/layoutmgr LMiter.java
  Log:
  added support for markers in fo tree
  bit of a cleanup
  
  Revision  Changes    Path
  1.6       +4 -3      xml-fop/src/org/apache/fop/apps/StructureHandler.java
  
  Index: StructureHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/apps/StructureHandler.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- StructureHandler.java     13 Sep 2002 08:21:53 -0000      1.5
  +++ StructureHandler.java     15 Nov 2002 11:56:27 -0000      1.6
  @@ -8,6 +8,7 @@
   package org.apache.fop.apps;
   
   // Java
  +import java.util.Set;
   import java.util.HashSet;
   
   // Avalon
  @@ -31,12 +32,12 @@
          The current set of id's in the FO tree
          This is used so we know if the FO tree contains duplicates
        */
  -    private HashSet idReferences = new HashSet();
  +    private Set idReferences = new HashSet();
   
       public StructureHandler() {
       }
   
  -    public HashSet getIDReferences() {
  +    public Set getIDReferences() {
           return idReferences;
       }
   
  
  
  
  1.8       +3 -3      xml-fop/src/org/apache/fop/datatypes/LengthBase.java
  
  Index: LengthBase.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/datatypes/LengthBase.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- LengthBase.java   22 Nov 2001 07:11:38 -0000      1.7
  +++ LengthBase.java   15 Nov 2002 11:56:27 -0000      1.8
  @@ -70,9 +70,9 @@
               return propertyList.get("font-size").getLength().mvalue();
           case INH_FONTSIZE:
               return propertyList.getInherited("font-size").getLength().mvalue();
  -        case CONTAINING_BOX:
  +        //case CONTAINING_BOX:
               // depends on property?? inline-progression vs block-progression
  -            return parentFO.getContentWidth();
  +            //return parentFO.getContentWidth();
           case CONTAINING_REFAREA:    // example: start-indent, end-indent
            {
               //FONode fo;
  
  
  
  1.32      +14 -3     xml-fop/src/org/apache/fop/fo/FONode.java
  
  Index: FONode.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FONode.java,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- FONode.java       25 Oct 2002 09:29:40 -0000      1.31
  +++ FONode.java       15 Nov 2002 11:56:27 -0000      1.32
  @@ -106,11 +106,22 @@
        * this FObj.
        */
       public ListIterator getChildren(FONode childNode) {
  -    return null;
  +        return null;
       }
   
       public CharIterator charIterator() {
  -    return new OneCharIterator(CharUtilities.CODE_EOT);
  +        return new OneCharIterator(CharUtilities.CODE_EOT);
       }
   
  +    /**
  +     * This is a quick check to see if it is a marker.
  +     * This is needed since there is no other quick way of checking
  +     * for a marker and not adding to the child list.
  +     *
  +     * @return true if this is a marker
  +     */
  +    protected boolean isMarker() {
  +        return false;
  +    }
   }
  +
  
  
  
  1.41      +10 -1     xml-fop/src/org/apache/fop/fo/FOText.java
  
  Index: FOText.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FOText.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- FOText.java       25 Oct 2002 09:29:41 -0000      1.40
  +++ FOText.java       15 Nov 2002 11:56:27 -0000      1.41
  @@ -51,6 +51,15 @@
           structHandler.characters(ca, start, length);
       }
   
  +    /**
  +     * Check if this text node will create an area.
  +     * This means either there is non-whitespace or it is
  +     * preserved whitespace.
  +     * Maybe this just needs to check length > 0, since char iterators
  +     * handle whitespace.
  +     *
  +     * @return true if this will create an area in the output
  +     */
       public boolean willCreateArea() {
           if (textInfo.whiteSpaceCollapse == WhiteSpaceCollapse.FALSE &&
                   length > 0) {
  
  
  
  1.39      +125 -175  xml-fop/src/org/apache/fop/fo/FObj.java
  
  Index: FObj.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FObj.java,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- FObj.java 25 Oct 2002 09:29:41 -0000      1.38
  +++ FObj.java 15 Nov 2002 11:56:27 -0000      1.39
  @@ -24,65 +24,73 @@
   import java.util.ArrayList;
   import java.util.List;
   import java.util.HashMap;
  -import java.util.HashSet;
  +import java.util.Set;
  +import java.util.Map;
   
   /**
    * base class for representation of formatting objects and their processing
    */
   public class FObj extends FONode {
  -    protected StructureHandler structHandler;
  -    public PropertyList properties;
  -    protected PropertyManager propMgr;
  -    protected String areaClass = AreaClass.UNASSIGNED;
  -    protected String id = null;
  +    private final static String FO_URI = "http://www.w3.org/1999/XSL/Format";;
   
       /**
  -     * value of marker before layout begins
  +     * Static property list builder that converts xml attributes
  +     * into fo properties. This is static since the underlying
  +     * property mappings for fo are also static.
        */
  -    public static final int START = -1000;
  +    protected static PropertyListBuilder plb = null;
   
       /**
  -     * value of marker after break-after
  +     * Structure handler used to notify structure events
  +     * such as start end element.
        */
  -    public static final int BREAK_AFTER = -1001;
  +    protected StructureHandler structHandler;
   
       /**
  -     * where the layout was up to.
  -     * for FObjs it is the child number
  -     * for FOText it is the character number
  +     * Formatting properties for this fo element.
        */
  -    protected int marker = START;
  -
  -    protected ArrayList children = new ArrayList(); // made public for searching 
for id's
  -
  -    protected boolean isInTableCell = false;
  +    public PropertyList properties;
   
  -    protected int forcedStartOffset = 0;
  -    protected int forcedWidth = 0;
  +    /**
  +     * Property manager for handler some common properties.
  +     */
  +    protected PropertyManager propMgr;
   
  -    protected int widows = 0;
  -    protected int orphans = 0;
  +    /**
  +     * Id of this fo element of null if no id.
  +     */
  +    protected String id = null;
   
  -    // count of areas generated-by/returned-by
  -    public int areasGenerated = 0;
  +    /**
  +     * The children of this node.
  +     */
  +    protected ArrayList children = null;
   
  -    // markers
  -    protected HashMap markers;
  +    /**
  +     * Markers added to this element.
  +     */
  +    protected Map markers = null;
   
  +    /**
  +     * Create a new formatting object.
  +     * All formatting object classes extend this class.
  +     *
  +     * @param parent the parent node
  +     */
       public FObj(FONode parent) {
           super(parent);
  -        markers = new HashMap();
  -        if (parent instanceof FObj) {
  -            this.areaClass = ((FObj) parent).areaClass;
  -        }
       }
   
  +    /**
  +     * Set the name of this element.
  +     * The prepends "fo:" to the name to indicate it is in the fo namespace.
  +     *
  +     * @param str the xml element name
  +     */
       public void setName(String str) {
           name = "fo:" + str;
       }
   
  -    protected static PropertyListBuilder plb = null;
  -
       protected PropertyListBuilder getListBuilder() {
           if (plb == null) {
               plb = new PropertyListBuilder();
  @@ -105,7 +113,6 @@
        * will be altered for the next element.
        */
       public void handleAttrs(Attributes attlist) throws FOPException {
  -        String uri = "http://www.w3.org/1999/XSL/Format";;
           FONode par = parent;
           while (par != null && !(par instanceof FObj)) {
               par = par.parent;
  @@ -114,7 +121,7 @@
           if (par != null) {
               props = ((FObj) par).properties;
           }
  -        properties = getListBuilder().makeList(uri, name, attlist, props,
  +        properties = getListBuilder().makeList(FO_URI, name, attlist, props,
                                                  (FObj) par);
           properties.setFObj(this);
           this.propMgr = makePropertyManager(properties);
  @@ -126,10 +133,27 @@
           return new PropertyManager(propertyList);
       }
   
  +    /**
  +     * Add the child to this object.
  +     *
  +     * @param child the child node to add
  +     */
       protected void addChild(FONode child) {
  -        children.add(child);
  +        if (containsMarkers() && child.isMarker()) {
  +            addMarker((Marker)child);
  +        } else {
  +            if (children == null) {
  +                children = new ArrayList();
  +            }
  +            children.add(child);
  +        }
       }
   
  +    /**
  +     * Set the structure handler for handling structure events.
  +     *
  +     * @param st the structure handler
  +     */
       public void setStructHandler(StructureHandler st) {
           structHandler = st;
       }
  @@ -144,12 +168,18 @@
           return (properties.get(name));
       }
   
  +    /**
  +     * Setup the id for this formatting object.
  +     * Most formatting objects can have an id that can be referenced.
  +     * This methods checks that the id isn't already used by another
  +     * fo and sets the id attribute of this object.
  +     */
       protected void setupID() {
           Property prop = this.properties.get("id");
           if (prop != null) {
               String str = prop.getString();
               if (str != null && !str.equals("")) {
  -                HashSet idrefs = structHandler.getIDReferences();
  +                Set idrefs = structHandler.getIDReferences();
                   if (!idrefs.contains(str)) {
                       id = str;
                       idrefs.add(id);
  @@ -160,34 +190,44 @@
           }
       }
   
  +    /**
  +     * Get the id string for this formatting object.
  +     * This will be unique for the fo document.
  +     *
  +     * @return the id string or null if not set
  +     */
       public String getID() {
           return id;
       }
   
       /**
  -     * Return the "content width" of the areas generated by this FO.
  -     * This is used by percent-based properties to get the dimension of
  -     * the containing block.
  -     * If an FO has a property with a percentage value, that value
  -     * is usually calculated on the basis of the corresponding dimension
  -     * of the area which contains areas generated by the FO.
  -     * NOTE: subclasses of FObj should implement this to return a reasonable
  -     * value!
  +     * Check if this formatting object generates reference areas.
  +     *
  +     * @return true if generates reference areas
        */
  -    public int getContentWidth() {
  -        return 0;
  -    }
  -
       public boolean generatesReferenceAreas() {
           return false;
       }
   
  -
  +    /**
  +     * Check if this formatting object generates inline areas.
  +     *
  +     * @return true if generates inline areas
  +     */
       public boolean generatesInlineAreas() {
           return true;
       }
   
       /**
  +     * Check if this formatting object may contain markers.
  +     *
  +     * @return true if this can contian markers
  +     */
  +    protected boolean containsMarkers() {
  +        return false;
  +    }
  +
  +    /**
        * Set writing mode for this FO.
        * Find nearest ancestor, including self, which generates
        * reference areas and use the value of its writing-mode property.
  @@ -231,147 +271,57 @@
        * this FObj.
        */
       public ListIterator getChildren(FONode childNode) {
  -        int i = children.indexOf(childNode);
  -        if (i >= 0) {
  -            return children.listIterator(i);
  -        } else {
  -            return null;
  -        }
  -    }
  -
  -    public void setIsInTableCell() {
  -        this.isInTableCell = true;
  -        // made recursive by Eric Schaeffer
  -        for (int i = 0; i < this.children.size(); i++) {
  -            Object obj = this.children.get(i);
  -            if (obj instanceof FObj) {
  -                FObj child = (FObj) obj;
  -                child.setIsInTableCell();
  -            }
  -        }
  -    }
  -
  -    public void forceStartOffset(int offset) {
  -        this.forcedStartOffset = offset;
  -        // made recursive by Eric Schaeffer
  -        for (int i = 0; i < this.children.size(); i++) {
  -            Object obj = this.children.get(i);
  -            if (obj instanceof FObj) {
  -                FObj child = (FObj) obj;
  -                child.forceStartOffset(offset);
  -            }
  -        }
  -    }
  -
  -    public void forceWidth(int width) {
  -        this.forcedWidth = width;
  -        // made recursive by Eric Schaeffer
  -        for (int i = 0; i < this.children.size(); i++) {
  -            Object obj = this.children.get(i);
  -            if (obj instanceof FObj) {
  -                FObj child = (FObj) obj;
  -                child.forceWidth(width);
  -            }
  -        }
  -    }
  -
  -    public void resetMarker() {
  -        this.marker = START;
  -        int numChildren = this.children.size();
  -        for (int i = 0; i < numChildren; i++) {
  -            Object obj = this.children.get(i);
  -            if (obj instanceof FObj) {
  -                FObj child = (FObj) obj;
  -                child.resetMarker();
  +        if (children != null) {
  +            int i = children.indexOf(childNode);
  +            if (i >= 0) {
  +                return children.listIterator(i);
               }
           }
  -    }
  -
  -    public void setWidows(int wid) {
  -        widows = wid;
  -    }
  -
  -    public void setOrphans(int orph) {
  -        orphans = orph;
  -    }
  -
  -    public void removeAreas() {
  -        // still to do
  -    }
  -
  -    /**
  -     * At the start of a new span area layout may be partway through a
  -     * nested FO, and balancing requires rollback to this known point.
  -     * The snapshot records exactly where layout is at.
  -     * @param snapshot a ArrayList of markers (Integer)
  -     * @returns the updated ArrayList of markers (Integers)
  -     */
  -    public ArrayList getMarkerSnapshot(ArrayList snapshot) {
  -        snapshot.add(new Integer(this.marker));
  -
  -        // terminate if no kids or child not yet accessed
  -        if (this.marker < 0) {
  -            return snapshot;
  -        } else if (children.isEmpty()) {
  -            return snapshot;
  -        } else {
  -            return ( (FObj) children.get(this.marker)).getMarkerSnapshot(
  -                     snapshot);
  -        }
  +        return null;
       }
   
       /**
  -     * When balancing occurs, the flow layout() method restarts at the
  -     * point specified by the current marker snapshot, which is retrieved
  -     * and restored using this method.
  -     * @param snapshot the ArrayList of saved markers (Integers)
  +     * Add the marker to this formatting object.
  +     * If this object can contain markers it checks that the marker
  +     * has a unique class-name for this object and that it is
  +     * the first child.
        */
  -    public void rollback(ArrayList snapshot) {
  -        this.marker = ((Integer) snapshot.get(0)).intValue();
  -        snapshot.remove(0);
  -
  -        if (this.marker == START) {
  -            // make sure all the children of this FO are also reset
  -            resetMarker();
  -            return;
  -        } else if ((this.marker == -1) || children.isEmpty()) {
  -            return;
  -        }
  -
  -        int numChildren = this.children.size();
  -
  -        if (this.marker <= START) {
  -            return;
  -        }
  -
  -        for (int i = this.marker + 1; i < numChildren; i++) {
  -            Object obj = this.children.get(i);
  -            if (obj instanceof FObj) {
  -                FObj child = (FObj) obj;
  -                child.resetMarker();
  +    public void addMarker(Marker marker) {
  +        String mcname = marker.getMarkerClassName();
  +        if (children != null) {
  +            // check for empty children
  +            for (Iterator iter = children.iterator(); iter.hasNext();) {
  +                FONode node = (FONode)iter.next();
  +                if (node instanceof FOText) {
  +                    FOText text = (FOText)node;
  +                    if (text.willCreateArea()) {
  +                        getLogger().error("fo:marker must be an initial child: " + 
mcname);
  +                        return;
  +                    } else {
  +                        iter.remove();
  +                    }
  +                } else {
  +                    getLogger().error("fo:marker must be an initial child: " + 
mcname);
  +                    return;
  +                }
               }
           }
  -        ((FObj) children.get(this.marker)).rollback(snapshot);
  -    }
  -
  -
  -    public void addMarker(Marker marker) throws FOPException {
  -        String mcname = marker.getMarkerClassName();
  -        if (!markers.containsKey(mcname) && children.isEmpty()) {
  +        if (markers == null) {
  +            markers = new HashMap();
  +        }
  +        if (!markers.containsKey(mcname)) {
               markers.put(mcname, marker);
           } else {
  -            getLogger().error("fo:marker must be an initial child," + "and 
'marker-class-name' must be unique for same parent");
  -            throw new FOPException(
  -              "fo:marker must be an initial child," + "and 'marker-class-name' must 
be unique for same parent");
  +            getLogger().error("fo:marker 'marker-class-name' must be unique for 
same parent: " + mcname);
           }
       }
   
       public boolean hasMarkers() {
  -        return !markers.isEmpty();
  +        return markers != null && !markers.isEmpty();
       }
   
  -    public ArrayList getMarkers() {
  -        return new ArrayList(markers.values());
  +    public Map getMarkers() {
  +        return markers;
       }
   
       /**
  
  
  
  1.31      +5 -4      xml-fop/src/org/apache/fop/fo/FObjMixed.java
  
  Index: FObjMixed.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FObjMixed.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- FObjMixed.java    13 Sep 2002 08:21:53 -0000      1.30
  +++ FObjMixed.java    15 Nov 2002 11:56:27 -0000      1.31
  @@ -22,7 +22,7 @@
    * and their processing
    */
   public class FObjMixed extends FObj {
  -    TextInfo textInfo = null;
  +    protected TextInfo textInfo = null;
       protected FontInfo fontInfo = null;
   
       public FObjMixed(FONode parent) {
  @@ -35,8 +35,10 @@
       }
   
       public void addLayoutManager(List lms) {
  -        lms.add(new InlineStackingLayoutManager(this,
  +        if (children != null) {
  +            lms.add(new InlineStackingLayoutManager(this,
                        new LMiter(children.listIterator())));
  +        }
       }
   
       protected void addCharacters(char data[], int start, int length) {
  @@ -54,7 +56,6 @@
       }
   
       public void setup() {
  -
           if (this.properties != null) {
               setupID();
           }
  
  
  
  1.4       +2 -2      xml-fop/src/org/apache/fop/fo/RecursiveCharIterator.java
  
  Index: RecursiveCharIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/RecursiveCharIterator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RecursiveCharIterator.java        25 Oct 2002 09:29:41 -0000      1.3
  +++ RecursiveCharIterator.java        15 Nov 2002 11:56:27 -0000      1.4
  @@ -54,7 +54,7 @@
   
   
       private void getNextCharIter() {
  -        if (childIter.hasNext()) {
  +        if (childIter != null && childIter.hasNext()) {
               this.curChild = (FONode) childIter.next();
               this.curCharIter = curChild.charIterator();
           } else {
  
  
  
  1.18      +6 -1      xml-fop/src/org/apache/fop/fo/flow/BasicLink.java
  
  Index: BasicLink.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/BasicLink.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- BasicLink.java    3 Nov 2002 16:24:21 -0000       1.17
  +++ BasicLink.java    15 Nov 2002 11:56:28 -0000      1.18
  @@ -120,8 +120,13 @@
   
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
       /**
        * Link resolving for resolving internal links.
  +     * This is static since it is independant of the link fo.
        */
       protected static class LinkResolver implements Resolveable, Serializable {
           private boolean resolved = false;
  
  
  
  1.11      +5 -1      xml-fop/src/org/apache/fop/fo/flow/BidiOverride.java
  
  Index: BidiOverride.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/BidiOverride.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- BidiOverride.java 16 Aug 2002 12:44:07 -0000      1.10
  +++ BidiOverride.java 15 Nov 2002 11:56:28 -0000      1.11
  @@ -74,6 +74,10 @@
   
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
       /**
        * If this bidi has a different writing mode direction
        * ltr or rtl than its parent writing mode then this
  
  
  
  1.64      +3 -15     xml-fop/src/org/apache/fop/fo/flow/Block.java
  
  Index: Block.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Block.java,v
  retrieving revision 1.63
  retrieving revision 1.64
  diff -u -r1.63 -r1.64
  --- Block.java        1 Nov 2002 10:49:34 -0000       1.63
  +++ Block.java        15 Nov 2002 11:56:28 -0000      1.64
  @@ -52,9 +52,6 @@
       int blockWidows;
       int blockOrphans;
   
  -    int areaHeight = 0;
  -    int contentWidth = 0;
  -
       String id;
       int span;
       private int wsTreatment; //ENUMERATION
  @@ -169,18 +166,9 @@
   
       }
   
  -    public int getAreaHeight() {
  -        return areaHeight;
  +    protected boolean containsMarkers() {
  +        return true;
       }
  -
  -
  -    /**
  -     * Return the content width of the boxes generated by this FO.
  -     */
  -    public int getContentWidth() {
  -        return contentWidth; // getAllocationWidth()??
  -    }
  -
   
       public int getSpan() {
           return this.span;
  
  
  
  1.19      +5 -3      xml-fop/src/org/apache/fop/fo/flow/BlockContainer.java
  
  Index: BlockContainer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/BlockContainer.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- BlockContainer.java       30 Aug 2002 08:03:23 -0000      1.18
  +++ BlockContainer.java       15 Nov 2002 11:56:28 -0000      1.19
  @@ -78,8 +78,6 @@
               // this.properties.get("width");
               // this.properties.get("writing-mode");
   
  -            this.marker = 0;
  -
               this.backgroundColor =
                   this.properties.get("background-color").getColorType();
   
  @@ -95,6 +93,10 @@
   
       public boolean generatesInlineAreas() {
           return false;
  +    }
  +
  +    protected boolean containsMarkers() {
  +        return true;
       }
   
       public int getSpan() {
  
  
  
  1.14      +4 -1      xml-fop/src/org/apache/fop/fo/flow/Inline.java
  
  Index: Inline.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Inline.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Inline.java       23 May 2002 06:27:13 -0000      1.13
  +++ Inline.java       15 Nov 2002 11:56:28 -0000      1.14
  @@ -87,6 +87,9 @@
           }
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
   
       public CharIterator charIterator() {
           return new InlineCharIterator(this, propMgr.getBorderAndPadding());
  
  
  
  1.9       +5 -1      xml-fop/src/org/apache/fop/fo/flow/InlineContainer.java
  
  Index: InlineContainer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/InlineContainer.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- InlineContainer.java      23 May 2002 06:27:13 -0000      1.8
  +++ InlineContainer.java      15 Nov 2002 11:56:28 -0000      1.9
  @@ -69,6 +69,10 @@
           // this.properties.get("writing-mode");
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
       /**
        * This creates a single inline container area after
        * laying out the child block areas. All footnotes, floats
  
  
  
  1.29      +5 -1      xml-fop/src/org/apache/fop/fo/flow/Leader.java
  
  Index: Leader.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Leader.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- Leader.java       18 Sep 2002 14:04:31 -0000      1.28
  +++ Leader.java       15 Nov 2002 11:56:28 -0000      1.29
  @@ -116,6 +116,10 @@
   
               leaderArea = fa;
           } else if(leaderPattern == LeaderPattern.USECONTENT) {
  +            if (children == null) {
  +                getLogger().error("Leader use-content with no content");
  +                return;
  +            }
               InlineStackingLayoutManager lm;
               lm = new InlineStackingLayoutManager(this,
                        new LMiter(children.listIterator()));
  
  
  
  1.29      +5 -1      xml-fop/src/org/apache/fop/fo/flow/ListBlock.java
  
  Index: ListBlock.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/ListBlock.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- ListBlock.java    3 Nov 2002 16:29:58 -0000       1.28
  +++ ListBlock.java    15 Nov 2002 11:56:28 -0000      1.29
  @@ -92,5 +92,9 @@
           return false;
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
   
   }
  +
  
  
  
  1.25      +6 -1      xml-fop/src/org/apache/fop/fo/flow/ListItem.java
  
  Index: ListItem.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/ListItem.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- ListItem.java     3 Nov 2002 16:29:58 -0000       1.24
  +++ ListItem.java     15 Nov 2002 11:56:28 -0000      1.25
  @@ -99,4 +99,9 @@
           return false;
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
  +
  
  
  
  1.19      +6 -1      xml-fop/src/org/apache/fop/fo/flow/ListItemBody.java
  
  Index: ListItemBody.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/ListItemBody.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- ListItemBody.java 3 Nov 2002 16:29:58 -0000       1.18
  +++ ListItemBody.java 15 Nov 2002 11:56:28 -0000      1.19
  @@ -46,4 +46,9 @@
   
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
  +
  
  
  
  1.19      +6 -1      xml-fop/src/org/apache/fop/fo/flow/ListItemLabel.java
  
  Index: ListItemLabel.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/ListItemLabel.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- ListItemLabel.java        3 Nov 2002 16:29:58 -0000       1.18
  +++ ListItemLabel.java        15 Nov 2002 11:56:28 -0000      1.19
  @@ -46,4 +46,9 @@
   
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
  +
  
  
  
  1.12      +27 -10    xml-fop/src/org/apache/fop/fo/flow/Marker.java
  
  Index: Marker.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Marker.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Marker.java       7 Aug 2002 16:54:57 -0000       1.11
  +++ Marker.java       15 Nov 2002 11:56:28 -0000      1.12
  @@ -16,31 +16,48 @@
   
   import org.xml.sax.Attributes;
   
  +/**
  + * Marker formatting object.
  + * This is the marker formatting object that handles merkers.
  + * This attempts to add itself to the parent formatting object.
  + */
   public class Marker extends FObjMixed {
   
       private String markerClassName;
   
  +    /**
  +     * Create a marker fo.
  +     *
  +     * @param parent the parent fo node
  +     */
       public Marker(FONode parent) {
           super(parent);
       }
   
  +    /**
  +     * Handle the attributes for this marker.
  +     * This gets the marker-class-name and attempts to add itself
  +     * to the parent formatting object.
  +     *
  +     * @param attlist the attribute list
  +     * @throws FOPException if there is an exception
  +     */
       public void handleAttrs(Attributes attlist) throws FOPException {
           super.handleAttrs(attlist);
  -        // do check to see that 'this' is under fo:flow
   
           this.markerClassName =
               this.properties.get("marker-class-name").getString();
  +    }
   
  -        // check to ensure that no other marker with same parent
  -        // has this 'marker-class-name' is in addMarker() method
  -        try {
  -            ((FObj)parent).addMarker(this);
  -        } catch (FOPException fopex) {
  -            getLogger().error("marker cannot be added to '" + parent
  -                                 + "'");
  -        }
  +    protected boolean isMarker() {
  +        return true;
       }
   
  +    /**
  +     * Get the marker class name for this marker.
  +     *
  +     * @return the marker class name
  +     */
       public String getMarkerClassName() {
           return markerClassName;
       }
  
  
  
  1.48      +7 -2      xml-fop/src/org/apache/fop/fo/flow/Table.java
  
  Index: Table.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Table.java,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- Table.java        13 Sep 2002 08:21:54 -0000      1.47
  +++ Table.java        15 Nov 2002 11:56:28 -0000      1.48
  @@ -63,7 +63,7 @@
               tableHeader = (TableBody)child;
           } else {
               // add bodies
  -            children.add(child);
  +            super.addChild(child);
           }
       }
   
  @@ -149,4 +149,9 @@
           return false;
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
  +
  
  
  
  1.10      +7 -1      xml-fop/src/org/apache/fop/fo/flow/TableAndCaption.java
  
  Index: TableAndCaption.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/TableAndCaption.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- TableAndCaption.java      20 Jun 2002 09:14:13 -0000      1.9
  +++ TableAndCaption.java      15 Nov 2002 11:56:28 -0000      1.10
  @@ -51,4 +51,10 @@
       public boolean generatesInlineAreas() {
           return false;
       }
  +
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
  +
  
  
  
  1.46      +5 -1      xml-fop/src/org/apache/fop/fo/flow/TableBody.java
  
  Index: TableBody.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/TableBody.java,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- TableBody.java    13 Sep 2002 08:21:54 -0000      1.45
  +++ TableBody.java    15 Nov 2002 11:56:28 -0000      1.46
  @@ -70,5 +70,9 @@
   
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
   
  
  
  
  1.9       +7 -1      xml-fop/src/org/apache/fop/fo/flow/TableCaption.java
  
  Index: TableCaption.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/TableCaption.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- TableCaption.java 20 Jun 2002 09:14:13 -0000      1.8
  +++ TableCaption.java 15 Nov 2002 11:56:28 -0000      1.9
  @@ -45,4 +45,10 @@
           // this.properties.get("width");
   
       }
  +
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
  +
  
  
  
  1.49      +5 -1      xml-fop/src/org/apache/fop/fo/flow/TableCell.java
  
  Index: TableCell.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/TableCell.java,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- TableCell.java    1 Nov 2002 10:49:34 -0000       1.48
  +++ TableCell.java    15 Nov 2002 11:56:28 -0000      1.49
  @@ -296,5 +296,9 @@
           }
       }
       
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
   
  
  
  
  1.8       +6 -1      xml-fop/src/org/apache/fop/fo/flow/Wrapper.java
  
  Index: Wrapper.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Wrapper.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Wrapper.java      21 Feb 2002 09:54:26 -0000      1.7
  +++ Wrapper.java      15 Nov 2002 11:56:28 -0000      1.8
  @@ -27,4 +27,9 @@
           super(parent);
       }
   
  +    protected boolean containsMarkers() {
  +        return true;
  +    }
  +
   }
  +
  
  
  
  1.7       +2 -2      xml-fop/src/org/apache/fop/layoutmgr/LMiter.java
  
  Index: LMiter.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/LMiter.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- LMiter.java       13 Nov 2002 10:25:48 -0000      1.6
  +++ LMiter.java       15 Nov 2002 11:56:29 -0000      1.7
  @@ -33,7 +33,7 @@
   
       protected boolean preLoadNext() {
           // skip over child FObj's that don't add lms
  -        while (baseIter.hasNext()) {
  +        while (baseIter != null && baseIter.hasNext()) {
               Object theobj = baseIter.next();
               if(theobj instanceof FObj) {
                   FObj fobj = (FObj) theobj;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to