/* ARGSUSED */ int blk_imp(MACRO_PROT_ARGS) { int la; char *p; struct man_node *n; /* Close out prior scopes. */ if ( ! rew_scope(MAN_BODY, man, tok)) return(0); if ( ! rew_scope(MAN_BLOCK, man, tok)) return(0); /* Allocate new block & head scope. */ if ( ! man_block_alloc(man, line, ppos, tok)) return(0); if ( ! man_head_alloc(man, line, ppos, tok)) return(0); n = man->last; /* Add line arguments. */ for (;;) { la = *pos; if ( ! man_args(man, line, pos, buf, &p)) break; if ( ! man_word_alloc(man, line, la, p)) return(0); } /* Close out head and open body (unless MAN_SCOPE). */ if (MAN_SCOPED & man_macros[tok].flags) { /* If we're forcing scope (`TP'), keep it open. */ if (MAN_FSCOPED & man_macros[tok].flags) { man->flags |= MAN_BLINE; return(1); } else if (n == man->last) { man->flags |= MAN_BLINE; return(1); } } if ( ! rew_scope(MAN_HEAD, man, tok)) return(0); return(man_body_alloc(man, line, ppos, tok)); }
/* ARGSUSED */ int blk_exp(MACRO_PROT_ARGS) { struct man_node *n; int la; char *p; /* Close out prior implicit scopes. */ if ( ! rew_scope(MAN_BLOCK, man, tok)) return(0); if ( ! man_block_alloc(man, line, ppos, tok)) return(0); if ( ! man_head_alloc(man, line, ppos, tok)) return(0); for (;;) { la = *pos; if ( ! man_args(man, line, pos, buf, &p)) break; if ( ! man_word_alloc(man, line, la, p)) return(0); } assert(man); assert(tok != MAN_MAX); for (n = man->last; n; n = n->parent) { if (n->tok != tok) continue; assert(MAN_HEAD == n->type); man_unscope(man, n, MANDOCERR_MAX); break; } return(man_body_alloc(man, line, ppos, tok)); }
/* ARGSUSED */ int blk_exp(MACRO_PROT_ARGS) { int la; char *p; /* * Close out prior scopes. "Regular" explicit macros cannot be * nested, but we allow roff macros to be placed just about * anywhere. */ if ( ! rew_scope(MAN_BODY, m, tok)) return(0); if ( ! rew_scope(MAN_BLOCK, m, tok)) return(0); if ( ! man_block_alloc(m, line, ppos, tok)) return(0); if ( ! man_head_alloc(m, line, ppos, tok)) return(0); for (;;) { la = *pos; if ( ! man_args(m, line, pos, buf, &p)) break; if ( ! man_word_alloc(m, line, la, p)) return(0); } assert(m); assert(tok != MAN_MAX); if ( ! rew_scope(MAN_HEAD, m, tok)) return(0); return(man_body_alloc(m, line, ppos, tok)); }