aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/roff_term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-06-04 22:44:15 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-06-04 22:44:15 +0000
commit4a4657f9f40ea60d08ecfb7c12fc46e29440ff58 (patch)
treebf7ff7d4e63bcc15048ba4c11abf99b9146c1e76 /roff_term.c
parentab795e726e781905db61f736dacb3fbb0e35a301 (diff)
downloadmandoc-4a4657f9f40ea60d08ecfb7c12fc46e29440ff58.tar.gz
mandoc-4a4657f9f40ea60d08ecfb7c12fc46e29440ff58.tar.zst
mandoc-4a4657f9f40ea60d08ecfb7c12fc46e29440ff58.zip
Implement the roff(7) .mc (right margin character) request.
The Tcl/Tk manual pages use this extensively. Delete the TERM_MAXMARGIN hack, it breaks .mc inside .nf; instead, implement a proper TERMP_BRNEVER flag.
Diffstat (limited to 'roff_term.c')
-rw-r--r--roff_term.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/roff_term.c b/roff_term.c
index 3c2f24a9..a4d48812 100644
--- a/roff_term.c
+++ b/roff_term.c
@@ -1,4 +1,4 @@
-/* $OpenBSD$ */
+/* $Id: roff_term.c,v 1.7 2017/06/04 22:44:15 schwarze Exp $ */
/*
* Copyright (c) 2010, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -30,6 +30,7 @@ typedef void (*roff_term_pre_fp)(ROFF_TERM_ARGS);
static void roff_term_pre_br(ROFF_TERM_ARGS);
static void roff_term_pre_ft(ROFF_TERM_ARGS);
static void roff_term_pre_ll(ROFF_TERM_ARGS);
+static void roff_term_pre_mc(ROFF_TERM_ARGS);
static void roff_term_pre_sp(ROFF_TERM_ARGS);
static void roff_term_pre_ta(ROFF_TERM_ARGS);
static void roff_term_pre_ti(ROFF_TERM_ARGS);
@@ -37,7 +38,8 @@ static void roff_term_pre_ti(ROFF_TERM_ARGS);
static const roff_term_pre_fp roff_term_pre_acts[ROFF_MAX] = {
roff_term_pre_br, /* br */
roff_term_pre_ft, /* ft */
- roff_term_pre_ll, /* ft */
+ roff_term_pre_ll, /* ll */
+ roff_term_pre_mc, /* mc */
roff_term_pre_sp, /* sp */
roff_term_pre_ta, /* ta */
roff_term_pre_ti, /* ti */
@@ -95,6 +97,21 @@ roff_term_pre_ll(ROFF_TERM_ARGS)
}
static void
+roff_term_pre_mc(ROFF_TERM_ARGS)
+{
+ if (p->col) {
+ p->flags |= TERMP_NOBREAK;
+ term_flushln(p);
+ p->flags &= ~(TERMP_NOBREAK | TERMP_NOSPACE);
+ }
+ if (n->child != NULL) {
+ p->mc = n->child->string;
+ p->flags |= TERMP_NEWMC;
+ } else
+ p->flags |= TERMP_ENDMC;
+}
+
+static void
roff_term_pre_sp(ROFF_TERM_ARGS)
{
struct roffsu su;