]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Support for table-cells as direct children of table-body|header|footer.
authorJeremias Maerki <jeremias@apache.org>
Tue, 8 Feb 2005 09:20:41 +0000 (09:20 +0000)
committerJeremias Maerki <jeremias@apache.org>
Tue, 8 Feb 2005 09:20:41 +0000 (09:20 +0000)
The table-cells are grouped into table-rows using starts-row and ends-row properties during FO tree building so the layout managers don't have to handle both cases. This will hopefully keep the code simpler.
Additional accessors on some FO objects.

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

src/java/org/apache/fop/fo/PropertyList.java
src/java/org/apache/fop/fo/flow/Table.java
src/java/org/apache/fop/fo/flow/TableBody.java
src/java/org/apache/fop/fo/flow/TableCell.java
src/java/org/apache/fop/fo/flow/TableRow.java

index 0a0c50ae4d31a4ef7f45dff8cc2b7e47b8f596ca..64553c156fdbad9f5281739c8678bda26ee90ee8 100644 (file)
@@ -203,7 +203,7 @@ abstract public class PropertyList {
      * Use that from the nearest ancestor, including self, which generates
      * reference areas, or from root FO if no ancestor found.
      */
-    protected void setWritingMode() throws PropertyException {
+    public void setWritingMode() throws PropertyException {
         FObj p = fobj.findNearestAncestorFObj();
         // If this is a RA or the root, use the property value.
         if (fobj.generatesReferenceAreas() || p == null) {
index 1cb67c134e42f6e238fc390cddd1ad5adc36776e..d509a3d806815c1ad4d16e1ae2915492e634fde0 100644 (file)
@@ -200,6 +200,11 @@ public class Table extends FObj {
         return breakBefore;
     }
     
+    /** @return the "border-collapse" property. */
+    public int getBorderCollapse() {
+        return borderCollapse;
+    }
+
     /** @return the "border-separation" property. */
     public LengthPairProperty getBorderSeparation() {
         return borderSeparation;
index 786bd3148e661b79ca032ef2b493494eef6aedb5..5f30c618af768323b442b4a6f39f31cdba45f24d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2005 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 package org.apache.fop.fo.flow;
 
 // Java
+import java.util.Iterator;
 import java.util.List;
 
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.StaticPropertyList;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
 import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 import org.apache.fop.fo.properties.CommonRelativePosition;
-import org.apache.fop.layoutmgr.table.Body;
 
 /**
  * Class modelling the fo:table-body object.
@@ -48,6 +49,8 @@ public class TableBody extends FObj {
     private int visibility;
     // End of property values
     
+    private PropertyList savedPropertyList;
+    
     /**
      * @param parent FONode that is the parent of the object
      */
@@ -68,6 +71,9 @@ public class TableBody extends FObj {
         // borderEndPrecedence = pList.get(PR_BORDER_END_PRECEDENCE);
         // borderStartPrecedence = pList.get(PR_BORDER_START_PRECEDENCE);
         visibility = pList.get(PR_VISIBILITY).getEnum();
+        
+        //Used by convertCellsToRows()
+        savedPropertyList = pList;
     }
     
     /**
@@ -82,10 +88,52 @@ public class TableBody extends FObj {
      */
     protected void endOfNode() throws FOPException {
         getFOEventHandler().endBody(this);
+        convertCellsToRows();
     }
 
     /**
-     * Return the Common Border, Padding, and Background Properties.
+     * If table-cells are used as direct children of a table-body|header|footer
+     * they are replace in this method by proper table-rows.
+     * @throws FOPException if there's a problem binding the TableRows properties.
+     */
+    private void convertCellsToRows() throws FOPException {
+        try {
+            if (childNodes.size() == 0 || childNodes.get(0) instanceof TableRow) {
+                return;
+            }
+            //getLogger().debug("Converting cells to rows...");
+            List cells = (List)childNodes.clone();
+            childNodes.clear();
+            Iterator i = cells.iterator();
+            TableRow row = null;
+            while (i.hasNext()) {
+                TableCell cell = (TableCell)i.next();
+                if (cell.startsRow() && (row != null)) {
+                    childNodes.add(row);
+                    row = null;
+                }
+                if (row == null) {
+                    row = new TableRow(this);
+                    PropertyList pList = new StaticPropertyList(row, savedPropertyList);
+                    pList.setWritingMode();
+                    row.bind(pList);
+                }
+                row.addReplacedCell(cell);
+                if (cell.endsRow()) {
+                    childNodes.add(row);
+                    row = null;
+                }
+            }
+            if (row != null) {
+                childNodes.add(row);
+            }
+        } finally {
+            savedPropertyList = null; //Release reference
+        }
+    }
+    
+    /**
+     * @return the Common Border, Padding, and Background Properties.
      */
     public CommonBorderPaddingBackground getCommonBorderPaddingBackground() {
         return commonBorderPaddingBackground;
index 7b4f16f39bffa05dead56265d1962a7b1d9d360d..e39b23efb679e72773f7ec477d176499c646d6e3 100644 (file)
@@ -324,6 +324,16 @@ public class TableCell extends FObj {
         return displayAlign;
     }
     
+    /** @return true if the cell starts a row. */
+    public boolean startsRow() {
+        return (startsRow == EN_TRUE);
+    }
+    
+    /** @return true if the cell ends a row. */
+    public boolean endsRow() {
+        return (endsRow == EN_TRUE);
+    }
+    
     /**
      * @see org.apache.fop.fo.FObj#getName()
      */
index 3583b546f5577a54ad3836abb5e1885535ca386f..573bc55946fd4fedcd7fb97037b85f8b26ad62ec 100644 (file)
@@ -25,6 +25,7 @@ import org.apache.fop.datatypes.Length;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.StaticPropertyList;
 import org.apache.fop.fo.ValidationException;
 import org.apache.fop.fo.properties.CommonAccessibility;
 import org.apache.fop.fo.properties.CommonAural;
@@ -56,7 +57,7 @@ public class TableRow extends FObj {
     private KeepProperty keepWithPrevious;
     private int visibility;
     // End of property values
-    
+
     private boolean setup = false;
 
     /**
@@ -89,6 +90,19 @@ public class TableRow extends FObj {
         visibility = pList.get(PR_VISIBILITY).getEnum();
     }
 
+    /**
+     * Adds a cell to this row (skips marker handling done by FObj.addChildNode().
+     * Used by TableBody during the row building process when only cells are
+     * used as direct children of a table-body/header/footer.
+     * @param cell cell to add.
+     */
+    protected void addReplacedCell(TableCell cell) {
+        if (childNodes == null) {
+            childNodes = new java.util.ArrayList();
+        }
+        childNodes.add(cell);
+    }
+    
     /**
      * @see org.apache.fop.fo.FONode#startOfNode
      */