-/* $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>
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;
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. */
mandoc_msg(MANDOCERR_TBLDATA_SPAN, tbl->parse,
ln, pos, dat->string);
- return(0);
+ return 0;
}
static struct tbl_span *
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