diff options
| author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-08-18 11:22:02 +0000 | 
|---|---|---|
| committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-08-18 11:22:02 +0000 | 
| commit | e2384e44b3213551c4ea3de2e9b54f1a39eeb708 (patch) | |
| tree | 27853313eac66267f6845d2701dddf640705cd8d /usr/src/cmd/mandoc/man_term.c | |
| parent | 2284cf450f099ce8441493d7c9f2c1cb0bbf474f (diff) | |
| parent | 371584c2eae4cf827fd406ba26c14f021adaaa70 (diff) | |
| download | illumos-joyent-e2384e44b3213551c4ea3de2e9b54f1a39eeb708.tar.gz | |
	[illumos-gate merge]
commit 371584c2eae4cf827fd406ba26c14f021adaaa70
    7243 update mdocml to 1.13.4
commit 7a8b8fd18ff115f0caa89183db5373afb568b630
    5166 sendmail package should be replaceable (followup)
Diffstat (limited to 'usr/src/cmd/mandoc/man_term.c')
| -rw-r--r-- | usr/src/cmd/mandoc/man_term.c | 291 | 
1 files changed, 158 insertions, 133 deletions
| diff --git a/usr/src/cmd/mandoc/man_term.c b/usr/src/cmd/mandoc/man_term.c index 8be7927a65..f45e24afea 100644 --- a/usr/src/cmd/mandoc/man_term.c +++ b/usr/src/cmd/mandoc/man_term.c @@ -1,4 +1,4 @@ -/*	$Id: man_term.c,v 1.169 2015/03/06 15:48:52 schwarze Exp $ */ +/*	$Id: man_term.c,v 1.187 2016/01/08 17:48:09 schwarze Exp $ */  /*   * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org> @@ -7,9 +7,9 @@   * purpose with or without fee is hereby granted, provided that the above   * copyright notice and this permission notice appear in all copies.   * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF @@ -26,10 +26,11 @@  #include <stdlib.h>  #include <string.h> -#include "mandoc.h"  #include "mandoc_aux.h" -#include "out.h" +#include "mandoc.h" +#include "roff.h"  #include "man.h" +#include "out.h"  #include "term.h"  #include "main.h" @@ -47,8 +48,8 @@ struct	mtermp {  #define	DECL_ARGS	  struct termp *p, \  			  struct mtermp *mt, \ -			  struct man_node *n, \ -			  const struct man_meta *meta +			  struct roff_node *n, \ +			  const struct roff_meta *meta  struct	termact {  	int		(*pre)(DECL_ARGS); @@ -59,10 +60,12 @@ struct	termact {  static	void		  print_man_nodelist(DECL_ARGS);  static	void		  print_man_node(DECL_ARGS); -static	void		  print_man_head(struct termp *, const void *); -static	void		  print_man_foot(struct termp *, const void *); +static	void		  print_man_head(struct termp *, +				const struct roff_meta *); +static	void		  print_man_foot(struct termp *, +				const struct roff_meta *);  static	void		  print_bvspace(struct termp *, -				const struct man_node *, int); +				const struct roff_node *, int);  static	int		  pre_B(DECL_ARGS);  static	int		  pre_HP(DECL_ARGS); @@ -135,36 +138,32 @@ static	const struct termact termacts[MAN_MAX] = {  void -terminal_man(void *arg, const struct man *man) +terminal_man(void *arg, const struct roff_man *man)  {  	struct termp		*p; -	const struct man_meta	*meta; -	struct man_node		*n; +	struct roff_node	*n;  	struct mtermp		 mt;  	p = (struct termp *)arg; -  	p->overstep = 0;  	p->rmargin = p->maxrmargin = p->defrmargin;  	p->tabwidth = term_len(p, 5); -	n = man_node(man)->child; -	meta = man_meta(man); -  	memset(&mt, 0, sizeof(struct mtermp)); -  	mt.lmargin[mt.lmargincur] = term_len(p, p->defindent);  	mt.offset = term_len(p, p->defindent);  	mt.pardist = 1; +	n = man->first->child;  	if (p->synopsisonly) {  		while (n != NULL) {  			if (n->tok == MAN_SH && -			    n->child->child->type == MAN_TEXT && +			    n->child->child->type == ROFFT_TEXT &&  			    !strcmp(n->child->child->string, "SYNOPSIS")) {  				if (n->child->next->child != NULL)  					print_man_nodelist(p, &mt, -					    n->child->next->child, meta); +					    n->child->next->child, +					    &man->meta);  				term_newln(p);  				break;  			} @@ -173,10 +172,10 @@ terminal_man(void *arg, const struct man *man)  	} else {  		if (p->defindent == 0)  			p->defindent = 7; -		term_begin(p, print_man_head, print_man_foot, meta); +		term_begin(p, print_man_head, print_man_foot, &man->meta);  		p->flags |= TERMP_NOSPACE;  		if (n != NULL) -			print_man_nodelist(p, &mt, n, meta); +			print_man_nodelist(p, &mt, n, &man->meta);  		term_end(p);  	}  } @@ -190,17 +189,17 @@ terminal_man(void *arg, const struct man *man)   * first, print it.   */  static void -print_bvspace(struct termp *p, const struct man_node *n, int pardist) +print_bvspace(struct termp *p, const struct roff_node *n, int pardist)  {  	int	 i;  	term_newln(p);  	if (n->body && n->body->child) -		if (MAN_TBL == n->body->child->type) +		if (n->body->child->type == ROFFT_TBL)  			return; -	if (MAN_ROOT == n->parent->type || MAN_RS != n->parent->tok) +	if (n->parent->type == ROFFT_ROOT || n->parent->tok != MAN_RS)  		if (NULL == n->prev)  			return; @@ -213,15 +212,15 @@ static int  pre_ign(DECL_ARGS)  { -	return(0); +	return 0;  }  static int  pre_ll(DECL_ARGS)  { -	term_setwidth(p, n->nchild ? n->child->string : NULL); -	return(0); +	term_setwidth(p, n->child != NULL ? n->child->string : NULL); +	return 0;  }  static int @@ -229,7 +228,7 @@ pre_I(DECL_ARGS)  {  	term_fontrepl(p, TERMFONT_UNDER); -	return(1); +	return 1;  }  static int @@ -256,7 +255,7 @@ pre_literal(DECL_ARGS)  		p->flags |= TERMP_NOSPACE;  	} -	return(0); +	return 0;  }  static int @@ -267,19 +266,19 @@ pre_PD(DECL_ARGS)  	n = n->child;  	if (n == NULL) {  		mt->pardist = 1; -		return(0); +		return 0;  	} -	assert(MAN_TEXT == n->type); +	assert(n->type == ROFFT_TEXT);  	if (a2roffsu(n->string, &su, SCALE_VS))  		mt->pardist = term_vspan(p, &su); -	return(0); +	return 0;  }  static int  pre_alternate(DECL_ARGS)  {  	enum termfont		 font[2]; -	struct man_node		*nn; +	struct roff_node	*nn;  	int			 savelit, i;  	switch (n->tok) { @@ -318,12 +317,15 @@ pre_alternate(DECL_ARGS)  		term_fontrepl(p, font[i]);  		if (savelit && NULL == nn->next)  			mt->fl |= MANT_LITERAL; -		print_man_node(p, mt, nn, meta); +		assert(nn->type == ROFFT_TEXT); +		term_word(p, nn->string); +		if (nn->flags & MAN_EOS) +                	p->flags |= TERMP_SENTENCE;  		if (nn->next)  			p->flags |= TERMP_NOSPACE;  	} -	return(0); +	return 0;  }  static int @@ -331,7 +333,7 @@ pre_B(DECL_ARGS)  {  	term_fontrepl(p, TERMFONT_BOLD); -	return(1); +	return 1;  }  static int @@ -353,7 +355,7 @@ pre_OP(DECL_ARGS)  	term_fontrepl(p, TERMFONT_NONE);  	p->flags |= TERMP_NOSPACE;  	term_word(p, "]"); -	return(0); +	return 0;  }  static int @@ -363,20 +365,17 @@ pre_ft(DECL_ARGS)  	if (NULL == n->child) {  		term_fontlast(p); -		return(0); +		return 0;  	}  	cp = n->child->string;  	switch (*cp) {  	case '4': -		/* FALLTHROUGH */  	case '3': -		/* FALLTHROUGH */  	case 'B':  		term_fontrepl(p, TERMFONT_BOLD);  		break;  	case '2': -		/* FALLTHROUGH */  	case 'I':  		term_fontrepl(p, TERMFONT_UNDER);  		break; @@ -384,16 +383,14 @@ pre_ft(DECL_ARGS)  		term_fontlast(p);  		break;  	case '1': -		/* FALLTHROUGH */  	case 'C': -		/* FALLTHROUGH */  	case 'R':  		term_fontrepl(p, TERMFONT_NONE);  		break;  	default:  		break;  	} -	return(0); +	return 0;  }  static int @@ -408,7 +405,7 @@ pre_in(DECL_ARGS)  	if (NULL == n->child) {  		p->offset = mt->offset; -		return(0); +		return 0;  	}  	cp = n->child->string; @@ -422,9 +419,9 @@ pre_in(DECL_ARGS)  		cp--;  	if ( ! a2roffsu(++cp, &su, SCALE_EN)) -		return(0); +		return 0; -	v = term_hspan(p, &su); +	v = (term_hspan(p, &su) + 11) / 24;  	if (less < 0)  		p->offset -= p->offset > v ? v : p->offset; @@ -435,7 +432,7 @@ pre_in(DECL_ARGS)  	if (p->offset > SHRT_MAX)  		p->offset = term_len(p, p->defindent); -	return(0); +	return 0;  }  static int @@ -447,16 +444,11 @@ pre_sp(DECL_ARGS)  	if ((NULL == n->prev && n->parent)) {  		switch (n->parent->tok) {  		case MAN_SH: -			/* FALLTHROUGH */  		case MAN_SS: -			/* FALLTHROUGH */  		case MAN_PP: -			/* FALLTHROUGH */  		case MAN_LP: -			/* FALLTHROUGH */  		case MAN_P: -			/* FALLTHROUGH */ -			return(0); +			return 0;  		default:  			break;  		} @@ -480,24 +472,35 @@ pre_sp(DECL_ARGS)  		for (i = 0; i < len; i++)  			term_vspace(p); -	return(0); +	/* +	 * Handle an explicit break request in the same way +	 * as an overflowing line. +	 */ + +	if (p->flags & TERMP_BRIND) { +		p->offset = p->rmargin; +		p->rmargin = p->maxrmargin; +		p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND); +	} + +	return 0;  }  static int  pre_HP(DECL_ARGS)  {  	struct roffsu		 su; -	const struct man_node	*nn; +	const struct roff_node	*nn;  	int			 len;  	switch (n->type) { -	case MAN_BLOCK: +	case ROFFT_BLOCK:  		print_bvspace(p, n, mt->pardist); -		return(1); -	case MAN_BODY: +		return 1; +	case ROFFT_BODY:  		break;  	default: -		return(0); +		return 0;  	}  	if ( ! (MANT_LITERAL & mt->fl)) { @@ -509,7 +512,7 @@ pre_HP(DECL_ARGS)  	if ((nn = n->parent->head->child) != NULL &&  	    a2roffsu(nn->string, &su, SCALE_EN)) { -		len = term_hspan(p, &su); +		len = term_hspan(p, &su) / 24;  		if (len < 0 && (size_t)(-len) > mt->offset)  			len = -mt->offset;  		else if (len > SHRT_MAX) @@ -520,7 +523,7 @@ pre_HP(DECL_ARGS)  	p->offset = mt->offset;  	p->rmargin = mt->offset + len; -	return(1); +	return 1;  }  static void @@ -528,8 +531,19 @@ post_HP(DECL_ARGS)  {  	switch (n->type) { -	case MAN_BODY: +	case ROFFT_BODY:  		term_newln(p); + +		/* +		 * Compatibility with a groff bug. +		 * The .HP macro uses the undocumented .tag request +		 * which causes a line break and cancels no-space +		 * mode even if there isn't any output. +		 */ + +		if (n->child == NULL) +			term_vspace(p); +  		p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);  		p->trailspace = 0;  		p->offset = mt->offset; @@ -545,7 +559,7 @@ pre_PP(DECL_ARGS)  {  	switch (n->type) { -	case MAN_BLOCK: +	case ROFFT_BLOCK:  		mt->lmargin[mt->lmargincur] = term_len(p, p->defindent);  		print_bvspace(p, n, mt->pardist);  		break; @@ -554,36 +568,36 @@ pre_PP(DECL_ARGS)  		break;  	} -	return(MAN_HEAD != n->type); +	return n->type != ROFFT_HEAD;  }  static int  pre_IP(DECL_ARGS)  {  	struct roffsu		 su; -	const struct man_node	*nn; +	const struct roff_node	*nn;  	int			 len, savelit;  	switch (n->type) { -	case MAN_BODY: +	case ROFFT_BODY:  		p->flags |= TERMP_NOSPACE;  		break; -	case MAN_HEAD: +	case ROFFT_HEAD:  		p->flags |= TERMP_NOBREAK;  		p->trailspace = 1;  		break; -	case MAN_BLOCK: +	case ROFFT_BLOCK:  		print_bvspace(p, n, mt->pardist);  		/* FALLTHROUGH */  	default: -		return(1); +		return 1;  	}  	/* Calculate the offset from the optional second argument. */  	if ((nn = n->parent->head->child) != NULL &&  	    (nn = nn->next) != NULL &&  	    a2roffsu(nn->string, &su, SCALE_EN)) { -		len = term_hspan(p, &su); +		len = term_hspan(p, &su) / 24;  		if (len < 0 && (size_t)(-len) > mt->offset)  			len = -mt->offset;  		else if (len > SHRT_MAX) @@ -593,7 +607,7 @@ pre_IP(DECL_ARGS)  		len = mt->lmargin[mt->lmargincur];  	switch (n->type) { -	case MAN_HEAD: +	case ROFFT_HEAD:  		p->offset = mt->offset;  		p->rmargin = mt->offset + len; @@ -606,8 +620,8 @@ pre_IP(DECL_ARGS)  		if (savelit)  			mt->fl |= MANT_LITERAL; -		return(0); -	case MAN_BODY: +		return 0; +	case ROFFT_BODY:  		p->offset = mt->offset + len;  		p->rmargin = p->maxrmargin;  		break; @@ -615,7 +629,7 @@ pre_IP(DECL_ARGS)  		break;  	} -	return(1); +	return 1;  }  static void @@ -623,13 +637,13 @@ post_IP(DECL_ARGS)  {  	switch (n->type) { -	case MAN_HEAD: +	case ROFFT_HEAD:  		term_flushln(p);  		p->flags &= ~TERMP_NOBREAK;  		p->trailspace = 0;  		p->rmargin = p->maxrmargin;  		break; -	case MAN_BODY: +	case ROFFT_BODY:  		term_newln(p);  		p->offset = mt->offset;  		break; @@ -642,22 +656,22 @@ static int  pre_TP(DECL_ARGS)  {  	struct roffsu		 su; -	struct man_node		*nn; +	struct roff_node	*nn;  	int			 len, savelit;  	switch (n->type) { -	case MAN_HEAD: -		p->flags |= TERMP_NOBREAK; +	case ROFFT_HEAD: +		p->flags |= TERMP_NOBREAK | TERMP_BRTRSP;  		p->trailspace = 1;  		break; -	case MAN_BODY: +	case ROFFT_BODY:  		p->flags |= TERMP_NOSPACE;  		break; -	case MAN_BLOCK: +	case ROFFT_BLOCK:  		print_bvspace(p, n, mt->pardist);  		/* FALLTHROUGH */  	default: -		return(1); +		return 1;  	}  	/* Calculate offset. */ @@ -665,7 +679,7 @@ pre_TP(DECL_ARGS)  	if ((nn = n->parent->head->child) != NULL &&  	    nn->string != NULL && ! (MAN_LINE & nn->flags) &&  	    a2roffsu(nn->string, &su, SCALE_EN)) { -		len = term_hspan(p, &su); +		len = term_hspan(p, &su) / 24;  		if (len < 0 && (size_t)(-len) > mt->offset)  			len = -mt->offset;  		else if (len > SHRT_MAX) @@ -675,7 +689,7 @@ pre_TP(DECL_ARGS)  		len = mt->lmargin[mt->lmargincur];  	switch (n->type) { -	case MAN_HEAD: +	case ROFFT_HEAD:  		p->offset = mt->offset;  		p->rmargin = mt->offset + len; @@ -694,18 +708,18 @@ pre_TP(DECL_ARGS)  		if (savelit)  			mt->fl |= MANT_LITERAL; -		return(0); -	case MAN_BODY: +		return 0; +	case ROFFT_BODY:  		p->offset = mt->offset + len;  		p->rmargin = p->maxrmargin;  		p->trailspace = 0; -		p->flags &= ~TERMP_NOBREAK; +		p->flags &= ~(TERMP_NOBREAK | TERMP_BRTRSP);  		break;  	default:  		break;  	} -	return(1); +	return 1;  }  static void @@ -713,10 +727,10 @@ post_TP(DECL_ARGS)  {  	switch (n->type) { -	case MAN_HEAD: +	case ROFFT_HEAD:  		term_flushln(p);  		break; -	case MAN_BODY: +	case ROFFT_BODY:  		term_newln(p);  		p->offset = mt->offset;  		break; @@ -731,7 +745,7 @@ pre_SS(DECL_ARGS)  	int	 i;  	switch (n->type) { -	case MAN_BLOCK: +	case ROFFT_BLOCK:  		mt->fl &= ~MANT_LITERAL;  		mt->lmargin[mt->lmargincur] = term_len(p, p->defindent);  		mt->offset = term_len(p, p->defindent); @@ -743,25 +757,32 @@ pre_SS(DECL_ARGS)  		do {  			n = n->prev; -		} while (n != NULL && termacts[n->tok].flags & MAN_NOTEXT); +		} while (n != NULL && n->tok != TOKEN_NONE && +		    termacts[n->tok].flags & MAN_NOTEXT);  		if (n == NULL || (n->tok == MAN_SS && n->body->child == NULL))  			break;  		for (i = 0; i < mt->pardist; i++)  			term_vspace(p);  		break; -	case MAN_HEAD: +	case ROFFT_HEAD:  		term_fontrepl(p, TERMFONT_BOLD);  		p->offset = term_len(p, 3); +		p->rmargin = mt->offset; +		p->trailspace = mt->offset; +		p->flags |= TERMP_NOBREAK | TERMP_BRIND;  		break; -	case MAN_BODY: +	case ROFFT_BODY:  		p->offset = mt->offset; +		p->rmargin = p->maxrmargin; +		p->trailspace = 0; +		p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);  		break;  	default:  		break;  	} -	return(1); +	return 1;  }  static void @@ -769,10 +790,10 @@ post_SS(DECL_ARGS)  {  	switch (n->type) { -	case MAN_HEAD: +	case ROFFT_HEAD:  		term_newln(p);  		break; -	case MAN_BODY: +	case ROFFT_BODY:  		term_newln(p);  		break;  	default: @@ -786,7 +807,7 @@ pre_SH(DECL_ARGS)  	int	 i;  	switch (n->type) { -	case MAN_BLOCK: +	case ROFFT_BLOCK:  		mt->fl &= ~MANT_LITERAL;  		mt->lmargin[mt->lmargincur] = term_len(p, p->defindent);  		mt->offset = term_len(p, p->defindent); @@ -805,18 +826,24 @@ pre_SH(DECL_ARGS)  		for (i = 0; i < mt->pardist; i++)  			term_vspace(p);  		break; -	case MAN_HEAD: +	case ROFFT_HEAD:  		term_fontrepl(p, TERMFONT_BOLD);  		p->offset = 0; +		p->rmargin = mt->offset; +		p->trailspace = mt->offset; +		p->flags |= TERMP_NOBREAK | TERMP_BRIND;  		break; -	case MAN_BODY: +	case ROFFT_BODY:  		p->offset = mt->offset; +		p->rmargin = p->maxrmargin; +		p->trailspace = 0; +		p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);  		break;  	default:  		break;  	} -	return(1); +	return 1;  }  static void @@ -824,10 +851,10 @@ post_SH(DECL_ARGS)  {  	switch (n->type) { -	case MAN_HEAD: +	case ROFFT_HEAD:  		term_newln(p);  		break; -	case MAN_BODY: +	case ROFFT_BODY:  		term_newln(p);  		break;  	default: @@ -841,19 +868,21 @@ pre_RS(DECL_ARGS)  	struct roffsu	 su;  	switch (n->type) { -	case MAN_BLOCK: +	case ROFFT_BLOCK:  		term_newln(p); -		return(1); -	case MAN_HEAD: -		return(0); +		return 1; +	case ROFFT_HEAD: +		return 0;  	default:  		break;  	}  	n = n->parent->head;  	n->aux = SHRT_MAX + 1; -	if (n->child != NULL && a2roffsu(n->child->string, &su, SCALE_EN)) -		n->aux = term_hspan(p, &su); +	if (n->child == NULL) +		n->aux = mt->lmargin[mt->lmargincur]; +	else if (a2roffsu(n->child->string, &su, SCALE_EN)) +		n->aux = term_hspan(p, &su) / 24;  	if (n->aux < 0 && (size_t)(-n->aux) > mt->offset)  		n->aux = -mt->offset;  	else if (n->aux > SHRT_MAX) @@ -866,8 +895,8 @@ pre_RS(DECL_ARGS)  	if (++mt->lmarginsz < MAXMARGINS)  		mt->lmargincur = mt->lmarginsz; -	mt->lmargin[mt->lmargincur] = mt->lmargin[mt->lmargincur - 1]; -	return(1); +	mt->lmargin[mt->lmargincur] = term_len(p, p->defindent); +	return 1;  }  static void @@ -875,9 +904,9 @@ post_RS(DECL_ARGS)  {  	switch (n->type) { -	case MAN_BLOCK: +	case ROFFT_BLOCK:  		return; -	case MAN_HEAD: +	case ROFFT_HEAD:  		return;  	default:  		term_newln(p); @@ -895,14 +924,14 @@ static int  pre_UR(DECL_ARGS)  { -	return (MAN_HEAD != n->type); +	return n->type != ROFFT_HEAD;  }  static void  post_UR(DECL_ARGS)  { -	if (MAN_BLOCK != n->type) +	if (n->type != ROFFT_BLOCK)  		return;  	term_word(p, "<"); @@ -922,7 +951,7 @@ print_man_node(DECL_ARGS)  	int		 c;  	switch (n->type) { -	case MAN_TEXT: +	case ROFFT_TEXT:  		/*  		 * If we have a blank line, output a vertical space.  		 * If we have a space as the first character, break @@ -937,14 +966,14 @@ print_man_node(DECL_ARGS)  		term_word(p, n->string);  		goto out; -	case MAN_EQN: +	case ROFFT_EQN:  		if ( ! (n->flags & MAN_LINE))  			p->flags |= TERMP_NOSPACE;  		term_eqn(p, n->eqn);  		if (n->next != NULL && ! (n->next->flags & MAN_LINE))  			p->flags |= TERMP_NOSPACE;  		return; -	case MAN_TBL: +	case ROFFT_TBL:  		if (p->tbl.cols == NULL)  			term_vspace(p);  		term_tbl(p, n->span); @@ -1010,13 +1039,11 @@ print_man_nodelist(DECL_ARGS)  }  static void -print_man_foot(struct termp *p, const void *arg) +print_man_foot(struct termp *p, const struct roff_meta *meta)  { -	const struct man_meta	*meta;  	char			*title;  	size_t			 datelen, titlen; -	meta = (const struct man_meta *)arg;  	assert(meta->title);  	assert(meta->msec);  	assert(meta->date); @@ -1028,8 +1055,8 @@ print_man_foot(struct termp *p, const void *arg)  	/*  	 * Temporary, undocumented option to imitate mdoc(7) output. -	 * In the bottom right corner, use the source instead of -	 * the title. +	 * In the bottom right corner, use the operating system +	 * instead of the title.  	 */  	if ( ! p->mdocstyle) { @@ -1039,14 +1066,14 @@ print_man_foot(struct termp *p, const void *arg)  		}  		mandoc_asprintf(&title, "%s(%s)",  		    meta->title, meta->msec); -	} else if (meta->source) { -		title = mandoc_strdup(meta->source); +	} else if (meta->os) { +		title = mandoc_strdup(meta->os);  	} else {  		title = mandoc_strdup("");  	}  	datelen = term_strlen(p, meta->date); -	/* Bottom left corner: manual source. */ +	/* Bottom left corner: operating system. */  	p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;  	p->trailspace = 1; @@ -1054,8 +1081,8 @@ print_man_foot(struct termp *p, const void *arg)  	p->rmargin = p->maxrmargin > datelen ?  	    (p->maxrmargin + term_len(p, 1) - datelen) / 2 : 0; -	if (meta->source) -		term_word(p, meta->source); +	if (meta->os) +		term_word(p, meta->os);  	term_flushln(p);  	/* At the bottom in the middle: manual date. */ @@ -1082,14 +1109,12 @@ print_man_foot(struct termp *p, const void *arg)  }  static void -print_man_head(struct termp *p, const void *arg) +print_man_head(struct termp *p, const struct roff_meta *meta)  { -	const struct man_meta	*meta;  	const char		*volume;  	char			*title;  	size_t			 vollen, titlen; -	meta = (const struct man_meta *)arg;  	assert(meta->title);  	assert(meta->msec); | 
