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.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",