The EQN_LISTONE box type is pointless.
authorschwarze <schwarze@openbsd.org>
Wed, 5 Jul 2017 15:03:20 +0000 (15:03 +0000)
committerschwarze <schwarze@openbsd.org>
Wed, 5 Jul 2017 15:03:20 +0000 (15:03 +0000)
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
usr.bin/mandoc/eqn_html.c
usr.bin/mandoc/eqn_term.c
usr.bin/mandoc/mandoc.h
usr.bin/mandoc/tree.c

index 21f2191..251a87a 100644 (file)
@@ -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 <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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:
index 1f16ac7..82e68f2 100644 (file)
@@ -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 <kristaps@bsd.lv>
  * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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, "");
index de10ee2..f41bc1d 100644 (file)
@@ -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 <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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;
index 4226e9f..c380b99 100644 (file)
@@ -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 <kristaps@bsd.lv>
  * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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 */
 };
index cf460f3..6d61bff 100644 (file)
@@ -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 <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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;