source@mandoc.bsd.lv
 help / color / mirror / Atom feed
From: schwarze@mandoc.bsd.lv
To: source@mandoc.bsd.lv
Subject: mandoc: The EQN_LISTONE box type is pointless.
Date: Wed, 5 Jul 2017 10:03:57 -0500 (EST)	[thread overview]
Message-ID: <12527932234214448507.enqueue@fantadrom.bsd.lv> (raw)

Log Message:
-----------
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.

Modified Files:
--------------
    mandoc:
        eqn.c
        eqn_html.c
        eqn_term.c
        mandoc.h
        tree.c

Revision Data
-------------
Index: eqn_html.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/eqn_html.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -Leqn_html.c -Leqn_html.c -u -p -r1.14 -r1.15
--- eqn_html.c
+++ eqn_html.c
@@ -51,7 +51,8 @@ eqn_box(struct html *p, const struct eqn
 	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;
 		}
@@ -131,9 +132,11 @@ eqn_box(struct html *p, const struct eqn
 
 	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: tree.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/tree.c,v
retrieving revision 1.74
retrieving revision 1.75
diff -Ltree.c -Ltree.c -u -p -r1.74 -r1.75
--- tree.c
+++ tree.c
@@ -316,7 +316,6 @@ print_box(const struct eqn_box *ep, int 
 	case EQN_ROOT:
 		t = "eqn-root";
 		break;
-	case EQN_LISTONE:
 	case EQN_LIST:
 		t = "eqn-list";
 		break;
Index: eqn_term.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/eqn_term.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -Leqn_term.c -Leqn_term.c -u -p -r1.9 -r1.10
--- eqn_term.c
+++ eqn_term.c
@@ -52,7 +52,7 @@ eqn_box(struct termp *p, const struct eq
 {
 	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)
@@ -96,12 +96,15 @@ eqn_box(struct termp *p, const struct eq
 	} 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;
@@ -110,7 +113,7 @@ eqn_box(struct termp *p, const struct eq
 
 	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: eqn.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/eqn.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -Leqn.c -Leqn.c -u -p -r1.72 -r1.73
--- eqn.c
+++ eqn.c
@@ -729,7 +729,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) {
@@ -782,7 +782,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:
@@ -820,7 +820,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;
@@ -908,6 +908,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;
@@ -939,8 +940,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:
@@ -1100,8 +1102,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: mandoc.h
===================================================================
RCS file: /home/cvs/mandoc/mandoc/mandoc.h,v
retrieving revision 1.241
retrieving revision 1.242
diff -Lmandoc.h -Lmandoc.h -u -p -r1.241 -r1.242
--- mandoc.h
+++ mandoc.h
@@ -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 */
 };
--
 To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv

                 reply	other threads:[~2017-07-05 15:03 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=12527932234214448507.enqueue@fantadrom.bsd.lv \
    --to=schwarze@mandoc.bsd.lv \
    --cc=source@mandoc.bsd.lv \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).