On Nov 09 12:36:29, h...@stare.cz wrote: > Question: > > static int > child_an(const struct roff_node *n) > { > for (n = n->child; n != NULL; n = n->next) > if ((n->tok == MDOC_An && n->child != NULL) || child_an(n)) > return 1; > return 0; > } > > If I'm reading this right, it tests whether the given node has an An child; > the child_pa() below is an obvious modification. Does the recursive > child_an(n) mean that an An node can itself have an An child? > Similar question for child_pa() then.
Ah, just a child of a child, like an An inside a Bl inside AUTHORS. Sorry for the confusion. Jan > > Index: mandoc.1 > =================================================================== > RCS file: /cvs/src/usr.bin/mandoc/mandoc.1,v > retrieving revision 1.143 > diff -u -p -r1.143 mandoc.1 > --- mandoc.1 7 Sep 2017 14:22:58 -0000 1.143 > +++ mandoc.1 9 Nov 2017 11:28:44 -0000 > @@ -1171,6 +1171,12 @@ An AUTHORS sections contains no > .Ic \&An > macros, or only empty ones. > Probably, there are author names lacking markup. > +.It Sy "FILES section without Pa macro" > +.Pq mdoc > +A FILES sections contains no > +.Ic \&Pa > +macros, or only empty ones. > +Probably, there are file names lacking markup. > .El > .Ss "Warnings related to macros and nesting" > .Bl -ohang > Index: mandoc.h > =================================================================== > RCS file: /cvs/src/usr.bin/mandoc/mandoc.h,v > retrieving revision 1.187 > diff -u -p -r1.187 mandoc.h > --- mandoc.h 8 Jul 2017 14:51:01 -0000 1.187 > +++ mandoc.h 9 Nov 2017 11:28:44 -0000 > @@ -105,6 +105,7 @@ enum mandocerr { > MANDOCERR_XR_ORDER, /* unusual Xr order: ... after ... */ > MANDOCERR_XR_PUNCT, /* unusual Xr punctuation: ... after ... */ > MANDOCERR_AN_MISSING, /* AUTHORS section without An macro */ > + MANDOCERR_PA_MISSING, /* FILES section without Pa macro */ > > /* related to macros and nesting */ > MANDOCERR_MACRO_OBS, /* obsolete macro: macro */ > Index: mdoc_validate.c > =================================================================== > RCS file: /cvs/src/usr.bin/mandoc/mdoc_validate.c,v > retrieving revision 1.268 > diff -u -p -r1.268 mdoc_validate.c > --- mdoc_validate.c 12 Sep 2017 18:20:32 -0000 1.268 > +++ mdoc_validate.c 9 Nov 2017 11:28:44 -0000 > @@ -105,6 +105,7 @@ static void post_sh_head(POST_ARGS); > static void post_sh_name(POST_ARGS); > static void post_sh_see_also(POST_ARGS); > static void post_sh_authors(POST_ARGS); > +static void post_sh_files(POST_ARGS); > static void post_sm(POST_ARGS); > static void post_st(POST_ARGS); > static void post_std(POST_ARGS); > @@ -2080,6 +2081,9 @@ post_sh(POST_ARGS) > case SEC_AUTHORS: > post_sh_authors(mdoc); > break; > + case SEC_FILES: > + post_sh_files(mdoc); > + break; > default: > break; > } > @@ -2216,6 +2220,25 @@ post_sh_authors(POST_ARGS) > > if ( ! child_an(mdoc->last)) > mandoc_msg(MANDOCERR_AN_MISSING, mdoc->parse, > + mdoc->last->line, mdoc->last->pos, NULL); > +} > + > +static int > +child_pa(const struct roff_node *n) > +{ > + > + for (n = n->child; n != NULL; n = n->next) > + if ((n->tok == MDOC_Pa && n->child != NULL) || child_pa(n)) > + return 1; > + return 0; > +} > + > +static void > +post_sh_files(POST_ARGS) > +{ > + > + if ( ! child_pa(mdoc->last)) > + mandoc_msg(MANDOCERR_PA_MISSING, mdoc->parse, > mdoc->last->line, mdoc->last->pos, NULL); > } > > Index: read.c > =================================================================== > RCS file: /cvs/src/usr.bin/mandoc/read.c,v > retrieving revision 1.164 > diff -u -p -r1.164 read.c > --- read.c 20 Jul 2017 14:36:32 -0000 1.164 > +++ read.c 9 Nov 2017 11:28:44 -0000 > @@ -141,6 +141,7 @@ static const char * const mandocerrs[MAN > "unusual Xr order", > "unusual Xr punctuation", > "AUTHORS section without An macro", > + "FILES section without Pa macro", > > /* related to macros and nesting */ > "obsolete macro", >