=================================================================== RCS file: /cvs/mandoc/tbl_layout.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -p -r1.10 -r1.11 --- mandoc/tbl_layout.c 2011/01/04 23:48:39 1.10 +++ mandoc/tbl_layout.c 2011/01/07 13:03:48 1.11 @@ -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,8 +179,19 @@ 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. */