-static void
-tbl_calc_data_spanner(struct tbl_dat *data)
-{
-
- /* N.B., these are horiz spanners (not vert) so always 1. */
- data->layout->head->width = 1;
-}
-
-static void
-tbl_calc_data_number(struct tbl_node *tbl, struct tbl_dat *data)
-{
- int sz, d;
- char *dp, pnt;
-
- /*
- * First calculate number width and decimal place (last + 1 for
- * no-decimal numbers). If the stored decimal is subsequent
- * ours, make our size longer by that difference
- * (right-"shifting"); similarly, if ours is subsequent the
- * stored, then extend the stored size by the difference.
- * Finally, re-assign the stored values.
- */
-
- /* TODO: use spacing modifier. */
-
- assert(data->string);
- sz = (int)strlen(data->string);
- pnt = tbl->opts.decimal;
-
- if (NULL == (dp = strchr(data->string, pnt)))
- d = sz + 1;
- else
- d = (int)(dp - data->string) + 1;
-
- sz += 2;
-
- if (data->layout->head->decimal > d) {
- sz += data->layout->head->decimal - d;
- d = data->layout->head->decimal;
- } else
- data->layout->head->width +=
- d - data->layout->head->decimal;
-
- if (sz > data->layout->head->width)
- data->layout->head->width = sz;
- if (d > data->layout->head->decimal)
- data->layout->head->decimal = d;
-}
-
-static void
-tbl_calc_data_literal(struct tbl_dat *data)
-{
- int sz, bufsz;
-
- /*
- * Calculate our width and use the spacing, with a minimum
- * spacing dictated by position (centre, e.g,. gets a space on
- * either side, while right/left get a single adjacent space).
- */
-
- assert(data->string);
- sz = (int)strlen(data->string);
-
- switch (data->layout->pos) {
- case (TBL_CELL_LONG):
- /* FALLTHROUGH */
- case (TBL_CELL_CENTRE):
- bufsz = 2;
- break;
- default:
- bufsz = 1;
- break;
- }
-
- if (data->layout->spacing)
- bufsz = bufsz > data->layout->spacing ?
- bufsz : data->layout->spacing;
-
- sz += bufsz;
- if (data->layout->head->width < sz)
- data->layout->head->width = sz;
-}