]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_term.c
Remove \s TODO: these are intelligently ignored along with \m and \M.
[mandoc.git] / mdoc_term.c
index cdad7fb5dfcb203a1172778e892217163fc92a60..0755b1649103af8bbe17eadafb876e1e72edf7a1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_term.c,v 1.171 2010/07/04 22:04:04 schwarze Exp $ */
+/*     $Id: mdoc_term.c,v 1.174 2010/07/16 00:03:37 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -31,7 +31,6 @@
 #include "mandoc.h"
 #include "out.h"
 #include "term.h"
-#include "regs.h"
 #include "mdoc.h"
 #include "chars.h"
 #include "main.h"
@@ -330,6 +329,23 @@ print_mdoc_node(DECL_ARGS)
        else if (termacts[n->tok].pre && ENDBODY_NOT == n->end)
                chld = (*termacts[n->tok].pre)(p, &npair, m, n);
 
+       /*
+        * Keeps only work until the end of a line.  If a keep was
+        * invoked in a prior line, revert it to PREKEEP.
+        */
+
+       if (TERMP_KEEP & p->flags) {
+               if (n->prev && n->prev->line != n->line) {
+                       p->flags &= ~TERMP_KEEP;
+                       p->flags |= TERMP_PREKEEP;
+               } else if (NULL == n->prev) {
+                       if (n->parent && n->parent->line != n->line) {
+                               p->flags &= ~TERMP_KEEP;
+                               p->flags |= TERMP_PREKEEP;
+                       }
+               }
+       }
+
        if (chld && n->child)
                print_mdoc_nodelist(p, &npair, m, n->child);
 
@@ -2050,9 +2066,11 @@ termp_sm_pre(DECL_ARGS)
 {
 
        assert(n->child && MDOC_TEXT == n->child->type);
-       if (0 == strcmp("on", n->child->string))
+       if (0 == strcmp("on", n->child->string)) {
+               if (p->col)
+                       p->flags &= ~TERMP_NOSPACE;
                p->flags &= ~TERMP_NONOSPACE;
-       else
+       else
                p->flags |= TERMP_NONOSPACE;
 
        return(0);