summaryrefslogtreecommitdiffstats
path: root/roff_term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-05-05 15:17:32 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-05-05 15:17:32 +0000
commit59ff183bfbf2ef15bb6bae96290e8347aef13fb0 (patch)
tree44bdd5ee7af707828e02619c5b92b76ff63f5a20 /roff_term.c
parent3f8e564abc73c1abd2c1286b5e767b2b101aae57 (diff)
downloadmandoc-59ff183bfbf2ef15bb6bae96290e8347aef13fb0.tar.gz
Move .sp to the roff modules. Enough infrastructure is in place
now that this actually saves code: -70 LOC.
Diffstat (limited to 'roff_term.c')
-rw-r--r--roff_term.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/roff_term.c b/roff_term.c
index 783bd2ee..ea34208e 100644
--- a/roff_term.c
+++ b/roff_term.c
@@ -1,6 +1,6 @@
/* $OpenBSD$ */
/*
- * Copyright (c) 2010, 2014, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -30,11 +30,13 @@ 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_sp(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_sp, /* br */
};
@@ -87,3 +89,25 @@ roff_term_pre_ll(ROFF_TERM_ARGS)
{
term_setwidth(p, n->child != NULL ? n->child->string : NULL);
}
+
+static void
+roff_term_pre_sp(ROFF_TERM_ARGS)
+{
+ struct roffsu su;
+ int len;
+
+ if (n->child != NULL) {
+ if (a2roffsu(n->child->string, &su, SCALE_VS) == 0)
+ su.scale = 1.0;
+ len = term_vspan(p, &su);
+ } else
+ len = 1;
+
+ if (len < 0)
+ p->skipvsp -= len;
+ else
+ while (len--)
+ term_vspace(p);
+
+ roff_term_pre_br(p, n);
+}