--- tbl_term.c.orig 2011-01-07 16:07:54.000000000 +0100 +++ tbl_term.c 2011-01-09 05:52:41.095174334 +0100 @@ -342,7 +342,7 @@ tbl_literal(struct termp *tp, const struct tbl_dat *dp, const struct roffcol *col) { - size_t padl, padr, ssz; + size_t padl, padr, ssz, tsz; enum tbl_cellt pos; const char *str; @@ -352,24 +352,37 @@ str = dp && dp->string ? dp->string : ""; ssz = term_len(tp, 1); + tsz = term_strlen(tp, str); switch (pos) { case (TBL_CELL_LONG): padl = ssz; - padr = col->width - term_strlen(tp, str) - ssz; + if (col->width >= tsz + ssz) + padr = col->width - tsz - ssz; + else + padr = 0; break; case (TBL_CELL_CENTRE): - padl = col->width - term_strlen(tp, str); + if (col->width >= tsz) + padl = col->width - tsz; + else + padl = 0; if (padl % 2) padr++; padl /= 2; padr += padl; break; case (TBL_CELL_RIGHT): - padl = col->width - term_strlen(tp, str); + if (col->width >= tsz) + padl = col->width - tsz; + else + padl = 0; break; default: - padr = col->width - term_strlen(tp, str); + if (col->width >= tsz) + padr = col->width - tsz; + else + padr = 0; break; }