diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-01-10 14:40:30 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-01-10 14:40:30 +0000 |
commit | dede963eacb17dcdbe0624bf76ab3f4045147541 (patch) | |
tree | c83ed7ba5f2d938f2f5cd04b659ac67d5da157ee /tbl_layout.c | |
parent | 4f674421b17961b1c6630a984ebea196eb7eed7a (diff) | |
download | mandoc-dede963eacb17dcdbe0624bf76ab3f4045147541.tar.gz |
First, make extra data cells be thrown away. This makes "dp->layout"
always hold, which cleans up the table stuff a bit.
Second, set a "spans" value per data cell consisting of the number of
skipped TBL_CELL_SPAN layout cells.
Third, make tbl_term.c understand how to skip over spanned sections when
iterating over the header queue.
What remains is to calculate the widths of spanned cells.
Diffstat (limited to 'tbl_layout.c')
-rw-r--r-- | tbl_layout.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/tbl_layout.c b/tbl_layout.c index cc4fdfb5..ea93f645 100644 --- a/tbl_layout.c +++ b/tbl_layout.c @@ -197,12 +197,27 @@ cell(struct tbl_node *tbl, struct tbl_row *rp, /* * If a span cell is found first, raise a warning and abort the - * parse. FIXME: recover from this somehow? + * parse. If a span cell is found and the last layout element + * isn't a "normal" layout, bail. + * + * FIXME: recover from this somehow? */ - if (NULL == rp->first && TBL_CELL_SPAN == c) { - TBL_MSG(tbl, MANDOCERR_TBLLAYOUT, ln, *pos); - return(0); + if (TBL_CELL_SPAN == c) { + if (NULL == rp->first) { + TBL_MSG(tbl, MANDOCERR_TBLLAYOUT, ln, *pos); + return(0); + } else if (rp->last) + switch (rp->last->pos) { + case (TBL_CELL_VERT): + case (TBL_CELL_DVERT): + case (TBL_CELL_HORIZ): + case (TBL_CELL_DHORIZ): + TBL_MSG(tbl, MANDOCERR_TBLLAYOUT, ln, *pos); + return(0); + default: + break; + } } (*pos)++; |