source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: more specific .Nd diagnostics, allowing to get rid of enum
@ 2015-02-04 16:39 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2015-02-04 16:39 UTC (permalink / raw)
  To: source

Log Message:
-----------
more specific .Nd diagnostics, allowing to get rid of enum check_lvl
and the respective argument of check_count()

Modified Files:
--------------
    mdocml:
        mandoc.1
        mandoc.h
        mdoc_validate.c
        read.c

Revision Data
-------------
Index: mandoc.1
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandoc.1,v
retrieving revision 1.141
retrieving revision 1.142
diff -Lmandoc.1 -Lmandoc.1 -u -p -r1.141 -r1.142
--- mandoc.1
+++ mandoc.1
@@ -784,6 +784,12 @@ This may confuse
 .Xr makewhatis 8
 and
 .Xr apropos 1 .
+.It Sy "missing description line, using \(dq\(dq"
+.Pq mdoc
+The
+.Ic \&Nd
+macro lacks the required argument.
+The title line of the manual will end after the dash.
 .It Sy "sections out of conventional order"
 .Pq mdoc
 A standard section occurs after another section it usually precedes.
Index: mdoc_validate.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_validate.c,v
retrieving revision 1.266
retrieving revision 1.267
diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.266 -r1.267
--- mdoc_validate.c
+++ mdoc_validate.c
@@ -48,11 +48,6 @@ enum	check_ineq {
 	CHECK_EQ
 };
 
-enum	check_lvl {
-	CHECK_WARN,
-	CHECK_ERROR,
-};
-
 typedef	void	(*v_pre)(PRE_ARGS);
 typedef	void	(*v_post)(POST_ARGS);
 
@@ -62,7 +57,7 @@ struct	valids {
 };
 
 static	void	 check_count(struct mdoc *, enum mdoc_type,
-			enum check_lvl, enum check_ineq, int);
+			enum check_ineq, int);
 static	void	 check_text(struct mdoc *, int, int, char *);
 static	void	 check_argv(struct mdoc *,
 			struct mdoc_node *, struct mdoc_argv *);
@@ -374,10 +369,9 @@ mdoc_valid_post(struct mdoc *mdoc)
 
 static void
 check_count(struct mdoc *mdoc, enum mdoc_type type,
-		enum check_lvl lvl, enum check_ineq ineq, int val)
+	enum check_ineq ineq, int val)
 {
 	const char	*p;
-	enum mandocerr	 t;
 
 	if (mdoc->last->type != type)
 		return;
@@ -403,8 +397,7 @@ check_count(struct mdoc *mdoc, enum mdoc
 		/* NOTREACHED */
 	}
 
-	t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT;
-	mandoc_vmsg(t, mdoc->parse, mdoc->last->line,
+	mandoc_vmsg(MANDOCERR_ARGCWARN, mdoc->parse, mdoc->last->line,
 	    mdoc->last->pos, "want %s%d children (have %d)",
 	    p, val, mdoc->last->nchild);
 }
@@ -412,25 +405,25 @@ check_count(struct mdoc *mdoc, enum mdoc
 static void
 bwarn_ge1(POST_ARGS)
 {
-	check_count(mdoc, MDOC_BODY, CHECK_WARN, CHECK_GT, 0);
+	check_count(mdoc, MDOC_BODY, CHECK_GT, 0);
 }
 
 static void
 ewarn_eq1(POST_ARGS)
 {
-	check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1);
+	check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1);
 }
 
 static void
 ewarn_ge1(POST_ARGS)
 {
-	check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_GT, 0);
+	check_count(mdoc, MDOC_ELEM, CHECK_GT, 0);
 }
 
 static void
 hwarn_eq0(POST_ARGS)
 {
-	check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 0);
+	check_count(mdoc, MDOC_HEAD, CHECK_EQ, 0);
 }
 
 static void
@@ -941,7 +934,7 @@ post_lb(POST_ARGS)
 	const char		*stdlibname;
 	char			*libname;
 
-	check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1);
+	check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1);
 	n = mdoc->last->child;
 	assert(MDOC_TEXT == n->type);
 
@@ -995,7 +988,7 @@ static void
 post_fo(POST_ARGS)
 {
 
-	check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 1);
+	check_count(mdoc, MDOC_HEAD, CHECK_EQ, 1);
 	bwarn_ge1(mdoc);
 	if (mdoc->last->type == MDOC_HEAD && mdoc->last->nchild)
 		post_fname(mdoc);
@@ -1069,8 +1062,17 @@ post_nm(POST_ARGS)
 static void
 post_nd(POST_ARGS)
 {
+	struct mdoc_node	*n;
+
+	n = mdoc->last;
+
+	if (n->type != MDOC_BODY)
+		return;
+
+	if (n->child == NULL)
+		mandoc_msg(MANDOCERR_ND_EMPTY, mdoc->parse,
+		    n->line, n->pos, "Nd");
 
-	check_count(mdoc, MDOC_BODY, CHECK_ERROR, CHECK_GT, 0);
 	post_hyph(mdoc);
 }
 
@@ -1177,9 +1179,9 @@ post_an(POST_ARGS)
 	np = mdoc->last;
 	if (AUTH__NONE == np->norm->An.auth) {
 		if (0 == np->child)
-			check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_GT, 0);
+			check_count(mdoc, MDOC_ELEM, CHECK_GT, 0);
 	} else if (np->child)
-		check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 0);
+		check_count(mdoc, MDOC_ELEM, CHECK_EQ, 0);
 }
 
 static void
@@ -1661,12 +1663,12 @@ post_rs(POST_ARGS)
 
 	switch (mdoc->last->type) {
 	case MDOC_HEAD:
-		check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 0);
+		check_count(mdoc, MDOC_HEAD, CHECK_EQ, 0);
 		return;
 	case MDOC_BODY:
 		if (mdoc->last->child)
 			break;
-		check_count(mdoc, MDOC_BODY, CHECK_WARN, CHECK_GT, 0);
+		check_count(mdoc, MDOC_BODY, CHECK_GT, 0);
 		return;
 	default:
 		return;
@@ -2072,7 +2074,7 @@ post_ignpar(POST_ARGS)
 {
 	struct mdoc_node *np;
 
-	check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_GT, 0);
+	check_count(mdoc, MDOC_HEAD, CHECK_GT, 0);
 	post_hyph(mdoc);
 
 	if (MDOC_BODY != mdoc->last->type)
@@ -2135,9 +2137,9 @@ post_par(POST_ARGS)
 	struct mdoc_node *np;
 
 	if (mdoc->last->tok == MDOC_sp)
-		check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_LT, 2);
+		check_count(mdoc, MDOC_ELEM, CHECK_LT, 2);
 	else
-		check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 0);
+		check_count(mdoc, MDOC_ELEM, CHECK_EQ, 0);
 
 	if (MDOC_ELEM != mdoc->last->type &&
 	    MDOC_BLOCK != mdoc->last->type)
Index: mandoc.h
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandoc.h,v
retrieving revision 1.194
retrieving revision 1.195
diff -Lmandoc.h -Lmandoc.h -u -p -r1.194 -r1.195
--- mandoc.h
+++ mandoc.h
@@ -66,6 +66,7 @@ enum	mandocerr {
 	MANDOCERR_SEC_BEFORE, /* content before first section header: macro */
 	MANDOCERR_NAMESEC_FIRST, /* first section is not NAME: Sh title */
 	MANDOCERR_NAMESEC_BAD, /* bad NAME section contents: macro */
+	MANDOCERR_ND_EMPTY, /* missing description line, using "" */
 	MANDOCERR_SEC_ORDER, /* sections out of conventional order: Sh title */
 	MANDOCERR_SEC_REP, /* duplicate section title: Sh title */
 	MANDOCERR_SEC_MSEC, /* unexpected section: Sh title for ... only */
Index: read.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/read.c,v
retrieving revision 1.120
retrieving revision 1.121
diff -Lread.c -Lread.c -u -p -r1.120 -r1.121
--- read.c
+++ read.c
@@ -110,6 +110,7 @@ static	const char * const	mandocerrs[MAN
 	"content before first section header",
 	"first section is not \"NAME\"",
 	"bad NAME section contents",
+	"missing description line, using \"\"",
 	"sections out of conventional order",
 	"duplicate section title",
 	"unexpected section",
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2015-02-04 16:39 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-04 16:39 mdocml: more specific .Nd diagnostics, allowing to get rid of enum schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).