]> git.cameronkatri.com Git - mandoc.git/blobdiff - man_macro.c
libmdoc accepts whitespace following control character.
[mandoc.git] / man_macro.c
index c43f3f6b8477258de34e0682cde0ed4946cda5ff..bf2303877f26c790f51c9cb17bc742543682c7ed 100644 (file)
@@ -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 <kristaps@kth.se>
  *
@@ -107,24 +107,39 @@ rew_dohalt(int tok, enum man_type type, const struct man_node *n)
 
        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;
        }