=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mdoc_validate.c,v retrieving revision 1.226 retrieving revision 1.227 diff -c -r1.226 -r1.227 *** src/usr.bin/mandoc/mdoc_validate.c 2016/12/28 17:21:17 1.226 --- src/usr.bin/mandoc/mdoc_validate.c 2017/01/08 00:10:22 1.227 *************** *** 1,7 **** ! /* $OpenBSD: mdoc_validate.c,v 1.226 2016/12/28 17:21:17 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons ! * Copyright (c) 2010-2016 Ingo Schwarze * Copyright (c) 2010 Joerg Sonnenberger * * Permission to use, copy, modify, and distribute this software for any --- 1,7 ---- ! /* $OpenBSD: mdoc_validate.c,v 1.227 2017/01/08 00:10:22 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons ! * Copyright (c) 2010-2017 Ingo Schwarze * Copyright (c) 2010 Joerg Sonnenberger * * Permission to use, copy, modify, and distribute this software for any *************** *** 842,853 **** n->last->tok == MDOC_Lp)) mdoc_node_relink(mdoc, n->last); - if (mdoc->meta.name != NULL) - return; - - deroff(&mdoc->meta.name, n); - if (mdoc->meta.name == NULL) mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse, n->line, n->pos, "Nm"); } --- 842,852 ---- n->last->tok == MDOC_Lp)) mdoc_node_relink(mdoc, n->last); if (mdoc->meta.name == NULL) + deroff(&mdoc->meta.name, n); + + if (mdoc->meta.name == NULL || + (mdoc->lastsec == SEC_NAME && n->child == NULL)) mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse, n->line, n->pos, "Nm"); } *************** *** 1589,1596 **** for (n = mdoc->last->child; n != NULL; n = n->next) { switch (n->tok) { case MDOC_Nm: hasnm = 1; ! break; case MDOC_Nd: hasnd = 1; if (n->next != NULL) --- 1588,1599 ---- for (n = mdoc->last->child; n != NULL; n = n->next) { switch (n->tok) { case MDOC_Nm: + if (hasnm && n->child != NULL) + mandoc_vmsg(MANDOCERR_NAMESEC_PUNCT, + mdoc->parse, n->line, n->pos, + "Nm %s", n->child->string); hasnm = 1; ! continue; case MDOC_Nd: hasnd = 1; if (n->next != NULL) *************** *** 1598,1611 **** mdoc->parse, n->line, n->pos, NULL); break; case TOKEN_NONE: ! if (hasnm) ! break; /* FALLTHROUGH */ default: mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse, n->line, n->pos, mdoc_macronames[n->tok]); ! break; } } if ( ! hasnm) --- 1601,1619 ---- mdoc->parse, n->line, n->pos, NULL); break; case TOKEN_NONE: ! if (n->type == ROFFT_TEXT && ! n->string[0] == ',' && n->string[1] == '\0' && ! n->next != NULL && n->next->tok == MDOC_Nm) { ! n = n->next; ! continue; ! } /* FALLTHROUGH */ default: mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse, n->line, n->pos, mdoc_macronames[n->tok]); ! continue; } + break; } if ( ! hasnm)