-
-
-static inline int
-order_rs(int t)
-{
- int i;
-
- for (i = 0; i < RSORD_MAX; i++)
- if (rsord[i] == t)
- return(i);
-
- abort();
- /* NOTREACHED */
-}
-
-
-/* ARGSUSED */
-static int
-post_rs(POST_ARGS)
-{
- struct mdoc_node *nn, *next, *prev;
- int o;
-
- if (MDOC_BLOCK != n->type)
- return(1);
-
- assert(n->body->child);
- for (next = NULL, nn = n->body->child->next; nn; nn = next) {
- o = order_rs(nn->tok);
-
- /* Remove `nn' from the chain. */
- next = nn->next;
- if (next)
- next->prev = nn->prev;
-
- prev = nn->prev;
- if (prev)
- prev->next = nn->next;
-
- nn->prev = nn->next = NULL;
-
- /*
- * Scan back until we reach a node that's ordered before
- * us, then set ourselves as being the next.
- */
- for ( ; prev; prev = prev->prev)
- if (order_rs(prev->tok) <= o)
- break;
-
- nn->prev = prev;
- if (prev) {
- if (prev->next)
- prev->next->prev = nn;
- nn->next = prev->next;
- prev->next = nn;
- continue;
- }
-
- n->body->child->prev = nn;
- nn->next = n->body->child;
- n->body->child = nn;
- }
- return(1);
-}