From 32e499962565cb3b812aaeba8c8db9821677da8f Mon Sep 17 00:00:00 2001 From: schwarze Date: Wed, 5 Jul 2017 15:03:20 +0000 Subject: [PATCH] The EQN_LISTONE box type is pointless. Simplify by just using EQN_LIST with expectargs = 1. Noticed while investigating a bug report from bentley@. No functional change. --- usr.bin/mandoc/eqn.c | 19 +++++++++++-------- usr.bin/mandoc/eqn_html.c | 11 +++++++---- usr.bin/mandoc/eqn_term.c | 11 +++++++---- usr.bin/mandoc/mandoc.h | 3 +-- usr.bin/mandoc/tree.c | 3 +-- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/usr.bin/mandoc/eqn.c b/usr.bin/mandoc/eqn.c index 21f21919d68..251a87aa816 100644 --- a/usr.bin/mandoc/eqn.c +++ b/usr.bin/mandoc/eqn.c @@ -1,4 +1,4 @@ -/* $OpenBSD: eqn.c,v 1.35 2017/06/29 16:30:47 schwarze Exp $ */ +/* $OpenBSD: eqn.c,v 1.36 2017/07/05 15:03:20 schwarze Exp $ */ /* * Copyright (c) 2011, 2014 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2017 Ingo Schwarze @@ -727,7 +727,7 @@ next_tok: cur->text = mandoc_strdup(""); } parent = eqn_box_makebinary(ep, EQNPOS_NONE, parent); - parent->type = EQN_LISTONE; + parent->type = EQN_LIST; parent->expectargs = 1; parent->font = EQNFONT_ROMAN; switch (tok) { @@ -780,7 +780,7 @@ next_tok: * exactly one of those. */ parent = eqn_box_alloc(ep, parent); - parent->type = EQN_LISTONE; + parent->type = EQN_LIST; parent->expectargs = 1; switch (tok) { case EQN_TOK_FAT: @@ -818,7 +818,7 @@ next_tok: break; } parent = eqn_box_alloc(ep, parent); - parent->type = EQN_LISTONE; + parent->type = EQN_LIST; parent->expectargs = 1; parent->size = size; break; @@ -906,6 +906,7 @@ next_tok: */ for (cur = parent; cur != NULL; cur = cur->parent) if (cur->type == EQN_LIST && + cur->expectargs > 1 && (tok == EQN_TOK_BRACE_CLOSE || cur->left != NULL)) break; @@ -937,8 +938,9 @@ next_tok: parent->type == EQN_MATRIX)) parent = parent->parent; /* Close out any "singleton" lists. */ - while (parent->type == EQN_LISTONE && - parent->args == parent->expectargs) + while (parent->type == EQN_LIST && + parent->expectargs == 1 && + parent->args == 1) parent = parent->parent; break; case EQN_TOK_BRACE_OPEN: @@ -1098,8 +1100,9 @@ next_tok: /* * Post-process list status. */ - while (parent->type == EQN_LISTONE && - parent->args == parent->expectargs) + while (parent->type == EQN_LIST && + parent->expectargs == 1 && + parent->args == 1) parent = parent->parent; break; default: diff --git a/usr.bin/mandoc/eqn_html.c b/usr.bin/mandoc/eqn_html.c index 1f16ac77f85..82e68f2f400 100644 --- a/usr.bin/mandoc/eqn_html.c +++ b/usr.bin/mandoc/eqn_html.c @@ -1,4 +1,4 @@ -/* $OpenBSD: eqn_html.c,v 1.10 2017/06/23 22:59:27 schwarze Exp $ */ +/* $OpenBSD: eqn_html.c,v 1.11 2017/07/05 15:03:20 schwarze Exp $ */ /* * Copyright (c) 2011, 2014 Kristaps Dzonsons * Copyright (c) 2017 Ingo Schwarze @@ -49,7 +49,8 @@ eqn_box(struct html *p, const struct eqn_box *bp) if (EQN_MATRIX == bp->type) { if (NULL == bp->first) goto out; - if (EQN_LIST != bp->first->type) { + if (bp->first->type != EQN_LIST || + bp->first->expectargs == 1) { eqn_box(p, bp->first); goto out; } @@ -129,9 +130,11 @@ eqn_box(struct html *p, const struct eqn_box *bp) if (EQN_PILE == bp->type) { assert(NULL == post); - if (bp->first != NULL && bp->first->type == EQN_LIST) + if (bp->first != NULL && + bp->first->type == EQN_LIST && + bp->first->expectargs > 1) post = print_otag(p, TAG_MTABLE, ""); - } else if (bp->type == EQN_LIST && + } else if (bp->type == EQN_LIST && bp->expectargs > 1 && bp->parent && bp->parent->type == EQN_PILE) { assert(NULL == post); post = print_otag(p, TAG_MTR, ""); diff --git a/usr.bin/mandoc/eqn_term.c b/usr.bin/mandoc/eqn_term.c index de10ee26b9c..f41bc1d4129 100644 --- a/usr.bin/mandoc/eqn_term.c +++ b/usr.bin/mandoc/eqn_term.c @@ -1,4 +1,4 @@ -/* $OpenBSD: eqn_term.c,v 1.5 2017/02/12 14:13:23 schwarze Exp $ */ +/* $OpenBSD: eqn_term.c,v 1.6 2017/07/05 15:03:20 schwarze Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2017 Ingo Schwarze @@ -50,7 +50,7 @@ eqn_box(struct termp *p, const struct eqn_box *bp) { const struct eqn_box *child; - if (bp->type == EQN_LIST || + if ((bp->type == EQN_LIST && bp->expectargs > 1) || (bp->type == EQN_PILE && (bp->prev || bp->next)) || (bp->parent != NULL && bp->parent->pos == EQNPOS_SQRT)) { if (bp->parent->type == EQN_SUBEXPR && bp->prev != NULL) @@ -94,12 +94,15 @@ eqn_box(struct termp *p, const struct eqn_box *bp) } else { child = bp->first; if (bp->type == EQN_MATRIX && - child != NULL && child->type == EQN_LIST) + child != NULL && + child->type == EQN_LIST && + child->expectargs > 1) child = child->first; while (child != NULL) { eqn_box(p, bp->type == EQN_PILE && child->type == EQN_LIST && + child->expectargs > 1 && child->args == 1 ? child->first : child); child = child->next; @@ -108,7 +111,7 @@ eqn_box(struct termp *p, const struct eqn_box *bp) if (bp->font != EQNFONT_NONE) term_fontpop(p); - if (bp->type == EQN_LIST || + if ((bp->type == EQN_LIST && bp->expectargs > 1) || (bp->type == EQN_PILE && (bp->prev || bp->next)) || (bp->parent != NULL && bp->parent->pos == EQNPOS_SQRT)) { p->flags |= TERMP_NOSPACE; diff --git a/usr.bin/mandoc/mandoc.h b/usr.bin/mandoc/mandoc.h index 4226e9fb61d..c380b99bfd1 100644 --- a/usr.bin/mandoc/mandoc.h +++ b/usr.bin/mandoc/mandoc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: mandoc.h,v 1.183 2017/07/03 17:33:01 schwarze Exp $ */ +/* $OpenBSD: mandoc.h,v 1.184 2017/07/05 15:03:20 schwarze Exp $ */ /* * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze @@ -338,7 +338,6 @@ enum eqn_boxt { EQN_TEXT, /* text (number, variable, whatever) */ EQN_SUBEXPR, /* nested `eqn' subexpression */ EQN_LIST, /* list (braces, etc.) */ - EQN_LISTONE, /* singleton list */ EQN_PILE, /* vertical pile */ EQN_MATRIX /* pile of piles */ }; diff --git a/usr.bin/mandoc/tree.c b/usr.bin/mandoc/tree.c index cf460f36446..6d61bff19e1 100644 --- a/usr.bin/mandoc/tree.c +++ b/usr.bin/mandoc/tree.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tree.c,v 1.41 2017/04/24 23:06:09 schwarze Exp $ */ +/* $OpenBSD: tree.c,v 1.42 2017/07/05 15:03:20 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze @@ -314,7 +314,6 @@ print_box(const struct eqn_box *ep, int indent) case EQN_ROOT: t = "eqn-root"; break; - case EQN_LISTONE: case EQN_LIST: t = "eqn-list"; break; -- 2.20.1