=================================================================== RCS file: /cvs/mandoc/mdoc_validate.c,v retrieving revision 1.376 retrieving revision 1.377 diff -u -p -r1.376 -r1.377 --- mandoc/mdoc_validate.c 2020/01/19 16:44:50 1.376 +++ mandoc/mdoc_validate.c 2020/01/19 18:02:00 1.377 @@ -1,4 +1,4 @@ -/* $Id: mdoc_validate.c,v 1.376 2020/01/19 16:44:50 schwarze Exp $ */ +/* $Id: mdoc_validate.c,v 1.377 2020/01/19 18:02:00 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2020 Ingo Schwarze @@ -113,6 +113,7 @@ static void post_sm(POST_ARGS); static void post_st(POST_ARGS); static void post_std(POST_ARGS); static void post_sx(POST_ARGS); +static void post_tg(POST_ARGS); static void post_useless(POST_ARGS); static void post_xr(POST_ARGS); static void post_xx(POST_ARGS); @@ -238,6 +239,7 @@ static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = NULL, /* %Q */ NULL, /* %U */ NULL, /* Ta */ + post_tg, /* Tg */ }; #define RSORD_MAX 14 /* Number of `Rs' blocks. */ @@ -1090,6 +1092,41 @@ post_st(POST_ARGS) } static void +post_tg(POST_ARGS) +{ + struct roff_node *n, *nch; + size_t len; + + n = mdoc->last; + nch = n->child; + if (nch == NULL && n->next != NULL && + n->next->child->type == ROFFT_TEXT) { + mdoc->next = ROFF_NEXT_CHILD; + roff_word_alloc(mdoc, n->line, n->pos, n->next->child->string); + nch = mdoc->last; + nch->flags |= NODE_NOSRC; + mdoc->last = n; + } + if (nch == NULL || *nch->string == '\0') { + mandoc_msg(MANDOCERR_MACRO_EMPTY, n->line, n->pos, "Tg"); + roff_node_delete(mdoc, n); + return; + } + len = strcspn(nch->string, " \t"); + if (nch->string[len] != '\0') + mandoc_msg(MANDOCERR_TG_SPC, nch->line, nch->pos + len + 1, + "Tg %s", nch->string); + if (nch->next != NULL) { + mandoc_msg(MANDOCERR_ARG_EXCESS, nch->next->line, + nch->next->pos, "Tg ... %s", nch->next->string); + while (nch->next != NULL) + roff_node_delete(mdoc, nch->next); + } + if (nch->string[len] != '\0') + roff_node_delete(mdoc, n); +} + +static void post_obsolete(POST_ARGS) { struct roff_node *n; @@ -1754,7 +1791,7 @@ post_bl(POST_ARGS) while (nchild != NULL) { nnext = nchild->next; if (nchild->tok == MDOC_It || - (nchild->tok == MDOC_Sm && + ((nchild->tok == MDOC_Sm || nchild->tok == MDOC_Tg) && nnext != NULL && nnext->tok == MDOC_It)) { nchild = nnext; continue;