]> git.cameronkatri.com Git - mandoc.git/commitdiff
Tiny bits in place for tbl horizontal spans. This will wait for the next
authorKristaps Dzonsons <kristaps@bsd.lv>
Fri, 7 Jan 2011 13:03:48 +0000 (13:03 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Fri, 7 Jan 2011 13:03:48 +0000 (13:03 +0000)
release to be implemented in full.

tbl_data.c
tbl_layout.c

index 030f8c1236fb4e878fca020c92d9d4064ee2df0d..49796346bb836df168f7d4559883da8e75306af9 100644 (file)
@@ -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 <kristaps@bsd.lv>
  *
@@ -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));
index 1f18118acd101da40fbc3ded364e82a4a3826378..c5686c047e92faec9a25db28176e1423d47e85c8 100644 (file)
@@ -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 <kristaps@bsd.lv>
  *
@@ -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]) {