diff options
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/broken.in | 16 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/broken.out_ascii | 11 | ||||
-rw-r--r-- | regress/usr.bin/mandoc/mdoc/Bl/broken.out_lint | 2 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc.c | 8 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc.h | 10 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_html.c | 11 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_macro.c | 188 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_man.c | 19 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_term.c | 7 | ||||
-rw-r--r-- | usr.bin/mandoc/mdoc_validate.c | 46 |
10 files changed, 140 insertions, 178 deletions
diff --git a/regress/usr.bin/mandoc/mdoc/Bl/broken.in b/regress/usr.bin/mandoc/mdoc/Bl/broken.in index 22595cadc2b..b2cd81e8a52 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/broken.in +++ b/regress/usr.bin/mandoc/mdoc/Bl/broken.in @@ -1,4 +1,4 @@ -.Dd November 10, 2012 +.Dd February 12, 2015 .Dt BL-BROKEN 1 .Os OpenBSD .Sh NAME @@ -13,4 +13,16 @@ inside both .Bc after bracket .El -after both +after list +.Bo before list +.Bl -enum -offset indent +.It +inside list +.Bd -ragged -offset indent +inside display +.Bc +after bracket +.It +next item +.El +after list diff --git a/regress/usr.bin/mandoc/mdoc/Bl/broken.out_ascii b/regress/usr.bin/mandoc/mdoc/Bl/broken.out_ascii index ef3a5802b0f..5e6ae8470f7 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/broken.out_ascii +++ b/regress/usr.bin/mandoc/mdoc/Bl/broken.out_ascii @@ -7,6 +7,13 @@ DDEESSCCRRIIPPTTIIOONN before both [before list 1. inside both] after bracket - after both + after list [before list -OpenBSD November 10, 2012 OpenBSD + 1. inside list + + inside display] after bracket + + 2. next item + after list + +OpenBSD February 12, 2015 OpenBSD diff --git a/regress/usr.bin/mandoc/mdoc/Bl/broken.out_lint b/regress/usr.bin/mandoc/mdoc/Bl/broken.out_lint index b57a007983d..477b7fbc83a 100644 --- a/regress/usr.bin/mandoc/mdoc/Bl/broken.out_lint +++ b/regress/usr.bin/mandoc/mdoc/Bl/broken.out_lint @@ -1 +1,3 @@ mandoc: broken.in:13:2: WARNING: blocks badly nested: Bo breaks Bl +mandoc: broken.in:23:2: WARNING: blocks badly nested: Bo breaks Bd +mandoc: broken.in:25:2: ERROR: inserting missing end of block: It breaks Bd diff --git a/usr.bin/mandoc/mdoc.c b/usr.bin/mandoc/mdoc.c index fb7ecb6dca5..af0f1cc474a 100644 --- a/usr.bin/mandoc/mdoc.c +++ b/usr.bin/mandoc/mdoc.c @@ -1,7 +1,7 @@ -/* $OpenBSD: mdoc.c,v 1.125 2015/02/05 00:13:34 schwarze Exp $ */ +/* $OpenBSD: mdoc.c,v 1.126 2015/02/12 12:20:47 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2010, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -417,8 +417,10 @@ mdoc_endbody_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok, { struct mdoc_node *p; + body->flags |= MDOC_ENDED; + body->parent->flags |= MDOC_ENDED; p = node_alloc(mdoc, line, pos, tok, MDOC_BODY); - p->pending = body; + p->body = body; p->norm = body->norm; p->end = end; node_append(mdoc, p); diff --git a/usr.bin/mandoc/mdoc.h b/usr.bin/mandoc/mdoc.h index 723f1873344..a65b46344fd 100644 --- a/usr.bin/mandoc/mdoc.h +++ b/usr.bin/mandoc/mdoc.h @@ -1,6 +1,7 @@ -/* $OpenBSD: mdoc.h,v 1.60 2015/02/05 00:13:34 schwarze Exp $ */ +/* $OpenBSD: mdoc.h,v 1.61 2015/02/12 12:20:47 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> + * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -355,11 +356,11 @@ struct mdoc_node { enum mdoct tok; /* tok or MDOC__MAX if none */ int flags; #define MDOC_VALID (1 << 0) /* has been validated */ -#define MDOC_BREAK (1 << 1) /* has broken another block */ +#define MDOC_ENDED (1 << 1) /* gone past body end mark */ #define MDOC_EOS (1 << 2) /* at sentence boundary */ #define MDOC_LINE (1 << 3) /* first macro/text on line */ #define MDOC_SYNPRETTY (1 << 4) /* SYNOPSIS-style formatting */ -#define MDOC_ENDED (1 << 5) /* rendering has been ended */ +#define MDOC_BROKEN (1 << 5) /* must validate parent when ending */ #define MDOC_DELIMO (1 << 6) #define MDOC_DELIMC (1 << 7) enum mdoc_type type; /* AST node type */ @@ -368,9 +369,8 @@ struct mdoc_node { int prev_font; /* before entering this node */ /* FIXME: these can be union'd to shave a few bytes. */ struct mdoc_arg *args; /* BLOCK/ELEM */ - struct mdoc_node *pending; /* BLOCK */ struct mdoc_node *head; /* BLOCK */ - struct mdoc_node *body; /* BLOCK */ + struct mdoc_node *body; /* BLOCK/ENDBODY */ struct mdoc_node *tail; /* BLOCK */ char *string; /* TEXT */ const struct tbl_span *span; /* TBL */ diff --git a/usr.bin/mandoc/mdoc_html.c b/usr.bin/mandoc/mdoc_html.c index 339eb9917e4..3bd5eb3bddc 100644 --- a/usr.bin/mandoc/mdoc_html.c +++ b/usr.bin/mandoc/mdoc_html.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mdoc_html.c,v 1.99 2015/02/11 14:14:53 schwarze Exp $ */ +/* $OpenBSD: mdoc_html.c,v 1.100 2015/02/12 12:20:47 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org> @@ -33,7 +33,7 @@ #define INDENT 5 #define MDOC_ARGS const struct mdoc_meta *meta, \ - const struct mdoc_node *n, \ + struct mdoc_node *n, \ struct html *h #ifndef MIN @@ -265,7 +265,7 @@ void html_mdoc(void *arg, const struct mdoc *mdoc) { - print_mdoc(mdoc_meta(mdoc), mdoc_node(mdoc), + print_mdoc(mdoc_meta(mdoc), mdoc_node(mdoc)->child, (struct html *)arg); putchar('\n'); } @@ -385,6 +385,7 @@ print_mdoc_node(MDOC_ARGS) child = 1; t = h->tags.head; + n->flags &= ~MDOC_ENDED; switch (n->type) { case MDOC_ROOT: @@ -455,7 +456,7 @@ print_mdoc_node(MDOC_ARGS) break; (*mdocs[n->tok].post)(meta, n, h); if (n->end != ENDBODY_NOT) - n->pending->flags |= MDOC_ENDED; + n->body->flags |= MDOC_ENDED; if (n->end == ENDBODY_NOSPACE) h->flags |= HTML_NOSPACE; break; @@ -1120,7 +1121,7 @@ mdoc_bd_pre(MDOC_ARGS) { struct htmlpair tag[2]; int comp, sv; - const struct mdoc_node *nn; + struct mdoc_node *nn; struct roffsu su; if (MDOC_HEAD == n->type) diff --git a/usr.bin/mandoc/mdoc_macro.c b/usr.bin/mandoc/mdoc_macro.c index 8ff01cabd9f..f0d1c893029 100644 --- a/usr.bin/mandoc/mdoc_macro.c +++ b/usr.bin/mandoc/mdoc_macro.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mdoc_macro.c,v 1.138 2015/02/11 13:37:31 schwarze Exp $ */ +/* $OpenBSD: mdoc_macro.c,v 1.139 2015/02/12 12:20:47 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org> @@ -45,8 +45,6 @@ static void append_delims(struct mdoc *, int, int *, char *); static enum mdoct lookup(struct mdoc *, enum mdoct, int, int, const char *); static int macro_or_word(MACRO_PROT_ARGS, int); -static void make_pending(struct mdoc *, struct mdoc_node *, - struct mdoc_node *, int, int); static int parse_rest(struct mdoc *, enum mdoct, int, int *, char *); static enum mdoct rew_alt(enum mdoct); @@ -283,15 +281,34 @@ static void rew_pending(struct mdoc *mdoc, const struct mdoc_node *n) { - rew_last(mdoc, n); - - if (n->type != MDOC_BLOCK) - return; - - while ((n = n->pending) != NULL) { + for (;;) { rew_last(mdoc, n); - if (n->type == MDOC_HEAD) + + switch (n->type) { + case MDOC_HEAD: mdoc_body_alloc(mdoc, n->line, n->pos, n->tok); + return; + case MDOC_BLOCK: + break; + default: + return; + } + + if ( ! (n->flags & MDOC_BROKEN)) + return; + + for (;;) { + if ((n = n->parent) == NULL) + return; + + if (n->type == MDOC_BLOCK || + n->type == MDOC_HEAD) { + if (n->flags & MDOC_ENDED) + break; + else + return; + } + } } } @@ -355,78 +372,6 @@ rew_elem(struct mdoc *mdoc, enum mdoct tok) } /* - * We are trying to close the block *breaker, - * but the child block *broken is still open. - * Thus, postpone closing the *breaker - * until the rew_pending() call closing *broken. - */ -static void -make_pending(struct mdoc *mdoc, struct mdoc_node *breaker, - struct mdoc_node *broken, int line, int ppos) -{ - struct mdoc_node *n; - - mandoc_vmsg(MANDOCERR_BLK_NEST, mdoc->parse, line, ppos, - "%s breaks %s", mdoc_macronames[breaker->tok], - mdoc_macronames[broken->tok]); - - /* - * If the *broken block (Z) is already broken by a block (B) - * contained in the breaker (A), make the breaker pending - * on that inner breaker (B). Graphically, - * - * breaker=[A! broken=n=[B!->A (old broken=)[Z->B B] A] Z] - * - * In these graphics, "->" indicates the "pending" pointer and - * "!" indicates the MDOC_BREAK flag. Each of the cases gets - * one additional pointer (B->A) and one additional flag (A!). - */ - - for (n = broken->parent; ; n = n->parent) - if (n == broken->pending) - broken = n; - else if (n == breaker) - break; - - /* - * Found the breaker. - * - * If another, outer breaker (X) is already pending on - * the *broken block (B), we must not clobber the link - * to the outer breaker, but make it pending on the new, - * now inner breaker (A). Graphically, - * - * [X! n=breaker=[A!->X broken=[B(->X)->A X] A] B]. - */ - - if (broken->pending != NULL) { - n = breaker; - - /* - * If the inner breaker (A) is already broken, too, - * it cannot take on the outer breaker (X) but must - * hand it on to its own breakers (Y). Graphically, - * - * [X! n=[Y!->X breaker=[A!->Y Y] broken=[B(->X)->A X] A] B] - */ - - while (n->pending) - n = n->pending; - n->pending = broken->pending; - } - - /* - * Now we have reduced the situation to the simplest case: - * breaker=[A! broken=[B->A A] B]. - */ - - broken->pending = breaker; - breaker->flags |= MDOC_BREAK; - if (breaker->body != NULL) - breaker->body->flags |= MDOC_BREAK; -} - -/* * Allocate a word and check whether it's punctuation or not. * Punctuation consists of those tokens found in mdoc_isdelim(). */ @@ -567,8 +512,11 @@ blk_exp_close(MACRO_PROT_ARGS) atok = rew_alt(tok); body = endbody = itblk = later = NULL; for (n = mdoc->last; n; n = n->parent) { - if (n->flags & (MDOC_VALID | MDOC_BREAK)) + if (n->flags & MDOC_ENDED) { + if ( ! (n->flags & MDOC_VALID)) + n->flags |= MDOC_BROKEN; continue; + } /* Remember the start of our own body. */ @@ -603,20 +551,21 @@ blk_exp_close(MACRO_PROT_ARGS) * When there is a pending sub block, postpone * closing out the current block until the * rew_pending() closing out the sub-block. - */ - - make_pending(mdoc, n, later, line, ppos); - if (tok == MDOC_El) - itblk->flags |= MDOC_BREAK; - - /* * Mark the place where the formatting - but not * the scope - of the current block ends. */ + mandoc_vmsg(MANDOCERR_BLK_NEST, mdoc->parse, + line, ppos, "%s breaks %s", + mdoc_macronames[atok], + mdoc_macronames[later->tok]); + endbody = mdoc_endbody_alloc(mdoc, line, ppos, atok, body, ENDBODY_SPACE); + if (tok == MDOC_El) + itblk->flags |= MDOC_ENDED | MDOC_BROKEN; + /* * If a block closing macro taking arguments * breaks another block, put the arguments @@ -635,14 +584,10 @@ blk_exp_close(MACRO_PROT_ARGS) continue; } - /* - * When finding an open sub block, remember the last - * open explicit block, or, in case there are only - * implicit ones, the first open implicit block. - */ + /* Breaking an open sub block. */ - if (later == NULL || - ! (mdoc_macros[later->tok].flags & MDOC_EXPLICIT)) + n->flags |= MDOC_BROKEN; + if (later == NULL) later = n; } @@ -921,9 +866,14 @@ blk_full(MACRO_PROT_ARGS) blk = NULL; for (n = mdoc->last; n != NULL; n = n->parent) { - if (n->flags & (MDOC_VALID | MDOC_BREAK) || - n->type != MDOC_BLOCK) + if (n->flags & MDOC_ENDED) { + if ( ! (n->flags & MDOC_VALID)) + n->flags |= MDOC_BROKEN; + continue; + } + if (n->type != MDOC_BLOCK) continue; + if (tok == MDOC_It && n->tok == MDOC_Bl) { if (blk != NULL) { mandoc_vmsg(MANDOCERR_BLK_BROKEN, @@ -1129,13 +1079,19 @@ blk_full(MACRO_PROT_ARGS) * sub-block. */ for (n = mdoc->last; n && n != head; n = n->parent) { + if (n->flags & MDOC_ENDED) { + if ( ! (n->flags & MDOC_VALID)) + n->flags |= MDOC_BROKEN; + continue; + } if (n->type == MDOC_BLOCK && - mdoc_macros[n->tok].flags & MDOC_EXPLICIT && - ! (n->flags & MDOC_VALID)) { - n->pending = head; - return; + mdoc_macros[n->tok].flags & MDOC_EXPLICIT) { + n->flags = MDOC_BROKEN; + head->flags = MDOC_ENDED; } } + if (head->flags & MDOC_ENDED) + return; /* Close out scopes to remain in a consistent state. */ @@ -1208,16 +1164,28 @@ blk_part_imp(MACRO_PROT_ARGS) for (n = mdoc->last; n && n != body && n != blk->parent; n = n->parent) { + if (n->flags & MDOC_ENDED) { + if ( ! (n->flags & MDOC_VALID)) + n->flags |= MDOC_BROKEN; + continue; + } if (n->type == MDOC_BLOCK && - mdoc_macros[n->tok].flags & MDOC_EXPLICIT && - ! (n->flags & MDOC_VALID)) { - make_pending(mdoc, blk, n, line, ppos); - mdoc_endbody_alloc(mdoc, line, ppos, - tok, body, ENDBODY_NOSPACE); - return; + mdoc_macros[n->tok].flags & MDOC_EXPLICIT) { + n->flags |= MDOC_BROKEN; + if ( ! (body->flags & MDOC_ENDED)) { + mandoc_vmsg(MANDOCERR_BLK_NEST, + mdoc->parse, line, ppos, + "%s breaks %s", mdoc_macronames[tok], + mdoc_macronames[n->tok]); + mdoc_endbody_alloc(mdoc, line, ppos, + tok, body, ENDBODY_NOSPACE); + } } } assert(n == body); + if (body->flags & MDOC_ENDED) + return; + rew_last(mdoc, body); if (nl) append_delims(mdoc, line, pos, buf); @@ -1480,7 +1448,7 @@ phrase_ta(MACRO_PROT_ARGS) body = NULL; for (n = mdoc->last; n != NULL; n = n->parent) { - if (n->flags & (MDOC_VALID | MDOC_BREAK)) + if (n->flags & MDOC_ENDED) continue; if (n->tok == MDOC_It && n->type == MDOC_BODY) body = n; diff --git a/usr.bin/mandoc/mdoc_man.c b/usr.bin/mandoc/mdoc_man.c index 906b99fdbac..fc44c88eb80 100644 --- a/usr.bin/mandoc/mdoc_man.c +++ b/usr.bin/mandoc/mdoc_man.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mdoc_man.c,v 1.84 2015/02/11 14:14:53 schwarze Exp $ */ +/* $OpenBSD: mdoc_man.c,v 1.85 2015/02/12 12:20:47 schwarze Exp $ */ /* * Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org> * @@ -27,8 +27,7 @@ #include "mdoc.h" #include "main.h" -#define DECL_ARGS const struct mdoc_meta *meta, \ - const struct mdoc_node *n +#define DECL_ARGS const struct mdoc_meta *meta, struct mdoc_node *n struct manact { int (*cond)(DECL_ARGS); /* DON'T run actions */ @@ -546,10 +545,10 @@ void man_mdoc(void *arg, const struct mdoc *mdoc) { const struct mdoc_meta *meta; - const struct mdoc_node *n; + struct mdoc_node *n; meta = mdoc_meta(mdoc); - n = mdoc_node(mdoc); + n = mdoc_node(mdoc)->child; printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n", meta->title, @@ -565,15 +564,18 @@ man_mdoc(void *arg, const struct mdoc *mdoc) fontqueue.head = fontqueue.tail = mandoc_malloc(8); *fontqueue.tail = 'R'; } - print_node(meta, n); + while (n != NULL) { + print_node(meta, n); + n = n->next; + } putchar('\n'); } static void print_node(DECL_ARGS) { - const struct mdoc_node *sub; const struct manact *act; + struct mdoc_node *sub; int cond, do_sub; /* @@ -586,6 +588,7 @@ print_node(DECL_ARGS) act = NULL; cond = 0; do_sub = 1; + n->flags &= ~MDOC_ENDED; if (MDOC_TEXT == n->type) { /* @@ -633,7 +636,7 @@ print_node(DECL_ARGS) (*act->post)(meta, n); if (ENDBODY_NOT != n->end) - n->pending->flags |= MDOC_ENDED; + n->body->flags |= MDOC_ENDED; if (ENDBODY_NOSPACE == n->end) outflags &= ~(MMAN_spc | MMAN_nl); diff --git a/usr.bin/mandoc/mdoc_term.c b/usr.bin/mandoc/mdoc_term.c index d801804ad01..95f86c4f8e6 100644 --- a/usr.bin/mandoc/mdoc_term.c +++ b/usr.bin/mandoc/mdoc_term.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mdoc_term.c,v 1.208 2015/02/11 14:14:53 schwarze Exp $ */ +/* $OpenBSD: mdoc_term.c,v 1.209 2015/02/12 12:20:47 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org> @@ -307,6 +307,7 @@ print_mdoc_node(DECL_ARGS) chld = 1; offset = p->offset; rmargin = p->rmargin; + n->flags &= ~MDOC_ENDED; n->prev_font = p->fonti; memset(&npair, 0, sizeof(struct termpair)); @@ -359,7 +360,7 @@ print_mdoc_node(DECL_ARGS) print_mdoc_nodelist(p, &npair, meta, n->child); term_fontpopq(p, - (ENDBODY_NOT == n->end ? n : n->pending)->prev_font); + (ENDBODY_NOT == n->end ? n : n->body)->prev_font); switch (n->type) { case MDOC_TEXT: @@ -379,7 +380,7 @@ print_mdoc_node(DECL_ARGS) * that it must not call the post handler again. */ if (ENDBODY_NOT != n->end) - n->pending->flags |= MDOC_ENDED; + n->body->flags |= MDOC_ENDED; /* * End of line terminating an implicit block diff --git a/usr.bin/mandoc/mdoc_validate.c b/usr.bin/mandoc/mdoc_validate.c index 0e4c3a50e23..26c9c4f2809 100644 --- a/usr.bin/mandoc/mdoc_validate.c +++ b/usr.bin/mandoc/mdoc_validate.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mdoc_validate.c,v 1.193 2015/02/10 08:05:07 schwarze Exp $ */ +/* $OpenBSD: mdoc_validate.c,v 1.194 2015/02/12 12:20:47 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org> @@ -323,7 +323,7 @@ mdoc_valid_post(struct mdoc *mdoc) n = mdoc->last; if (n->flags & MDOC_VALID) return; - n->flags |= MDOC_VALID; + n->flags |= MDOC_VALID | MDOC_ENDED; switch (n->type) { case MDOC_TEXT: @@ -414,24 +414,13 @@ pre_display(PRE_ARGS) static void pre_bl(PRE_ARGS) { - struct mdoc_node *np; struct mdoc_argv *argv, *wa; int i; enum mdocargt mdoclt; enum mdoc_list lt; - if (MDOC_BLOCK != n->type) { - if (ENDBODY_NOT != n->end) { - assert(n->pending); - np = n->pending->parent; - } else - np = n->parent; - - assert(np); - assert(MDOC_BLOCK == np->type); - assert(MDOC_Bl == np->tok); + if (n->type != MDOC_BLOCK) return; - } /* * First figure out which kind of list to use: bind ourselves to @@ -607,25 +596,14 @@ pre_bl(PRE_ARGS) static void pre_bd(PRE_ARGS) { - struct mdoc_node *np; struct mdoc_argv *argv; int i; enum mdoc_disp dt; pre_literal(mdoc, n); - if (MDOC_BLOCK != n->type) { - if (ENDBODY_NOT != n->end) { - assert(n->pending); - np = n->pending->parent; - } else - np = n->parent; - - assert(np); - assert(MDOC_BLOCK == np->type); - assert(MDOC_Bd == np->tok); + if (n->type != MDOC_BLOCK) return; - } for (i = 0; n->args && i < (int)n->args->argc; i++) { argv = n->args->argv + i; @@ -795,22 +773,10 @@ post_bf(POST_ARGS) * element, which contains the goods. */ - if (MDOC_HEAD != mdoc->last->type) { - if (ENDBODY_NOT != mdoc->last->end) { - assert(mdoc->last->pending); - np = mdoc->last->pending->parent->head; - } else if (MDOC_BLOCK != mdoc->last->type) { - np = mdoc->last->parent->head; - } else - np = mdoc->last->head; - - assert(np); - assert(MDOC_HEAD == np->type); - assert(MDOC_Bf == np->tok); + np = mdoc->last; + if (MDOC_HEAD != np->type) return; - } - np = mdoc->last; assert(MDOC_BLOCK == np->parent->type); assert(MDOC_Bf == np->parent->tok); |