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;
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;
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;
}
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) {