summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-08-23 20:03:17 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-08-23 20:03:17 +0000
commita56cf45e2bd5ca56ab01eac4da4e57e086e51e90 (patch)
treea7994c27421ac00d61770dfcd20dcfd968a9c9f2
parentddfc9b897c5dc3180c2cb77bdedcb614ad1ffe89 (diff)
downloadmandoc-a56cf45e2bd5ca56ab01eac4da4e57e086e51e90.tar.gz
Suppress spacing before certain kinds of lists.
One benefit is a reduced probablity that a blank appears between a function name and the opening parenthesis introducing the arguments. The heuristics isn't perfect and may occasionally suppress a blank that wouldn't do harm.
-rw-r--r--eqn_term.c14
-rw-r--r--regress/eqn/matrix/basic.out_ascii2
2 files changed, 13 insertions, 3 deletions
diff --git a/eqn_term.c b/eqn_term.c
index 1582f893..e41ab32e 100644
--- a/eqn_term.c
+++ b/eqn_term.c
@@ -20,6 +20,7 @@
#include <sys/types.h>
#include <assert.h>
+#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -67,7 +68,16 @@ eqn_box(struct termp *p, const struct eqn_box *bp)
((bp->parent->type == EQN_LIST && bp->expectargs == 1) ||
(bp->parent->type == EQN_SUBEXPR &&
bp->pos != EQNPOS_SQRT)))))) {
- if (bp->parent->type == EQN_SUBEXPR && bp->prev != NULL)
+ if ((bp->parent->type == EQN_SUBEXPR && bp->prev != NULL) ||
+ (bp->type == EQN_LIST &&
+ bp->first != NULL &&
+ bp->first->type != EQN_PILE &&
+ bp->first->type != EQN_MATRIX &&
+ bp->prev != NULL &&
+ (bp->prev->type == EQN_LIST ||
+ (bp->prev->type == EQN_TEXT &&
+ (*bp->prev->text == '\\' ||
+ isalpha((unsigned char)*bp->prev->text))))))
p->flags |= TERMP_NOSPACE;
term_word(p, bp->left != NULL ? bp->left : "(");
p->flags |= TERMP_NOSPACE;
@@ -98,9 +108,9 @@ eqn_box(struct termp *p, const struct eqn_box *bp)
term_word(p, bp->pos == EQNPOS_OVER ? "/" :
(bp->pos == EQNPOS_SUP ||
bp->pos == EQNPOS_TO) ? "^" : "_");
- p->flags |= TERMP_NOSPACE;
child = child->next;
if (child != NULL) {
+ p->flags |= TERMP_NOSPACE;
eqn_box(p, child);
if (bp->pos == EQNPOS_FROMTO ||
bp->pos == EQNPOS_SUBSUP) {
diff --git a/regress/eqn/matrix/basic.out_ascii b/regress/eqn/matrix/basic.out_ascii
index 21087dee..b6013875 100644
--- a/regress/eqn/matrix/basic.out_ascii
+++ b/regress/eqn/matrix/basic.out_ascii
@@ -4,6 +4,6 @@ NNAAMMEE
mmaattrriixx--bbaassiicc - matrixes in equations
DDEESSCCRRIIPPTTIIOONN
- initial text ((_a_11 _a_21) (_a_12 _a_22)) (_b_1 _b_2) [sin ssiinn] final text
+ initial text ((_a_11 _a_21) (_a_12 _a_22)) (_b_1 _b_2)[sin ssiinn] final text
OpenBSD July 4, 2017 OpenBSD