aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/eqn_term.c
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
commitb4ec22b7b2898db046adc6edf096ec7e065817ca (patch)
tree883135ab5df2d595091ea707ea05c95b832b31a7 /eqn_term.c
parentdf50213ad85d4924615a0bc692c6dfc5822917f1 (diff)
downloadmandoc-b4ec22b7b2898db046adc6edf096ec7e065817ca.tar.gz
mandoc-b4ec22b7b2898db046adc6edf096ec7e065817ca.tar.zst
mandoc-b4ec22b7b2898db046adc6edf096ec7e065817ca.zip
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.
Diffstat (limited to 'eqn_term.c')
-rw-r--r--eqn_term.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/eqn_term.c b/eqn_term.c
index 08f4a993..741829b9 100644
--- a/eqn_term.c
+++ b/eqn_term.c
@@ -1,4 +1,4 @@
-/* $Id: eqn_term.c,v 1.13 2017/07/08 14:51:04 schwarze Exp $ */
+/* $Id: eqn_term.c,v 1.14 2017/08/23 20:03:17 schwarze Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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) {