=================================================================== RCS file: /cvs/mandoc/tbl.c,v retrieving revision 1.34 retrieving revision 1.40 diff -u -p -r1.34 -r1.40 --- mandoc/tbl.c 2015/01/27 05:21:45 1.34 +++ mandoc/tbl.c 2015/10/06 18:32:20 1.40 @@ -1,4 +1,4 @@ -/* $Id: tbl.c,v 1.34 2015/01/27 05:21:45 schwarze Exp $ */ +/* $Id: tbl.c,v 1.40 2015/10/06 18:32:20 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,9 +64,9 @@ tbl_read(struct tbl_node *tbl, int ln, const char *p, break; } if (*cp == ';') { - tbl_option(tbl, ln, p); - if (*(p = cp + 1) == '\0') - return(ROFF_IGN); + tbl_option(tbl, ln, p, &pos); + if (p[pos] == '\0') + return ROFF_IGN; } } @@ -74,16 +74,16 @@ tbl_read(struct tbl_node *tbl, int ln, const char *p, switch (tbl->part) { case TBL_PART_LAYOUT: - tbl_layout(tbl, ln, p); - return(ROFF_IGN); + 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); - return(ROFF_TBL); + tbl_data(tbl, ln, p, pos); + return ROFF_TBL; } struct tbl_node * @@ -91,14 +91,14 @@ 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; tbl->part = TBL_PART_OPTS; tbl->opts.tab = '\t'; tbl->opts.decimal = '.'; - return(tbl); + return tbl; } void @@ -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 * @@ -166,10 +155,10 @@ tbl_span(struct tbl_node *tbl) : tbl->first_span; if (span) tbl->current_span = span; - return(span); + return span; } -void +int tbl_end(struct tbl_node **tblp) { struct tbl_node *tbl; @@ -178,17 +167,17 @@ 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); - - if (tbl->last_span) - 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 0; + } + return 1; }