=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mdoc_validate.c,v retrieving revision 1.250 retrieving revision 1.251 diff -c -r1.250 -r1.251 *** src/usr.bin/mandoc/mdoc_validate.c 2017/06/11 14:10:24 1.250 --- src/usr.bin/mandoc/mdoc_validate.c 2017/06/11 17:16:36 1.251 *************** *** 1,4 **** ! /* $OpenBSD: mdoc_validate.c,v 1.250 2017/06/11 14:10:24 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze --- 1,4 ---- ! /* $OpenBSD: mdoc_validate.c,v 1.251 2017/06/11 17:16:36 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze *************** *** 51,60 **** static int build_list(struct roff_man *, int); static void check_text(struct roff_man *, int, int, char *); - static void check_bsd(struct roff_man *, int, int, char *); static void check_argv(struct roff_man *, struct roff_node *, struct mdoc_argv *); static void check_args(struct roff_man *, struct roff_node *); static int child_an(const struct roff_node *); static size_t macro2len(enum roff_tok); static void rewrite_macro2len(struct roff_man *, char **); --- 51,60 ---- static int build_list(struct roff_man *, int); static void check_text(struct roff_man *, int, int, char *); static void check_argv(struct roff_man *, struct roff_node *, struct mdoc_argv *); static void check_args(struct roff_man *, struct roff_node *); + static void check_toptext(struct roff_man *, int, int, const char *); static int child_an(const struct roff_node *); static size_t macro2len(enum roff_tok); static void rewrite_macro2len(struct roff_man *, char **); *************** *** 302,311 **** if (n->sec != SEC_SYNOPSIS || (n->parent->tok != MDOC_Cd && n->parent->tok != MDOC_Fd)) check_text(mdoc, n->line, n->pos, n->string); ! if (n->parent->tok == MDOC_Sh || ! n->parent->tok == MDOC_Ss || ! n->parent->tok == MDOC_It) ! check_bsd(mdoc, n->line, n->pos, n->string); break; case ROFFT_EQN: case ROFFT_TBL: --- 302,312 ---- if (n->sec != SEC_SYNOPSIS || (n->parent->tok != MDOC_Cd && n->parent->tok != MDOC_Fd)) check_text(mdoc, n->line, n->pos, n->string); ! if (n->parent->tok == MDOC_It || ! (n->parent->type == ROFFT_BODY && ! (n->parent->tok == MDOC_Sh || ! n->parent->tok == MDOC_Ss))) ! check_toptext(mdoc, n->line, n->pos, n->string); break; case ROFFT_EQN: case ROFFT_TBL: *************** *** 388,397 **** } static void ! check_bsd(struct roff_man *mdoc, int ln, int pos, char *p) { ! const char *cp; if ((cp = strstr(p, "OpenBSD")) != NULL) mandoc_msg(MANDOCERR_BX, mdoc->parse, ln, pos + (cp - p), "Ox"); --- 389,401 ---- } static void ! check_toptext(struct roff_man *mdoc, int ln, int pos, const char *p) { ! const char *cp, *cpr; + if (*p == '\0') + return; + if ((cp = strstr(p, "OpenBSD")) != NULL) mandoc_msg(MANDOCERR_BX, mdoc->parse, ln, pos + (cp - p), "Ox"); *************** *** 404,409 **** --- 408,426 ---- if ((cp = strstr(p, "DragonFly")) != NULL) mandoc_msg(MANDOCERR_BX, mdoc->parse, ln, pos + (cp - p), "Dx"); + + cp = p; + while ((cp = strstr(cp + 1, "()")) != NULL) { + for (cpr = cp - 1; cpr >= p; cpr--) + if (*cpr != '_' && !isalnum((unsigned char)*cpr)) + break; + if ((cpr < p || *cpr == ' ') && cpr + 1 < cp) { + cpr++; + mandoc_vmsg(MANDOCERR_FUNC, mdoc->parse, + ln, pos + (cpr - p), + "%.*s()", (int)(cp - cpr), cpr); + } + } } static void