+
+ mdoc->next = MDOC_NEXT_CHILD;
+
+ for (j = 0; j < MDOC_LINEARG_MAX; j++) {
+ lastarg = *pos;
+
+ if (j == maxargs && ! flushed) {
+ if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok))
+ return(0);
+ flushed = 1;
+ if ( ! mdoc_body_alloc(mdoc, line, ppos, tok))
+ return(0);
+ mdoc->next = MDOC_NEXT_CHILD;
+ }
+
+ c = mdoc_args(mdoc, line, pos, buf, ARGS_DELIM, &p);
+ if (ARGS_ERROR == c)
+ return(0);
+ if (ARGS_PUNCT == c)
+ break;
+ if (ARGS_EOLN == c)
+ break;
+
+ if (-1 == (c = lookup(mdoc, line, lastarg, tok, p)))
+ return(0);
+ else if (MDOC_MAX != c) {
+ if ( ! flushed) {
+ if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok))
+ return(0);
+ flushed = 1;
+ if ( ! mdoc_body_alloc(mdoc, line, ppos, tok))
+ return(0);
+ mdoc->next = MDOC_NEXT_CHILD;
+ }
+ if ( ! mdoc_macro(mdoc, c, line, lastarg, pos, buf))
+ return(0);
+ break;
+ }
+
+ if ( ! flushed && mdoc_isdelim(p)) {
+ if ( ! rewind_subblock(MDOC_HEAD, mdoc, tok))
+ return(0);
+ flushed = 1;
+ if ( ! mdoc_body_alloc(mdoc, line, ppos, tok))
+ return(0);
+ mdoc->next = MDOC_NEXT_CHILD;
+ }