/* sizeArray: * Set column and row sizes. Optimize for minimum width and * height. Where there is slack, try to distribute evenly. * We do this by encoding cells as edges with min length is * a dag on a chain. We then run network simplex, using * LR_balance. */ void sizeArray(htmltbl_t * tbl) { graph_t *rowg; graph_t *colg; /* Do the 1D cases by hand */ if ((tbl->rc == 1) || (tbl->cc == 1)) { sizeLinearArray(tbl); return; } tbl->heights = N_NEW(tbl->rc + 1, int); tbl->widths = N_NEW(tbl->cc + 1, int); #ifdef WITH_CGRAPH rowg = agopen("rowg", Agdirected,NIL(Agdisc_t *)); colg = agopen("colg", Agdirected,NIL(Agdisc_t *)); /* Only need GD_nlist */ agbindrec(rowg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); // graph custom data agbindrec(colg, "Agraphinfo_t", sizeof(Agraphinfo_t), TRUE); // graph custom data #else rowg = agopen("rowg", AGDIGRAPH); colg = agopen("colg", AGDIGRAPH); #endif makeGraphs(tbl, rowg, colg); rank(rowg, 2, INT_MAX); rank(colg, 2, INT_MAX); setSizes(tbl, rowg, colg); closeGraphs(rowg, colg); }
/* sizeArray: * Set column and row sizes. Optimize for minimum width and * height. Where there is slack, try to distribute evenly. * We do this by encoding cells as edges with min length is * a dag on a chain. We then run network simplex, using * LR_balance. */ void sizeArray(htmltbl_t * tbl) { graph_t *rowg; graph_t *colg; /* Do the 1D cases by hand */ if ((tbl->rc == 1) || (tbl->cc == 1)) { sizeLinearArray(tbl); return; } tbl->heights = N_NEW(tbl->rc + 1, int); tbl->widths = N_NEW(tbl->cc + 1, int); rowg = agopen("rowg", AGDIGRAPH); colg = agopen("colg", AGDIGRAPH); makeGraphs(tbl, rowg, colg); rank(rowg, 2, INT_MAX); rank(colg, 2, INT_MAX); setSizes(tbl, rowg, colg); closeGraphs(rowg, colg); }