]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Better table-column build-up. Columns can now be in non-consecutive order (using...
authorJeremias Maerki <jeremias@apache.org>
Fri, 4 Feb 2005 10:33:39 +0000 (10:33 +0000)
committerJeremias Maerki <jeremias@apache.org>
Fri, 4 Feb 2005 10:33:39 +0000 (10:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198376 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java

index 43c613b40515dc7c4735e5ec8e779ab9c0a260e4..247d6d0262df3ed9b8aa3e00a0e9d38eaa7a869a 100644 (file)
@@ -31,9 +31,7 @@ import org.apache.fop.apps.FOPException;
 
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FOText;
-import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.FObjMixed;
-import org.apache.fop.fo.XMLObj;
 import org.apache.fop.fo.flow.BasicLink;
 import org.apache.fop.fo.flow.BidiOverride;
 import org.apache.fop.fo.flow.Block;
@@ -48,8 +46,6 @@ import org.apache.fop.fo.flow.InstreamForeignObject;
 import org.apache.fop.fo.flow.Leader;
 import org.apache.fop.fo.flow.ListBlock;
 import org.apache.fop.fo.flow.ListItem;
-import org.apache.fop.fo.flow.ListItemBody;
-import org.apache.fop.fo.flow.ListItemLabel;
 import org.apache.fop.fo.flow.PageNumber;
 import org.apache.fop.fo.flow.PageNumberCitation;
 import org.apache.fop.fo.flow.RetrieveMarker;
@@ -66,7 +62,6 @@ import org.apache.fop.fo.pagination.PageSequence;
 import org.apache.fop.fo.pagination.StaticContent;
 import org.apache.fop.fo.pagination.Title;
 
-import org.apache.fop.layoutmgr.list.Item;
 import org.apache.fop.layoutmgr.list.ListBlockLayoutManager;
 import org.apache.fop.layoutmgr.list.ListItemLayoutManager;
 import org.apache.fop.layoutmgr.table.Body;
@@ -317,16 +312,46 @@ public class LayoutManagerMapping implements LayoutManagerMaker {
     }
 
     public static class TableLayoutManagerMaker extends Maker {
-        public void make(FONode node, List lms) {
-            Table table = (Table) node;
-            TableLayoutManager tlm = new TableLayoutManager(table);
+        
+        private List getColumnLayoutManagerList(Table table) {
+            List columnLMs = null;
             List columns = table.getColumns();
             if (columns != null) {
-                ArrayList columnLMs = new ArrayList();
+                columnLMs = new java.util.ArrayList();
+                int colnum = 1;
                 ListIterator iter = columns.listIterator();
                 while (iter.hasNext()) {
-                    columnLMs.add(new Column((TableColumn) iter.next()));
+                    TableColumn col = (TableColumn)iter.next();
+                    if (col.hasColumnNumber()) {
+                        colnum = col.getColumnNumber();
+                    }
+                    for (int i = 0; i < col.getNumberColumnsRepeated(); i++) {
+                        while (colnum > columnLMs.size()) {
+                            columnLMs.add(null);
+                        }
+                        columnLMs.set(colnum - 1, new Column(col));
+                        colnum++;
+                    }
+                }
+                //Post-processing the list (looking for gaps)
+                int pos = 1;
+                ListIterator ppIter = columnLMs.listIterator();
+                while (ppIter.hasNext()) {
+                    Column col = (Column)ppIter.next();
+                    if (col == null) {
+                        log.error("Found a gap in the table-columns at position " + pos);
+                    }
+                    pos++;
                 }
+            }
+            return columnLMs;
+        }
+        
+        public void make(FONode node, List lms) {
+            Table table = (Table) node;
+            TableLayoutManager tlm = new TableLayoutManager(table);
+            List columnLMs = getColumnLayoutManagerList(table);
+            if (columnLMs != null) {
                 tlm.setColumns(columnLMs);
             }
             if (table.getTableHeader() != null) {