+ descent = h - ascent + 2;
+
+ // Increase ws_[i] for 'R' columns (except the first one)
+ for (int i = 1; i < nc_; ++i)
+ if (h_align_[i] == 'R')
+ ws_[i] += 10 * df_width;
+ // Increase ws_[i] for 'C' column
+ if (h_align_[0] == 'C')
+ if (ws_[0] < 7 * workWidth / 8)
+ ws_[0] = 7 * workWidth / 8;
+
+ // Adjust local tabs
+ width = MATH_COLSEP;
+ for (cxrow = row_.begin(); cxrow; ++cxrow) {
+ int rg = MATH_COLSEP;
+ int lf = 0;
+ for (int i = 0; i < nc_; ++i) {
+ bool isvoid = false;
+ if (cxrow->getTab(i) <= 0) {
+ cxrow->setTab(i, df_width);
+ isvoid = true;
+ }
+ switch (h_align_[i]) {
+ case 'l':
+ lf = 0;
+ break;
+ case 'c':
+ lf = (ws_[i] - cxrow->getTab(i))/2;
+ break;
+ case 'r':
+ case 'R':
+ lf = ws_[i] - cxrow->getTab(i);
+ break;
+ case 'C':
+ if (cxrow == row_.begin())
+ lf = 0;
+ else if (cxrow.is_last())
+ lf = ws_[i] - cxrow->getTab(i);
+ else
+ lf = (ws_[i] - cxrow->getTab(i))/2;
+ break;
+ }
+ int const ww = (isvoid) ? lf : lf + cxrow->getTab(i);
+ cxrow->setTab(i, lf + rg);
+ rg = ws_[i] - ww + MATH_COLSEP;
+ if (cxrow == row_.begin())
+ width += ws_[i] + MATH_COLSEP;
+ }
+ cxrow->setBaseline(cxrow->getBaseline() - ascent);
+ }