=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mdoc_macro.c,v retrieving revision 1.164 retrieving revision 1.165 diff -c -r1.164 -r1.165 *** src/usr.bin/mandoc/mdoc_macro.c 2016/08/20 15:58:16 1.164 --- src/usr.bin/mandoc/mdoc_macro.c 2016/08/20 17:58:09 1.165 *************** *** 1,7 **** ! /* $OpenBSD: mdoc_macro.c,v 1.164 2016/08/20 15:58:16 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons ! * Copyright (c) 2010, 2012-2015 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 --- 1,7 ---- ! /* $OpenBSD: mdoc_macro.c,v 1.165 2016/08/20 17:58:09 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons ! * Copyright (c) 2010, 2012-2016 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 *************** *** 547,559 **** break; } /* * Search backwards for beginnings of blocks, * both of our own and of pending sub-blocks. */ ! atok = rew_alt(tok); ! body = endbody = itblk = later = NULL; for (n = mdoc->last; n; n = n->parent) { if (n->flags & MDOC_ENDED) { if ( ! (n->flags & MDOC_VALID)) --- 547,570 ---- break; } + /* Search backwards for the beginning of our own body. */ + + atok = rew_alt(tok); + body = NULL; + for (n = mdoc->last; n; n = n->parent) { + if (n->flags & MDOC_ENDED || n->tok != atok || + n->type != ROFFT_BODY || n->end != ENDBODY_NOT) + continue; + body = n; + break; + } + /* * Search backwards for beginnings of blocks, * both of our own and of pending sub-blocks. */ ! endbody = itblk = later = NULL; for (n = mdoc->last; n; n = n->parent) { if (n->flags & MDOC_ENDED) { if ( ! (n->flags & MDOC_VALID)) *************** *** 561,577 **** continue; } ! /* Remember the start of our own body. */ ! if (n->type == ROFFT_BODY && atok == n->tok) { ! if (n->end == ENDBODY_NOT) ! body = n; continue; - } - if (n->type != ROFFT_BLOCK || n->tok == MDOC_Nm) - continue; - if (n->tok == MDOC_It) { itblk = n; continue; --- 572,588 ---- continue; } ! /* ! * Mismatching end macros can never break anything, ! * SYNOPSIS name blocks can never be broken, ! * and we only care about the breaking of BLOCKs. ! */ ! if (body == NULL || ! n->tok == MDOC_Nm || ! n->type != ROFFT_BLOCK) continue; if (n->tok == MDOC_It) { itblk = n; continue; *************** *** 637,644 **** if (body == NULL) { mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse, line, ppos, mdoc_macronames[tok]); - if (later != NULL) - later->flags &= ~MDOC_BROKEN; if (maxargs && endbody == NULL) { /* * Stray .Ec without previous .Eo: --- 648,653 ----