- if (MAN_BODY == n->type)
- switch (n->tok) {
- case (MAN_IP):
- /* FALLTHROUGH */
- case (MAN_HP):
- /* FALLTHROUGH */
- case (MAN_TP):
- /* Body-less lists are ok. */
- break;
- default:
- if (n->nchild)
- break;
- return(man_nwarn(m, n, WBODYARGS));
- }
- if (MAN_HEAD == n->type)
- switch (n->tok) {
- case (MAN_PP):
- /* FALLTHROUGH */
- case (MAN_P):
- /* FALLTHROUGH */
- case (MAN_LP):
- if (0 == n->nchild)
- break;
- return(man_nwarn(m, n, WNHEADARGS));
- default:
- if (n->nchild)
+ switch (n->type) {
+ case (MAN_BLOCK):
+ if (0 == n->body->nchild)
+ man_node_delete(m, n);
+ break;
+ case (MAN_BODY):
+ if (0 == n->nchild)
+ man_nmsg(m, n, MANDOCERR_IGNPAR);
+ break;
+ case (MAN_HEAD):
+ if (n->nchild)
+ man_nmsg(m, n, MANDOCERR_ARGSLOST);
+ break;
+ default:
+ break;
+ }
+
+ return(1);
+}
+
+
+static int
+check_bline(CHKARGS)
+{
+
+ assert( ! (MAN_ELINE & m->flags));
+ if (MAN_BLINE & m->flags) {
+ man_nmsg(m, n, MANDOCERR_SYNTLINESCOPE);
+ return(0);
+ }
+
+ return(1);
+}
+
+static int
+post_TH(CHKARGS)
+{
+ const char *p;
+ int line, pos;
+
+ if (m->meta.title)
+ free(m->meta.title);
+ if (m->meta.vol)
+ free(m->meta.vol);
+ if (m->meta.source)
+ free(m->meta.source);
+ if (m->meta.msec)
+ free(m->meta.msec);
+ if (m->meta.date)
+ free(m->meta.date);
+
+ line = n->line;
+ pos = n->pos;
+ m->meta.title = m->meta.vol = m->meta.date =
+ m->meta.msec = m->meta.source = NULL;
+
+ /* ->TITLE<- MSEC DATE SOURCE VOL */
+
+ n = n->child;
+ if (n && n->string) {
+ for (p = n->string; '\0' != *p; p++) {
+ /* Only warn about this once... */
+ if (isalpha((u_char)*p) && ! isupper((u_char)*p)) {
+ man_nmsg(m, n, MANDOCERR_UPPERCASE);