=================================================================== RCS file: /cvs/mandoc/roff.c,v retrieving revision 1.283 retrieving revision 1.287 diff -u -p -r1.283 -r1.287 --- mandoc/roff.c 2015/10/22 21:54:23 1.283 +++ mandoc/roff.c 2017/01/10 21:59:47 1.287 @@ -1,7 +1,7 @@ -/* $Id: roff.c,v 1.283 2015/10/22 21:54:23 schwarze Exp $ */ +/* $Id: roff.c,v 1.287 2017/01/10 21:59:47 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons - * Copyright (c) 2010-2015 Ingo Schwarze + * Copyright (c) 2010-2015, 2017 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -991,11 +991,11 @@ roff_node_alloc(struct roff_man *man, int line, int po n->sec = man->lastsec; if (man->flags & MDOC_SYNOPSIS) - n->flags |= MDOC_SYNPRETTY; + n->flags |= NODE_SYNPRETTY; else - n->flags &= ~MDOC_SYNPRETTY; + n->flags &= ~NODE_SYNPRETTY; if (man->flags & MDOC_NEWLINE) - n->flags |= MDOC_LINE; + n->flags |= NODE_LINE; man->flags &= ~MDOC_NEWLINE; return n; @@ -1017,14 +1017,17 @@ roff_node_append(struct roff_man *man, struct roff_nod n->parent = man->last->parent; break; case ROFF_NEXT_CHILD: + if (man->last->child != NULL) { + n->next = man->last->child; + man->last->child->prev = n; + } else + man->last->last = n; man->last->child = n; n->parent = man->last; - n->parent->last = n; break; default: abort(); } - n->parent->nchild++; man->last = n; switch (n->type) { @@ -1060,10 +1063,7 @@ roff_word_alloc(struct roff_man *man, int line, int po n = roff_node_alloc(man, line, pos, ROFFT_TEXT, TOKEN_NONE); n->string = roff_strdup(man->roff, word); roff_node_append(man, n); - if (man->macroset == MACROSET_MDOC) - n->flags |= MDOC_VALID | MDOC_ENDED; - else - n->flags |= MAN_VALID; + n->flags |= NODE_VALID | NODE_ENDED; man->next = ROFF_NEXT_SIBLING; } @@ -1133,7 +1133,7 @@ roff_addeqn(struct roff_man *man, const struct eqn *eq n = roff_node_alloc(man, eqn->ln, eqn->pos, ROFFT_EQN, TOKEN_NONE); n->eqn = eqn; if (eqn->ln > man->last->line) - n->flags |= MDOC_LINE; + n->flags |= NODE_LINE; roff_node_append(man, n); man->next = ROFF_NEXT_SIBLING; } @@ -1148,10 +1148,7 @@ roff_addtbl(struct roff_man *man, const struct tbl_spa n = roff_node_alloc(man, tbl->line, 0, ROFFT_TBL, TOKEN_NONE); n->span = tbl; roff_node_append(man, n); - if (man->macroset == MACROSET_MDOC) - n->flags |= MDOC_VALID | MDOC_ENDED; - else - n->flags |= MAN_VALID; + n->flags |= NODE_VALID | NODE_ENDED; man->next = ROFF_NEXT_SIBLING; } @@ -1169,7 +1166,6 @@ roff_node_unlink(struct roff_man *man, struct roff_nod /* Adjust parent. */ if (n->parent != NULL) { - n->parent->nchild--; if (n->parent->child == n) n->parent->child = n->next; if (n->parent->last == n) @@ -1211,7 +1207,6 @@ roff_node_delete(struct roff_man *man, struct roff_nod while (n->child != NULL) roff_node_delete(man, n->child); - assert(n->nchild == 0); roff_node_unlink(man, n); roff_node_free(n); }