=================================================================== RCS file: /cvs/mandoc/man_macro.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -p -r1.19 -r1.20 --- mandoc/man_macro.c 2009/08/13 11:45:29 1.19 +++ mandoc/man_macro.c 2009/08/18 08:48:30 1.20 @@ -1,4 +1,4 @@ -/* $Id: man_macro.c,v 1.19 2009/08/13 11:45:29 kristaps Exp $ */ +/* $Id: man_macro.c,v 1.20 2009/08/18 08:48:30 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -107,24 +107,39 @@ rew_dohalt(int tok, enum man_type type, const struct m switch (tok) { case (MAN_SH): - /* Break at root. */ + /* Rewind to ourselves. */ if (type == n->type && tok == n->tok) return(REW_REWIND); break; case (MAN_SS): - /* Break at section. */ + /* Rewind to ourselves. */ if (type == n->type && tok == n->tok) return(REW_REWIND); - if (MAN_BODY == n->type && MAN_SH == n->tok) + /* Rewind to a section, if a block. */ + if (MAN_BLOCK == type && MAN_SH == n->parent->tok && + MAN_BODY == n->parent->type) + return(REW_REWIND); + /* Don't go beyond a section. */ + if (MAN_SH == n->tok) return(REW_HALT); break; default: - /* Break at subsection. */ + /* Rewind to ourselves. */ if (type == n->type && tok == n->tok) return(REW_REWIND); - if (MAN_BODY == n->type && MAN_SS == n->tok) + /* Rewind to a subsection, if a block. */ + if (MAN_BLOCK == type && MAN_SS == n->parent->tok && + MAN_BODY == n->parent->type) + return(REW_REWIND); + /* Don't go beyond a subsection. */ + if (MAN_SS == n->tok) return(REW_HALT); - if (MAN_BODY == n->type && MAN_SH == n->tok) + /* Rewind to a section, if a block. */ + if (MAN_BLOCK == type && MAN_SH == n->parent->tok && + MAN_BODY == n->parent->type) + return(REW_REWIND); + /* Don't go beyond a section. */ + if (MAN_SH == n->tok) return(REW_HALT); break; }