=================================================================== RCS file: /cvs/mandoc/roff.c,v retrieving revision 1.254 retrieving revision 1.258 diff -u -p -r1.254 -r1.258 --- mandoc/roff.c 2015/01/23 00:42:00 1.254 +++ mandoc/roff.c 2015/01/28 17:32:07 1.258 @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.254 2015/01/23 00:42:00 schwarze Exp $ */ +/* $Id: roff.c,v 1.258 2015/01/28 17:32:07 schwarze Exp $ */ /* * Copyright (c) 2010, 2011, 2012, 2014 Kristaps Dzonsons * Copyright (c) 2010-2015 Ingo Schwarze @@ -179,7 +179,7 @@ enum rofft { ROFF_minss, ROFF_mk, ROFF_mso, - /* MAN_na; ignored in mdoc(7) */ + ROFF_na, ROFF_ne, /* MAN_nf; ignored in mdoc(7) */ ROFF_nh, @@ -580,6 +580,7 @@ static struct roffmac roffs[ROFF_MAX] = { { "minss", roff_line_ignore, NULL, NULL, 0, NULL }, { "mk", roff_line_ignore, NULL, NULL, 0, NULL }, { "mso", roff_insec, NULL, NULL, 0, NULL }, + { "na", roff_line_ignore, NULL, NULL, 0, NULL }, { "ne", roff_line_ignore, NULL, NULL, 0, NULL }, { "nh", roff_line_ignore, NULL, NULL, 0, NULL }, { "nhychar", roff_line_ignore, NULL, NULL, 0, NULL }, @@ -608,7 +609,7 @@ static struct roffmac roffs[ROFF_MAX] = { { "po", roff_line_ignore, NULL, NULL, 0, NULL }, { "ps", roff_line_ignore, NULL, NULL, 0, NULL }, { "psbb", roff_unsupp, NULL, NULL, 0, NULL }, - { "pshape", roff_line_ignore, NULL, NULL, 0, NULL }, + { "pshape", roff_unsupp, NULL, NULL, 0, NULL }, { "pso", roff_insec, NULL, NULL, 0, NULL }, { "ptr", roff_line_ignore, NULL, NULL, 0, NULL }, { "pvs", roff_line_ignore, NULL, NULL, 0, NULL }, @@ -640,11 +641,11 @@ static struct roffmac roffs[ROFF_MAX] = { { "sv", roff_line_ignore, NULL, NULL, 0, NULL }, { "sy", roff_insec, NULL, NULL, 0, NULL }, { "T&", roff_T_, NULL, NULL, 0, NULL }, - { "ta", roff_line_ignore, NULL, NULL, 0, NULL }, + { "ta", roff_unsupp, NULL, NULL, 0, NULL }, { "tc", roff_unsupp, NULL, NULL, 0, NULL }, { "TE", roff_TE, NULL, NULL, 0, NULL }, { "TH", roff_TH, NULL, NULL, 0, NULL }, - { "ti", roff_line_ignore, NULL, NULL, 0, NULL }, + { "ti", roff_unsupp, NULL, NULL, 0, NULL }, { "tkf", roff_line_ignore, NULL, NULL, 0, NULL }, { "tl", roff_unsupp, NULL, NULL, 0, NULL }, { "tm", roff_line_ignore, NULL, NULL, 0, NULL }, @@ -1236,7 +1237,13 @@ roff_parseln(struct roff *r, int ln, struct buf *buf, if (r->tbl != NULL && (t == ROFF_MAX || t == ROFF_TS)) { mandoc_msg(MANDOCERR_TBLMACRO, r->parse, ln, pos, buf->buf + spos); - return(ROFF_IGN); + if (t == ROFF_TS) + return(ROFF_IGN); + while (buf->buf[pos] != '\0' && buf->buf[pos] != ' ') + pos++; + while (buf->buf[pos] != '\0' && buf->buf[pos] == ' ') + pos++; + return(tbl_read(r->tbl, ln, buf->buf, pos)); } /* @@ -2369,9 +2376,12 @@ roff_TE(ROFF_ARGS) if (NULL == r->tbl) mandoc_msg(MANDOCERR_BLK_NOTOPEN, r->parse, ln, ppos, "TE"); - else - tbl_end(&r->tbl); - + else if ( ! tbl_end(&r->tbl)) { + free(buf->buf); + buf->buf = mandoc_strdup(".sp"); + buf->sz = 4; + return(ROFF_REPARSE); + } return(ROFF_IGN); }