=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/man_term.c,v retrieving revision 1.191 retrieving revision 1.192 diff -u -r1.191 -r1.192 --- src/usr.bin/mandoc/man_term.c 2022/08/15 13:01:40 1.191 +++ src/usr.bin/mandoc/man_term.c 2022/08/15 18:44:24 1.192 @@ -1,4 +1,4 @@ -/* $OpenBSD: man_term.c,v 1.191 2022/08/15 13:01:40 schwarze Exp $ */ +/* $OpenBSD: man_term.c,v 1.192 2022/08/15 18:44:24 schwarze Exp $ */ /* * Copyright (c) 2010-2015,2017-2020,2022 Ingo Schwarze * Copyright (c) 2008-2012 Kristaps Dzonsons @@ -515,7 +515,7 @@ p->trailspace = 1; break; case ROFFT_BODY: - p->flags |= TERMP_NOSPACE; + p->flags |= TERMP_NOSPACE | TERMP_NONEWLINE; break; default: abort(); @@ -589,7 +589,7 @@ p->trailspace = 1; break; case ROFFT_BODY: - p->flags |= TERMP_NOSPACE; + p->flags |= TERMP_NOSPACE | TERMP_NONEWLINE; break; default: abort(); @@ -898,6 +898,19 @@ const struct man_term_act *act; int c; + /* + * In no-fill mode, break the output line at the beginning + * of new input lines except after \c, and nowhere else. + */ + + if (n->flags & NODE_NOFILL) { + if (n->flags & NODE_LINE && + (p->flags & TERMP_NONEWLINE) == 0) + term_newln(p); + p->flags |= TERMP_BRNEVER; + } else + p->flags &= ~TERMP_BRNEVER; + if (n->flags & NODE_ID) term_tag_write(n, p->line); @@ -962,28 +975,11 @@ term_fontrepl(p, TERMFONT_NONE); out: - /* - * If we're in a literal context, make sure that words - * together on the same line stay together. This is a - * POST-printing call, so we check the NEXT word. Since - * -man doesn't have nested macros, we don't need to be - * more specific than this. - */ - 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; - p->tcol->taboff = 0; - if (n->string != NULL && *n->string != '\0') - term_flushln(p); - else - term_newln(p); - p->flags &= ~TERMP_BRNEVER; - if (p->tcol->rmargin < p->maxrmargin && - n->parent->tok == MAN_HP) { - p->tcol->offset = p->tcol->rmargin; - p->tcol->rmargin = p->maxrmargin; - } + if (n->parent->tok == MAN_HP && n->parent->type == ROFFT_BODY && + n->prev == NULL && n->flags & NODE_NOFILL) { + term_newln(p); + p->tcol->offset = p->tcol->rmargin; + p->tcol->rmargin = p->maxrmargin; } if (n->flags & NODE_EOS) p->flags |= TERMP_SENTENCE;