* mandoc: Simplify handling of no-fill mode in man(7) by inspecting
@ 2022-08-15 18:47 schwarze
0 siblings, 0 replies; only message in thread
From: schwarze @ 2022-08-15 18:47 UTC (permalink / raw)
To: source
Log Message:
-----------
Simplify handling of no-fill mode in man(7) by inspecting NODE_NOFILL
at the beginning of the node handler, in the same way as it is done
in the mdoc(7) node handler.
As a side effect, this also fixes a bug: if an input line contained
nothing but an escape sequence producing no output whatsoever (for
example, \fR), the old code incorrectly emitted a blank line anyway,
whereas the new code only emits such a blank link if the input line
actually produces output (even invisible zero-width output). To make
the distinction, the ASCII_NBRZW -> lastcol -> term_newln() mechanism
established in term.c rev. 1.289 is used.
Modified Files:
--------------
mandoc:
man_term.c
Revision Data
-------------
Index: man_term.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/man_term.c,v
retrieving revision 1.238
retrieving revision 1.239
diff -Lman_term.c -Lman_term.c -u -p -r1.238 -r1.239
--- man_term.c
+++ man_term.c
@@ -517,7 +517,7 @@ pre_IP(DECL_ARGS)
p->trailspace = 1;
break;
case ROFFT_BODY:
- p->flags |= TERMP_NOSPACE;
+ p->flags |= TERMP_NOSPACE | TERMP_NONEWLINE;
break;
default:
abort();
@@ -591,7 +591,7 @@ pre_TP(DECL_ARGS)
p->trailspace = 1;
break;
case ROFFT_BODY:
- p->flags |= TERMP_NOSPACE;
+ p->flags |= TERMP_NOSPACE | TERMP_NONEWLINE;
break;
default:
abort();
@@ -900,6 +900,19 @@ print_man_node(DECL_ARGS)
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);
@@ -964,28 +977,11 @@ print_man_node(DECL_ARGS)
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;
--
To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-08-15 18:47 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-15 18:47 mandoc: Simplify handling of no-fill mode in man(7) by inspecting schwarze
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).