=================================================================== RCS file: /cvs/mandoc/tbl_data.c,v retrieving revision 1.37 retrieving revision 1.41 diff -u -p -r1.37 -r1.41 --- mandoc/tbl_data.c 2015/01/30 02:09:04 1.37 +++ mandoc/tbl_data.c 2015/10/06 18:32:20 1.41 @@ -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 * Copyright (c) 2011, 2015 Ingo Schwarze @@ -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; + /* Advance to the next layout cell, skipping spanners. */ - /* - * Skip over spanners, since - * we want to match data with data layout cells in the header. - */ - + 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, 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, 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 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