contrib/mdocml/man_macro.c
int
man_unscope(struct man *m, const struct man_node *to, 
		enum mandocerr er)
{
	struct man_node	*n;

	assert(to);

	/* LINTED */
	while (m->last != to) {
		/*
		 * Save the parent here, because we may delete the
		 * m->last node in the post-validation phase and reset
		 * it to m->last->parent, causing a step in the closing
		 * out to be lost.
		 */
		n = m->last->parent;
		rew_warn(m, m->last, er);
		if ( ! man_valid_post(m))
			return(0);
		m->last = n;
		assert(m->last);
	}

	rew_warn(m, m->last, er);
	if ( ! man_valid_post(m))
		return(0);

	m->next = MAN_ROOT == m->last->type ? 
		MAN_NEXT_CHILD : MAN_NEXT_SIBLING;

	return(1);
}
/*
 * Rewind scope.  If a code "er" != MANDOCERR_MAX has been provided, it
 * will be used if an explicit block scope is being closed out.
 */
Rewind scope.  If a code "er" != MANDOCERR_MAX has been provided, it
will be used if an explicit block scope is being closed out.
Rewind scope . If a code " er " ! = MANDOCERR_MAX has been provided it will be used if an explicit block scope is being closed out .
int
man_unscope(struct man *m, const struct man_node *to, 
		enum mandocerr er)
{
	struct man_node	*n;
	assert(to);
	while (m->last != to) {
		n = m->last->parent;
		rew_warn(m, m->last, er);
		if ( ! man_valid_post(m))
			return(0);
		m->last = n;
		assert(m->last);
	}
	rew_warn(m, m->last, er);
	if ( ! man_valid_post(m))
		return(0);
	m->next = MAN_ROOT == m->last->type ? 
		MAN_NEXT_CHILD : MAN_NEXT_SIBLING;
	return(1);
}
int man_unscope ( struct man * m , const struct man_node * to , enum mandocerr er ) { struct man_node * n ; assert ( to ) ; while ( m -> last != to ) { n = m -> last -> parent ; rew_warn ( m , m -> last , er ) ; if ( ! man_valid_post ( m ) ) return ( 0 ) ; m -> last = n ; assert ( m -> last ) ; } rew_warn ( m , m -> last , er ) ; if ( ! man_valid_post ( m ) ) return ( 0 ) ; m -> next = MAN_ROOT == m -> last -> type ? MAN_NEXT_CHILD : MAN_NEXT_SIBLING ; return ( 1 ) ; }
Rewind scope.
Rewind scope .
/* LINTED */ /*
		 * Save the parent here, because we may delete the
		 * m->last node in the post-validation phase and reset
		 * it to m->last->parent, causing a step in the closing
		 * out to be lost.
		 */