=================================================================== RCS file: /cvs/mandoc/man_validate.c,v retrieving revision 1.142 retrieving revision 1.149 diff -u -p -r1.142 -r1.149 --- mandoc/man_validate.c 2018/12/16 00:21:05 1.142 +++ mandoc/man_validate.c 2019/06/27 15:07:30 1.149 @@ -1,4 +1,4 @@ -/* $Id: man_validate.c,v 1.142 2018/12/16 00:21:05 schwarze Exp $ */ +/* $Id: man_validate.c,v 1.149 2019/06/27 15:07:30 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2012-2018 Ingo Schwarze @@ -41,13 +41,15 @@ typedef void (*v_check)(CHKARGS); -static void check_abort(CHKARGS); +static void check_abort(CHKARGS) __attribute__((__noreturn__)); static void check_par(CHKARGS); static void check_part(CHKARGS); static void check_root(CHKARGS); static void check_text(CHKARGS); static void post_AT(CHKARGS); +static void post_EE(CHKARGS); +static void post_EX(CHKARGS); static void post_IP(CHKARGS); static void post_OP(CHKARGS); static void post_SH(CHKARGS); @@ -78,8 +80,6 @@ static const v_check man_valids[MAN_MAX - MAN_TH] = { NULL, /* I */ NULL, /* IR */ NULL, /* RI */ - NULL, /* nf */ - NULL, /* fi */ NULL, /* RE */ check_part, /* RS */ NULL, /* DT */ @@ -90,8 +90,8 @@ static const v_check man_valids[MAN_MAX - MAN_TH] = { NULL, /* SY */ NULL, /* YS */ post_OP, /* OP */ - NULL, /* EX */ - NULL, /* EE */ + post_EX, /* EX */ + post_EE, /* EE */ post_UR, /* UR */ NULL, /* UE */ post_UR, /* MT */ @@ -101,7 +101,7 @@ static const v_check man_valids[MAN_MAX - MAN_TH] = { /* Validate the subtree rooted at man->last. */ void -man_node_validate(struct roff_man *man) +man_validate(struct roff_man *man) { struct roff_node *n; const v_check *cp; @@ -128,7 +128,7 @@ man_node_validate(struct roff_man *man) man->last = man->last->child; while (man->last != NULL) { - man_node_validate(man); + man_validate(man); if (man->last == n) man->last = man->last->child; else @@ -160,7 +160,7 @@ man_node_validate(struct roff_man *man) if (*cp) (*cp)(man, n); if (man->last == n) - man_state(man, n); + n->flags |= NODE_VALID; break; } } @@ -185,8 +185,7 @@ check_root(CHKARGS) man->meta.title = mandoc_strdup(""); man->meta.msec = mandoc_strdup(""); - man->meta.date = man->quick ? mandoc_strdup("") : - mandoc_normdate(man, NULL, n->line, n->pos); + man->meta.date = mandoc_normdate(man, NULL, n->line, n->pos); } if (man->meta.os_e && @@ -207,7 +206,7 @@ check_text(CHKARGS) { char *cp, *p; - if (MAN_LITERAL & man->flags) + if (n->flags & NODE_NOFILL) return; cp = n->string; @@ -217,6 +216,20 @@ check_text(CHKARGS) } static void +post_EE(CHKARGS) +{ + if ((n->flags & NODE_NOFILL) == 0) + mandoc_msg(MANDOCERR_FI_SKIP, n->line, n->pos, "EE"); +} + +static void +post_EX(CHKARGS) +{ + if (n->flags & NODE_NOFILL) + mandoc_msg(MANDOCERR_NF_SKIP, n->line, n->pos, "EX"); +} + +static void post_OP(CHKARGS) { @@ -355,8 +368,8 @@ post_TH(CHKARGS) /* ->TITLE<- MSEC DATE OS VOL */ n = n->child; - if (n && n->string) { - for (p = n->string; '\0' != *p; p++) { + if (n != NULL && n->string != NULL) { + for (p = n->string; *p != '\0'; p++) { /* Only warn about this once... */ if (isalpha((unsigned char)*p) && ! isupper((unsigned char)*p)) { @@ -374,9 +387,9 @@ post_TH(CHKARGS) /* TITLE ->MSEC<- DATE OS VOL */ - if (n) + if (n != NULL) n = n->next; - if (n && n->string) + if (n != NULL && n->string != NULL) man->meta.msec = mandoc_strdup(n->string); else { man->meta.msec = mandoc_strdup(""); @@ -386,17 +399,16 @@ post_TH(CHKARGS) /* TITLE MSEC ->DATE<- OS VOL */ - if (n) + if (n != NULL) n = n->next; - if (n && n->string && '\0' != n->string[0]) { - man->meta.date = man->quick ? - mandoc_strdup(n->string) : - mandoc_normdate(man, n->string, n->line, n->pos); - } else { + if (n != NULL && n->string != NULL && n->string[0] != '\0') + man->meta.date = mandoc_normdate(man, + n->string, n->line, n->pos); + else { man->meta.date = mandoc_strdup(""); mandoc_msg(MANDOCERR_DATE_MISSING, - n ? n->line : nb->line, - n ? n->pos : nb->pos, "TH"); + n == NULL ? nb->line : n->line, + n == NULL ? nb->pos : n->pos, "TH"); } /* TITLE MSEC DATE ->OS<- VOL */