+ if ('\0' == buf[i] && ' ' == buf[i - 1])
+ if ( ! man_pmsg(m, ln, i - 1, MANDOCERR_EOLNSPACE))
+ goto err;
+
+ /*
+ * Remove prior ELINE macro, as it's being clobbering by a new
+ * macro. Note that NSCOPED macros do not close out ELINE
+ * macros---they don't print text---so we let those slip by.
+ */
+
+ if ( ! (MAN_NSCOPED & man_macros[tok].flags) &&
+ m->flags & MAN_ELINE) {
+ assert(MAN_TEXT != m->last->type);
+
+ /*
+ * This occurs in the following construction:
+ * .B
+ * .br
+ * .B
+ * .br
+ * I hate man macros.
+ * Flat-out disallow this madness.
+ */
+ if (MAN_NSCOPED & man_macros[m->last->tok].flags) {
+ man_pmsg(m, ln, ppos, MANDOCERR_SYNTLINESCOPE);
+ return(0);
+ }
+
+ n = m->last;
+
+ assert(n);
+ assert(NULL == n->child);
+ assert(0 == n->nchild);
+
+ if ( ! man_nmsg(m, n, MANDOCERR_LINESCOPE))
+ return(0);
+
+ man_node_delete(m, n);
+ m->flags &= ~MAN_ELINE;
+ }
+
+ /*
+ * Save the fact that we're in the next-line for a block. In
+ * this way, embedded roff instructions can "remember" state
+ * when they exit.
+ */
+
+ if (MAN_BLINE & m->flags)
+ m->flags |= MAN_BPLINE;
+
+ /* Call to handler... */
+
+ assert(man_macros[tok].fp);
+ if ( ! (*man_macros[tok].fp)(m, tok, ln, ppos, &i, buf))