X-Git-Url: https://git.cameronkatri.com/mandoc.git/blobdiff_plain/74fefd1ac6f4b27426d1a6a6dc64e5c52b84945d..9b509b028c7418fa035a3af3c5f783a61f4abf33:/out.c diff --git a/out.c b/out.c index f12a6439..9a08f6ec 100644 --- a/out.c +++ b/out.c @@ -1,6 +1,6 @@ -/* $Id: out.c,v 1.31 2011/01/08 17:00:27 kristaps Exp $ */ +/* $Id: out.c,v 1.36 2011/01/25 12:07:30 schwarze Exp $ */ /* - * Copyright (c) 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -399,8 +399,7 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp) * to data cells in the data section. */ for (dp = sp->first; dp; dp = dp->next) { - if (NULL == dp->layout) - continue; + assert(dp->layout); col = &tbl->cols[dp->layout->head->ident]; tblcalc_data(tbl, col, sp->tbl, dp); } @@ -454,6 +453,8 @@ tblcalc_data(struct rofftbl *tbl, struct roffcol *col, case (TBL_CELL_NUMBER): tblcalc_number(tbl, col, tp, dp); break; + case (TBL_CELL_DOWN): + break; default: abort(); /* NOTREACHED */ @@ -465,6 +466,7 @@ tblcalc_literal(struct rofftbl *tbl, struct roffcol *col, const struct tbl_dat *dp) { size_t sz, bufsz, spsz; + const char *str; /* * Calculate our width and use the spacing, with a minimum @@ -472,16 +474,18 @@ tblcalc_literal(struct rofftbl *tbl, struct roffcol *col, * either side, while right/left get a single adjacent space). */ - sz = bufsz = spsz = 0; - if (dp->string) - sz = (*tbl->slen)(dp->string, tbl->arg); + bufsz = spsz = 0; + str = dp->string ? dp->string : ""; + sz = (*tbl->slen)(str, tbl->arg); + + /* FIXME: TBL_DATA_HORIZ et al.? */ assert(dp->layout); switch (dp->layout->pos) { case (TBL_CELL_LONG): /* FALLTHROUGH */ case (TBL_CELL_CENTRE): - bufsz = (*tbl->len)(2, tbl->arg); + bufsz = (*tbl->len)(1, tbl->arg); break; default: bufsz = (*tbl->len)(1, tbl->arg); @@ -503,9 +507,9 @@ tblcalc_number(struct rofftbl *tbl, struct roffcol *col, const struct tbl *tp, const struct tbl_dat *dp) { int i; - size_t sz, psz, ssz, d, max; - char *cp; + size_t sz, psz, ssz, d; const char *str; + char *cp; char buf[2]; /* @@ -517,17 +521,17 @@ tblcalc_number(struct rofftbl *tbl, struct roffcol *col, * Finally, re-assign the stored values. */ - str = dp && dp->string ? dp->string : ""; - max = dp && dp->layout ? dp->layout->spacing : 0; - + str = dp->string ? dp->string : ""; sz = (*tbl->slen)(str, tbl->arg); + /* FIXME: TBL_DATA_HORIZ et al.? */ + buf[0] = tp->decimal; buf[1] = '\0'; psz = (*tbl->slen)(buf, tbl->arg); - if (NULL != (cp = strchr(str, tp->decimal))) { + if (NULL != (cp = strrchr(str, tp->decimal))) { buf[1] = '\0'; for (ssz = 0, i = 0; cp != &str[i]; i++) { buf[0] = str[i]; @@ -557,8 +561,8 @@ tblcalc_number(struct rofftbl *tbl, struct roffcol *col, /* Adjust for stipulated width. */ - if (col->width < max) - col->width = max; + if (col->width < dp->layout->spacing) + col->width = dp->layout->spacing; }