]> git.cameronkatri.com Git - mandoc.git/blobdiff - tbl_data.c
preconv_encode() can take a const input buffer;
[mandoc.git] / tbl_data.c
index c1be2f37d0903537f40a0b3d58e715d986d4556e..40b756a05e1aace8082f9eea83c898abf6e7a148 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: tbl_data.c,v 1.37 2015/01/30 02:09:04 schwarze Exp $ */
+/*     $Id: tbl_data.c,v 1.41 2015/10/06 18:32:20 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -44,13 +44,9 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
        struct tbl_cell *cp;
        int              sv;
 
-       cp = dp->last == NULL ? dp->layout->first : dp->last->layout->next;
-
-       /*
-        * Skip over spanners, since
-        * we want to match data with data layout cells in the header.
-        */
+       /* Advance to the next layout cell, skipping spanners. */
 
+       cp = dp->last == NULL ? dp->layout->first : dp->last->layout->next;
        while (cp != NULL && cp->pos == TBL_CELL_SPAN)
                cp = cp->next;
 
@@ -136,11 +132,12 @@ tbl_cdata(struct tbl_node *tbl, int ln, const char *p, int pos)
                if (p[pos] == tbl->opts.tab) {
                        tbl->part = TBL_PART_DATA;
                        pos++;
-                       getdata(tbl, tbl->last_span, ln, p, &pos);
-                       return(1);
+                       while (p[pos] != '\0')
+                               getdata(tbl, tbl->last_span, ln, p, &pos);
+                       return 1;
                } else if (p[pos] == '\0') {
                        tbl->part = TBL_PART_DATA;
-                       return(1);
+                       return 1;
                }
 
                /* Fallthrough: T} is part of a word. */
@@ -160,7 +157,7 @@ tbl_cdata(struct tbl_node *tbl, int ln, const char *p, int pos)
                mandoc_msg(MANDOCERR_TBLDATA_SPAN, tbl->parse,
                    ln, pos, dat->string);
 
-       return(0);
+       return 0;
 }
 
 static struct tbl_span *
@@ -172,18 +169,16 @@ newspan(struct tbl_node *tbl, int line, struct tbl_row *rp)
        dp->line = line;
        dp->opts = &tbl->opts;
        dp->layout = rp;
-       dp->head = tbl->first_head;
        dp->prev = tbl->last_span;
 
        if (dp->prev == NULL) {
                tbl->first_span = dp;
                tbl->current_span = NULL;
-               dp->flags |= TBL_SPAN_FIRST;
        } else
                dp->prev->next = dp;
        tbl->last_span = dp;
 
-       return(dp);
+       return dp;
 }
 
 void