Re: Sh FILES without Pa
On Thu, Nov 09, 2017 at 12:36:29PM +0100, Jan Stary wrote: > Hi Ingo, > > currently, mandoc DIAGNOSTICS recognizes an AUTHORS section without An. > Would it be similarly useful to recognize a FILES section without Pa? > personally this is one warning that i don;t like from mandoc. it flags up things when there is no issue. i like the idea of "No Pa" even less. i'd rather see the current AUTHORS warning removed than this be expanded. jmc
Re: Sh FILES without Pa
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 - 1.143 > +++ mandoc.1 9 Nov 2017 11:28:44 - > @@ -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 - 1.187 > +++ mandoc.h 9 Nov 2017 11:28:44 - > @@ -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 - 1.268 > +++ mdoc_validate.c 9 Nov 2017 11:28:44 - > @@ -105,6 +105,7 @@ staticvoid 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.c20 Jul 2017 14:36:32 - 1.164 > +++ read.c9 Nov 2017 11:28:44 - > @@ -141,6 +141,7 @@ staticconst 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", >
Sh FILES without Pa
Hi Ingo, currently, mandoc DIAGNOSTICS recognizes an AUTHORS section without An. Would it be similarly useful to recognize a FILES section without Pa? I left the empty lines after the opening { in case they are intended, just like child_an() and post_sh_authors() have them, but feel free to remove them all if they are not. 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. 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.17 Sep 2017 14:22:58 - 1.143 +++ mandoc.19 Nov 2017 11:28:44 - @@ -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.h8 Jul 2017 14:51:01 - 1.187 +++ mandoc.h9 Nov 2017 11:28:44 - @@ -105,6 +105,7 @@ enummandocerr { 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 - 1.268 +++ mdoc_validate.c 9 Nov 2017 11:28:44 - @@ -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 - 1.164 +++ read.c 9 Nov 2017 11:28:44 - @@ -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",