void dims_table_cell(TableCell cell, TableCellDimensions dims) { int w=0, h=0; TableRow row; TableColumn col; int cx, cy; int ncols = valInt(cell->col_span); int nrows = valInt(cell->row_span); int n; Table tab = table_of_cell(cell); int x = valInt(cell->column); int y = valInt(cell->row); table_cell_padding(cell, &dims->px, &dims->py); row = getRowTable(tab, cell->row, ON); /* play safe */ col = getColumnTable(tab, cell->column, ON); dims->x = valInt(col->position); dims->y = valInt(row->position); dims->rx = valInt(col->reference); dims->ry = valInt(row->reference); w = valInt(col->width); h = valInt(row->width); if ( ncols > 1 || nrows > 1 ) { int rowspace = valInt(tab->cell_spacing->h); int colspace = valInt(tab->cell_spacing->w); /* cells spanned */ for(n=1, cx=x+1; n<ncols; n++, cx++) w += colspace+valInt(getColumnTable(tab, toInt(cx), ON)->width); for(n=1, cy=y+1; n<nrows; n++, cy++) h += rowspace+valInt(getRowTable(tab, toInt(cy), ON)->width); } dims->w = w; dims->h = h; }
Name getHalignTableCell(TableCell cell) { Table tab; if ( notDefault(cell->halign) ) answer(cell->halign); if ( (tab=table_of_cell(cell)) && notNil(tab->columns) ) { TableColumn col = getColumnTable(tab, cell->column, OFF); if ( col ) answer(col->alignment); } answer(NAME_left); }
static TableCell getCellTable(Table tab, Any x, Any y) { TableRow row = getRowTable(tab, y, OFF); if ( row && notNil(row) ) { TableCell cell = NULL; if ( isInteger(x) ) { cell = getElementVector((Vector)row, x); } else { TableColumn col = getColumnTable(tab, x, OFF); if ( col ) cell = getElementVector((Vector)row, col->index); } if ( cell && notNil(cell) ) answer(cell); } fail; }