summaryrefslogtreecommitdiffstats
path: root/tbl_data.c
diff options
context:
space:
mode:
Diffstat (limited to 'tbl_data.c')
-rw-r--r--tbl_data.c74
1 files changed, 30 insertions, 44 deletions
diff --git a/tbl_data.c b/tbl_data.c
index 96cdd5b9..77c04cf2 100644
--- a/tbl_data.c
+++ b/tbl_data.c
@@ -42,20 +42,16 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
{
struct tbl_dat *dat;
struct tbl_cell *cp;
- int sv, spans;
+ int sv;
- cp = NULL;
- if (dp->last && dp->last->layout)
- cp = dp->last->layout->next;
- else if (NULL == dp->last)
- cp = dp->layout->first;
+ 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.
*/
- while (cp && TBL_CELL_SPAN == cp->pos)
+ while (cp != NULL && cp->pos == TBL_CELL_SPAN)
cp = cp->next;
/*
@@ -63,7 +59,7 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
* cells. This means that we have extra input.
*/
- if (NULL == cp) {
+ if (cp == NULL) {
mandoc_msg(MANDOCERR_TBLDATA_EXTRA, tbl->parse,
ln, *pos, p + *pos);
/* Skip to the end... */
@@ -72,25 +68,21 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
return;
}
- dat = mandoc_calloc(1, sizeof(struct tbl_dat));
+ dat = mandoc_calloc(1, sizeof(*dat));
dat->layout = cp;
dat->pos = TBL_DATA_NONE;
-
- assert(TBL_CELL_SPAN != cp->pos);
-
- for (spans = 0, cp = cp->next; cp; cp = cp->next)
- if (TBL_CELL_SPAN == cp->pos)
- spans++;
+ dat->spans = 0;
+ for (cp = cp->next; cp != NULL; cp = cp->next)
+ if (cp->pos == TBL_CELL_SPAN)
+ dat->spans++;
else
break;
- dat->spans = spans;
-
- if (dp->last) {
+ if (dp->last == NULL)
+ dp->first = dat;
+ else
dp->last->next = dat;
- dp->last = dat;
- } else
- dp->last = dp->first = dat;
+ dp->last = dat;
sv = *pos;
while (p[*pos] && p[*pos] != tbl->opts.tab)
@@ -102,16 +94,12 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
* until a standalone `T}', are included in our cell.
*/
- if (*pos - sv == 2 && 'T' == p[sv] && '{' == p[sv + 1]) {
+ if (*pos - sv == 2 && p[sv] == 'T' && p[sv + 1] == '{') {
tbl->part = TBL_PART_CDATA;
return;
}
- assert(*pos - sv >= 0);
-
- dat->string = mandoc_malloc((size_t)(*pos - sv + 1));
- memcpy(dat->string, &p[sv], (size_t)(*pos - sv));
- dat->string[*pos - sv] = '\0';
+ dat->string = mandoc_strndup(p + sv, *pos - sv);
if (p[*pos])
(*pos)++;
@@ -127,14 +115,12 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
else
dat->pos = TBL_DATA_DATA;
- if (TBL_CELL_HORIZ == dat->layout->pos ||
- TBL_CELL_DHORIZ == dat->layout->pos ||
- TBL_CELL_DOWN == dat->layout->pos)
- if (TBL_DATA_DATA == dat->pos && '\0' != *dat->string)
- mandoc_msg(MANDOCERR_TBLDATA_SPAN,
- tbl->parse, ln, sv, dat->string);
-
- return;
+ if ((dat->layout->pos == TBL_CELL_HORIZ ||
+ dat->layout->pos == TBL_CELL_DHORIZ ||
+ dat->layout->pos == TBL_CELL_DOWN) &&
+ dat->pos == TBL_DATA_DATA && *dat->string != '\0')
+ mandoc_msg(MANDOCERR_TBLDATA_SPAN,
+ tbl->parse, ln, sv, dat->string);
}
int
@@ -152,7 +138,7 @@ tbl_cdata(struct tbl_node *tbl, int ln, const char *p, int pos)
pos++;
getdata(tbl, tbl->last_span, ln, p, &pos);
return(1);
- } else if ('\0' == p[pos]) {
+ } else if (p[pos] == '\0') {
tbl->part = TBL_PART_DATA;
return(1);
}
@@ -162,7 +148,7 @@ tbl_cdata(struct tbl_node *tbl, int ln, const char *p, int pos)
dat->pos = TBL_DATA_DATA;
- if (dat->string) {
+ if (dat->string != NULL) {
sz = strlen(p + pos) + strlen(dat->string) + 2;
dat->string = mandoc_realloc(dat->string, sz);
(void)strlcat(dat->string, " ", sz);
@@ -170,7 +156,7 @@ tbl_cdata(struct tbl_node *tbl, int ln, const char *p, int pos)
} else
dat->string = mandoc_strdup(p + pos);
- if (TBL_CELL_DOWN == dat->layout->pos)
+ if (dat->layout->pos == TBL_CELL_DOWN)
mandoc_msg(MANDOCERR_TBLDATA_SPAN, tbl->parse,
ln, pos, dat->string);
@@ -182,7 +168,7 @@ newspan(struct tbl_node *tbl, int line, struct tbl_row *rp)
{
struct tbl_span *dp;
- dp = mandoc_calloc(1, sizeof(struct tbl_span));
+ dp = mandoc_calloc(1, sizeof(*dp));
dp->line = line;
dp->opts = &tbl->opts;
dp->layout = rp;
@@ -214,11 +200,11 @@ tbl_data(struct tbl_node *tbl, int ln, const char *p, int pos)
* (it doesn't "consume" the layout).
*/
- if (tbl->last_span) {
- assert(tbl->last_span->layout);
+ if (tbl->last_span != NULL) {
if (tbl->last_span->pos == TBL_SPAN_DATA) {
for (rp = tbl->last_span->layout->next;
- rp && rp->first; rp = rp->next) {
+ rp != NULL && rp->first != NULL;
+ rp = rp->next) {
switch (rp->first->pos) {
case TBL_CELL_HORIZ:
dp = newspan(tbl, ln, rp);
@@ -236,7 +222,7 @@ tbl_data(struct tbl_node *tbl, int ln, const char *p, int pos)
} else
rp = tbl->last_span->layout;
- if (NULL == rp)
+ if (rp == NULL)
rp = tbl->last_span->layout;
} else
rp = tbl->first_row;
@@ -255,6 +241,6 @@ tbl_data(struct tbl_node *tbl, int ln, const char *p, int pos)
dp->pos = TBL_SPAN_DATA;
- while ('\0' != p[pos])
+ while (p[pos] != '\0')
getdata(tbl, dp, ln, p, &pos);
}