-/* $Id: tbl_layout.c,v 1.13 2011/01/09 05:38:23 joerg Exp $ */
+/* $Id: tbl_layout.c,v 1.14 2011/01/10 14:40:30 kristaps Exp $ */
/*
* Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
/*
* 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)++;