=================================================================== RCS file: /cvs/mandoc/tbl.c,v retrieving revision 1.34 retrieving revision 1.38 diff -u -p -r1.34 -r1.38 --- mandoc/tbl.c 2015/01/27 05:21:45 1.34 +++ mandoc/tbl.c 2015/01/30 04:11:50 1.38 @@ -1,4 +1,4 @@ -/* $Id: tbl.c,v 1.34 2015/01/27 05:21:45 schwarze Exp $ */ +/* $Id: tbl.c,v 1.38 2015/01/30 04:11:50 schwarze Exp $ */ /* * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2011, 2015 Ingo Schwarze @@ -32,7 +32,7 @@ enum rofferr -tbl_read(struct tbl_node *tbl, int ln, const char *p, int offs) +tbl_read(struct tbl_node *tbl, int ln, const char *p, int pos) { const char *cp; int active; @@ -46,7 +46,7 @@ tbl_read(struct tbl_node *tbl, int ln, const char *p, if (tbl->part == TBL_PART_OPTS) { tbl->part = TBL_PART_LAYOUT; active = 1; - for (cp = p; *cp != '\0'; cp++) { + for (cp = p + pos; *cp != '\0'; cp++) { switch (*cp) { case '(': active = 0; @@ -64,8 +64,8 @@ tbl_read(struct tbl_node *tbl, int ln, const char *p, break; } if (*cp == ';') { - tbl_option(tbl, ln, p); - if (*(p = cp + 1) == '\0') + tbl_option(tbl, ln, p, &pos); + if (p[pos] == '\0') return(ROFF_IGN); } } @@ -74,15 +74,15 @@ tbl_read(struct tbl_node *tbl, int ln, const char *p, switch (tbl->part) { case TBL_PART_LAYOUT: - tbl_layout(tbl, ln, p); + tbl_layout(tbl, ln, p, pos); return(ROFF_IGN); case TBL_PART_CDATA: - return(tbl_cdata(tbl, ln, p) ? ROFF_TBL : ROFF_IGN); + return(tbl_cdata(tbl, ln, p, pos) ? ROFF_TBL : ROFF_IGN); default: break; } - tbl_data(tbl, ln, p); + tbl_data(tbl, ln, p, pos); return(ROFF_TBL); } @@ -91,7 +91,7 @@ tbl_alloc(int pos, int line, struct mparse *parse) { struct tbl_node *tbl; - tbl = mandoc_calloc(1, sizeof(struct tbl_node)); + tbl = mandoc_calloc(1, sizeof(*tbl)); tbl->line = line; tbl->pos = pos; tbl->parse = parse; @@ -108,11 +108,10 @@ tbl_free(struct tbl_node *tbl) struct tbl_cell *cp; struct tbl_span *sp; struct tbl_dat *dp; - struct tbl_head *hp; - while (NULL != (rp = tbl->first_row)) { + while ((rp = tbl->first_row) != NULL) { tbl->first_row = rp->next; - while (rp->first) { + while (rp->first != NULL) { cp = rp->first; rp->first = cp->next; free(cp); @@ -120,40 +119,30 @@ tbl_free(struct tbl_node *tbl) free(rp); } - while (NULL != (sp = tbl->first_span)) { + while ((sp = tbl->first_span) != NULL) { tbl->first_span = sp->next; - while (sp->first) { + while (sp->first != NULL) { dp = sp->first; sp->first = dp->next; - if (dp->string) - free(dp->string); + free(dp->string); free(dp); } free(sp); } - while (NULL != (hp = tbl->first_head)) { - tbl->first_head = hp->next; - free(hp); - } - free(tbl); } void tbl_restart(int line, int pos, struct tbl_node *tbl) { - if (TBL_PART_CDATA == tbl->part) - mandoc_msg(MANDOCERR_TBLBLOCK, tbl->parse, - tbl->line, tbl->pos, NULL); + if (tbl->part == TBL_PART_CDATA) + mandoc_msg(MANDOCERR_TBLDATA_BLK, tbl->parse, + line, pos, "T&"); tbl->part = TBL_PART_LAYOUT; tbl->line = line; tbl->pos = pos; - - if (NULL == tbl->first_span || NULL == tbl->first_span->first) - mandoc_msg(MANDOCERR_TBLNODATA, tbl->parse, - tbl->line, tbl->pos, NULL); } const struct tbl_span * @@ -169,7 +158,7 @@ tbl_span(struct tbl_node *tbl) return(span); } -void +int tbl_end(struct tbl_node **tblp) { struct tbl_node *tbl; @@ -178,17 +167,21 @@ tbl_end(struct tbl_node **tblp) tbl = *tblp; *tblp = NULL; + if (tbl->part == TBL_PART_CDATA) + mandoc_msg(MANDOCERR_TBLDATA_BLK, tbl->parse, + tbl->line, tbl->pos, "TE"); + sp = tbl->first_span; while (sp != NULL && sp->first == NULL) sp = sp->next; - if (sp == NULL) - mandoc_msg(MANDOCERR_TBLNODATA, tbl->parse, + if (sp == NULL) { + mandoc_msg(MANDOCERR_TBLDATA_NONE, tbl->parse, tbl->line, tbl->pos, NULL); + return(0); + } - if (tbl->last_span) + if (tbl->last_span != NULL) tbl->last_span->flags |= TBL_SPAN_LAST; - if (TBL_PART_CDATA == tbl->part) - mandoc_msg(MANDOCERR_TBLBLOCK, tbl->parse, - tbl->line, tbl->pos, NULL); + return(1); }