From a56cf45e2bd5ca56ab01eac4da4e57e086e51e90 Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Wed, 23 Aug 2017 20:03:17 +0000 Subject: 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. --- eqn_term.c | 14 ++++++++++++-- regress/eqn/matrix/basic.out_ascii | 2 +- 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 #include +#include #include #include #include @@ -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 -- cgit