-/* $Id: roff.c,v 1.280 2015/10/15 23:35:55 schwarze Exp $ */
+/* $Id: roff.c,v 1.283 2015/10/22 21:54:23 schwarze Exp $ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
switch (man->next) {
case ROFF_NEXT_SIBLING:
+ if (man->last->next != NULL) {
+ n->next = man->last->next;
+ man->last->next->prev = n;
+ } else
+ man->last->parent->last = n;
man->last->next = n;
n->prev = man->last;
n->parent = man->last->parent;
case ROFF_NEXT_CHILD:
man->last->child = n;
n->parent = man->last;
+ n->parent->last = n;
break;
default:
abort();
}
n->parent->nchild++;
- n->parent->last = n;
-
- /*
- * Copy over the normalised-data pointer of our parent. Not
- * everybody has one, but copying a null pointer is fine.
- */
-
- switch (n->type) {
- case ROFFT_BODY:
- if (n->end != ENDBODY_NOT)
- break;
- /* FALLTHROUGH */
- case ROFFT_TAIL:
- case ROFFT_HEAD:
- n->norm = n->parent->norm;
- break;
- default:
- break;
- }
-
- if (man->macroset == MACROSET_MDOC)
- mdoc_valid_pre(man, n);
+ man->last = n;
switch (n->type) {
case ROFFT_HEAD:
- assert(n->parent->type == ROFFT_BLOCK);
n->parent->head = n;
break;
case ROFFT_BODY:
- if (n->end)
- break;
- assert(n->parent->type == ROFFT_BLOCK);
+ if (n->end != ENDBODY_NOT)
+ return;
n->parent->body = n;
break;
case ROFFT_TAIL:
- assert(n->parent->type == ROFFT_BLOCK);
n->parent->tail = n;
break;
default:
- break;
+ return;
}
- man->last = n;
+
+ /*
+ * Copy over the normalised-data pointer of our parent. Not
+ * everybody has one, but copying a null pointer is fine.
+ */
+
+ n->norm = n->parent->norm;
+ assert(n->parent->type == ROFFT_BLOCK);
}
void
n->string = roff_strdup(man->roff, word);
roff_node_append(man, n);
if (man->macroset == MACROSET_MDOC)
- mdoc_valid_post(man);
+ n->flags |= MDOC_VALID | MDOC_ENDED;
else
- man_valid_post(man);
+ n->flags |= MAN_VALID;
man->next = ROFF_NEXT_SIBLING;
}
n->span = tbl;
roff_node_append(man, n);
if (man->macroset == MACROSET_MDOC)
- mdoc_valid_post(man);
+ n->flags |= MDOC_VALID | MDOC_ENDED;
else
- man_valid_post(man);
+ n->flags |= MAN_VALID;
man->next = ROFF_NEXT_SIBLING;
}