=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/eqn.c,v retrieving revision 1.36 retrieving revision 1.37 diff -c -r1.36 -r1.37 *** src/usr.bin/mandoc/eqn.c 2017/07/05 15:03:20 1.36 --- src/usr.bin/mandoc/eqn.c 2017/07/06 00:08:52 1.37 *************** *** 1,4 **** ! /* $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 --- 1,4 ---- ! /* $OpenBSD: eqn.c,v 1.37 2017/07/06 00:08:52 schwarze Exp $ */ /* * Copyright (c) 2011, 2014 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2017 Ingo Schwarze *************** *** 817,822 **** --- 817,824 ---- ep->gsize = size; break; } + while (parent->args == parent->expectargs) + parent = parent->parent; parent = eqn_box_alloc(ep, parent); parent->type = EQN_LIST; parent->expectargs = 1; *************** *** 838,850 **** cur->type = EQN_TEXT; cur->text = mandoc_strdup(""); } ! /* Handle the "subsup" and "fromto" positions. */ ! if (EQN_TOK_SUP == tok && parent->pos == EQNPOS_SUB) { parent->expectargs = 3; parent->pos = EQNPOS_SUBSUP; break; } ! if (EQN_TOK_TO == tok && parent->pos == EQNPOS_FROM) { parent->expectargs = 3; parent->pos = EQNPOS_FROMTO; break; --- 840,864 ---- cur->type = EQN_TEXT; cur->text = mandoc_strdup(""); } ! while (parent->expectargs == 1 && parent->args == 1) ! parent = parent->parent; ! if (tok == EQN_TOK_FROM || tok == EQN_TOK_TO) { ! for (cur = parent; cur != NULL; cur = cur->parent) ! if (cur->pos == EQNPOS_SUB || ! cur->pos == EQNPOS_SUP || ! cur->pos == EQNPOS_SUBSUP || ! cur->pos == EQNPOS_SQRT || ! cur->pos == EQNPOS_OVER) ! break; ! if (cur != NULL) ! parent = cur->parent; ! } ! if (tok == EQN_TOK_SUP && parent->pos == EQNPOS_SUB) { parent->expectargs = 3; parent->pos = EQNPOS_SUBSUP; break; } ! if (tok == EQN_TOK_TO && parent->pos == EQNPOS_FROM) { parent->expectargs = 3; parent->pos = EQNPOS_FROMTO; break; *************** *** 893,898 **** --- 907,914 ---- cur->type = EQN_TEXT; cur->text = mandoc_strdup(""); } + while (parent->args == parent->expectargs) + parent = parent->parent; while (EQN_SUBEXPR == parent->type) parent = parent->parent; parent = eqn_box_makebinary(ep, EQNPOS_OVER, parent); *************** *** 1097,1109 **** parent = split->parent; break; } - /* - * Post-process list status. - */ - while (parent->type == EQN_LIST && - parent->expectargs == 1 && - parent->args == 1) - parent = parent->parent; break; default: abort(); --- 1113,1118 ----