-/* $Id: man_term.c,v 1.184 2015/09/21 13:25:00 schwarze Exp $ */
+/* $Id: man_term.c,v 1.191 2017/02/15 14:10:08 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
struct termp *p;
struct roff_node *n;
struct mtermp mt;
+ size_t save_defindent;
p = (struct termp *)arg;
p->overstep = 0;
n = n->next;
}
} else {
+ save_defindent = p->defindent;
if (p->defindent == 0)
p->defindent = 7;
term_begin(p, print_man_head, print_man_foot, &man->meta);
if (n != NULL)
print_man_nodelist(p, &mt, n, &man->meta);
term_end(p);
+ p->defindent = save_defindent;
}
}
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
{
term_fontrepl(p, TERMFONT_UNDER);
- return(1);
+ return 1;
}
static int
p->flags |= TERMP_NOSPACE;
}
- return(0);
+ return 0;
}
static int
n = n->child;
if (n == NULL) {
mt->pardist = 1;
- return(0);
+ return 0;
}
assert(n->type == ROFFT_TEXT);
if (a2roffsu(n->string, &su, SCALE_VS))
mt->pardist = term_vspan(p, &su);
- return(0);
+ return 0;
}
static int
mt->fl |= MANT_LITERAL;
assert(nn->type == ROFFT_TEXT);
term_word(p, nn->string);
- if (nn->flags & MAN_EOS)
+ if (nn->flags & NODE_EOS)
p->flags |= TERMP_SENTENCE;
if (nn->next)
p->flags |= TERMP_NOSPACE;
}
- return(0);
+ return 0;
}
static int
{
term_fontrepl(p, TERMFONT_BOLD);
- return(1);
+ return 1;
}
static int
term_fontrepl(p, TERMFONT_NONE);
p->flags |= TERMP_NOSPACE;
term_word(p, "]");
- return(0);
+ return 0;
}
static int
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;
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
if (NULL == n->child) {
p->offset = mt->offset;
- return(0);
+ return 0;
}
cp = n->child->string;
cp--;
if ( ! a2roffsu(++cp, &su, SCALE_EN))
- return(0);
+ return 0;
v = (term_hspan(p, &su) + 11) / 24;
if (p->offset > SHRT_MAX)
p->offset = term_len(p, p->defindent);
- return(0);
+ return 0;
}
static int
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;
}
p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
}
- return(0);
+ return 0;
}
static int
switch (n->type) {
case ROFFT_BLOCK:
print_bvspace(p, n, mt->pardist);
- return(1);
+ return 1;
case ROFFT_BODY:
break;
default:
- return(0);
+ return 0;
}
if ( ! (MANT_LITERAL & mt->fl)) {
p->offset = mt->offset;
p->rmargin = mt->offset + len;
- return(1);
+ return 1;
}
static void
break;
}
- return(n->type != ROFFT_HEAD);
+ return n->type != ROFFT_HEAD;
}
static int
print_bvspace(p, n, mt->pardist);
/* FALLTHROUGH */
default:
- return(1);
+ return 1;
}
/* Calculate the offset from the optional second argument. */
if (savelit)
mt->fl |= MANT_LITERAL;
- return(0);
+ return 0;
case ROFFT_BODY:
p->offset = mt->offset + len;
p->rmargin = p->maxrmargin;
break;
}
- return(1);
+ return 1;
}
static void
print_bvspace(p, n, mt->pardist);
/* FALLTHROUGH */
default:
- return(1);
+ return 1;
}
/* Calculate offset. */
if ((nn = n->parent->head->child) != NULL &&
- nn->string != NULL && ! (MAN_LINE & nn->flags) &&
+ nn->string != NULL && ! (NODE_LINE & nn->flags) &&
a2roffsu(nn->string, &su, SCALE_EN)) {
len = term_hspan(p, &su) / 24;
if (len < 0 && (size_t)(-len) > mt->offset)
/* Don't print same-line elements. */
nn = n->child;
- while (NULL != nn && 0 == (MAN_LINE & nn->flags))
+ while (NULL != nn && 0 == (NODE_LINE & nn->flags))
nn = nn->next;
while (NULL != nn) {
if (savelit)
mt->fl |= MANT_LITERAL;
- return(0);
+ return 0;
case ROFFT_BODY:
p->offset = mt->offset + len;
p->rmargin = p->maxrmargin;
break;
}
- return(1);
+ return 1;
}
static void
break;
}
- return(1);
+ return 1;
}
static void
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_SH && n->body->child == NULL))
break;
break;
}
- return(1);
+ return 1;
}
static void
switch (n->type) {
case ROFFT_BLOCK:
term_newln(p);
- return(1);
+ return 1;
case ROFFT_HEAD:
- return(0);
+ return 0;
default:
break;
}
mt->lmargincur = mt->lmarginsz;
mt->lmargin[mt->lmargincur] = term_len(p, p->defindent);
- return(1);
+ return 1;
}
static void
pre_UR(DECL_ARGS)
{
- return (n->type != ROFFT_HEAD);
+ return n->type != ROFFT_HEAD;
}
static void
if ('\0' == *n->string) {
term_vspace(p);
return;
- } else if (' ' == *n->string && MAN_LINE & n->flags)
+ } else if (' ' == *n->string && NODE_LINE & n->flags)
term_newln(p);
term_word(p, n->string);
goto out;
case ROFFT_EQN:
- if ( ! (n->flags & MAN_LINE))
+ if ( ! (n->flags & NODE_LINE))
p->flags |= TERMP_NOSPACE;
term_eqn(p, n->eqn);
- if (n->next != NULL && ! (n->next->flags & MAN_LINE))
+ if (n->next != NULL && ! (n->next->flags & NODE_LINE))
p->flags |= TERMP_NOSPACE;
return;
case ROFFT_TBL:
*/
if (mt->fl & MANT_LITERAL &&
! (p->flags & (TERMP_NOBREAK | TERMP_NONEWLINE)) &&
- (n->next == NULL || n->next->flags & MAN_LINE)) {
+ (n->next == NULL || n->next->flags & NODE_LINE)) {
rm = p->rmargin;
rmax = p->maxrmargin;
p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
p->rmargin = rm;
p->maxrmargin = rmax;
}
- if (MAN_EOS & n->flags)
+ if (NODE_EOS & n->flags)
p->flags |= TERMP_SENTENCE;
}