Skip to content

Commit

Permalink
Cleanup, minus 25 LOC, no functional change:
Browse files Browse the repository at this point in the history
Delete the complicated mechanism keeping fill mode state locally in
the man(7) HTML formatter.  Instead, use the state stored in the nodes.
  • Loading branch information
ischwarze committed Dec 31, 2018
1 parent 41dbcad commit 72236cb
Showing 1 changed file with 7 additions and 48 deletions.
55 changes: 7 additions & 48 deletions usr.bin/mandoc/man_term.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $OpenBSD: man_term.c,v 1.177 2018/12/31 07:07:43 schwarze Exp $ */
/* $OpenBSD: man_term.c,v 1.178 2018/12/31 11:01:34 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
Expand Down Expand Up @@ -34,8 +34,6 @@
#define MAXMARGINS 64 /* maximum number of indented scopes */

struct mtermp {
int fl;
#define MANT_LITERAL (1 << 0)
int lmargin[MAXMARGINS]; /* margins (incl. vis. page) */
int lmargincur; /* index of current margin */
int lmarginsz; /* actual number of nested margins */
Expand Down Expand Up @@ -240,14 +238,8 @@ pre_I(DECL_ARGS)
static int
pre_literal(DECL_ARGS)
{

term_newln(p);

if (n->tok == MAN_EX)
mt->fl |= MANT_LITERAL;
else
mt->fl &= ~MANT_LITERAL;

/*
* Unlike .IP and .TP, .HP does not have a HEAD.
* So in case a second call to term_flushln() is needed,
Expand All @@ -260,7 +252,6 @@ pre_literal(DECL_ARGS)
p->flags &= ~(TERMP_NOBREAK | TERMP_BRIND);
p->flags |= TERMP_NOSPACE;
}

return 0;
}

Expand All @@ -285,7 +276,7 @@ pre_alternate(DECL_ARGS)
{
enum termfont font[2];
struct roff_node *nn;
int savelit, i;
int i;

switch (n->tok) {
case MAN_RB:
Expand Down Expand Up @@ -315,22 +306,15 @@ pre_alternate(DECL_ARGS)
default:
abort();
}

savelit = MANT_LITERAL & mt->fl;
mt->fl &= ~MANT_LITERAL;

for (i = 0, nn = n->child; nn; nn = nn->next, i = 1 - i) {
for (i = 0, nn = n->child; nn != NULL; nn = nn->next, i = 1 - i) {
term_fontrepl(p, font[i]);
if (savelit && NULL == nn->next)
mt->fl |= MANT_LITERAL;
assert(nn->type == ROFFT_TEXT);
term_word(p, nn->string);
if (nn->flags & NODE_EOS)
p->flags |= TERMP_SENTENCE;
if (nn->next)
p->flags |= TERMP_NOSPACE;
}

return 0;
}

Expand Down Expand Up @@ -433,7 +417,7 @@ pre_HP(DECL_ARGS)
return 0;
}

if ( ! (MANT_LITERAL & mt->fl)) {
if ((n->flags & NODE_NOFILL) == 0) {
p->flags |= TERMP_NOBREAK | TERMP_BRIND;
p->trailspace = 2;
}
Expand Down Expand Up @@ -506,7 +490,7 @@ pre_IP(DECL_ARGS)
{
struct roffsu su;
const struct roff_node *nn;
int len, savelit;
int len;

switch (n->type) {
case ROFFT_BODY:
Expand Down Expand Up @@ -540,16 +524,8 @@ pre_IP(DECL_ARGS)
case ROFFT_HEAD:
p->tcol->offset = mt->offset;
p->tcol->rmargin = mt->offset + len;

savelit = MANT_LITERAL & mt->fl;
mt->fl &= ~MANT_LITERAL;

if (n->child)
print_man_node(p, mt, n->child, meta);

if (savelit)
mt->fl |= MANT_LITERAL;

return 0;
case ROFFT_BODY:
p->tcol->offset = mt->offset + len;
Expand All @@ -558,14 +534,12 @@ pre_IP(DECL_ARGS)
default:
break;
}

return 1;
}

static void
post_IP(DECL_ARGS)
{

switch (n->type) {
case ROFFT_HEAD:
term_flushln(p);
Expand All @@ -587,7 +561,7 @@ pre_TP(DECL_ARGS)
{
struct roffsu su;
struct roff_node *nn;
int len, savelit;
int len;

switch (n->type) {
case ROFFT_HEAD:
Expand Down Expand Up @@ -624,9 +598,6 @@ pre_TP(DECL_ARGS)
p->tcol->offset = mt->offset;
p->tcol->rmargin = mt->offset + len;

savelit = MANT_LITERAL & mt->fl;
mt->fl &= ~MANT_LITERAL;

/* Don't print same-line elements. */
nn = n->child;
while (NULL != nn && 0 == (NODE_LINE & nn->flags))
Expand All @@ -636,9 +607,6 @@ pre_TP(DECL_ARGS)
print_man_node(p, mt, nn, meta);
nn = nn->next;
}

if (savelit)
mt->fl |= MANT_LITERAL;
return 0;
case ROFFT_BODY:
p->tcol->offset = mt->offset + len;
Expand All @@ -649,14 +617,12 @@ pre_TP(DECL_ARGS)
default:
break;
}

return 1;
}

static void
post_TP(DECL_ARGS)
{

switch (n->type) {
case ROFFT_HEAD:
term_flushln(p);
Expand All @@ -677,7 +643,6 @@ pre_SS(DECL_ARGS)

switch (n->type) {
case ROFFT_BLOCK:
mt->fl &= ~MANT_LITERAL;
mt->lmargin[mt->lmargincur] = term_len(p, p->defindent);
mt->offset = term_len(p, p->defindent);

Expand Down Expand Up @@ -740,7 +705,6 @@ pre_SH(DECL_ARGS)

switch (n->type) {
case ROFFT_BLOCK:
mt->fl &= ~MANT_LITERAL;
mt->lmargin[mt->lmargincur] = term_len(p, p->defindent);
mt->offset = term_len(p, p->defindent);

Expand Down Expand Up @@ -980,11 +944,6 @@ print_man_node(DECL_ARGS)
break;
}

if (n->tok == ROFF_nf)
n->tok = MAN_EX;
else if (n->tok == ROFF_fi)
n->tok = MAN_EE;

if (n->tok < ROFF_MAX) {
roff_term_pre(p, n);
return;
Expand Down Expand Up @@ -1014,7 +973,7 @@ print_man_node(DECL_ARGS)
* -man doesn't have nested macros, we don't need to be
* more specific than this.
*/
if (mt->fl & MANT_LITERAL &&
if (n->flags & NODE_NOFILL &&
! (p->flags & (TERMP_NOBREAK | TERMP_NONEWLINE)) &&
(n->next == NULL || n->next->flags & NODE_LINE)) {
p->flags |= TERMP_BRNEVER | TERMP_NOSPACE;
Expand Down

0 comments on commit 72236cb

Please sign in to comment.