From 15f1b4eb016473ee28ed3c95a14bc28cee720539 Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Fri, 23 Jun 2017 21:04:57 +0000 Subject: splitting a text box sometimes requires wrapping it in a list --- eqn.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'eqn.c') diff --git a/eqn.c b/eqn.c index 563c35ff..0b961b74 100644 --- a/eqn.c +++ b/eqn.c @@ -1,4 +1,4 @@ -/* $Id: eqn.c,v 1.68 2017/06/23 00:30:38 schwarze Exp $ +/* $Id: eqn.c,v 1.69 2017/06/23 21:04:57 schwarze Exp $ /* * Copyright (c) 2011, 2014 Kristaps Dzonsons * Copyright (c) 2014, 2015, 2017 Ingo Schwarze @@ -1139,7 +1139,25 @@ this_tok: break; if (ccln == ccl) continue; - /* Boundary found, add a new box. */ + /* Boundary found, split the text. */ + if (parent->args == parent->expectargs) { + /* Remove the text from the tree. */ + if (cur->prev == NULL) + parent->first = cur->next; + else + cur->prev->next = NULL; + parent->last = cur->prev; + parent->args--; + /* Set up a list instead. */ + nbox = eqn_box_alloc(ep, parent); + nbox->type = EQN_LIST; + /* Insert the word into the list. */ + nbox->first = nbox->last = cur; + cur->parent = nbox; + cur->prev = NULL; + parent = nbox; + } + /* Append a new text box. */ nbox = eqn_box_alloc(ep, parent); nbox->type = EQN_TEXT; nbox->text = mandoc_strdup(cpn); -- cgit v1.2.3-56-ge451