From: schwarze@mandoc.bsd.lv
To: source@mandoc.bsd.lv
Subject: mandoc: Simplify handling of no-fill mode in man(7) by inspecting
Date: Mon, 15 Aug 2022 13:47:00 -0500 (EST) [thread overview]
Message-ID: <336a1e474344ccdc@mandoc.bsd.lv> (raw)
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
reply other threads:[~2022-08-15 18:47 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=336a1e474344ccdc@mandoc.bsd.lv \
--to=schwarze@mandoc.bsd.lv \
--cc=source@mandoc.bsd.lv \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).