From: Kristaps Dzonsons Date: Fri, 7 Jan 2011 13:03:48 +0000 (+0000) Subject: Tiny bits in place for tbl horizontal spans. This will wait for the next X-Git-Tag: VERSION_1_10_9~4 X-Git-Url: https://git.cameronkatri.com/mandoc.git/commitdiff_plain/1b34a34ad88d37d2f79fb6f88d6de6b929963b55 Tiny bits in place for tbl horizontal spans. This will wait for the next release to be implemented in full. --- diff --git a/tbl_data.c b/tbl_data.c index 030f8c12..49796346 100644 --- a/tbl_data.c +++ b/tbl_data.c @@ -1,4 +1,4 @@ -/* $Id: tbl_data.c,v 1.11 2011/01/04 15:02:00 kristaps Exp $ */ +/* $Id: tbl_data.c,v 1.12 2011/01/07 13:03:48 kristaps Exp $ */ /* * Copyright (c) 2009, 2010 Kristaps Dzonsons * @@ -45,10 +45,14 @@ data(struct tbl_node *tbl, struct tbl_span *dp, else if (NULL == dp->last) cp = dp->layout->first; - /* Skip over spanners to data formats. */ + /* + * Skip over spanners and vertical lines to data formats, since + * we want to match data with data layout cells in the header. + */ while (cp && (TBL_CELL_VERT == cp->pos || - TBL_CELL_DVERT == cp->pos)) + TBL_CELL_DVERT == cp->pos || + TBL_CELL_SPAN == cp->pos)) cp = cp->next; dat = mandoc_calloc(1, sizeof(struct tbl_dat)); diff --git a/tbl_layout.c b/tbl_layout.c index 1f18118a..c5686c04 100644 --- a/tbl_layout.c +++ b/tbl_layout.c @@ -1,4 +1,4 @@ -/* $Id: tbl_layout.c,v 1.10 2011/01/04 23:48:39 schwarze Exp $ */ +/* $Id: tbl_layout.c,v 1.11 2011/01/07 13:03:48 kristaps Exp $ */ /* * Copyright (c) 2009, 2010 Kristaps Dzonsons * @@ -29,6 +29,12 @@ struct tbl_phrase { enum tbl_cellt key; }; +/* + * FIXME: we can make this parse a lot nicer by, when an error is + * encountered in a layout key, bailing to the next key (i.e. to the + * next whitespace then continuing). + */ + #define KEYS_MAX 11 static const struct tbl_phrase keys[KEYS_MAX] = { @@ -173,9 +179,20 @@ cell(struct tbl_node *tbl, struct tbl_row *rp, return(0); } - (*pos)++; c = keys[i].key; + /* + * If a span cell is found first, raise a warning and abort the + * parse. FIXME: recover from this somehow? + */ + + if (NULL == rp->first && TBL_CELL_SPAN == c) { + TBL_MSG(tbl, MANDOCERR_TBLLAYOUT, ln, *pos); + return(0); + } + + (*pos)++; + /* Extra check for the double-vertical. */ if (TBL_CELL_VERT == c && '|' == p[*pos]) {