summaryrefslogtreecommitdiffstats
path: root/eqn.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-06-26 11:04:47 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-06-26 11:04:47 +0000
commit31b27242e30cf39fa62e9daa2925de5b5d8b90aa (patch)
tree98808dd3938bb6bf82b84cfce3cdf6cb9cbcbd50 /eqn.c
parent92e2fd64e66c67235199e6c6f8bc9c6ef714a04d (diff)
downloadmandoc-31b27242e30cf39fa62e9daa2925de5b5d8b90aa.tar.gz
when splitting a composite word,
do not forget to close the inserted list box
Diffstat (limited to 'eqn.c')
-rw-r--r--eqn.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/eqn.c b/eqn.c
index 5d4e727b..4a44e040 100644
--- a/eqn.c
+++ b/eqn.c
@@ -1,4 +1,4 @@
-/* $Id$
+/* $Id$ */
/*
* Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -722,7 +722,7 @@ static enum rofferr
eqn_parse(struct eqn_node *ep, struct eqn_box *parent)
{
char sym[64];
- struct eqn_box *cur, *nbox;
+ struct eqn_box *cur, *nbox, *split;
const char *cp, *cpn, *start;
char *p;
size_t sz;
@@ -1118,6 +1118,7 @@ this_tok:
break;
cpn = p - 1;
ccln = CCL_LET;
+ split = NULL;
for (;;) {
/* Advance to next character. */
cp = cpn++;
@@ -1149,13 +1150,13 @@ this_tok:
parent->last = cur->prev;
parent->args--;
/* Set up a list instead. */
- nbox = eqn_box_alloc(ep, parent);
- nbox->type = EQN_LIST;
+ split = eqn_box_alloc(ep, parent);
+ split->type = EQN_LIST;
/* Insert the word into the list. */
- nbox->first = nbox->last = cur;
- cur->parent = nbox;
+ split->first = split->last = cur;
+ cur->parent = split;
cur->prev = NULL;
- parent = nbox;
+ parent = split;
}
/* Append a new text box. */
nbox = eqn_box_alloc(ep, parent);
@@ -1172,6 +1173,8 @@ this_tok:
cpn = p - 1;
ccln = CCL_LET;
}
+ if (split != NULL)
+ parent = split->parent;
break;
}
/*