]> git.cameronkatri.com Git - mandoc.git/blobdiff - tbl_layout.c
First, make extra data cells be thrown away. This makes "dp->layout"
[mandoc.git] / tbl_layout.c
index 59490ad4d9195b6221b0b4d10bb3aa4d3a2d7418..12d53fad2e6a41e7d97bc05e5413149a019cb7a6 100644 (file)
@@ -1,4 +1,4 @@
-/*     $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>
  *
@@ -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)++;